* Moved configuring logic to post build of Web application

* Added new TRelegratorWebOptions class to configure Webhooksusing extenral configuration tools
This commit is contained in:
2025-08-02 02:36:54 +04:00
parent b8e4398b50
commit 83fc5cc629
3 changed files with 53 additions and 27 deletions
+14 -4
View File
@@ -5,8 +5,10 @@ using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using System.Text; using System.Text;
using Telegram.Bot.Types.Enums; using Telegram.Bot.Types.Enums;
using Telegrator.Configuration;
using Telegrator.Hosting.Components; using Telegrator.Hosting.Components;
using Telegrator.Hosting.Providers; using Telegrator.Hosting.Providers;
using Telegrator.Hosting.Web.Components; using Telegrator.Hosting.Web.Components;
@@ -22,7 +24,7 @@ namespace Telegrator.Hosting.Web
{ {
private readonly WebApplication _innerApp; private readonly WebApplication _innerApp;
private readonly IUpdateRouter _updateRouter; private readonly IUpdateRouter _updateRouter;
private readonly ILogger<TelegramBotHost> _logger; private readonly ILogger<TelegramBotWebHost> _logger;
private bool _disposed; private bool _disposed;
@@ -43,7 +45,7 @@ namespace Telegrator.Hosting.Web
/// <summary> /// <summary>
/// This application's logger /// This application's logger
/// </summary> /// </summary>
public ILogger<TelegramBotHost> Logger => _logger; public ILogger<TelegramBotWebHost> Logger => _logger;
// Private interface fields // Private interface fields
IServiceProvider IEndpointRouteBuilder.ServiceProvider => Services; IServiceProvider IEndpointRouteBuilder.ServiceProvider => Services;
@@ -53,12 +55,20 @@ namespace Telegrator.Hosting.Web
internal TelegramBotWebHost(WebApplicationBuilder webApplicationBuilder, HostHandlersCollection handlers) internal TelegramBotWebHost(WebApplicationBuilder webApplicationBuilder, HostHandlersCollection handlers)
{ {
// Registering this host in services for easy access
RegisterHostServices(webApplicationBuilder, handlers); RegisterHostServices(webApplicationBuilder, handlers);
// Building proxy application
_innerApp = webApplicationBuilder.Build(); _innerApp = webApplicationBuilder.Build();
_updateRouter = Services.GetRequiredService<IUpdateRouter>(); // Initializing bot info, as it requires to make a request via tg bot
_logger = Services.GetRequiredService<ILogger<TelegramBotHost>>(); Services.GetRequiredService<ITelegramBotInfo>();
// Reruesting services for this host
_updateRouter = Services.GetRequiredService<IUpdateRouter>();
_logger = Services.GetRequiredService<ILogger<TelegramBotWebHost>>();
// Logging registering handlers in DEBUG purposes
LogHandlers(handlers); LogHandlers(handlers);
} }
@@ -1,37 +1,18 @@
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Options;
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
namespace Telegrator.Hosting.Web namespace Telegrator.Hosting.Web
{ {
/// <summary> /// <summary>
/// Configuration options for Telegram bot behavior and execution settings. /// Options for configuring the behavior for TelegramBotWebHost.
/// Controls various aspects of bot operation including concurrency, routing, webhook receiving, and execution policies.
/// </summary> /// </summary>
public class TelegramBotWebOptions : TelegratorOptions public class TelegramBotWebOptions : TelegratorOptions
{ {
/// <summary> /// <summary>
/// Gets or sets HTTPS URL to send updates to. Use an empty string to remove webhook integration /// Disables automatic configuration for all of required <see cref="IOptions{TOptions}"/> instances
/// </summary> /// </summary>
[StringSyntax(StringSyntaxAttribute.Uri)] public bool DisableAutoConfigure { get; set; }
public required string WebhookUri { get; set; }
/// <summary>
/// A secret token to be sent in a header “X-Telegram-Bot-Api-Secret-Token” in every webhook request, 1-256 characters.
/// Only characters A-Z, a-z, 0-9, _ and - are allowed.
/// The header is useful to ensure that the request comes from a webhook set by you.
/// </summary>
public string? SecretToken { get; set; }
/// <summary>
/// The maximum allowed number of simultaneous HTTPS connections to the webhook for update delivery, 1-100. Defaults to 40.
/// Use lower values to limit the load on your bot's server, and higher values to increase your bot's throughput.
/// </summary>
public int MaxConnections { get; set; } = 40;
/// <summary>
/// Pass true to drop all pending updates
/// </summary>
public bool DropPendingUpdates { get; set; }
/// <inheritdoc cref="WebApplicationOptions.Args"/> /// <inheritdoc cref="WebApplicationOptions.Args"/>
public string[]? Args { get; init; } public string[]? Args { get; init; }
@@ -0,0 +1,35 @@
using System.Diagnostics.CodeAnalysis;
namespace Telegrator.Hosting.Web
{
/// <summary>
/// Configuration options for Telegram bot behavior and execution settings.
/// Controls various aspects of bot operation including concurrency, routing, webhook receiving, and execution policies.
/// </summary>
public class TelegratorWebOptions
{
/// <summary>
/// Gets or sets HTTPS URL to send updates to. Use an empty string to remove webhook integration
/// </summary>
[StringSyntax(StringSyntaxAttribute.Uri)]
public required string WebhookUri { get; set; }
/// <summary>
/// A secret token to be sent in a header “X-Telegram-Bot-Api-Secret-Token” in every webhook request, 1-256 characters.
/// Only characters A-Z, a-z, 0-9, _ and - are allowed.
/// The header is useful to ensure that the request comes from a webhook set by you.
/// </summary>
public string? SecretToken { get; set; }
/// <summary>
/// The maximum allowed number of simultaneous HTTPS connections to the webhook for update delivery, 1-100. Defaults to 40.
/// Use lower values to limit the load on your bot's server, and higher values to increase your bot's throughput.
/// </summary>
public int MaxConnections { get; set; } = 40;
/// <summary>
/// Pass true to drop all pending updates
/// </summary>
public bool DropPendingUpdates { get; set; }
}
}