گام سوم: تنظیم کردن بات و راه اندازی لانگ پولینگ
جهت مدیریت کردن آپدیتهای بات نیاز به یک هندلر داریم که در مسیر زیر ایجادش میکنیم:Services/Bot/BotUpdateHandler.csاین کلاس باید از اینترفیس IUpdateHandler ارثبری کنه. پس محتوای این فایل رو اینطور قرار بدید:
حالا یک فایل با نام BotConfigs . cs در پوشه Configs ایجاد میکنیم و مطابق کد زیر آن را پر میکنیم:
حالا فایل Program . cs را باز میکنیم و بات خود را با کدهای همین آموزش تنظیم میکنیم و بات را در حالت لانگ پولینگ فعال میکنیم:محتوای فایل Program . cs بعد از این تغییرات:
فهرست آموزش@BaleBotNet | کلاینت داتنت بازوی بله
جهت مدیریت کردن آپدیتهای بات نیاز به یک هندلر داریم که در مسیر زیر ایجادش میکنیم:Services/Bot/BotUpdateHandler.csاین کلاس باید از اینترفیس IUpdateHandler ارثبری کنه. پس محتوای این فایل رو اینطور قرار بدید:
using BaleBotNet;
using BaleBotNet.Types;
namespace MyBaleBot.Services.Bot;
public class BotUpdateHandler : IUpdateHandler
{
public async Task HandleUpdate(Update update, CancellationToken cancellationToken = default)
{
Console.WriteLine($"Update #{update.UpdateId} recived!");
}
}
برای اینکه بتونیم آپدیتهای باتمون رو از سرور بله تحویل بگیریم 2 روش وجود داره که یکیش با عنوان لانگ پولینگ شناخته میشه و در آدرس Services\Bot\BotLongPollingService.cs به صورت زیر ایجادش میکنیم:
using BaleBotNet;
using BaleBotNet.Methods;
namespace MyBaleBot.Services.Bot;
public class BotLongPollingService(IServiceScopeFactory scopeFactory, BaleBotClient bot)
{
public async Task Run(
CancellationToken cancellationToken,
int limit = 10,
int? offset = null,
int millisecondsDelay = 1000
)
{
Console.WriteLine("Runnig LongPollingService.");
while (!cancellationToken.IsCancellationRequested)
{
var updates = await bot.GetUpdates(offset, limit);
var tasks = updates
.Select(x =>
{
using var scope = scopeFactory.CreateScope();
var updateHandler = scope.ServiceProvider.GetRequiredService<IUpdateHandler>();
return updateHandler.HandleUpdate(x);
})
.ToList();
try
{
if (tasks?.Count > 0)
await Task.WhenAll(tasks);
}
catch (Exception) { }
if (updates?.Length > 0)
offset = updates?.Last().UpdateId + 1;
await Task.Delay(millisecondsDelay, cancellationToken);
}
Console.WriteLine("LongPollingService CancellationRequested");
}
}
حالا جهت تنظیم توکن بات، فایلهای appsettings . Development . json و appsettings . json را باز میکنیم و یک پراپرتی با نام BotToken اضافه میکنیم و مقدارش را با توکن بات خود پر میکنیم . فایل appsettings . Development . json پس از تغییر:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"BotToken": "1234:abcd"
}
حالا یک فایل با نام BotConfigs . cs در پوشه Configs ایجاد میکنیم و مطابق کد زیر آن را پر میکنیم:
using BaleBotNet;
using MyBaleBot.Services.Bot;
namespace MyBaleBot.Configs;
public static class BotConfigs
{
public static void AddBaleBot(this WebApplicationBuilder builder, bool addLongPollingService)
{
builder.Services.AddBaleBotClient(builder.Configuration["BotToken"]!);
builder.Services.AddScoped<IUpdateHandler, BotUpdateHandler>();
if (addLongPollingService)
builder.Services.AddScoped<BotLongPollingService>();
}
public static async Task StartBotLongPolling(this WebApplication app)
{
using var scope = app.Services.CreateScope();
var longPollingService = scope.ServiceProvider.GetRequiredService<BotLongPollingService>();
await Task.Run(
() => longPollingService.Run(app.Lifetime.ApplicationStopping),
app.Lifetime.ApplicationStopping
);
}
}
حالا فایل Program . cs را باز میکنیم و بات خود را با کدهای همین آموزش تنظیم میکنیم و بات را در حالت لانگ پولینگ فعال میکنیم:محتوای فایل Program . cs بعد از این تغییرات:
using MyBaleBot.Configs;
var builder = WebApplication.CreateBuilder(args);
builder.AddBaleBot(addLongPollingService: true);
var app = builder.Build();
await app.StartBotLongPolling();
app.Run();
حالا با دستور dotnet run در ترمینال بات خود را اجرا کنید و با ارسال پیام به بات خود نتیجه را ببینیدفهرست آموزش@BaleBotNet | کلاینت داتنت بازوی بله
۱۴:۴۷