Загрузка...

Создаём 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) канала Code & Bots by Aleksey
Яндекс.Метрика
Все заметки Новая заметка Страницу в заметки
Страницу в закладки Мои закладки
На информационно-развлекательном портале SALDA.WS применяются cookie-файлы. Нажимая кнопку Принять, вы подтверждаете свое согласие на их использование.
О CookiesНапомнить позжеПринять