Создаём Telegram-бота с нуля — регистрация, appsettings.json, запуск в VS2022 (C# .NET)
В этом видео мы создаём тестового Telegram-бота с нуля: регистрируем в @BotFather, создаём консольный проект в Visual Studio 2022, добавляем appsettings.json, временно сохраняем ключ бота локально и запускаем polling. 🔥 Это первый урок серии «Создаём Telegram-бота» на канале Code & Bots by Aleksey. В следующих выпусках: вынос секретов из проекта, подключение БД, архитектура и интеграция OpenAI. Program.cs using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; using Telegram.Bot; using Telegram.Bot.Exceptions; using Telegram.Bot.Polling; using Telegram.Bot.Types; using Telegram.Bot.Types.Enums; var builder = Host.CreateApplicationBuilder(args); // Добавляем конфигурацию (appsettings.json уже подключён по умолчанию) builder.Services.Configure<AppConfig>(builder.Configuration.GetSection("AppConfig")); // Регистрируем TelegramBotClient как singleton builder.Services.AddSingleton<ITelegramBotClient>(sp => { var config = sp.GetRequiredService<IOptions<AppConfig>>().Value; if (string.IsNullOrWhiteSpace(config.BotToken)) throw new InvalidOperationException("BotToken не указан в конфигурации."); return new TelegramBotClient(config.BotToken); }); var host = builder.Build(); // Запуск бота await StartBot(host.Services); await host.RunAsync(); // -- Вспомогательные методы -- async Task StartBot(IServiceProvider services) { var botClient = services.GetRequiredService<ITelegramBotClient>(); var config = services.GetRequiredService<IOptions<AppConfig>>().Value; if (!config.StartBot) { Console.WriteLine("Запуск бота отключён в конфигурации (StartBot = false)."); return; } using var cts = new CancellationTokenSource(); var receiverOptions = new ReceiverOptions { AllowedUpdates = Array.Empty<UpdateType>() // получать все обновления }; // ВАЖНО: без именованных параметров! botClient.StartReceiving( HandleUpdateAsync, HandleErrorAsync, receiverOptions, cancellationToken: cts.Token ); var me = await botClient.GetMe(cts.Token); Console.WriteLine($"Бот запущен: @{me.Username}"); Console.WriteLine("Нажмите Enter для остановки..."); Console.ReadLine(); cts.Cancel(); } async Task HandleUpdateAsync(ITelegramBotClient bot, Update update, CancellationToken ct) { try { if (update.Type != UpdateType.Message || update.Message?.Type != MessageType.Text) return; var chatId = update.Message.Chat.Id; var text = update.Message.Text; Console.WriteLine($"`[DateTime.Now]` Сообщение от {chatId}: {text}"); var reply = $"Принято: {text}\nПривет! Это тестовый бот."; await bot.SendMessage(chatId: chatId, text: reply, cancellationToken: ct); } catch (Exception ex) { Console.WriteLine($"Ошибка в HandleUpdateAsync: {ex.Message}"); } } Task HandleErrorAsync(ITelegramBotClient bot, Exception exception, CancellationToken ct) { var errorMessage = exception switch { ApiRequestException apiEx => $"Telegram API Ошибка:\n`[apiEx.ErrorCode]` {apiEx.Message}", _ => $"Общая ошибка: {exception.Message}" }; Console.WriteLine(errorMessage); return Task.CompletedTask; } // -- Модель конфигурации -- public class AppConfig { public string AppName { get; set; } = string.Empty; public bool StartBot { get; set; } public string BotUrl { get; set; } = string.Empty; public string BotToken { get; set; } = string.Empty; } Telegram bot, C#, .NET, Telegram.Bot, MAUI, backend, webapi, tutorial, programming, developer, bot, tutorial c#, telegram bot tutorial #TelegramBot #dotnet #CSharp #CodeAndBots
Название:
Создаём Telegram-бота с нуля — регистрация, appsettings.json, запуск в VS2022 (C# .NET)
Категория:
Разное