Локальный Telegram Bot API Server

Просмотров: 10038Комментарии: 6
ВкусняшкиWindowsLinuxfor Dummies

Ну что, в течении последнего месяца я плотненько подсел на написание ботов для telegram. И да, про ботов в интернете очень много информации, особенно про ботов написанных на питоне.

Небольшое лирическое отступление, так вот сложилось, что у меня огромная нелюбовь к питону, ну вот не могу я нормально относиться к языкам программирования с таким синтаксисом как у питона, когда все виды скобок это одно и тоже, когда нельзя использовать знаки табуляции, а 2 пробела это тру.

Так вот в качестве первого проекта для изучения азов в написании ботов я выбрал написать загрузчик видеоконтента с популярных видеохостингов хостингов (благо есть yuotube-dl). Но тут появился ньюанс. Как правило видеофайлы весят много, а публичный API для ботов не позволяет грузить файлы более 50Mb.

И тут возник вопрос, а как работают все публичные боты? Ответ нашелся прям на сайте самой телеги.

Если необходимо ботом грузить файлы больше 50Mb, необходимо использовать свой личный bot api сервер, тогда ограничения на бота накладываются аналогичные как и на клиента.

  • Скачивать файлы без ограничения размера.
  • Загружать файлы размером до 2000 МБ.
  • Загружать файлы, используя их локальный путь.
  • Использовать URL-адрес HTTP для webhook.
  • Использовать любой локальный IP-адрес для webhook.
  • Использовать любой порт для webhook.
  • Установить max_webhook_connections до 100000.
  • Использовать абсолютный локальный путь как значение поля file_path без необходимости загрузки файла после запроса getFile.
  • Один минус, Telegram Bot API Server распространяется только в виде исходного кода, ну это и плюс, можно собрать и под специфическую платформу, но для легкого старта в понимании увы, нет.

    Для себя я собрал по началу под Linux x64, для сборки необходимо минимум 4Gb ОЗУ, для запуска достаточно 512Mb.

    Вторым шагом собрал под Windows x86 (32 bit) и x64, скачать Telegram Bot API Server можно ниже

    Запуск очень прост

    telegram-bot-api.exe --api-id=xxx --api-hash=xxx --http-port=8080 --http-stat-port 8090 --dir=C:\TMP\data --temp-dirC:\TMP\tmp

    Обязательные аргументы api-id и api-hash можно получить на https://my.telegram.org

    Для самостоятельной сборки есть отличный пошаговый мануал.

    Собственно наверное на сегодня и все. Дальше расскажу про ботов.

    Комментариев: 6 RSS

    1 Олег 17-12-2022 21:44

    Здравствуйте, пытаюсь настроить свой сервер, telegram-bot-api у меня запускается исправно. Но когда я запускаю самого бота, мне выдает ошибку

    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webHookController' defined in URL [jar:file:/home/kartohhka/bots/portfolio-bot.jar!/BOOT-INF/classes!/kartohhka/bot/WebHookController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'telegramBot' defined in kartohhka.bot.appconfig.BotConfig: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [kartohhka.bot.appconfig.botapi.PortfolioTelegramBot]: Factory method 'telegramBot' threw exception; nested exception is Error executing org.telegram.telegrambots.meta.api.methods.updates.GetWebhookInfo query: [404] Not Found

    Не могли бы вы показать пример вашего кода, когда вы задаете вебхук и переменную baseUrl

    2 OlannMK 27-12-2022 13:22

    Олег,

    Я делал для себя только пуллинг бота. Как с этим работать есть все в официальной документации. Если бот переходил с публик api на частное, то предварительно нужно удалить ранее зарегистрированные хуки и отвязать бота от паблика. А ещё нужно убедиться в наличии сетевого доступа от сервера к боту.

    3 Алексей 06-09-2023 15:51

    Олег, а можно поподробней, что делать с этим сервером? Как запустить и увязать с ботом?

    4 OlannMK 06-09-2023 18:14

    Алексей,

    Сервер запускать локально, бота натравливать не на api.telegram а на ip вашей машины, на которой запущен сервис. Подробнее тут https://core.telegram.org/bots/api

    5 Аноним 06-09-2023 21:49

    Olann, ответьте еще пжс на такой вопрос, то есть мне нужно предварительно выполнить проброс портов и настройка роутера для внешнего доступа, а так же сделать это все по защищенному ssl?

    6 OlannMK 11-09-2023 23:57

    Аноним,

    TDlib можно запускать локально. По умолчанию работает по http порту, по идее можно обернуть в SSL например через nginx. Своего бота натравливаете на ip адрес TDlib. Доступ из Интернет к TDLib Не нужен, но ему для связи с серверами телеграмм Интернет нужен.

    Оставьте комментарий!

    grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

    Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

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

    (обязательно)