Страница 3 из 6

Re: Telegram bot API

СообщениеДобавлено: 02.06.2022 18:39:29
ssm78
Ichthyander, честно говоря, не силен в обновлении Лазаруса. Ставил из репозитория, который идёт с raspbian os.

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

Поразбираюсь дальше. Вроди бы логика не замудреная.

Re: Telegram bot API

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

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

Re: Telegram bot API

СообщениеДобавлено: 02.06.2022 21:10:08
ssm78
Ух, шаманство :shock:
Заработало!

Ichthyander, спасибо!

Re: Telegram bot API

СообщениеДобавлено: 04.06.2022 18:29:56
Ichthyander
Пожалуйста, обращайтесь

Re: Telegram bot API

СообщениеДобавлено: 05.06.2022 20:12:18
ssm78
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;

Re: Telegram bot API

СообщениеДобавлено: 05.06.2022 20:56:05
Ichthyander
Все верно, только все это можно сделать еще в Паскаль стиле, если конечно по какой-то причине выгодно именно подавать на вход процедуры клавиатуру в виде 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;

Re: Telegram bot API

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

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

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

Re: Telegram bot API

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

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

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

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

Кстати, требования к подобным программу кажется усилились. К примеру, обязательный показ рекламы и т.д. В некоторым смысле и актуальность.

Re: Telegram bot API

СообщениеДобавлено: 04.09.2022 18:41:55
ssm78
Уважаемый, Ichthyander.

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

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

Re: Telegram bot API

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

Re: Telegram bot API

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

Re: Telegram bot API

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

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

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

Сложно сказать наверняка, но я почти уверен, что нужно установить библиотеку SSL OpenSSL (скорее всего примерно такая: libssl, libssl-dev)

Re: Telegram bot API

СообщениеДобавлено: 29.11.2022 17:06:14
slyubez
Попробуйте логгирование и перехват ошибки. Также в самом боте есть встроенное логгирование. Наверняка должно показать, в чем причина.

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

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

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

Re: Telegram bot API

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

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

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

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

А, имелось ввиду override видимо, а логгер свой: кажется понял

Re: Telegram bot API

СообщениеДобавлено: 30.11.2022 20:02:32
slyubez
А зачем, кстати? Интересно что имеется ввиду.

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