TLSharp icon indicating copy to clipboard operation
TLSharp copied to clipboard

Вопрос. Как получать сообщения из чата?

Open DmitrijOkeanij opened this issue 5 years ago • 3 comments

Приветствую! Знаю что ты русскоговорящий разработчик, поэтому спрашиваю по русски.

Пробую получить все сообщения с обычного чата ( не канала ).

И не могу нигде примеры найти как это можно сделать. Методом логики и проб пока не получается сделать.

Один из моментов почему возможно не получается при получении всех чатов пользователя получаются сущности. TLChannel и TLChatForbidden и все чаты идут как TLChatForbidden что мне непонятно.

И второе что не могу понять как из этого TLChatForbidden извлечь сообщения.

PS: Благодарю за классную и полезную библиотеку. Надеюсь получится с ней разобраться.

PS2: Хорошо бы в проекте побольше примеров на разные темы.

DmitrijOkeanij avatar Nov 21 '20 07:11 DmitrijOkeanij

Здравствуй! Я давно использую эту библиотеку. И понимаю о чем ты говоришь. Если все еще вопрос актуален, я могу показать пример.

ReshetovAnton avatar Dec 22 '20 09:12 ReshetovAnton

Здравствуй! Я давно использую эту библиотеку. И понимаю о чем ты говоришь. Если все еще вопрос актуален, я могу показать пример.

Покажите пожалуйста.

Datakda avatar Dec 26 '20 21:12 Datakda

Если очень коротко, то так. chatFromDialogs - канал (приватный или публичный чат), найденный в истории по имени. Так можно получить закрытый чат, если вы в него вступили. chatFromSearch - канал или публичный чат, найденный по его имени (которое в ссылке t.me/chatUrl ). msgs - 100 сообщений с начала чата. Можно выполнить запрос TLRequestGetFullChannel, который вернёт для чата ID последнего сообщения, чтобы получать сообщения, начиная с последних.

var ownDialogs = (TLDialogs)await _client.GetUserDialogsAsync();
TLChannel chatFromDialogs = dialogs.Chats.OfType<TLChannel>().FirstOrDefault(c=>c.Title == "Chat displayname");

TLChannel chatFromSearch = (await _client.SendRequestAsync<TLResolvedPeer>(
                    new TLRequestResolveUsername { Username = "chatUrl" })).Chats.FirstOrDefault() as TLChannel;

var channel = chatFromDialogs ?? chatFromSearch;
var chatPeer = new TLInputPeerChannel()
                    {
                        ChannelId = channel.Id,
                        AccessHash = channel.AccessHash.Value
                    };

var msgs = (TLChannelMessages)(await _client.GetHistoryAsync(
                        chatPeer, offsetId: 0, limit: 100));

vkomachenok avatar Jan 05 '21 11:01 vkomachenok