4
如何使用TLSharp从电报通道获取通道消息?如何使用TLSharp从电报通道获取通道消息?
以下链接并没有帮助我:
如何使用TLSharp从电报通道获取通道消息?如何使用TLSharp从电报通道获取通道消息?
以下链接并没有帮助我:
要获得渠道的消息,你只需要为接收频道更新。
截至TL-模式-52,你可以要求:
channels.getDialogs#a9d3d249 offset:int limit:int = messages.Dialogs;
但是这已经在TL-模式-53被丢弃。
我猜你可以试试其他channel.*
功能之一,
我还没有TL-架构53
什么版本的TL-架构是使用TLSharp还没试过?
你可以简单地实现相关功能,如果他们还没有在你的TLSharp版本中实现
您可以使用此代码
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;
}
}
}
}
}
你应该解释为什么使用它,即描述您的解决方案 – Massimo
代码在tlsharp中很明显,你可以使用GetHistoryAsync来获取消息,只需发送TLInputPeerChannel作为第一个参数,然后你必须将结果转换为获取内容:-) –
@arashDehghan是否有可能获得更新的频道列表?每个更新的频道? –