Форум программистов, компьютерный форум, киберфорум
C#: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/88: Рейтинг темы: голосов - 88, средняя оценка - 4.58
10 / 10 / 1
Регистрация: 13.05.2013
Сообщений: 59

Telegram API (НЕ Telegram Bot API!) - как правильно спарсить все сообщения в чате?

26.12.2020, 00:55. Показов 16828. Ответов 2

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Мне нужно выдрать все сообщения в определенном чате. Использую библиотеку TLSharp.
Авторизация и т.д. прошли успешно.
А когда я пытаюсь скачать все сообщения порциями по 100 шт., я попадаю в бесконечный цикл.
Что я делаю не так?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
using TeleSharp.TL;
using TeleSharp.TL.Messages;
using TLSharp.Core;
//using other standard...
 
//code for authorization etc. is skipped
 
 int VKFID = 1175259547; //ID of the chat
 int offset = 0;
 int n = 1;
 StringBuilder sb = new StringBuilder();
 TelegramClient client = new TelegramClient(<key>, <hash>);
 TLUser user;
 
 private DateTime ConvertFromUnixTimestamp(double timestamp)
 {
     DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
     return origin.AddSeconds(timestamp);
 }
 
 private async void button3_Click(object sender, EventArgs e)
 {
     sb.Append("#\tDate\tTime\tMID\tTUID\tText" + Environment.NewLine);
     TLDialogsSlice dialogs = (TLDialogsSlice)await client.GetUserDialogsAsync();
     TLChannel chat = dialogs.Chats.Where(c => c.GetType() == typeof(TLChannel)).Cast<TLChannel>().FirstOrDefault(c => c.Id == VKFID);
     TLInputPeerChannel inputPeer = new TLInputPeerChannel() { ChannelId = chat.Id, AccessHash = (long)chat.AccessHash };
     while (true)
     {
         try
         {
             TLChannelMessages res = await client.SendRequestAsync<TLChannelMessages>
             (new TLRequestGetHistory() { Peer = inputPeer, Limit = 1000, AddOffset = offset, OffsetId = 0 });
             var msgs = res.Messages;
             if (res.Count > offset)
             {
                 offset += msgs.Count;
                 foreach (TLAbsMessage msg in msgs)
                 {
                     if (msg is TLMessage)
                     {
                         TLMessage message = msg as TLMessage;
                         sb.Append(n.ToString() + "\t" +
                             ConvertFromUnixTimestamp(message.Date).ToLocalTime().ToString("dd'.'MM'.'yyyy") + "\t" +
                             ConvertFromUnixTimestamp(message.Date).ToLocalTime().ToString("HH':'mm':'ss") + "\t" +
                             message.Id + "\t" + message.FromId + "\t" + message.Message + Environment.NewLine);
                     }
                     if (msg is TLMessageService)
                         continue;
                     n++;
                 }
                 Thread.Sleep(22000); //to avoid TelegramFloodException
             }
             else
                 break;
         }
         catch (Exception ex)
         {
             MessageBox.Show(ex.Message);
             break;
         }
         finally
         {
             await Task.Delay(22000); //чтобы обойти TelegramFloodException
         }
     }
     textBox2.Text = sb.ToString();
     MessageBox.Show("Done");
 }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.12.2020, 00:55
Ответы с готовыми решениями:

Telegram Bot API. Функция сохранения сообщения
Есть бот, взаимодействие с которым реализовано с помощью Inline кнопок. Только в паре моментов надо что то вводить. Так вот, нужна кнопка...

Api Telegram Bot
Захотелось попробовать написать бота для телеграмм. Решил писать без библиотек, просто запросы. Однако когда захотел вставить Inline...

Telegram Bot API Webhook
Здравствуйте! Вебхук перестал посылать сообщения на обработчик. Они доходят только через несколько минут. В чём может быть проблема?...

2
 Аватар для aenye
304 / 186 / 45
Регистрация: 05.07.2018
Сообщений: 580
26.12.2020, 02:12
Цитата Сообщение от serhiy1994 Посмотреть сообщение
А когда я пытаюсь скачать все сообщения порциями по 100 шт., я попадаю в бесконечный цикл.
Что я делаю не так?
В целом много что не так, если относительно бесконечного цикла - Вы сами его создаете в 27-й строке.
0
10 / 10 / 1
Регистрация: 13.05.2013
Сообщений: 59
26.12.2020, 15:34  [ТС]
aenye,да, теперь заметил. я брал код отсюда: https://habr.com/ru/post/351350/
А что еще не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.12.2020, 15:34
Помогаю со студенческими работами здесь

Парсер + Telegram-bot-api
Здравствуйте, форумчане! Вообщем есть парсер needle.get(url, function(err, res){ if(err) throw err; var $ =...

node telegram bot api , как получить момент когда опрос завершился
Здравствуйте! Возник такой вопрос - возможно ли получить момент, когда опрос (викторина) завершился? Поиск в документации не дал...

node telegram bot api Как получить id опроса, который отправил бот
Еще один вопрос возник во время попыток разработки телеграм бота. Как можно получить id опроса отправленного ботом? Пытался так (т.к. в...

Не отправляет значение в telegram bot api
Всем привет! Пробую писать бота в телеграмм. Довольно простецкая ситуация, а выйти из неё мне самому не под силу. Ломаю голову какой день,...

Подключение Telegram Bot API к боту
Здравствуйте, подскажите, пожалуйста, как мне использовать метод из Telegram Bot API в своём боте. То есть, я нашёл, что это делается так: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru