Telegram bot API

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

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

Telegram bot API

Сообщение Ichthyander » 15.11.2017 16:32:51

Пишу класс для работы с Telegram бот API fp-telegram и телеграмм плагин для BrookFramework.
Библиотека кроссплатформенна, использовать можно не только в веб, но и в десктопных приложениях.
Особенно удобна будет тем, кто имеет веб-сервис или сайт на FreePascal и хочет добавить телеграм интерфейс для юзабилити сервиса. Для десктопных приложений это может быть система мгновенных уведомлений через телеграмм непосредственно пользователю и прочее.
Просьба, сообщать о найденных багах, давать советы. Ну, и самое главное, почему я разместил этот класс публично, надеюсь кто-то присоединится к проекту.
Последний раз редактировалось Ichthyander 18.03.2019 23:00:11, всего редактировалось 4 раз(а).
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 685
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Telegram API

Сообщение Ichthyander » 25.11.2017 13:00:01

Для удобства дальнейшей работы библиотеки (не в обиду создателю) форкнул TGBotLazarus в https://github.com/Al-Muhandis/fp-telegram
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 685
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Telegram API

Сообщение Ichthyander » 11.12.2017 20:28:31

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

Re: Telegram API

Сообщение Ichthyander » 13.02.2018 12:06:13

1. Написал на скорую руку краткую инструкцию по созданию бота в телеграмм на основе библиотеки. https://github.com/Al-Muhandis/brook-telegram/wiki
2. Дописываю функционал инлайн режима для ботов
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 685
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Telegram bot API

Сообщение erekepost » 01.08.2018 13:10:04

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

Я как раз не хотел заморачиваться)) Но пример приложения зависает после запуска((( А после перезапуска - принимает тестовое сообщение, которое отправлено при предыдущем запуске.
Что посоветуете?
erekepost
незнакомец
 
Сообщения: 2
Зарегистрирован: 01.08.2018 13:03:36

Re: Telegram bot API

Сообщение Ichthyander » 02.08.2018 11:17:46

Спасибо
Вы в России живете? Я имел ввиду нет ли проблем с блокировкой? И попробуйте более простой пример с простой отправкой сообщений SimpleSendMessage. Он работает?
По поводу LongPollingDesktop:
Вроде не зависает. Были некоторые баги, но с другим связано. Тем не менее, попробуйте обновить репозитарий. Я закоммитил последние изменения
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 685
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Telegram bot API

Сообщение erekepost » 08.08.2018 21:00:07

Пример с последнего коммита уже не зависет, спасибо))
Подскажите, почему последнее сообщение повторяется постоянно, это нужно остановить программно, или это коллизия какая то у меня?
Изображение

Добавлено спустя 19 минут 36 секунд:
Не подскажете метод пирема файлов?
erekepost
незнакомец
 
Сообщения: 2
Зарегистрирован: 01.08.2018 13:03:36

Re: Telegram bot API

Сообщение Ichthyander » 09.08.2018 02:33:32

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

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

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

Re: Telegram bot API

Сообщение Ichthyander » 08.12.2018 20:57:34

Добавлены несколько тестов.
Добавлены возможность отправлять сообщение от бота в процедурном стиле (без создания объектов).
Код: Выделить всё
{ 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 добавлены возможности вывода статистики: количество принятых событий, количество уникальных пользователей
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 685
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Telegram bot API

Сообщение Ichthyander » 18.03.2019 22:52:40

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

Re: Telegram bot API

Сообщение wadman » 20.03.2019 08:57:36

Рекомендую добавить в lpk такую строчку

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

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

Добавлено спустя 7 минут 4 секунды:
На вскидку не увидел поддержку прокси... Еще нет такого функционала?
wadman
постоялец
 
Сообщения: 122
Зарегистрирован: 18.10.2016 15:54:28

Re: Telegram bot API

Сообщение Ichthyander » 20.03.2019 10:32:10

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

Re: Telegram bot API

Сообщение wadman » 20.03.2019 13:53:07

Ichthyander писал(а):Кстати, а будет ли смысл в ключе, если он просто включает дефайны в файле .lpr и если их там нет, то и ключ не применится.

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

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

Re: Telegram bot API

Сообщение Ichthyander » 20.03.2019 14:16:18

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

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

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

Добавлено спустя 37 секунд:
Более того у РКН задача блокировать клиенты телеграмм, а не боты ;)
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 685
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Telegram bot API

Сообщение wadman » 20.03.2019 14:54:42

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

Думаю, что у них задача блокировать любую активность телеграм. У меня сервер в РФ, да и бот нужен практически в личных целях, потому прокси актуален.
wadman
постоялец
 
Сообщения: 122
Зарегистрирован: 18.10.2016 15:54:28

След.

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

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

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

Рейтинг@Mail.ru