Class Bot
Tables
.ErrCtx | Таблица, которая передается в bot.handle_error(err_ctx) . |
Methods
bot:reply (chat_id) | Возвращает объект-конструктор запроса к Telegram API. |
bot:call_method (method, parameters[, http_struct_overrides]) | Выполняет http запрос к Telegram API |
bot:handle_error (err_ctx) | Обработка ошибки запроса к Telegram API. |
bot:handle_middleware_error (err) | Обработка Lua ошибок внутри хендлеров. |
bot:handle_update (UPD) | Выполняется, когда бот получает update. |
bot:on (fFilter, handler, uid) | Добавляет в бот хендлер на указанных условиях. |
Basic Handlers
bot:update (handler, uid) | Перехватывает все апдейты. |
bot:command (name, handler) | Перехватывает команды бота |
bot:callback (handler, uid) | Нажата inline кнопка |
bot:text (handler, uid) | Пришло текстовое сообщение. |
bot:message (handler, uid) | Команды, гифки... |
Tables
- .ErrCtx
-
Таблица, которая передается в
bot.handle_error(err_ctx)
.Fields:
- retry func , при вызове которой запрос повторится с теми же параметрами (полезно при retry-after ошибках)
- method string API метод, который бот пытался выполнить при запросе
- parameters table таблица параметров
- try int номер попытки выполнения запроса
- error table ошибка в чистом виде, которая получена от Telegram после выполнения запроса
Methods
- bot:reply (chat_id)
-
Возвращает объект-конструктор запроса к Telegram API.
Прикрепляется к каждому ctx объекту.
Parameters:
- chat_id int ID пользователя, чата, канала, для которого будет выполняться API запрос
Returns:
-
Reply
Перейдите по ссылке, чтобы посмотреть примеры использования
Usage:
bot.reply(123456).text("Hello")
- bot:call_method (method, parameters[, http_struct_overrides])
-
Выполняет http запрос к Telegram API
Parameters:
- method string название API метода. Например, sendMessage
- parameters table ключ-значение таблица с параметрами запроса. Например, {chat_id = 12345, text = "Hello"}
- http_struct_overrides table ggram использует функцию HTTP. Вы можете перезаписать любой параметр, который перечислен тут: https://wiki.facepunch.com/gmod/Structures/HTTPRequest (optional)
Returns:
-
Promise
deferred object
Usage:
bot.call_method("setWebhook", {url = "https://example.com"})
- bot:handle_error (err_ctx)
-
Обработка ошибки запроса к Telegram API.
Функция для оверрайда. Вызывается, когда Telegram вернул ошибку после запроса.
По умолчанию принтит все данные об ошибке в консоль
Parameters:
- err_ctx .ErrCtx параметр отличается от обычного ctx
Usage:
local defer = require("deferred") function bot.handle_error(ctx) local err = ctx.error if err.extra and err.extra.http_error then return defer.sleep(5):next(ctx.retry) elseif err.error_code == 429 then return defer.sleep(err.parameters.retry_after):next(ctx.retry) end error(err) end
- bot:handle_middleware_error (err)
-
Обработка Lua ошибок внутри хендлеров.
Функция для оверрайда. Вызывается, когда pcall(handler) получил ошибку.
Ошибка в обработке команды/callback_query и тд.
Parameters:
- err any Результат неудачного выполнения pcall на хендлере
Usage:
-- Отправка данных об ошибке в Telegram через отдельный бот local report_bot = require("ggram")("1234:token") local BOT_MT = require("ggram.bot") function BOT_MT:handle_middleware_error(err) local errtrace = "@" .. self.username .. " error: " .. debug.traceback(err) report_bot.reply(123456).text(errtrace) -- chat_id print("[ggram] " .. errtrace) end
- bot:handle_update (UPD)
-
Выполняется, когда бот получает update.
Можно вызывать самостоятельно, чтобы организовать вебхуки или свою реализацию поллинга.
Внутри получает подходящие под update хендлеры и передает им update объект, обернутый в Context (ctx).
Parameters:
- UPD table update объект от Telegram
- bot:on (fFilter, handler, uid)
-
Добавляет в бот хендлер на указанных условиях.
На основе этой функции созданы все хендлеры: bot.command, bot.callback, bot.update и т.д.
Parameters:
- fFilter func сюда передается Context (ctx). Если вернуть true, то выполнится handler(ctx)
- handler func выполнятся, если fFilter вернул true
- uid string уникальный идентификатор хендлера. Не должен повторяться для одного бота
Returns:
-
Bot
self
Usage:
-- Вот так реализован bot.command хендлер: local BOT_MT = require("ggram.bot") function BOT_MT:command(name, handler) return self.on(function(ctx) return ctx.command == name end, handler, "command_" .. name) end
Basic Handlers
Основные хендлеры, созданы через bot:on
- bot:update (handler, uid)
-
Перехватывает все апдейты. Хорошее место, чтобы добавлять общие middlewares
Parameters:
- handler func колбек функция, которая выполнится при получении нового update от telegram
- uid string уникальный идентификатор хендлера
Returns:
-
Bot
self
See also:
- bot:command (name, handler)
-
Перехватывает команды бота
Parameters:
- name string команда, при получении которой выполнять handler
- handler func колбек функция, которая выполнится при получении указанной команды
Returns:
-
Bot
self
Usage:
bot.command("test", function(ctx) ctx.reply.text("Hello") end)
- bot:callback (handler, uid)
-
Нажата inline кнопка
Parameters:
- handler func функция, которая выполнится при нажатии inline кнопок
- uid string уникальный идентификатор хендлера
Returns:
-
Bot
self
Usage:
bot.command("test", function(ctx) ctx.reply.inlineKeyboard({ { {text = "Line 1, row 1", callback_data = "any"}, } }).text("Hello world!") end) bot.callback(function(ctx) local query = ctx.callback_query if query.data == "any" then ctx.answer({text = "It's inline answer"}) end end, "callback_example")
- bot:text (handler, uid)
-
Пришло текстовое сообщение. Может также содержать команду.
Не gif, не callback_query и т.д.
Parameters:
- handler func функция, которая выполнится при получении текстового сообщения
- uid string уникальный идентификатор хендлера
Returns:
-
Bot
self
- bot:message (handler, uid)
-
Команды, гифки... Все, что имеет поле .message
Parameters:
- handler func функция, которая выполнится при получении update с полем .message
- uid string уникальный идентификатор хендлера
Returns:
-
Bot
self