using System;
using System.Threading;
using System.Threading.Tasks;
using Telegram.Bot;
using Telegram.Bot.Exceptions;
using Telegram.Bot.Polling;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
namespace TelegramBotExample
{
class Program
{
private static ITelegramBotClient botClient;
static async Task Main(string[] args)
{
botClient = new TelegramBotClient("YOUR_BOT_API_KEY");
using var cts = new CancellationTokenSource();
// StartReceiving does not block the caller thread. Receiving is done on the ThreadPool.
botClient.StartReceiving(
HandleUpdateAsync,
HandleErrorAsync,
new ReceiverOptions
{
AllowedUpdates = Array.Empty<UpdateType>() // receive all update types
},
cancellationToken: cts.Token
);
var me = await botClient.GetMeAsync();
Console.WriteLine($"Start listening for @{me.Username}");
Console.ReadLine();
// Send cancellation request to stop bot
cts.Cancel();
}
private static async Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken)
{
if (update.Type == UpdateType.Message && update.Message?.Text != null)
{
var message = update.Message;
Console.WriteLine($"Received a message from {message.Chat.Id}: {message.Text}");
await botClient.SendTextMessageAsync(
chatId: message.Chat.Id,
text: "You said:\n" + message.Text,
cancellationToken: cancellationToken
);
}
}
private static Task HandleErrorAsync(ITelegramBotClient botClient, Exception exception, CancellationToken cancellationToken)
{
var errorMessage = exception switch
{
ApiRequestException apiRequestException
=> $"Telegram API Error:\n[{apiRequestException.ErrorCode}]\n{apiRequestException.Message}",
_ => exception.ToString()
};
Console.WriteLine(errorMessage);
return Task.CompletedTask;
}
}
}