عکس پروفایل BaleBotNetB
۲۷۷ عضو

BaleBotNet

ابزار متن‌باز توسعه بازو برای بله در دات نتOpen source sdk for development bots with dotnet
ناگت:nuget.org/packages/BaleBotNet
ریپو:https://hamgit.ir/moqavem/balebotnet
گروه گفتگو:ble.ir/join/6jpNUuVFZR
ثبت سفارش، توسعه‌دهنده: @moqavem8
گام سوم: تنظیم کردن بات و راه اندازی لانگ پولینگ
جهت مدیریت کردن آپدیت‌های بات نیاز به یک هندلر داریم که در مسیر زیر ایجادش میکنیم: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 | کلاینت دات‌نت بازوی بله

۸۰۹

۱۴:۴۷