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

BaleBotNet

ابزار متن‌باز توسعه بازو برای بله در دات نتOpen source sdk for development bots with dotnet
ناگت:nuget.org/packages/BaleBotNet
ریپو:https://hamgit.ir/moqavem/balebotnet
گروه گفتگو:ble.ir/join/6jpNUuVFZR
ثبت سفارش، توسعه‌دهنده: @moqavem8
گام هفتم: واکنش به آپدیت بخش 2
حالا برای هر یک از این دو کامند بالا یک کلاس ساختیم:Services\Bot\Handlers\StartCommandHandler.cs

using System.Text;
using BaleBotNet;
using BaleBotNet.Methods;
using BaleBotNet.Types;

namespace MyBaleBot.Services.Bot.Handlers;

public class StartCommandHandler(BaleBotClient bot)
{
    public async Task Run(Message message)
    {
        var chatId = message.Chat.Id;
        List<Task> tasks = [bot.SendChatAction(chatId, BaleBotNet.Enums.ChatAction.Typing)];

        StringBuilder messageBuilder = new();
        messageBuilder.AppendLine($"به بازوی @{bot.Me.Username} خوش آمدید.");
        messageBuilder.AppendLine();

        foreach (var menu in BotConsts.CommandsMenu)
        {
            messageBuilder.AppendLine($"{menu.Key} | *{menu.Value}*");
        }

        tasks.Add(bot.SendMessage(chatId: chatId, text: messageBuilder.ToString()));

        await Task.WhenAll(tasks);
    }
}

Services\Bot\Handlers\WhoisCommandHandler.cs

using System.Text;
using BaleBotNet;
using BaleBotNet.Methods;
using BaleBotNet.Types;

namespace MyBaleBot.Services.Bot.Handlers;

public class WhoisCommandHandler(BaleBotClient bot)
{
    public async Task Run(Message message)
    {
        var chatId = message.Chat.Id;
        List<Task> tasks = [bot.SendChatAction(chatId, BaleBotNet.Enums.ChatAction.Typing)];

        StringBuilder messageBuilder = new();
        messageBuilder.AppendLine($"*{BotConsts.CommandsMenu[BotConsts.Commands.Whois]}*");
        messageBuilder.AppendLine();

        var user = message.Chat;

        messageBuilder.AppendLine($"نام: *{user.FirstName} {user.LastName}*");
        if (user.Username is string username)
            messageBuilder.AppendLine($"نام کاربری: *@{username}*");
        messageBuilder.AppendLine($"شناسه: *{user.Id}*");

        tasks.Add(
            bot.SendMessage(
                chatId: chatId,
                text: messageBuilder.ToString(),
                replyMarkup: ReplyKeyboard.CreateInline(
                    [
                        [
                            new()
                            {
                                Text = "کپی شناسه",
                                CopyText = new() { Text = user.Id.ToString() }
                            }
                        ]
                    ]
                )
            )
        );

        await Task.WhenAll(tasks);
    }
}

سپس متد OnMessage آپدیت هندلر خود را برای عکس‌العمل نشان دادن به کامندها بروز کردیم:

    private static async Task OnMessage(IServiceScope scope, int updateId, Message message)
    {
        Task? task = null;

        if (message.IsPrivate() && message.IsCommand(BotConsts.Commands.Start))
            task = scope.Get<StartCommandHandler>().Run(message);
        else if (message.IsCommand(BotConsts.Commands.Whois))
            task = scope.Get<WhoisCommandHandler>().Run(message);

        task ??= Task.CompletedTask;
        await task;
    }

برای رجیستر کردن این هندلرها یک اکستنشن متد جدید ایجاد کردیم تا فایل Program . cs تمیز باقی بماند و رجیسترها در جایی مستقل اتفاق بی‌افتد.
Configs\ServicesConfigs.cs

using MyBaleBot.Services.Bot.Handlers;

namespace MyBaleBot.Configs;

public static class ServicesConfigs
{
    public static void AddServices(this WebApplicationBuilder builder)
    {
        builder.Services.AddScoped<StartCommandHandler>();
        builder.Services.AddScoped<WhoisCommandHandler>();
    }
}

سپس این متد را در Program . cs صدا کردیم.

using MyBaleBot.Configs;

var builder = WebApplication.CreateBuilder(args);

builder.AddBaleBot(addLongPollingService: builder.Environment.IsDevelopment());
builder.AddServices();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.StartBotLongPolling();
}
else
{
    app.MapBotWebhook();
}

app.Run();

اکنون بعد از اجرای پروژه و ارسال دستور /start شاهد واکنش بات خود خواهید بود.

فهرست آموزش@BaleBotNet | کلاینت دات‌نت بازوی بله
undefined۲

۹۲۰

۱۷:۴۵