Данное приложение даёт возможность управления ботами. Основано на 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
по конкретным ботам.