* Added WideBotOptions
* Added ConfigureWideBot method * Refactored `AddWideTelegrator` method * Added `dbConnectionFactory`
This commit is contained in:
@@ -13,6 +13,9 @@
|
||||
<GenerateDocumentationFile>True</GenerateDocumentationFile>
|
||||
<EnableNETAnalyzers>True</EnableNETAnalyzers>
|
||||
<EnforceCodeStyleInBuild>True</EnforceCodeStyleInBuild>
|
||||
<IncludeSymbols>True</IncludeSymbols>
|
||||
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
|
||||
<SignAssembly>False</SignAssembly>
|
||||
|
||||
<Title>Telegrator.RedisStateStorage</Title>
|
||||
<Version>1.16.6</Version>
|
||||
|
||||
@@ -8,7 +8,6 @@ using System.Text.Json;
|
||||
using Telegram.Bot;
|
||||
using Telegram.Bot.Types;
|
||||
using Telegrator.Core;
|
||||
using Telegrator.Hosting.Web;
|
||||
|
||||
namespace Telegrator.Mediation;
|
||||
|
||||
|
||||
@@ -13,9 +13,12 @@
|
||||
<GenerateDocumentationFile>True</GenerateDocumentationFile>
|
||||
<EnableNETAnalyzers>True</EnableNETAnalyzers>
|
||||
<EnforceCodeStyleInBuild>True</EnforceCodeStyleInBuild>
|
||||
<IncludeSymbols>True</IncludeSymbols>
|
||||
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
|
||||
<SignAssembly>False</SignAssembly>
|
||||
|
||||
<Title>Telegrator.Hosting.Web</Title>
|
||||
<Version>1.17.0</Version>
|
||||
<Version>1.17.1</Version>
|
||||
<Authors>Rikitav Tim4ik</Authors>
|
||||
<Company>Rikitav Tim4ik</Company>
|
||||
<RepositoryUrl>https://github.com/Rikitav/Telegrator</RepositoryUrl>
|
||||
|
||||
@@ -9,7 +9,6 @@ using System.Diagnostics.CodeAnalysis;
|
||||
using Telegram.Bot;
|
||||
using Telegrator.Core;
|
||||
using Telegrator.Hosting;
|
||||
using Telegrator.Hosting.Web;
|
||||
using Telegrator.Mediation;
|
||||
using Telegrator.Providers;
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
namespace Telegrator.Hosting.Web;
|
||||
namespace Telegrator;
|
||||
|
||||
/// <summary>
|
||||
/// Configuration options for Telegram bot behavior and execution settings.
|
||||
@@ -14,7 +14,7 @@ namespace Telegrator.Mediation;
|
||||
/// <param name="botClient"></param>
|
||||
/// <param name="updateRouter"></param>
|
||||
/// <param name="options"></param>
|
||||
public class HostedWideBotUpdateReceiver(ILogger<HostedWideBotUpdateReceiver> logger, ITelegramBotClient botClient, IUpdateRouter updateRouter, IOptions<ReceiverOptions>? options) : BackgroundService
|
||||
public class HostedWideBotUpdateReceiver(ILogger<HostedWideBotUpdateReceiver> logger, ITelegramBotClient botClient, IUpdateRouter updateRouter, IOptions<WideBotOptions>? options) : BackgroundService
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||
|
||||
@@ -13,9 +13,12 @@
|
||||
<GenerateDocumentationFile>True</GenerateDocumentationFile>
|
||||
<EnableNETAnalyzers>True</EnableNETAnalyzers>
|
||||
<EnforceCodeStyleInBuild>True</EnforceCodeStyleInBuild>
|
||||
<IncludeSymbols>True</IncludeSymbols>
|
||||
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
|
||||
<SignAssembly>False</SignAssembly>
|
||||
|
||||
<Title>Telegrator.Hosting.WideBot</Title>
|
||||
<Version>1.17.0</Version>
|
||||
<Version>1.17.1</Version>
|
||||
<Authors>Rikitav Tim4ik</Authors>
|
||||
<Company>Rikitav Tim4ik</Company>
|
||||
<RepositoryUrl>https://github.com/Rikitav/Telegrator</RepositoryUrl>
|
||||
|
||||
@@ -15,6 +15,7 @@ using Telegrator.Providers;
|
||||
|
||||
using WUpdate = WTelegram.Types.Update;
|
||||
using TLUpdate = TL.Update;
|
||||
using System.Data.Common;
|
||||
|
||||
namespace Telegrator;
|
||||
|
||||
@@ -92,9 +93,9 @@ public static class WideHostBuilderExtensions
|
||||
/// <summary>
|
||||
/// Replaces TelegramBotHostBuilder. Configures DI, options, and handlers.
|
||||
/// </summary>
|
||||
public static IHostApplicationBuilder AddWideTelegrator(this IHostApplicationBuilder builder, TelegratorOptions? options = null, IHandlersCollection? handlers = null, Action<ITelegramBotHostBuilder>? action = null)
|
||||
public static IHostApplicationBuilder AddWideTelegrator(this IHostApplicationBuilder builder, Func<IServiceProvider, DbConnection> dbConnectionFactory, Action<ITelegramBotHostBuilder>? action = null, TelegratorOptions? options = null, IHandlersCollection? handlers = null)
|
||||
{
|
||||
AddWideTelegratorInternal(builder.Services, builder.Configuration, builder.Properties, ref handlers, options);
|
||||
AddWideTelegratorInternal(builder.Services, builder.Configuration, builder.Properties, dbConnectionFactory, ref handlers, options);
|
||||
action?.Invoke(new TelegramBotHostBuilder(builder, handlers));
|
||||
return builder;
|
||||
}
|
||||
@@ -102,16 +103,16 @@ public static class WideHostBuilderExtensions
|
||||
/// <summary>
|
||||
/// Replaces TelegramBotHostBuilder. Configures DI, options, and handlers.
|
||||
/// </summary>
|
||||
public static IHostApplicationBuilder AddWideTelegrator(this IHostApplicationBuilder builder, TelegratorOptions? options = null, IHandlersCollection? handlers = null)
|
||||
public static IHostApplicationBuilder AddWideTelegrator(this IHostApplicationBuilder builder, Func<IServiceProvider, DbConnection> dbConnectionFactory, TelegratorOptions? options = null, IHandlersCollection? handlers = null)
|
||||
{
|
||||
AddWideTelegratorInternal(builder.Services, builder.Configuration, builder.Properties, ref handlers, options);
|
||||
AddWideTelegratorInternal(builder.Services, builder.Configuration, builder.Properties, dbConnectionFactory, ref handlers, options);
|
||||
return builder;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces TelegramBotHostBuilder. Configures DI, options, and handlers.
|
||||
/// </summary>
|
||||
internal static void AddWideTelegratorInternal(IServiceCollection services, IConfiguration configuration, IDictionary<object, object> properties, [NotNull] ref IHandlersCollection? handlers, TelegratorOptions? options = null)
|
||||
internal static void AddWideTelegratorInternal(IServiceCollection services, IConfiguration configuration, IDictionary<object, object> properties, Func<IServiceProvider, DbConnection> dbConnectionFactory, [NotNull] ref IHandlersCollection? handlers, TelegratorOptions? options = null)
|
||||
{
|
||||
if (services.Any(srvc => srvc.ServiceType == typeof(HostedUpdateReceiver)))
|
||||
throw new InvalidOperationException("`HostedUpdateReceiver` found in services. WideHost extension is not compatible with default long-polling receiver. Please, remove `AddTelegrator` invocation from your Host configuration.");
|
||||
@@ -147,16 +148,32 @@ public static class WideHostBuilderExtensions
|
||||
|
||||
if (!services.Any(srvc => srvc.ServiceType == typeof(IOptions<WTelegramBotClientOptions>)))
|
||||
{
|
||||
// For now, there's no way to configure this from IConfiguration, use `ConfigureWideTelegram` instead
|
||||
throw new MissingMemberException("No options of type 'WTelegramBotClientOptions' was registered. This configuration is runtime required! Use `ConfigureWideTelegram` to register options.");
|
||||
WideBotOptions? wideBotOptions = configuration.GetSection(nameof(WideBotOptions)).Get<WideBotOptions>();
|
||||
if (wideBotOptions == null)
|
||||
throw new MissingMemberException("Auto configuration disabled, yet no options of type 'WideBotOptions' was registered. This configuration is runtime required!");
|
||||
|
||||
/*
|
||||
services.AddSingleton(Options.Create(new WTelegramBotClientOptions(options.Token, options.BaseUrl, options.UseTestEnvironment)
|
||||
services.AddSingleton(provider =>
|
||||
{
|
||||
RetryCount = options.RetryCount,
|
||||
RetryThreshold = options.RetryThreshold
|
||||
}));
|
||||
*/
|
||||
IHostApplicationLifetime lifetime = provider.GetRequiredService<IHostApplicationLifetime>();
|
||||
|
||||
DbConnection dbConnection = dbConnectionFactory.Invoke(provider);
|
||||
lifetime.ApplicationStopping.Register(() => dbConnection.Dispose());
|
||||
|
||||
WTelegramBotClientOptions wideOptions = new WTelegramBotClientOptions(
|
||||
token: options.Token,
|
||||
apiId: wideBotOptions.ApiId,
|
||||
apiHash: wideBotOptions.ApiHash,
|
||||
dbConnection: dbConnection,
|
||||
sqlCommands: wideBotOptions.SqlCommands,
|
||||
useTestEnvironment: options.UseTestEnvironment,
|
||||
mtproxy: wideBotOptions.MTProxy)
|
||||
{
|
||||
RetryCount = options.RetryCount,
|
||||
RetryThreshold = options.RetryThreshold
|
||||
};
|
||||
|
||||
return Options.Create(wideOptions);
|
||||
});
|
||||
}
|
||||
|
||||
services.AddTelegramBotHostDefaults();
|
||||
@@ -183,6 +200,19 @@ public static class WideBotServiceCollectionExtensions
|
||||
return services;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds WTelegramBotClientOptions to services
|
||||
/// </summary>
|
||||
/// <param name="services"></param>
|
||||
/// <param name="options"></param>
|
||||
/// <returns></returns>
|
||||
public static IServiceCollection ConfigureWideBot(this IServiceCollection services, WideBotOptions options)
|
||||
{
|
||||
services.RemoveAll<IOptions<WideBotOptions>>();
|
||||
services.AddSingleton(Options.Create(options));
|
||||
return services;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds WTelegramBotClient
|
||||
/// </summary>
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
using WTelegram;
|
||||
|
||||
namespace Telegrator;
|
||||
|
||||
public class WideBotOptions
|
||||
{
|
||||
public required int ApiId { get; set; }
|
||||
|
||||
public required string ApiHash { get; set; }
|
||||
|
||||
public string? MTProxy { get; set; }
|
||||
|
||||
public bool DropPendingUpdates { get; set; }
|
||||
|
||||
public SqlCommands SqlCommands { get; set; } = WTelegram.SqlCommands.Detect;
|
||||
}
|
||||
@@ -13,9 +13,12 @@
|
||||
<GenerateDocumentationFile>True</GenerateDocumentationFile>
|
||||
<EnableNETAnalyzers>True</EnableNETAnalyzers>
|
||||
<EnforceCodeStyleInBuild>True</EnforceCodeStyleInBuild>
|
||||
<IncludeSymbols>True</IncludeSymbols>
|
||||
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
|
||||
<SignAssembly>False</SignAssembly>
|
||||
|
||||
<Title>Telegrator.Hosting</Title>
|
||||
<Version>1.17.0</Version>
|
||||
<Version>1.17.1</Version>
|
||||
<Authors>Rikitav Tim4ik</Authors>
|
||||
<Company>Rikitav Tim4ik</Company>
|
||||
<RepositoryUrl>https://github.com/Rikitav/Telegrator</RepositoryUrl>
|
||||
|
||||
@@ -2,7 +2,31 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>netstandard2.1</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<RootNamespace>Telegrator</RootNamespace>
|
||||
<BaseOutputPath>..\..\bin</BaseOutputPath>
|
||||
<DocumentationFile>..\..\docs\$(AssemblyName).xml</DocumentationFile>
|
||||
|
||||
<GeneratePackageOnBuild>False</GeneratePackageOnBuild>
|
||||
<GenerateDocumentationFile>True</GenerateDocumentationFile>
|
||||
<EnableNETAnalyzers>True</EnableNETAnalyzers>
|
||||
<EnforceCodeStyleInBuild>True</EnforceCodeStyleInBuild>
|
||||
<IncludeSymbols>True</IncludeSymbols>
|
||||
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
|
||||
<SignAssembly>False</SignAssembly>
|
||||
|
||||
<Title>Telegrator.Localized</Title>
|
||||
<Version>1.17.1</Version>
|
||||
<Authors>Rikitav Tim4ik</Authors>
|
||||
<Company>Rikitav Tim4ik</Company>
|
||||
<RepositoryUrl>https://github.com/Rikitav/Telegrator</RepositoryUrl>
|
||||
<PackageTags>telegram;bot;mediator;attributes;aspect;hosting;host;framework;easy;simple;handlers</PackageTags>
|
||||
|
||||
<PackageIcon>telegrator_nuget.png</PackageIcon>
|
||||
<PackageReadmeFile>README.md</PackageReadmeFile>
|
||||
<PackageLicenseFile>LICENSE</PackageLicenseFile>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -13,4 +37,10 @@
|
||||
<ProjectReference Include="..\Telegrator\Telegrator.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Include=".\README.md" Pack="True" PackagePath="\" />
|
||||
<None Include="..\..\LICENSE" Pack="True" PackagePath="\" />
|
||||
<None Include="..\..\resources\telegrator_nuget.png" Pack="True" PackagePath="\" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -12,9 +12,12 @@
|
||||
<GenerateDocumentationFile>True</GenerateDocumentationFile>
|
||||
<EnableNETAnalyzers>True</EnableNETAnalyzers>
|
||||
<EnforceCodeStyleInBuild>True</EnforceCodeStyleInBuild>
|
||||
<IncludeSymbols>True</IncludeSymbols>
|
||||
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
|
||||
<SignAssembly>False</SignAssembly>
|
||||
|
||||
<Title>Telegrator : Telegram.Bot mediator framework</Title>
|
||||
<Version>1.17.0</Version>
|
||||
<Version>1.17.1</Version>
|
||||
<Authors>Rikitav Tim4ik</Authors>
|
||||
<Company>Rikitav Tim4ik</Company>
|
||||
<RepositoryUrl>https://github.com/Rikitav/Telegrator</RepositoryUrl>
|
||||
|
||||
Reference in New Issue
Block a user