Author Topic: Протокол Telegram  (Read 675012 times)

0 Members and 2 Guests are viewing this topic.

Offline dartraiden

Re: Протокол Telegram
« Reply #195 on: 18 10 2025, 07:26:16 »
Повторюсь: в стабильной версии очень старая tdlib.

В версии в разработке этот баг есть?
« Last Edit: 18 10 2025, 07:38:19 by dartraiden »
 

Offline Alex79

Re: Протокол Telegram
« Reply #196 on: 18 10 2025, 09:52:11 »
Повторюсь: в стабильной версии очень старая tdlib.

В версии в разработке этот баг есть?

В предыдущем посте же все написано. Ссылки на скачку файлов формируются при запросе конкретного сообщения от клиента к серверу и их срок жизни около 2 часов (наверное это настройка в боте выдающем файлы, либо канала с архивами эфиров), чтобы они качались всегда, в миранде нужно добавить в механизм обработки события загрузки - если она не начинается, значит ссылка устарела и требуется повторно загрузить в историю миранды (с сервера) то сообщение, которое содержит загружаемый файл с обновленной ссылкой.
 

Offline dartraiden

Re: Протокол Telegram
« Reply #197 on: 18 10 2025, 22:51:29 »
TG работает совсем иначе. Вот как выглядит отдельное событие (пост в канале "Коммерсант FM (Эфиры)")

Code: [Select]
    message {
      id = 7525629952
      sender_id = messageSenderChat {
        chat_id = -1002401255574
      }
      chat_id = -1002401255574
      sending_state = null
      scheduling_state = null
      is_outgoing = false
      is_pinned = false
      is_from_offline = false
      can_be_saved = true
      has_timestamped_media = true
      is_channel_post = true
      contains_unread_mention = false
      date = 1759788667
      edit_date = 0
      forward_info = null
      import_info = null
      interaction_info = messageInteractionInfo {
        view_count = 13
        forward_count = 0
        reply_info = null
        reactions = null
      }
      unread_reactions = vector[0] {
      }
      fact_check = null
      reply_to = null
      message_thread_id = 0
      topic_id = null
      self_destruct_type = null
      self_destruct_in = 0.000000
      auto_delete_in = 0.000000
      via_bot_user_id = 0
      sender_business_bot_user_id = 0
      sender_boost_count = 0
      paid_message_star_count = 0
      author_signature = ""
      media_album_id = 0
      effect_id = 0
      has_sensitive_content = false
      restriction_reason = ""
      content = messageAudio {
        audio = audio {
          duration = 3594
          title = "00:00 мск - 07.10.2025"
          performer = "Коммерсант FM"
          file_name = "00-00.mp3"
          mime_type = "audio/mpeg"
          album_cover_minithumbnail = minithumbnail {
            width = 40
            height = 40
            data = bytes [838] { FF D8 FF E0 00 10 4A 46 49 46 00 01 01 00 00 01 00 01 00 00 FF DB 00 43 00 28 1C 1E 23 1E 19 28 23 21 23 2D 2B 28 30 3C 64 41 3C 37 37 3C 7B 58 5D 49 64 91 80 99 96 8F 80 8C 8A A0 B4 E6 C3 A0 ...}
          }
          album_cover_thumbnail = thumbnail {
            format = thumbnailFormatJpeg {
            }
            width = 320
            height = 320
            file = file {
              id = 2407
              size = 13351
              expected_size = 13351
              local = localFile {
                path = ""
                can_be_downloaded = true
                can_be_deleted = false
                is_downloading_active = false
                is_downloading_completed = false
                download_offset = 0
                downloaded_prefix_size = 0
                downloaded_size = 0
              }
              remote = remoteFile {
                id = "AAMCAgADIQUABI8gQJYAAhwJaPQbGpaA0my6kVMKN8b8nl6qlQkAAsJ-AAI0NiBLq_Tjxbm4bAwBAAdtAAM2BA"
                unique_id = "AQADwn4AAjQ2IEty"
                is_uploading_active = false
                is_uploading_completed = true
                uploaded_size = 13351
              }
            }
          }
          external_album_covers = vector[2] {
            thumbnail {
              format = thumbnailFormatJpeg {
              }
              width = 100
              height = 100
              file = file {
                id = 2409
                size = 0
                expected_size = 0
                local = localFile {
                  path = ""
                  can_be_downloaded = true
                  can_be_deleted = false
                  is_downloading_active = false
                  is_downloading_completed = false
                  download_offset = 0
                  downloaded_prefix_size = 0
                  downloaded_size = 0
                }
                remote = remoteFile {
                  id = "AAg9I2F1ZGlvX3QjMDA6MDAg0LzRgdC6IC0gMDcuMTAuMjAyNSPQmtC-0LzQvNC10YDRgdCw0L3RgiBGTSMxIwACAw"
                  unique_id = "_wAIPSNhdWRpb190IzAwOjAwINC80YHQuiAtIDA3LjEwLjIwMjUj0JrQvtC80LzQtdGA0YHQsNC90YIgRk0jMSMAAg"
                  is_uploading_active = false
                  is_uploading_completed = true
                  uploaded_size = 0
                }
              }
            }
            thumbnail {
              format = thumbnailFormatJpeg {
              }
              width = 600
              height = 600
              file = file {
                id = 2410
                size = 0
                expected_size = 0
                local = localFile {
                  path = ""
                  can_be_downloaded = true
                  can_be_deleted = false
                  is_downloading_active = false
                  is_downloading_completed = false
                  download_offset = 0
                  downloaded_prefix_size = 0
                  downloaded_size = 0
                }
                remote = remoteFile {
                  id = "AAg9I2F1ZGlvX3QjMDA6MDAg0LzRgdC6IC0gMDcuMTAuMjAyNSPQmtC-0LzQvNC10YDRgdCw0L3RgiBGTSMwIwACAw"
                  unique_id = "_wAIPSNhdWRpb190IzAwOjAwINC80YHQuiAtIDA3LjEwLjIwMjUj0JrQvtC80LzQtdGA0YHQsNC90YIgRk0jMCMAAg"
                  is_uploading_active = false
                  is_uploading_completed = true
                  uploaded_size = 0
                }
              }
            }
          }
          audio = file {
            id = 2408
            size = 57503744
            expected_size = 57503744
            local = localFile {
              path = ""
              can_be_downloaded = true
              can_be_deleted = false
              is_downloading_active = false
              is_downloading_completed = false
              download_offset = 0
              downloaded_prefix_size = 0
              downloaded_size = 0
            }
            remote = remoteFile {
              id = "CQACAgIAAyEFAASPIECWAAIcCWj0GxqWgNJsupFTCjfG_J5eqpUJAALCfgACNDYgS6v048W5uGwMNgQ"
              unique_id = "AgADwn4AAjQ2IEs"
              is_uploading_active = false
              is_uploading_completed = true
              uploaded_size = 57503744
            }
          }
        }
        caption = formattedText {
          text = "🕙 Не удалось найти плейлист за этот час. Навигация по дате, времени. Клик по хештегу отсортирует записи по этому каналу или всем чатам:
Навигация по дате, времени. Клик по хештегу отсортирует записи по этому каналу или всем чатам: #д07102025 #ч00 @recradio"
          entities = vector[5] {
            textEntity {
              offset = 78
              length = 7
              type = textEntityTypeBold {
              }
            }
            textEntity {
              offset = 174
              length = 7
              type = textEntityTypeBold {
              }
            }
            textEntity {
              offset = 233
              length = 10
              type = textEntityTypeHashtag {
              }
            }
            textEntity {
              offset = 244
              length = 4
              type = textEntityTypeHashtag {
              }
            }
            textEntity {
              offset = 249
              length = 9
              type = textEntityTypeMention {
              }
            }
          }
        }
      }
      reply_markup = replyMarkupInlineKeyboard {
        rows = vector[3] {
          vector[1] {
            inlineKeyboardButton {
              text = "Список Радиостанций"
              type = inlineKeyboardButtonTypeUrl {
                url = "https://t.me/recradio"
              }
            }
          }
          vector[1] {
            inlineKeyboardButton {
              text = "СЛУШАТЬ ПРЯМОЙ ЭФИР"
              type = inlineKeyboardButtonTypeUrl {
                url = "https://volna.top/radio-kommersant?tlg"
              }
            }
          }
          vector[1] {
            inlineKeyboardButton {
              text = "Поддержать"
              type = inlineKeyboardButtonTypeUrl {
                url = "https://t.me/recradio/4"
              }
            }
          }
        }
      }
    }

Оно состоит из отдельных элементов: текст, превьюшка, прикреплённый файл и т.д. Нас интересует файл:

Code: [Select]
          audio = file {
            id = 2408
            size = 57503744
            expected_size = 57503744
            local = localFile {
              path = ""
              can_be_downloaded = true
              can_be_deleted = false
              is_downloading_active = false
              is_downloading_completed = false
              download_offset = 0
              downloaded_prefix_size = 0
              downloaded_size = 0
            }
            remote = remoteFile {
              id = "CQACAgIAAyEFAASPIECWAAIcCWj0GxqWgNJsupFTCjfG_J5eqpUJAALCfgACNDYgS6v048W5uGwMNgQ"
              unique_id = "AgADwn4AAjQ2IEs"
              is_uploading_active = false
              is_uploading_completed = true
              uploaded_size = 57503744
            }
          }

Как видно, никаких ссылок никто никому не присылает. Приходит лишь идентификатор файла. Когда Миранда скачивает файл (автоматически или по запросу пользователя), она отправляет на сервер запрос "а дай мне файл с вот таким идентификатором" и в ответ получает файл.

Сейчас я запросил историю этого канала. Завтра попробую скачать какие-нибудь из этих эфиров. Также, попробую очистить и заново закачать историю и мы увидим на примере вон того события, поменяется ли хоть что-то в нём (вдруг идентификаторы протухают каким-то образом? тогда через несколько часов загрузка этого события с сервера будет содержать иные идентификаторы).
« Last Edit: 18 10 2025, 23:16:46 by dartraiden »
 
The following users thanked this post: Alex79

Offline dartraiden

Re: Протокол Telegram
« Reply #198 on: 19 10 2025, 07:49:45 »
Ага, прошло 8 часов и при скачивании файла получаем начало закачки и следом is_downloading_active = false, что означает, что закачка почему-то прекратилась.
 

Offline dartraiden

Re: Протокол Telegram
« Reply #199 on: 28 10 2025, 14:55:00 »
Исправлено в версии в разработке.

P.S. поддержка BasicHistory прекращена, NewStory уделывает его по всем возможностям.
« Last Edit: 28 10 2025, 18:44:15 by dartraiden »
 
The following users thanked this post: Alex79

Offline Thug

Re: Протокол Telegram
« Reply #200 on: 15 12 2025, 23:55:02 »
Заметил, что у меня в списке многие контакты дублируются. Один и тот же ник, один и тот же номер. Я могу писать на любой контакт - человек получит моё сообщение. А вот приходят сообщения с какого-то одного. Как исправить это задвоение? Просто поудалять лишние?
 

Offline dartraiden

Re: Протокол Telegram
« Reply #201 on: 16 12 2025, 00:02:34 »
Для начала можно экспортировать каждый из них в ini и сравнить отличия.
Нет уверенности, что удаление рандомного контакта не сотрёт его с сервера.
 

Offline Thug

Re: Протокол Telegram
« Reply #202 on: 16 12 2025, 02:03:28 »
Отличие в том, что у одного контакта есть такой параметр, а у другого нет

[Ignore]
Mask1=d72

Удалил короче оба, начал новую переписку в телеге - в миранде подтянулся один, пока не задваивается.

Да, удаление контакта через меню удаляет его и на сервере, даже когда убираешь галку "удалить контакт с сервера".
И функция "Загрузить историю с сервера" то срабатывает, то нет. Не понятно, от чего это зависит.
Кривовато пока всё работает  :-\
« Last Edit: 16 12 2025, 02:05:04 by Thug »
 

Offline dartraiden

Re: Протокол Telegram
« Reply #203 on: 16 12 2025, 06:08:49 »
Да, удаление контакта через меню удаляет его и на сервере, даже когда убираешь галку "удалить контакт с сервера".
Удаляет с сервера контакт (раздел "Контакты" в оф. клиенте) или чат с человеком, который не в "Контактах"?
« Last Edit: 16 12 2025, 06:31:09 by dartraiden »
 

Offline Thug

Re: Протокол Telegram
« Reply #204 on: 16 12 2025, 06:22:03 »
Удаляется чат*, хотя галка "удалить историю с сервера" при удалении не стоит.
 

Offline dartraiden

Re: Протокол Telegram
« Reply #205 on: 16 12 2025, 06:23:36 »
Просто на Миранду это всё плохо ложится, т.к. в Миранде наличие привата подразумевает наличие контакта в базе. Не бывает в Миранде привата без контакта. А с точки зрения сервера очень даже бывает (мне писнул незнакомец - что ж теперь, его сразу контактом считать? он тогда на мобилке попадёт в адресную книгу мобилки, а нафига он там?).

Поэтому мы вынуждены вставлять всякие костыли.
« Last Edit: 16 12 2025, 06:25:40 by dartraiden »
 

Offline dartraiden

Re: Протокол Telegram
« Reply #206 on: 16 12 2025, 06:27:55 »
Удаляется чат*, хотя галка "удалить историю с сервера" при удалении не стоит.
Выглядит как баг.

В теории, если удаление истории не выставлено, стираться должен лишь контакт из базы Миранды, на сервер вообще ни слова про это не должно улететь.

Если галка про историю выставлена, то (если смотреть на результат из оф. клиента) должен стереться чат с сервера (всегда) и контакт с сервера (если он в "Контактах")
« Last Edit: 16 12 2025, 06:30:52 by dartraiden »