C#中Telegram API收消息问题:寻求Get.Message相关轻量库
嘿,我之前也折腾过类似的需求,给你分享几个靠谱的解决方案吧!
先明确核心场景:你要接收的是「Bot的对话消息」还是「普通用户账号的消息」?
这两者对应的API完全不同,解决方案也不一样:
场景1:只想接收某个用户发给你的Bot的消息(最常用)
其实你提到的那些Telegram Bot库(比如最流行的Telegram.Bot NuGet包)是支持接收消息的,可能你之前只用到了发送功能而已。它通过getUpdates接口(轮询)或者Webhook来获取消息,然后你只需要在更新里过滤目标用户的ID就行,非常轻量易用。
举个极简的实现示例:
using Telegram.Bot; using Telegram.Bot.Types; using System.Threading.Tasks; var botToken = "你的Bot Token"; // 从@BotFather那里拿到的 var targetUserId = 123456789; // 你要监听的用户ID,可以通过Bot先获取一次用户信息拿到 var botClient = new TelegramBotClient(botToken); // 轮询获取消息更新 while (true) { var updates = await botClient.GetUpdatesAsync(offset: -1, timeout: 10); foreach (var update in updates) { // 只处理目标用户发来的文本消息 if (update.Message != null && update.Message.From.Id == targetUserId && update.Message.Text != null) { Console.WriteLine($"收到目标用户消息:{update.Message.Text}"); // 这里可以加你的业务逻辑,比如回复、存储等 } } await Task.Delay(1000); // 避免频繁请求API }
这个方案完全符合你的「轻量易用」需求,不需要额外复杂的配置,只要有Bot Token就行。
场景2:需要接收普通用户账号的所有消息(非Bot对话)
如果是这种情况,就不能用Bot API了,得用Telegram的MTProto API(面向普通用户账号的底层API)。C#里相对轻量且稳定的选择是TdLib——这是Telegram官方推出的跨平台库,封装了MTProto的所有功能,虽然比Bot库重一点,但胜在靠谱、文档全。
简单的示例(过滤目标用户消息):
using TdLib; using System.Threading.Tasks; var client = new TdClient(); var targetUserId = 123456789; // 设置更新回调,监听新消息 client.UpdateReceived += (sender, update) => { if (update is TdApi.Update.NewMessage newMsgUpdate) { var msg = newMsgUpdate.Message; if (msg.SenderUserId == targetUserId) { // 处理目标用户的消息,比如解析文本、媒体等 if (msg.Content is TdApi.MessageContent.MessageText textContent) { Console.WriteLine($"收到目标用户消息:{textContent.Text.Text}"); } } } }; // 第一步:设置API ID和API Hash(需要从Telegram开发者平台申请) await client.ExecuteAsync(new TdApi.SetOption { Name = "api_id", Value = new TdApi.OptionValue.OptionValueInteger { Value = 你的API ID } }); await client.ExecuteAsync(new TdApi.SetOption { Name = "api_hash", Value = new TdApi.OptionValue.OptionValueString { Value = "你的API Hash" } }); // 第二步:启动登录流程(需要输入手机号、验证码等,这里简化处理) await client.ExecuteAsync(new TdApi.SetAuthenticationPhoneNumber { PhoneNumber = "你的手机号" }); // 后续需要处理验证码输入、两步验证等逻辑,具体可以参考TdLib的文档
注意:使用TdLib需要先去Telegram开发者平台申请API ID和API Hash,这个是面向普通账号的凭证,和Bot Token不是一回事。
总结
- 如果只是接收用户发给Bot的消息,优先用
Telegram.Bot库,轻量又简单; - 如果必须监听普通账号的消息,就用TdLib,虽然配置稍复杂,但功能完整。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

