Skip to content

TNT-Bots/tnt-tg-bot

Repository files navigation

Russian | English

luacheck License

Описание

tnt-tg-bot - это библиотека, написанная на Lua для платформы Tarantool, которая предоставляет интерфейсы для работы с Telegram Bot API.

Note

Для production используёте последнюю из стабильных веток, или последний релиз.

В ветке master API может быть обновлён или быть частично совместимым с релизной версий.

Warning

В master ветку могут прилетать force push, hard reset и иногда ошибки.

Пользуйтесь стабильной веткой, либо последними релизами.

Screenshot

Особенности

  • Простата и ясность интерфейсов
  • Асинхронная обработка запросов
  • Встроенная поддержка работы с платежами в Telegram Stars
  • Встроенные методы для обработки команд, в том числе callback
  • Вы сами даёте названия событиям, из коробки у вас только - bot.events.onGetUpdate(ctx)
  • Простая работа с WebApp
  • [TWA] Проверка валидности initData модулем - bot/init.lua
  • [TWA] Реализованна поддержка ручек (routes)
  • Поддержка аннотаций LDoc
  • Большое колличество примеров

Оглавление

  1. Showcase
  2. Установка
  3. Примеры
  4. Структура
  5. Интерфейсы
  6. Рекомендации
  7. Генерация документации

  • Niko Bot - Бот с мини играми, множеством команд, питомцами и модерацией групп
    Открыть скриншот screenshot
  • Talking Hooligan - Популярный бот для чатов, присылает смешные и глупые сообщения

Автоматическая

  1. Установите git, curl, lua 5.1 и luarocks.
  2. (опционально) если нужна работа с WebApp:
    Потребуется установить rock пакет luaossl, для него в вашем дистрибутиве -
    установите заголовочные файлы для lua 5.1 и openssl.
  3. Установите tarantool
  4. Выполните скрипт автоматической установки необходимых пакетов
bash tnt-tg-bot.pre-build.sh
  1. В случае проблем, перейти к ручной установки.

Note

Для успешной сборки luaossl - биндинга к OpenSSL, потребуются заголовочные файлы OpenSSL и Lua 5.1. В Ubuntu можно установить, выполнив sudo apt install libssl-dev liblua5.1-0-dev. luaossl нужен для работы модуля bot/libs/parseInitData.lua, модуль нужен для обработки данных веб Mini App. https://core.telegram.org/bots/webapps#validating-data-received-via-the-mini-app

Ручная

  1. Установите git, curl, lua 5.1 и luarocks.
  2. Установите tarantool
  3. (опционально) если нужна работа с WebApp:
    Потребуется установить rock пакет luaossl, для него в вашем дистрибутиве -
    установите заголовочные файлы для lua 5.1 и openssl.
  4. Установка необходимых пакетов с помощью luarocks
  • HTTP клиент/сервер (обязательно)
    luarocks install --local --tree=$PWD/.rocks --server=https://rocks.tarantool.org/ http
  • Multipart Post обработчик (обязательно)
    luarocks install --local --tree=$PWD/.rocks --lua-version 5.1 lua-multipart-post 1.0-0
  • Биндинг к openssl (опционально)
    luarocks install --local --tree=$PWD/.rocks --lua-version 5.1 luaossl

Note

Рекомендуется использовать только новый API

Запуск примера

BOT_TOKEN - токен вашего бота

BOT_TOKEN="1348551682:AAFK3iZwBqEHwSrPKyi-hKyAtRgUwXrTiWW" tarantool examples/echo-bot.lua
  • bot/init.lua - Точка входа
  • bot/libs - Вспомогательные библиотеки
  • bot/enums - Инамы
  • bot/classes - Классы для объектов телеграмма
  • bot/middlewares - Посредники
  • bot/processes - Процессы (like runtime). Пример processCommand - процессинг команд
  • bot/types - Модели/валидаторы для типов телеграмма
  • bot/ext - Встроенные расширения (эддоны - фактически просто модули)
  • bot/interfaces - Интерфейсы. На текущий момент в реализации паттерн observer
Метод Описание Пример использования
bot:cfg Инициализация настроек bot:cfg { token = "123468:foobarBAZ", username = "boobar_bot" }
bot.call Выполнение запроса к Telegram API bot.call('sendMessage', {chat_id = 123, text = 'Привет!'})
bot.events Таблица с пользовательскими событиями function bot.events.onPoll(ctx) ... end
bot.events.onGetUpdate Событие обработки обновлений от Telegram function bot.events.onGetUpdate(ctx) ... end
bot.sendImage Упрощенная отправка картинки examples/send-image-2.lua
bot.Command Минимальный обработчик команд bot.Command(ctx)
bot.CallbackCommand Минимальный обработчик callback команд bot.CallbackCommand(ctx)
bot:startWebHook Запуск бота на удаленном сервере Пример examples/echo-bot-webhook.lua
bot:startLongPolling Запуск бота в режиме long polling Любой пример из examples/*
bot:debugRoutes Отладка ручек в режиме longPolling

По наличию аргументов см. ldoc - doc/index.html

  • Пользуетесь единым style guide, пример: lua-style-guide
  • Исользуйте строгий режим
-- Блокирует попытку использовать необъявленную глобальную переменную
require('strict').on()
  • Выстраивайте единую структуру проекта
┌─ app.lua                       - Точка входа
├── bot                          - Библиотека tnt-tg-bot
├── pre-build.sh                 - Скрипт установки необходимых зависимостей
├── conf                         - Конфиги
├── bin                          - Скрипты: для запуска, для линтера, ...
├── src                          - Основная директория бота
│   ├── classes                  - Классы
│   ├── enums                    - Инамы
│   ├── events                   - События для onGetUpdate
│   ├── commands                 - Разделённые по типам команды
│   │   ├── maintenance          - Директория для команд режима обслуживания
│   │   └── private              - Директория для команд, которые работают только в ЛС с ботом
│   │   └── public               - Директория для публичных команд (чаты, супергруппы, ...)
│   │   └── commandLoader.lua    - Единый загрузчик команд (команды лучше всего загружать в `bot.commands`)
│   ├── models                   - Модели для представления объектов из/в хранилище
│   ├── processes                - Процессы и рантаймы
│   │   └── processCommand.lua   - Единый обработчик команд 
│   ├── routes                   - Директория с ручками API
│   ├── services                 - Сервисы реализующие CRUD логику
│   ├── spaces                   - Схемы спейсов
│   └── utils                    - Отдельные утилиты
└── var                          - Системная директория
    ├── log                      - Директория для логов бота
    └── storage                  - Директория хранилища 
        ├── snap
        └── xlog
bash bin/ldoc

Вклад в проект

Через форк репозитория и открытия Pull Request