2016-05-12 133 views

回答

1

要获得渠道的消息,你只需要为接收频道更新。

截至TL-模式-52,你可以要求:

channels.getDialogs#a9d3d249 offset:int limit:int = messages.Dialogs; 

但是这已经在TL-模式-53被丢弃。

我猜你可以试试其他channel.*功能之一,

我还没有TL-架构53

什么版本的TL-架构是使用TLSharp还没试过?

你可以简单地实现相关功能,如果他们还没有在你的TLSharp版本中实现

2

您可以使用此代码

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

     var dialogs = (TLDialogs)await _client.GetUserDialogsAsync(); 
     var chat = dialogs.chats.lists 
      .OfType<TLChannel>() 
      .FirstOrDefault(c => c.title == channelName); 

     if (chat.access_hash != null) 
     { 
      var tlAbsMessages = 
       await _client.GetHistoryAsync(
        new TLInputPeerChannel {channel_id = chat.id, access_hash = chat.access_hash.Value}, offset, 
        maxId, limit); 

      var tlChannelMessages = (TLChannelMessages) tlAbsMessages; 

      for (var index = 0; index < tlChannelMessages.messages.lists.Count-1; index++) 
      { 
       var tlAbsMessage = tlChannelMessages.messages.lists[index]; 
       var message = (TLMessage) tlAbsMessage; 
       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; 
        } 
       } 
      } 
     } 
    } 
+0

你应该解释为什么使用它,即描述您的解决方案 – Massimo

+0

代码在tlsharp中很明显,你可以使用GetHistoryAsync来获取消息,只需发送TLInputPeerChannel作为第一个参数,然后你必须将结果转换为获取内容:-) –

+0

@arashDehghan是否有可能获得更新的频道列表?每个更新的频道? –

相关问题