10 / 10 / 1
Регистрация: 13.05.2013
Сообщений: 59

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

26.12.2020, 00:55. Показов 16927. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В качестве. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru