گام هفتم: واکنش به آپدیت بخش 2
حالا برای هر یک از این دو کامند بالا یک کلاس ساختیم:Services\Bot\Handlers\StartCommandHandler.cs
Services\Bot\Handlers\WhoisCommandHandler.cs
سپس متد OnMessage آپدیت هندلر خود را برای عکسالعمل نشان دادن به کامندها بروز کردیم:
برای رجیستر کردن این هندلرها یک اکستنشن متد جدید ایجاد کردیم تا فایل Program . cs تمیز باقی بماند و رجیسترها در جایی مستقل اتفاق بیافتد.
Configs\ServicesConfigs.cs
سپس این متد را در Program . cs صدا کردیم.
اکنون بعد از اجرای پروژه و ارسال دستور /start شاهد واکنش بات خود خواهید بود.
فهرست آموزش@BaleBotNet | کلاینت داتنت بازوی بله
حالا برای هر یک از این دو کامند بالا یک کلاس ساختیم: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 | کلاینت داتنت بازوی بله
۱۷:۴۵