为什么 C# 是 Telegram 机器人的绝佳选择?
\n\n如果你还以为 Telegram 机器人只能用 Python 或 JavaScript 编写,那准备好被惊艳吧。C# 凭借其强类型、庞大的生态系统和速度,是创建机器人的真正“重量级选手”。想象一下:你只需编写一次代码,机器人就能无故障运行多年,每秒处理数千条消息。听起来很诱人,对吧?
\n\n在本指南中,我们将从头开始创建一个 C# 编写的 Telegram 机器人。你将学习如何通过 BotFather 注册机器人,连接 Telegram.Bot 库,并编写包含命令处理的可运行代码。没有废话——只有实践和真实示例。
我们需要什么?
\n\n在开始之前,请确保你已具备:
\n- \n
- .NET SDK(6.0 或更新版本)——从官方网站下载; \n
- Visual Studio 或 VS Code(任何你熟悉的 IDE); \n
- 一个 Telegram 账号——没有它可不行; \n
- 5 分钟的空闲时间——剩下的交给 C# 完成。 \n
准备好了吗?开始吧!
\n\n步骤 1. 通过 BotFather 获取机器人令牌
\n\n在编写代码之前,你需要先“创建”机器人本身。打开 Telegram 并找到 @BotFather——这是 Telegram 中主要的“机器人创建器”。
\n\n- \n
- 发送命令
/newbot。 \n - 为机器人起一个名字(例如:MyFirstCSharpBot)。 \n
- 起一个用户名(必须以 bot 结尾,例如:MyFirstCSharpBot)。 \n
- 获取令牌——一个类似
123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11的长字符串。 \n
重要提示: 令牌是访问你机器人的密钥。不要向任何人展示或将其发布在公开代码中。最好将其存储在 appsettings.json 或环境变量中。
步骤 2. 创建项目并安装库
\n\n打开终端并运行以下命令:
\n\ndotnet new console -n TelegramBotCSharp\ncd TelegramBotCSharp\ndotnet add package Telegram.Bot\n\n我们使用的是 Telegram.Bot 库——这是用 C# 处理 Telegram API 最流行且维护最完善的库。它处理所有“繁重工作”:连接到服务器、处理更新、发送消息。
\n\n安装完成后,打开 Program.cs 文件——我们将在这里编写魔法代码。
步骤 3. 编写基础机器人代码
\n\n让我们从最简单的开始:机器人将响应 /start 和 /help 命令。这是最小可运行代码:
using Telegram.Bot;\nusing Telegram.Bot.Exceptions;\nusing Telegram.Bot.Polling;\nusing Telegram.Bot.Types;\nusing Telegram.Bot.Types.Enums;\n\nvar botClient = new TelegramBotClient("YOUR_TOKEN_HERE");\n\nusing var cts = new CancellationTokenSource();\n\nvar receiverOptions = new ReceiverOptions\n{\n AllowedUpdates = Array.Empty<UpdateType>() // receive all update types\n};\n\nbotClient.StartReceiving(\n updateHandler: HandleUpdateAsync,\n pollingErrorHandler: HandlePollingErrorAsync,\n receiverOptions: receiverOptions,\n cancellationToken: cts.Token\n);\n\nConsole.WriteLine("Bot started! Press Enter to stop.");\nConsole.ReadLine();\ncts.Cancel();\n\nasync Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken)\n{\n if (update.Message is not { } message)\n return;\n if (message.Text is not { } messageText)\n return;\n\n var chatId = message.Chat.Id;\n Console.WriteLine($"Received message '{messageText}' from {chatId}");\n\n if (messageText == "/start")\n {\n await botClient.SendTextMessageAsync(\n chatId: chatId,\n text: