telegram-bot-csharp

Cómo crear un Bot para Telegram en C#

Telegram.Bot es una biblioteca de código abierto diseñada para simplificar el desarrollo de bots para Telegram en aplicaciones .NET.

Telegram es una de las plataformas de mensajería más populares. Una de sus ventajas es que una API robusta pero muy sencilla para crear bots que pueden interactuar con usuarios, e incluso con otros bots.

Telegram.Bot es una biblioteca de C# que facilita la integración con la API de Telegram para crear y gestionar bots. Permite la implementación de funcionalidades como el envío y recepción de mensajes, manejo de comandos, entre otras funciones.

Características principales,

  • Fácil integración con la API de Telegram: Simplifica el uso de métodos de la API de Telegram.
  • Soporte para comandos y mensajes: Permite manejar diversos tipos de interacciones con los usuarios.
  • Webhooks y Polling: Admite ambos métodos para recibir actualizaciones del bot.
  • Documentación y ejemplos: Incluye una documentación completa y ejemplos para facilitar el desarrollo.

Para obtener más información y acceder a la documentación completa, visita el repositorio de Telegram.Bot en GitHub.

Cómo configurar un bot de Telegram

Lo primero que tenemos que hacer es crear el Bot en Telegram. Para ello

  1. Abre la aplicación de Telegram y busca el bot @BotFather.
  2. Inicia una conversación con @BotFather y usa el comando /newbot para crear un nuevo bot.
  3. Sigue las instrucciones para asignar un nombre y un nombre de usuario a tu bot.
  4. Una vez creado, @BotFather te proporcionará un token de API. Guarda este token, ya que lo necesitaremos más adelante.

Creación del Bot en C#

Para comenzar a utilizar Telegram.Bot, primero necesitas agregar la biblioteca a tu proyecto de C#. Esto se puede hacer fácilmente mediante NuGet, el administrador de paquetes de .NET.

En primer lugar, abrimos Visual Studio y creamos un nuevo proyecto de Consola. Ahora instalamos la biblioteca Telegram.Bot mediante NuGet.

Puedes hacerlo usando el siguiente comando en la Consola del Administrador de Paquetes:

Install-Package Telegram.Bot

Cómo Usar Telegram.Bot

Configura tu Bot

En tu proyecto de C#, crea una nueva clase Program y configurar el bot utilizando el token proporcionado por @BotFather.

using System;
using System.Threading.Tasks;
using Telegram.Bot;
using Telegram.Bot.Args;

class Program
{
 	private static readonly string Token = "YOUR_TELEGRAM_BOT_TOKEN_HERE";
 	private static TelegramBotClient botClient;
 	
 	static void Main(string[] args)
 	{
 		botClient = new TelegramBotClient(Token);
 	
 		var me = botClient.GetMeAsync().Result;
 		Console.WriteLine($"Bot id: {me.Id}, Bot Name: {me.FirstName}");
 	
 		botClient.OnMessage += Bot_OnMessage;
 		botClient.StartReceiving();
 	
 		Console.WriteLine("Press any key to exit");
 		Console.ReadKey();
 		botClient.StopReceiving();
 	}
 	
 	private static void Bot_OnMessage(object sender, MessageEventArgs e)
 	{
 		if (e.Message.Text != null)
 		{
 			Console.WriteLine($"Received a text message in chat {e.Message.Chat.Id}.");
 	
 			botClient.SendTextMessageAsync(
 				chatId: e.Message.Chat,
 				text: "You said:\n" + e.Message.Text
 			);
 		}
 	}
}

En este ejemplo:

  • Se configura un TelegramBotClient con el token del bot.
  • Se suscribe al evento OnMessage para manejar los mensajes entrantes.
  • En el método Bot_OnMessage, se responde a los mensajes de texto enviando una respuesta al chat.

Manejar Mensajes y Comandos

Vamos a mejorar el bot para que maneje comandos básicos como /start y /help.

private static void Bot_OnMessage(object sender, MessageEventArgs e)
{
    if (e.Message.Text != null)
    {
        Console.WriteLine($"Received a text message in chat {e.Message.Chat.Id}.");

        switch (e.Message.Text.ToLower())
        {
            case "/start":
                botClient.SendTextMessageAsync(
                    chatId: e.Message.Chat,
                    text: "Welcome to the bot! Type /help to see available commands."
                );
                break;

            case "/help":
                botClient.SendTextMessageAsync(
                    chatId: e.Message.Chat,
                    text: "/start - Start the bot\n/help - Get help"
                );
                break;

            default:
                botClient.SendTextMessageAsync(
                    chatId: e.Message.Chat,
                    text: "You said:\n" + e.Message.Text
                );
                break;
        }
    }
}

Enviar Imágenes y Archivos

Además de texto, el bot también puede enviar imágenes y archivos. Vamos a añadir un comando para enviar una imagen.

private static void Bot_OnMessage(object sender, MessageEventArgs e)
{
    if (e.Message.Text != null)
    {
        Console.WriteLine($"Received a text message in chat {e.Message.Chat.Id}.");

        switch (e.Message.Text.ToLower())
        {
            case "/start":
                botClient.SendTextMessageAsync(
                    chatId: e.Message.Chat,
                    text: "Welcome to the bot! Type /help to see available commands."
                );
                break;

            case "/help":
                botClient.SendTextMessageAsync(
                    chatId: e.Message.Chat,
                    text: "/start - Start the bot\n/help - Get help\n/photo - Get a photo"
                );
                break;

            case "/photo":
                botClient.SendPhotoAsync(
                    chatId: e.Message.Chat,
                    photo: "https://example.com/photo.jpg",
                    caption: "Here is your photo!"
                );
                break;

            default:
                botClient.SendTextMessageAsync(
                    chatId: e.Message.Chat,
                    text: "You said:\n" + e.Message.Text
                );
                break;
        }
    }
}

Uso de Webhooks

Si prefieres usar webhooks en lugar de polling, puedes configurar el webhook de la siguiente manera:

var webhookUrl = "https://yourdomain.com/api/update";
await Bot.SetWebhookAsync(webhookUrl);

Asegúrate de que tu servidor pueda manejar solicitudes HTTPS y de que esté configurado correctamente para recibir actualizaciones.