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

Telegram bot API

СообщениеДобавлено: 15.11.2017 16:32:51
Ichthyander
Пишу класс для работы с Telegram бот API fp-telegram и телеграмм плагин для BrookFramework.
Библиотека кроссплатформенна, использовать можно не только в веб, но и в десктопных приложениях.
Особенно удобна будет тем, кто имеет веб-сервис или сайт на FreePascal и хочет добавить телеграм интерфейс для юзабилити сервиса. Для десктопных приложений это может быть система мгновенных уведомлений через телеграмм непосредственно пользователю и прочее.
Просьба, сообщать о найденных багах, давать советы. Ну, и самое главное, почему я разместил этот класс публично, надеюсь кто-то присоединится к проекту.

Re: Telegram API

СообщениеДобавлено: 25.11.2017 13:00:01
Ichthyander
Для удобства дальнейшей работы библиотеки (не в обиду создателю) форкнул TGBotLazarus в https://github.com/Al-Muhandis/fp-telegram

Re: Telegram API

СообщениеДобавлено: 11.12.2017 20:28:31
Ichthyander
fp-telegram: Добавлен Long Polling для получения обновлений помимо вебхуков, которые я уже использую. Не особо тестил, потому как для меня удобнее только webhook.
Но для тех, кто не хочет заморачиваться с написанием веб приложений хороший вариант - это написание десктопного [или консольного или службы] приложения для работы c Telegram Bot API. В этом случае можно обойтись получением обновлений с помощью longpolling. [Лично мне не нравится этот метод, единственное полезное применение, когда не хочешь или не можешь установить вебхук]
/EXAMPLES/: Добавлены простые готовые примеры для показа как работает longpolling. Многопоточный вариант и без потоков совсем простой (GETmE)
brook-telegram: адаптировал библиотеку для работы с brook 3.9.9...
Также надеюсь, что кто-то присоединится к проекту ;)

Re: Telegram API

СообщениеДобавлено: 13.02.2018 12:06:13
Ichthyander
1. Написал на скорую руку краткую инструкцию по созданию бота в телеграмм на основе библиотеки. https://github.com/Al-Muhandis/brook-telegram/wiki
2. Дописываю функционал инлайн режима для ботов

Re: Telegram bot API

СообщениеДобавлено: 01.08.2018 13:10:04
erekepost
Спасибо за прекрасную работу!
Но для тех, кто не хочет заморачиваться с написанием веб приложений хороший вариант - это написание десктопного [или консольного или службы] приложения для работы c Telegram Bot API. В этом случае можно обойтись получением обновлений с помощью longpolling. [Лично мне не нравится этот метод, единственное полезное применение, когда не хочешь или не можешь установить вебхук]

Я как раз не хотел заморачиваться)) Но пример приложения зависает после запуска((( А после перезапуска - принимает тестовое сообщение, которое отправлено при предыдущем запуске.
Что посоветуете?

Re: Telegram bot API

СообщениеДобавлено: 02.08.2018 11:17:46
Ichthyander
Спасибо
Вы в России живете? Я имел ввиду нет ли проблем с блокировкой? И попробуйте более простой пример с простой отправкой сообщений SimpleSendMessage. Он работает?
По поводу LongPollingDesktop:
Вроде не зависает. Были некоторые баги, но с другим связано. Тем не менее, попробуйте обновить репозитарий. Я закоммитил последние изменения

Re: Telegram bot API

СообщениеДобавлено: 08.08.2018 21:00:07
erekepost
Пример с последнего коммита уже не зависет, спасибо))
Подскажите, почему последнее сообщение повторяется постоянно, это нужно остановить программно, или это коллизия какая то у меня?
Изображение

Добавлено спустя 19 минут 36 секунд:
Не подскажете метод пирема файлов?

Re: Telegram bot API

СообщениеДобавлено: 09.08.2018 02:33:32
Ichthyander
erekepost писал(а):Пример с последнего коммита уже не зависет, спасибо))
Подскажите, почему последнее сообщение повторяется постоянно, это нужно остановить программно, или это коллизия какая то у меня?

В последнем коммите затесался баг. Обновите репозитарий.
erekepost писал(а):Не подскажете метод пирема файлов?

Вы, к примеру, можете добавить обработчик на событие OnReceiveMessage у бота в потоке класса TProcessorThread на получение обновления типа message, у которого есть свойство document (или video/photo/audio, если это соответственно видео/фото/аудио). Дальше будут поле file_id. Значение поля используем при отправки команды getfile. В ответ сервер пришлет <file_path>. Путь для скачивания файла, который пользователь отправил боту, соответственно, будет https://api.telegram.org/file/bot<token>/<file_path>

Re: Telegram bot API

СообщениеДобавлено: 08.12.2018 20:57:34
Ichthyander
Добавлены несколько тестов.
Добавлены возможность отправлять сообщение от бота в процедурном стиле (без создания объектов).
Код: Выделить всё
{ Procedure style method to send message from Bot to chat/user }
function TgBotSendMessage(const AToken: String; chat_id: Int64; const AMessage: String;
  out AReply: String;
  ParseMode: TParseMode = pmDefault; DisableWebPagePreview: Boolean=False;
  AReplyMarkup: TReplyMarkup = nil; ReplyToMessageID: Integer = 0): Boolean;

В Brook-telegram добавлены возможности вывода статистики: количество принятых событий, количество уникальных пользователей

Re: Telegram bot API

СообщениеДобавлено: 18.03.2019 22:52:40
Ichthyander
1. Переработал демо пример LongPollingDesktop: убрал ненужные потоки, оставив один для обработки приходящих обновлений в синхронном режиме. Для демонстрации достаточно. А кому потребуется асинхронная обработка обновлений в любом случае лучше организовать свой потоковый пул или другую многопоточную работу с ботом. Обычно хватает синхронной за глаза.
2. Добавлены прочие методы API
3. Добавлен платежный API для телеграм ботов. Теперь можно организовать прием оплаты непосредственно в боте.
4. Другие исправления и улучшения

Re: Telegram bot API

СообщениеДобавлено: 20.03.2019 08:57:36
wadman
Рекомендую добавить в lpk такую строчку

<UsageOptions>
<CustomOptions Value="-dUseCThreads" />
<UnitPath Value="$(PkgOutDir)" />
</UsageOptions>

Для многопоточки в никсах опция будет автоматом включаться.

Добавлено спустя 7 минут 4 секунды:
На вскидку не увидел поддержку прокси... Еще нет такого функционала?

Re: Telegram bot API

СообщениеДобавлено: 20.03.2019 10:32:10
Ichthyander
wadman писал(а):<UsageOptions>
<CustomOptions Value="-dUseCThreads" />
<UnitPath Value="$(PkgOutDir)" />
</UsageOptions>


Не знал, что ключи можно добавлять в либу. В любом случае мне кажется избыточным. Теоретически библотеку можно использовать и в основном потоке и приложение будет без многопоточности. А сама либа непосредственно не использует потоки и не запускает. В пример многопоточность используется, но там кажется везде проставлены эти ключи -dUseCThreads. Обычно те, кто кодят под линукс сам добавляют этот ключ в свойства проекта.
Кстати, а будет ли смысл в ключе, если он просто включает дефайны в файле .lpr и если их там нет, то и ключ не применится. Я конечно могу ошибаться

Добавлено спустя 11 минут 45 секунд:
wadman писал(а):На вскидку не увидел поддержку прокси... Еще нет такого функционала?

Я использовал нативный THTTPClient, который пока имеет ограниченный функционал для проксирования, даже в транковой версии.
Я на форуме тут поднимал эту тему по поводу поддержки работы HTTP клиентов с защищенными сайтами через HTTPS прокси на Линукс. Как будет время отделю реализацию либы от HTTP клиента и добавлю базовый класс для работы с этим и можно будет зарегистрировав нужный клиент (нативный, синапс, инди10) и тогда при подключении именно инди можно будет использовать прокси. Как будет время реализую это, как я сделал в другой библиотеке

Как можно обойти это ограничение:
1. Запускать на сервере за пределом РФ
2. Сделать простейший свой эндпоинт на сервере, чтобы работы с API в пределах РФ. К примеру, с нгинком я сделал так https://gist.github.com/Al-Muhandis/21b ... 26312b6b6e

Re: Telegram bot API

СообщениеДобавлено: 20.03.2019 13:53:07
wadman
Ichthyander писал(а):Кстати, а будет ли смысл в ключе, если он просто включает дефайны в файле .lpr и если их там нет, то и ключ не применится.

В проекте по умолчанию ifdef есть, а их удаление на совести программиста.
Ichthyander писал(а):Как можно обойти это ограничение:

Я, наверное, скорее имел в виду mtproto прокси, который еще и трафик шифрует от DPI. Обычные прокси легко и быстро блокируются.
Я проверил, вчера работал, а сегодня - уже нет. Сам телеграм работает через свои прокси как-то хитро.

Re: Telegram bot API

СообщениеДобавлено: 20.03.2019 14:16:18
Ichthyander
wadman писал(а):Я, наверное, скорее имел в виду mtproto прокси, который еще и трафик шифрует от DPI. Обычные прокси легко и быстро блокируются.
Я проверил, вчера работал, а сегодня - уже нет. Сам телеграм работает через свои прокси как-то хитро.

Понятно MTProto не изучал, но думал это годится только клиентов телеграмм, а не для работы ботов. По поводу блокировки я поэтому в том числе и имел ввиду, что лучше свой прокси сделать, даже возможно обычное зеркало, которое переадресует ПОСТ и ГЕТ запросы на сайт телеграмм и подставляет их при запросе на Ваш личный эндпоинт

Добавлено спустя 20 минут 33 секунды:
К тому, что Ваш личный прокси, даже работающий как зеркало никто банит не будет, просто потому, что им пользуетесь только Вы и о нем никто не знает

Добавлено спустя 37 секунд:
Более того у РКН задача блокировать клиенты телеграмм, а не боты ;)

Re: Telegram bot API

СообщениеДобавлено: 20.03.2019 14:54:42
wadman
Ichthyander писал(а):Более того у РКН задача блокировать клиенты телеграмм, а не боты

Думаю, что у них задача блокировать любую активность телеграм. У меня сервер в РФ, да и бот нужен практически в личных целях, потому прокси актуален.