C# 如何使用Telegram API(非Bot API)接收频道、联系人及群组消息?
基于C#的Telegram普通用户客户端最优实现方案
你需要开发的普通用户身份消息监听客户端,无法使用Bot API,且TLSharp已经多年停止维护,不支持新版Telegram API特性,目前最优选择是使用WTelegramClient库,它是C#生态下唯一仍在活跃维护的Telegram用户端API(MTProto协议)封装,完全支持实时接收私聊、群组、频道消息并触发自定义事件。
实现步骤
- 第一步:申请API凭证
用你要作为客户端的Telegram账号,前往Telegram官方API申请页面获取API_ID和API_HASH,这两个参数是调用用户端API的必备凭证,和Bot Token无关。 - 第二步:安装依赖
通过NuGet安装WTelegramClient包,包管理器命令为:Install-Package WTelegramClient - 第三步:编写消息监听逻辑
最简实现示例如下:using WTelegram; using TL; class TelegramClientDemo { static async Task Main(string[] args) { // 替换为你自己申请的API参数和账号手机号 int apiId = 123456; string apiHash = "你的apiHash字符串"; string phoneNumber = "+86你的手机号"; using var client = new Client(apiId, apiHash); // 登录账号:第一次运行需要输入手机收到的验证码,后续会自动缓存会话无需重复验证 await client.LoginUserIfNeeded(phoneNumber); Console.WriteLine("登录成功,开始监听消息..."); // 绑定消息更新事件 client.OnUpdate += async (updateObj) => { // 过滤新消息更新 if (updateObj is UpdateNewMessage { message: Message receivedMsg }) { // 获取消息来源信息(用户/群组/频道) string sourceName = receivedMsg.Peer switch { PeerUser pu => (await client.Users.GetAsync(pu.user_id)).ToString(), PeerChat pc => (await client.Chats.GetAsync(pc.chat_id)).Title, PeerChannel pch => (await client.Chats.GetAsync(pch.channel_id)).Title, _ => "未知来源" }; // 这里替换为你自己的业务触发逻辑 Console.WriteLine($"收到来自【{sourceName}】的消息:{receivedMsg.message}"); } }; // 阻塞主线程保持客户端运行 await Task.Delay(Timeout.Infinite); } }
注意事项
- 会话管理:WTelegramClient默认会在程序运行目录生成
session.dat文件存储登录会话,不要随意删除该文件,否则需要重新验证登录 - 账号安全:不要使用该实现进行高频发消息、批量加群、自动回复营销内容等违反Telegram用户协议的操作,否则会导致账号被封禁
- 功能扩展:该库支持所有普通Telegram客户端的操作,包括发消息、下载媒体、管理群组等,可直接调用Client实例的对应方法实现
内容的提问来源于stack exchange,提问作者Jaume
相关产品推荐
相关产品推荐

