You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:21:57