Данное приложение даёт возможность управления ботами. Основано на Laravel с использованием административной панели SleepingOwl Admin(https://sleepingowladmin.ru/). Работа с обновлениями ботов может происходить как с помощью Long Polling, так и с помощью хуков.
Сам бот, который работает в этой структуре скорее является наглядным примером использования и содержит экшены и таблицы (миграции) для моего личного использования.
Путь: routes/console.php
bot-start- запускает ботаbot-stop- останавливает бота
Путь /app/Classes/Telegram.php
Класс для работы с Telegram Api
Методы:
sendMessage- отправляет сообщение в указанную по id беседуgetUpdate- возвращает массив обновленийpushImage- отправляет картинку в указаную по id беседу
Путь: /app/Managers/Abstract/Manager.php
Абстрактный класс, от которого наследуются менеджеры управления ботами.
Каждый бот должен иметь свой класс наследуемый от Manager.
В административной панели есть тип данных Phrases, в нём содержатся фразы, на которые боты должны реагировать, в каждой такой фразы есть категория(тип данных Category) у которой можно выбрать метод обработки ботом данной фразы. Такие методы обработки объявлятся в классе Manager. Как только боту придёт фраза, выполнится выбранный метод. Название метода обязательно должно содержать слово Action(пример doSomethingAction).
На данный момент реализованы следующие Actions:
doublePhrasesAction- собирает рандомную фразу из таблицыdoublePhrasesи отправляет в чат.jokeAction- парсит рандомный анекдот с anekdot.ru и отправляет в чат
Путь: app/Exceptions/Handler.php
При возникновении php ошибки будет отправленно сообщение в чат владельца.
TELEGRAM_BOT_TOKKEN - Токен телеграм бота
TELEGRAM_OWNER_ID - id владельца бота(туда будут приходить ошибки)
TELEGRAM_CHAT_ID - id беседы в которую будет отвечать бот
UPDATES_TIMEOUT - задержка ответа на обновления Telegram (long polling)
В менеджере текущего бота есть следующий доп функционал:
pushDayImage- отправляет рандомную картинку из таблицыday_picturesисходя из текущего дня недели(у записей есть выбор дня недели)
Сейчас проект реализован в рамках одного бота, но на его примере можно добавлять сколько угодно ботов и обрабатывать их логику как захочется. Единственное Actions в текущей реализации для всех ботов общие, но так как у каждого менеджера метод обработки обновлений(processUpdate) прописывается свой, то нет препятствий для разделения Actions по конкретным ботам.