Telegram bot API

Планы, идеология, архитектура и т.п.

Модератор: Модераторы

Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

Ser9056 писал(а):причём без этих файлов совсем другая ошибка
А какая?
Ser9056 писал(а):На нём тоже такая же ошибка
Кстати, проверили: если скомпилировали на другом компьютере (к примеру, рабочем), то при отправки через интернет этого файла система может поставить скачано из интернета. В этом случае нужно разблокировать его (см. в свойствах файла .exe на целевом компьютере).
Второй момент важно проверить битность библиотек. Имеется ввиду битность скомпилированной программе (не ОС).
Если не поможет, напишите мне в телеграм @Renat_Suleymanov или в группу поддержки (english) https://t.me/fptelegram Решим проблему, самому стало интересно, в чем может быть причина
Ser9056
незнакомец
Сообщения: 7
Зарегистрирован: 30.03.2024 16:20:36

Сообщение Ser9056 »

Ichthyander писал(а):
Ser9056 писал(а):причём без этих файлов совсем другая ошибка
А какая?
Ser9056 писал(а):На нём тоже такая же ошибка
Кстати, проверили: если скомпилировали на другом компьютере (к примеру, рабочем), то при отправки через интернет этого файла система может поставить скачано из интернета. В этом случае нужно разблокировать его (см. в свойствах файла .exe на целевом компьютере).
Второй момент важно проверить битность библиотек. Имеется ввиду битность скомпилированной программе (не ОС).
Если не поможет, напишите мне в телеграм @Renat_Suleymanov или в группу поддержки (english) https://t.me/fptelegram Решим проблему, самому стало интересно, в чем может быть причина
вот такая ошибка без библиотек - https://ibb.co/mJshrNF

По поводу битности - копировал на домашнем компе в папку с примером бота и 32 и 64 битные dll'ки - результат одинаковый. Программу компилировать тоже пробовал и в 32 бита, и в 64 бита - та же ошибка.
При этом не пойму в чём проблема - компилирую же из одних исходников с одинаковыми библиотеками, что на работе, что дома.
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

А можно лог? Родилась еще одна догадка. А точно бот не работает? Иногда из-за нестабильности интернета или сам сервер телеграм делает сброс соединения или не отвечает на запрос - это норм ситуация, бот ее обрабатывает. В режиме релиз возникает ли ошибка и не работает ли сам бот в штатном режиме при этом?
Ser9056
незнакомец
Сообщения: 7
Зарегистрирован: 30.03.2024 16:20:36

Сообщение Ser9056 »

Ichthyander писал(а):А можно лог? Родилась еще одна догадка. А точно бот не работает? Иногда из-за нестабильности интернета или сам сервер телеграм делает сброс соединения или не отвечает на запрос - это норм ситуация, бот ее обрабатывает. В режиме релиз возникает ли ошибка и не работает ли сам бот в штатном режиме при этом?
Если речь про лог longpolling_demo.log, то вот его содержимое:
Receiver thread [2024-03-31 17:25:05.382 Info] Log started
Receiver thread [2024-03-31 17:25:05.382 Debug] Request for method "getUpdates": { "timeout" : 8 }
Receiver thread [2024-03-31 17:25:07.540 Error] [HTTPPostJSON] ESocketError: Connect to api.telegram.org:443 failed.
Receiver thread [2024-03-31 17:25:07.540 Debug] Request for method "getUpdates": { "timeout" : 8 }
Receiver thread [2024-03-31 17:25:08.297 Error] [HTTPPostJSON] ESocketError: Connect to api.telegram.org:443 failed.
Receiver thread [2024-03-31 17:25:08.297 Debug] Request for method "getUpdates": { "timeout" : 8 }
Receiver thread [2024-03-31 17:25:08.851 Error] [HTTPPostJSON] ESocketError: Connect to api.telegram.org:443 failed.
Receiver thread [2024-03-31 17:25:08.851 Debug] Request for method "getUpdates": { "timeout" : 8 }
Receiver thread [2024-03-31 17:25:09.358 Error] [HTTPPostJSON] ESocketError: Connect to api.telegram.org:443 failed.
Receiver thread [2024-03-31 17:25:09.358 Debug] Request for method "getUpdates": { "timeout" : 8 }
Receiver thread [2024-03-31 17:25:09.812 Error] [HTTPPostJSON] ESocketError: Connect to api.telegram.org:443 failed.
Receiver thread [2024-03-31 17:25:09.812 Debug] Request for method "getUpdates": { "timeout" : 8 }

Такая картина из-за того, что нажимаю кнопку "продолжить" в окне ошибки отладчика :)

Насчёт стабильности интернета - на компе стабильно работают сайты, всё открывается.

В режиме релиза тоже не работает. Просто нету сообщения об ошибке
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

Да, по логам видно, что соединение стабильно не проходит.
Если токен указан правильно, SSL библиотеки правильные, фаервол Windows не блокирует программу, то очень сложно понять в чем причина. Если есть возможность напишите мне все-таки телеграм, я тоже заинтересован разобраться в чем причина, может у кого такое же проявится.
Ser9056
незнакомец
Сообщения: 7
Зарегистрирован: 30.03.2024 16:20:36

Сообщение Ser9056 »

Проблема решилась использованием правильных DLL'ок.

Огромнейшее спасибо Ichthyander! 8)
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

Рад был помочь.

Стандартная проблема для классов Synapse и fphttpclient заключается в том, что для работы протокола https требуется библиотека OpenSSL. HTTPS-запросы обычно отправляются в обычном режиме, но если возникают проблемы с HTTPS-соединением, то вам необходимо добавить соответствующие библиотеки OpenSSL в папку с программой. Вы можете загрузить эти библиотеки по ссылке OpenSSL libs download.

Используйте требуемую разрядность библиотек для Windows
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

Реализованы новые функции (https://github.com/Al-Muhandis/fp-teleg ... 6f3344c056): Бот для бизнеса https://core.telegram.org/bots/features ... r-business

Что это значит? Используя библиотеку, вы можете прослушивать бизнес-соединения для загрузки, обрабатывать бизнес-сообщения и даже отправлять сообщения от имени пользователя с помощью бота.
xchgeaxeax
постоялец
Сообщения: 196
Зарегистрирован: 11.05.2023 02:51:40

Сообщение xchgeaxeax »

Здравствуйте. Спасибо за хороший модуль. Он сильно упрощает создание бота.
Но вот такой вопрос: Как получить подпись к файлу?
Как я понял подпись к файлу приходит в поле Caption, а не Text. Соответственно Message.Text пустое. А поля для получения Caption нету.
Остается только доставать эту подпись из Message.AsString
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

xchgeaxeax писал(а):Здравствуйте. Спасибо за хороший модуль. Он сильно упрощает создание бота.
Но вот такой вопрос: Как получить подпись к файлу?
Как я понял подпись к файлу приходит в поле Caption, а не Text. Соответственно Message.Text пустое. А поля для получения Caption нету.
Остается только доставать эту подпись из Message.AsString
Здравствуйте
Опять не увидел уведомления с форума
Итак, если еще актуально...

Не совсем понятен вопрос:
  • Вопрос про прилеты апдейтов от телеграм? (Ну то есть Вы отправляете, к примеру, файл, с подписью или без, и телеграм Вам отправляет апдейт типа TTelegramMessageObj). Так вот, у это класса есть свойство Caption, в котором и хранится, собственно, Caption к файлу.
  • Если вопрос, наоборот, про отправку файла ботом пользователю, то в процедуре sendDocument тоже есть параметр Caption для отправки.
  • Если речь про DesignTime компонент и коллбек OnReceiveMessageUpdate, который повторяет коллбек из RunTime класса, то там также есть параметр с типом TTelegramMessageObj со свойством Caption
xchgeaxeax
постоялец
Сообщения: 196
Зарегистрирован: 11.05.2023 02:51:40

Сообщение xchgeaxeax »

Спасибо. Это свойство в TTelegramMessageObj, а не в TTelegramAudio/TTelegramDocument/TTelegramPhotoSizeList/TTelegramVideo/TTelegramVoice.
Значит не так искал.
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

xchgeaxeax писал(а):Это свойство в TTelegramMessageObj, а не в TTelegramAudio/TTelegramDocument/TTelegramPhotoSizeList/TTelegramVideo/TTelegramVoice
Да, именно так. Обращайтесь, если что
xchgeaxeax
постоялец
Сообщения: 196
Зарегистрирован: 11.05.2023 02:51:40

Сообщение xchgeaxeax »

Здравствуйте. Еще один вопрос.

При изменении значения в поле TTelegramSender.Token программа через некоторое время завершается с кодом 1.
Изначально TTelegramSender.Create(EmptyStr), а в дальнейшем туда записывается валидный токен.

Если уничтожать объект изначально созданный с пустым токеном и создавать заново с валидным, то программа не завершается.
При этом поле TTelegramSender.Token доступно и для чтения и для записи напрямую. Возможно, стоит сделать его доступным только для чтения.
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

xchgeaxeax писал(а):При изменении значения в поле TTelegramSender.Token программа через некоторое время завершается с кодом 1.
Изначально TTelegramSender.Create(EmptyStr), а в дальнейшем туда записывается валидный токен.
Возможно, где-то происходит не потокобезопасное обращение к токену. К примеру, во время запроса. Если бот создается с пустым токеном, то ожидается, что присвоение токена боту произойдет, к примеру, на этапе инициализации, то есть точно до любых запросов или приема апдейтов с сервера
xchgeaxeax писал(а):Если уничтожать объект, изначально созданный с пустым токеном и создавать заново с валидным, то программа не завершается.
Опять-таки мало информации. Скорее всего бот у Вас запускается в отдельном потоке и ваше приложение ждет, когда оно завершится. Сложно сказать без понимания архитектуры вашей работы с ботом.
xchgeaxeax
постоялец
Сообщения: 196
Зарегистрирован: 11.05.2023 02:51:40

Сообщение xchgeaxeax »

Ichthyander писал(а):Опять-таки мало информации. Скорее всего бот у Вас запускается в отдельном потоке и ваше приложение ждет, когда оно завершится. Сложно сказать без понимания архитектуры вашей работы с ботом.
Да. Отдельная нитка, а прилетает токен из нитки с гуи. Пробовал синхронизировать и все равно вылет. Попробую обновлять данные внутри цикла опроса внутри нитки с ботом. Чтобы не было пересечения с getUpdatesEx

Добавлено спустя 32 минуты 27 секунд:
И действительно. Не завершается, если присвоение не пересекается с getUpdatesEx
Ответить