Telegram bot API

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

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

Re: Telegram bot API

Сообщение ssm78 » 02.06.2022 18:39:29

Ichthyander, честно говоря, не силен в обновлении Лазаруса. Ставил из репозитория, который идёт с raspbian os.

Пока попробую докопаться до причины.
Из того, что нашел, на моей малине срабатывает вот эта директива компиляции
{$IF FPC_FULLVERSION < 30200}{$DEFINE ExplSSL}{$else}{$DEFINE SSLOpenSockets}{$ENDIF}
из модуля tgfclhttpclientbroker.pas и дальше компилится код, у которого стоит {$IFDEF ExplSSL}. Похоже, что он не совсем рабочий.
Под windows компилится код с директивой {$IFDEF SSLOpenSockets}

Поразбираюсь дальше. Вроди бы логика не замудреная.
ssm78
новенький
 
Сообщения: 13
Зарегистрирован: 02.11.2021 12:32:50

Re: Telegram bot API

Сообщение Ichthyander » 02.06.2022 20:33:03

ssm78 писал(а):Ichthyander, честно говоря, не силен в обновлении Лазаруса. Ставил из репозитория, который идёт с raspbian os.

Рекомендую присмотреться к двум вариантам:
1) Вы можете использовать кросскомпиляцию из любой другой ОС, к примеру https://wiki.freepascal.org/Lazarus_on_ ... om_Windows
Для этого рекомендую использовать fpcupdeluxe
2) Если не ошибаюсь, то fpcupdeluxe работает и на малинке, а значит с его помощью можно установить любую версию Lazarus. Рекомендую текущую stable версию
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 686
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Telegram bot API

Сообщение ssm78 » 02.06.2022 21:10:08

Ух, шаманство :shock:
Заработало!

Ichthyander, спасибо!
ssm78
новенький
 
Сообщения: 13
Зарегистрирован: 02.11.2021 12:32:50

Re: Telegram bot API

Сообщение Ichthyander » 04.06.2022 18:29:56

Пожалуйста, обращайтесь
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 686
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Telegram bot API

Сообщение ssm78 » 05.06.2022 20:12:18

Ichthyander, заранее извиняюсь за глупый вопрос.
Едва начал изучать Telegram API, пока не до конца понимаю, что к чему.

Мне нужно, что бы в ответ на запрос пользователя, бот прислал клавиатуру с несколькими вариантами выбора.
В интернетах пишут, что нужно прислать JSON вот такого вида:

"reply_markup": { "keyboard": [ [{"text": "FIRST_BUTTON"}], [{ "text": "SECOND_BUTTON"}], [{ "text": "THIRD_BUTTON"}] ]}

Отправляю через метод sendMessage и вижу ответ в мессенджере просто как текст. Что, видимо, логично.
Можете подсказать, что я не так делаю?

Добавлено спустя 16 минут 58 секунд:
Сам спросил, сам и отвечу

procedure TTGSupportSvc.SetPropCommandHandler(ASender: TObject; const ACommand: String; AMessage: TTelegramMessageObj);
var
replyMarkup : TReplyMarkup;

begin
replyMarkup := TReplyMarkup.CreateFromString(' {"keyboard": [[{"text": "FIRST_BUTTON"}], [{ "text": "SECOND_BUTTON"}], [{ "text": "THIRD_BUTTON"}]]}');
fReceiverThread.Bot.sendMessage('select service',pmDefault,False,replyMarkup);
replyMarkup.Free();
end;
ssm78
новенький
 
Сообщения: 13
Зарегистрирован: 02.11.2021 12:32:50

Re: Telegram bot API

Сообщение Ichthyander » 05.06.2022 20:56:05

Все верно, только все это можно сделать еще в Паскаль стиле, если конечно по какой-то причине выгодно именно подавать на вход процедуры клавиатуру в виде JSON строки.
Код: Выделить всё
procedure TTGSupportSvc.SetPropCommandHandler(ASender: TObject; const ACommand: String; AMessage: TTelegramMessageObj);
var
replyMarkup : TReplyMarkup;

begin
replyMarkup := TReplyMarkup.Create;
replyMarkup.ReplyKeyboardMarkup:=TKeybordButtonArray.Create;
replyMarkup.ReplyKeyboardMarkup.Add.AddButtons(['FIRST_BUTTON', 'SECOND_BUTTON', 'THIRD_BUTTON']);
fReceiverThread.Bot.sendMessage('select service',pmDefault,False,replyMarkup);
replyMarkup.Free();
end;
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 686
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Telegram bot API

Сообщение jsa » 09.08.2022 16:26:12

Ichthyander писал(а):Если имеется ввиду телеграм мессенджер, то для него требуется другой API (telegram client API), такого нет ни в Delphi, ни FPC пока, к сожалению. Теоретически можно импортировать TdLib через C-заголовки, но я это не умею

Добавлено спустя 59 минут 6 секунд:
https://github.com/tdlib/td

Там появилась библиотека с тестовым проектом
https://github.com/dieletro/tdlib-lazarus
jsa
постоялец
 
Сообщения: 282
Зарегистрирован: 28.11.2017 13:46:04

Re: Telegram bot API

Сообщение Ichthyander » 09.08.2022 21:32:14

jsa писал(а):
Ichthyander писал(а):Если имеется ввиду телеграм мессенджер, то для него требуется другой API (telegram client API), такого нет ни в Delphi, ни FPC пока, к сожалению. Теоретически можно импортировать TdLib через C-заголовки, но я это не умею

Добавлено спустя 59 минут 6 секунд:
https://github.com/tdlib/td

Там появилась библиотека с тестовым проектом
https://github.com/dieletro/tdlib-lazarus

Я знаю об этом проекте. Мы с ним общались. ВРоде он даже что-то использовал в своем проекте из моего. Но он к сожалению сырой пока по отзывам. Если когда-нибудь доберусь попробую расширить свою либу до клиентского API. Особенно, если будут запросы на разработку )

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

Re: Telegram bot API

Сообщение ssm78 » 04.09.2022 18:41:55

Уважаемый, Ichthyander.

Если не сложно подскажите, как быть в такой ситуации.

На устройстве, где крутится бот с Вашим компонентом, предусмотрена возможность отправки команды на принудительную перезагрузку.
Устройство работает на ОС Raspbian. Соответственно перезагрузку выполняю командой 'sudo reboot'.
Пока я использовал Raspbian в в стандартной комплектации, всё работало нормально.
После перехода на Raspbian Lite (только командная строка без визуальной части) я словил ситуацию, когда устройство начало перезагружаться в цикле.
Видимо, процесс с ботом прибивается системой раньше, чем он успевает пометить сообщение в телеграме как прочитанное.
Можете подсказать, в какую сторону копнуть, что бы поправить этот момент?
ssm78
новенький
 
Сообщения: 13
Зарегистрирован: 02.11.2021 12:32:50

Re: Telegram bot API

Сообщение Ichthyander » 05.09.2022 15:05:07

Хотелось бы чуть больше информации.
1) Самое лучшее конечно - это поставить дополнительные логи. В классе TTelegramSender и его наследниках это делается так: Bot.Logger:=TEventLog.Create(nil); с соответствующими настройками: AppendCOntent:=True и т.д. Также для Бота лучше будет выставить DebugLog:=True для полноты отладочной информации. Посмотреть содержимое лога
Если же погадать, то возможно причина какая-то общая. К примеру:
2) Это не могло быть связано как то с тем, что ваш сервис использует Synchronize, который срабатывает в общем случае только для десктопных приложений (потребуется небольшая доработка, чтобы это работало)?
3) Раньше он тоже может работал не совсем корректно, но просто процесс успевал закрыться обычным способом перед перезагрузкой. Теперь же ОСь это делает быстро и ваш сервис не успевает отправить ответ телеграм серверу, что сообщение принято.
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 686
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Telegram bot API

Сообщение slyubez » 29.11.2022 16:13:08

Приветствую. Огромное спасибо за эту обертку для BotAPI, очень выручила.
Возник такой вопрос. Есть моя софтина-бот с этой оберткой, крутившаяся до недавнего времени на серверной Бубунте 20 х64, все работало отлично. Потом понадобилось заменить железо на amd64 и поставить серверную Бубунту 22 в минимальной комплектации, добавив к ней ufw. На обновленной машине тот же бот работать отказывается, говоря, что не проходит выполнение метода getMe. К сожалению, отладка софтины на боевом сервере не удается. Пробовал выполнять из командной строчки wget к серверу t.me - это проходит. Нужны ли какие-то дополнительные системные пакеты конкретно под эту обертку? Может быть, там есть какие-то спецпорты, которые надо открыть (хотя отключение ufw не помогает)? На моем ПК разработчика всё четко работает.
slyubez
постоялец
 
Сообщения: 174
Зарегистрирован: 31.03.2015 08:44:07

Re: Telegram bot API

Сообщение Ichthyander » 29.11.2022 16:36:40

slyubez писал(а):Приветствую. Огромное спасибо за эту обертку для BotAPI, очень выручила.

Рад, что обертка оказалась полезной
slyubez писал(а):К сожалению, отладка софтины на боевом сервере не удается

Попробуйте логгирование и перехват ошибки. Также в самом боте есть встроенное логгирование. Наверняка должно показать, в чем причина.
slyubez писал(а):Нужны ли какие-то дополнительные системные пакеты конкретно под эту обертку? Может быть, там есть какие-то спецпорты, которые надо открыть (хотя отключение ufw не помогает)? На моем ПК разработчика всё четко работает.

Сложно сказать наверняка, но я почти уверен, что нужно установить библиотеку SSL OpenSSL (скорее всего примерно такая: libssl, libssl-dev)
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 686
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Telegram bot API

Сообщение slyubez » 29.11.2022 17:06:14

Попробуйте логгирование и перехват ошибки. Также в самом боте есть встроенное логгирование. Наверняка должно показать, в чем причина.

Сейчас сделал наследников методов DebugMessage, ErrorMessage. Посмотрю, что покажет. Ни в системном логе, ни в логе ufw нет ничего подозрительного.
Сложно сказать наверняка, но я почти уверен, что нужно установить библиотеку SSL OpenSSL (скорее всего примерно такая: libssl, libssl-dev)

И это сейчас гляну. Небольшой опыт геморроя после установки серверной убунты в минимальной комплектации показал, что там нет даже таких базовых вещей, как tzdata, из-за чего я получил сбой часового пояса. Спасибо!

Добавлено спустя 1 час 15 минут 54 секунды:
В общем, дело оказалось в отсутствии почему-то именно libssl-dev. После ее установки пошли отладочные сообщения, и все заработало. Большое спасибо. Реально крутая работа. Еще найти бы что-то подобное под WhatsApp для Lazarus...
slyubez
постоялец
 
Сообщения: 174
Зарегистрирован: 31.03.2015 08:44:07

Re: Telegram bot API

Сообщение Ichthyander » 29.11.2022 23:00:11

Код: Выделить всё
В общем, дело оказалось в отсутствии почему-то именно libssl-dev

Ну так я и написал выше: скорее всего именно в OpenSSL ошибка.
Код: Выделить всё
Сейчас сделал наследников методов DebugMessage, ErrorMessage.

А зачем, кстати? Интересно что имеется ввиду.
Добавлено спустя 9 минут 46 секунд:
Код: Выделить всё
Сейчас сделал наследников методов DebugMessage, ErrorMessage.

А зачем, кстати? Интересно что имеется ввиду.

А, имелось ввиду override видимо, а логгер свой: кажется понял
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 686
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Telegram bot API

Сообщение slyubez » 30.11.2022 20:02:32

А зачем, кстати? Интересно что имеется ввиду.

Это наследники для логирования этих сообщений, подобные тем, что в примере getMe. Рассчитывал увидеть в логе какие-то сообщения об ошибках при провале отправки getMe, но перед запуском решил установить библиотеку и в итоге при запуске получил успешное подключение и замусоренные логи :).
slyubez
постоялец
 
Сообщения: 174
Зарегистрирован: 31.03.2015 08:44:07

Пред.След.

Вернуться в Разработки на нашем сайте

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru