VeroLom
@VeroLom
Веб-разработчик, фрилансер, UMI.CMS

Что посоветуете по архитектуре чат-бота?

Здравствуйте, товарищи! :)
Нужна ваши советы.

Делаю чат-бота, пока только есть минимальная заготовка. Что-то типа:
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. Может, мысли полезные появятся :)
  • Вопрос задан
  • 1834 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Sowd
Вы пишите, что провели анализ аналогичных решений на гитхабе, ни одно из решений вам не подошло по ряду признаков. Исходя из вашего заявления, можно сделать вывод, что у вас уже есть понимание того как это должно работать и представление архитектуры. Но при этом, по какой то сакральной причине, вы не желаете написать свое решение. Возникает вполне резонный вопрос, что именно вы надеетесь увидеть в ответах? Готовую копипасту?
Ответ написан
opium
@opium
Просто люблю качественно работать
Нахрена тут паттерны ?
Напишите монолитом
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы