Здравствуйте, товарищи! :)
Нужна ваши советы.
Делаю чат-бота, пока только есть минимальная заготовка. Что-то типа:
bot.listen();
bot.on('event', (event) => {
switch(event.type) {
case 'type1':
type1EventHandler(event);
break;
// ...
default:
defaultEventHandler();
}
});
Из основного функционала необходимо "модерирование" и управление доступом (MAC, вроде, называется). Возможно, это в данном вопросе не имеет особого значения, но на всякий случай :)
В общем, задача - приём команд, обработка и выполнение действий через API.
Планирую реализовать функционал в виде плагинов. Работа с чатом (авторизация, события и т.д.), думаю, тоже будет плагином, дабы можно было подключить в будущем какой либо другой протокол/API.
Смотрел гитхаб на эту тему, но ничего конкретного не нашёл - или криво сделано, или перегружено. Или не нашёл подходящее :)
В общем, нужен совет, как это всё реализовать. Какие паттерны тут можно применить? Может, есть опыт такого или известны опенсорс-продукты, где можно черпать вдохновение =)
UPD: Ещё хотелось бы разделить всё это дело на хост-процесс, который будет контролировать чат-ботов, у которых будут свои конфиги, администраторы, которые могут быть в разных каналах.
UPD: пока немного застрял на заготовке. Что есть - написал в вопросе. По конкретному типу события вызывается соответствующий обработчик.
Грубо говоря, по событию
join вызывается обработчик
onJoin(), который, к примеру, пишет в лог "
{date} Пользователь {event.user} присоединился к каналу".
Пока вижу две основных проблемы:
1. Обработчик событий.
Сейчас используется switch case для обработки событий, хочу вынести "базовый" обработчик в класс и для обработки нужных событий регистрировать свои обработчики (в плагинах).
2. Событие "message" (сообщение в чате). Поскольку бот реагирует на команды типа "бот <команда> <объект> <параметры>", думаю это событие вынести в отдельный класс, реализовать что-то типа роутинга / подписки на вызов команды. Тоже в плагинах.
Ещё хотелось бы какое-то масштабирование и абстрагирование от API/протоколов. Ботов может быть несколько, в разных каналах и сетях (IRC, Tg, соц. сети и так далее). Может, сначала не имеет особого смысла задаваться этим вопросом, но надо бы заранее учитывать этот нюанс.
Наверное, для начала почитаю перед сном Design patterns. Может, мысли полезные появятся :)