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
новенький
 
Сообщения: 11
Зарегистрирован: 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
энтузиаст
 
Сообщения: 611
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Telegram bot API

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

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

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

Re: Telegram bot API

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

Пожалуйста, обращайтесь
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 611
Зарегистрирован: 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
новенький
 
Сообщения: 11
Зарегистрирован: 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
энтузиаст
 
Сообщения: 611
Зарегистрирован: 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
постоялец
 
Сообщения: 215
Зарегистрирован: 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
энтузиаст
 
Сообщения: 611
Зарегистрирован: 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
новенький
 
Сообщения: 11
Зарегистрирован: 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
энтузиаст
 
Сообщения: 611
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Пред.

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

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

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

Рейтинг@Mail.ru