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

如何用TLSharp获取Telegram频道消息发送者ID?C#程序遇FromId为空问题

解决TLSharp获取Telegram频道消息FromId为Null的问题

嘿,我之前在使用TLSharp处理频道消息时也碰到过这个FromId为空的情况,给你几个关键的排查和解决方向:

1. 区分消息类型与发送者来源

Telegram的频道消息分为几种情况,不同情况的发送者信息存储位置不一样:

  • 如果是普通用户发送到频道的消息:FromId应该会包含用户的ID,但如果是旧版TLSharp可能解析有问题,建议先更新版本。
  • 如果是频道官方自动发布的消息(比如频道简介更新、自动转发内容):FromId会是null,这时候可以查看message.PostAuthor字段,它可能包含发送者的用户名或者官方标识。
  • 如果是匿名发送的消息:FromId同样会是null,PostAuthor可能显示为"匿名用户"之类的标识。

2. 更新TLSharp到最新版本

旧版本的TLSharp可能对Telegram的API更新适配不足,尤其是超级频道的消息解析。你可以在NuGet包管理器中搜索TLSharp,更新到最新的稳定版本,这往往能解决很多解析相关的问题。

3. 正确的消息发送者判断代码示例

给你一段实用的代码片段,覆盖不同情况的发送者信息获取:

// 假设你已经获取到了messages列表
foreach (var message in messages)
{
    if (message.FromId != null)
    {
        // 处理有明确发送者ID的情况
        var peer = message.FromId as TLPeerUser;
        if (peer != null)
        {
            Console.WriteLine($"发送者用户ID: {peer.UserId}");
        }
        // 也可能是频道作为发送者(比如子频道转发)
        var channelPeer = message.FromId as TLPeerChannel;
        if (channelPeer != null)
        {
            Console.WriteLine($"发送者频道ID: {channelPeer.ChannelId}");
        }
    }
    else if (!string.IsNullOrWhiteSpace(message.PostAuthor))
    {
        // 处理FromId为空但有PostAuthor的情况
        Console.WriteLine($"发送者标识: {message.PostAuthor}");
    }
    else
    {
        // 处理完全匿名或官方发送的情况
        Console.WriteLine("消息由匿名用户或频道官方发送");
    }
}

4. 确认频道的权限与类型

确保你访问的频道是公开可读取的,或者你的账号已经加入了该频道(私有频道)。另外,超级频道和普通频道的消息结构略有差异,超级频道的消息发送者信息通常更完整,但需要TLSharp正确解析。

内容的提问来源于stack exchange,提问作者Shabio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:20:15