Telegram 如何使用TLSharp从电报频道获取频道消息?

Telegram 如何使用TLSharp从电报频道获取频道消息?,telegram,Telegram,如何使用TLSharp从电报频道获取频道消息 以下链接对我没有帮助: 要获取频道消息,只需接收频道更新即可 在TL-schema-52中,您可以请求: channels.getDialogs#a9d3d249 offset:int limit:int = messages.Dialogs; 然而,TL-schema-53中已经删除了这一点 我猜您可以尝试另一个频道。*函数 我还没有尝试TL-schema-53 您的TLSharp使用什么版本的TL模式 如果您的TLSharp版本中尚未实

如何使用TLSharp从电报频道获取频道消息

以下链接对我没有帮助:


要获取频道消息,只需接收频道更新即可

在TL-schema-52中,您可以请求:

channels.getDialogs#a9d3d249 offset:int limit:int = messages.Dialogs; 
然而,TL-schema-53中已经删除了这一点

我猜您可以尝试另一个
频道。*
函数

我还没有尝试TL-schema-53

您的TLSharp使用什么版本的TL模式

如果您的TLSharp版本中尚未实现相关功能,您可以简单地实现它们

您可以使用此代码

        public async Task GatherChannelHistory(string channelName, int offset = 0, int maxId = -1, int limit = 50)
    {
        _resultMessages.Clear();
        await _client.ConnectAsync();

        var dialogs = (TLDialogsSlice)await _client.GetUserDialogsAsync();
        var chat = dialogs.Chats.ToList()
            .OfType<TLChannel>()
            .FirstOrDefault(c => c.Title == channelName);

        if (chat.AccessHash != null)
        {
            var tlAbsMessages =
                await _client.GetHistoryAsync(
                    new TLInputPeerChannel {ChannelId= chat.Id, AccessHash = chat.AccessHash.Value}, offset,
                    maxId, limit);

            var tlChannelMessages = (TLChannelMessages) tlAbsMessages;

            for (var index = 0; index < tlChannelMessages.Messages.Count-1; index++)
            {
                var tlAbsMessage = tlChannelMessages.Messages.ToList()[index];
                var message = (TLMessage) tlAbsMessage;
                //Now you have the message and you can do what you need with it
                //the code below is an example of messages classification
                if (message.media == null)
                {
                    _resultMessages.Add(new ChannelMessage()
                    {
                        Id = message.id,
                        ChannelId = chat.id,
                        Content = message.message,
                        Type = EnChannelMessage.Message,
                        Views = message.views,
                    });
                }
                else
                {

                    switch (message.media.GetType().ToString())
                    {
                        case "TeleSharp.TL.TLMessageMediaPhoto":
                            var tLMessageMediaPhoto = (TLMessageMediaPhoto)message.media;

                            _resultMessages.Add(new ChannelMessage()
                            {
                                Id = message.id,
                                ChannelId = chat.id,
                                Content = tLMessageMediaPhoto.caption,
                                Type = EnChannelMessage.MediaPhoto,
                                Views = message.views ?? 0,
                            });
                            break;
                        case "TeleSharp.TL.TLMessageMediaDocument":
                            var tLMessageMediaDocument = (TLMessageMediaDocument)message.media;

                            _resultMessages.Add(new ChannelMessage()
                            {
                                Id = message.id,
                                ChannelId = chat.id,
                                Content = tLMessageMediaDocument.caption,
                                Type = EnChannelMessage.MediaDocument,
                                Views = message.views ?? 0,
                            });
                            break;
                        case "TeleSharp.TL.TLMessageMediaWebPage":
                            var tLMessageMediaWebPage = (TLMessageMediaWebPage)message.media;
                            string url = string.Empty;
                            if (tLMessageMediaWebPage.webpage.GetType().ToString() != "TeleSharp.TL.TLWebPageEmpty")
                            {
                                var webPage = (TLWebPage) tLMessageMediaWebPage.webpage;
                                url = webPage.url;
                            }

                            _resultMessages.Add(new ChannelMessage
                            {
                                Id = message.id,
                                ChannelId = chat.id,
                                Content = message.message + @" : " + url,
                                Type = EnChannelMessage.WebPage,
                                Views = message.views ?? 0,
                            });
                            break;
                    }
                }
            }
        }
    }
公共异步任务GatherChannelHistory(字符串channelName,int offset=0,int maxId=-1,int limit=50) { _resultMessages.Clear(); wait_client.ConnectAsync(); var dialogs=(TLDialogsSlice)等待_client.GetUserDialogsAsync(); var chat=dialogs.Chats.ToList() 第()类 .FirstOrDefault(c=>c.Title==channelName); if(chat.AccessHash!=null) { var tlAbsMessages= 等待\u client.GetHistoryAsync( 新的TLInputPeerChannel{ChannelId=chat.Id,AccessHash=chat.AccessHash.Value},偏移量, maxId,limit); var tlChannelMessages=(tlChannelMessages)tlAbsMessages; 对于(var index=0;index您应该解释为什么要使用它,也就是说,描述您的解决方案tlsharp中的代码很清楚您可以使用GetHistoryAsync获取消息只需发送TLInputPeerChannel作为第一个参数,然后您必须为获取内容强制转换结果:-)@Arashdehhan是否可以获取更新的频道列表?因此,我们为每个更新的频道读取所有新帖子?每条消息都有一个id,可以读取是唯一的,因此您不需要所有邮件,您只需要读取其Id大于上次邮件Id的邮件,我希望这会有所帮助。我无法运行代码。什么是
\u resultMessages
?它是较长代码的一部分吗?请给我一些建议。