بله | کانال BaleBotNet
عکس پروفایل BaleBotNetB

BaleBotNet

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

BaleBotNet

ابزار متن‌باز توسعه بازو برای بله در دات نتOpen source sdk for development bots with dotnet
ناگت:nuget.org/packages/BaleBotNet
ریپو:github.com/RavaqeMehr/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 | کلاینت دات‌نت بازوی بله

۱۴:۴۷