Telegram机器人C#版:从零开始30分钟创建

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

为什么 C# 是 Telegram 机器人的绝佳选择?

\n\n

如果你还以为 Telegram 机器人只能用 Python 或 JavaScript 编写,那准备好被惊艳吧。C# 凭借其强类型、庞大的生态系统和速度,是创建机器人的真正“重量级选手”。想象一下:你只需编写一次代码,机器人就能无故障运行多年,每秒处理数千条消息。听起来很诱人,对吧?

\n\n

在本指南中,我们将从头开始创建一个 C# 编写的 Telegram 机器人。你将学习如何通过 BotFather 注册机器人,连接 Telegram.Bot 库,并编写包含命令处理的可运行代码。没有废话——只有实践和真实示例。

\n\n

我们需要什么?

\n\n

在开始之前,请确保你已具备:

\n
    \n
  • .NET SDK(6.0 或更新版本)——从官方网站下载;
  • \n
  • Visual Studio 或 VS Code(任何你熟悉的 IDE);
  • \n
  • 一个 Telegram 账号——没有它可不行;
  • \n
  • 5 分钟的空闲时间——剩下的交给 C# 完成。
  • \n
\n\n

准备好了吗?开始吧!

\n\n

步骤 1. 通过 BotFather 获取机器人令牌

\n\n

在编写代码之前,你需要先“创建”机器人本身。打开 Telegram 并找到 @BotFather——这是 Telegram 中主要的“机器人创建器”。

\n\n
    \n
  1. 发送命令 /newbot。
  2. \n
  3. 为机器人起一个名字(例如:MyFirstCSharpBot)。
  4. \n
  5. 起一个用户名(必须以 bot 结尾,例如:MyFirstCSharpBot)。
  6. \n
  7. 获取令牌——一个类似 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 的长字符串。
  8. \n
\n\n

重要提示: 令牌是访问你机器人的密钥。不要向任何人展示或将其发布在公开代码中。最好将其存储在 appsettings.json 或环境变量中。

\n\n

步骤 2. 创建项目并安装库

\n\n

打开终端并运行以下命令:

\n\n
dotnet new console -n TelegramBotCSharp\ncd TelegramBotCSharp\ndotnet add package Telegram.Bot
\n\n

我们使用的是 Telegram.Bot 库——这是用 C# 处理 Telegram API 最流行且维护最完善的库。它处理所有“繁重工作”:连接到服务器、处理更新、发送消息。

\n\n

安装完成后,打开 Program.cs 文件——我们将在这里编写魔法代码。

\n\n

步骤 3. 编写基础机器人代码

\n\n

让我们从最简单的开始:机器人将响应 /start 和 /help 命令。这是最小可运行代码:

\n\n
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:                

博客

书籍推荐