Как реализовать такой же метод?

В общем, имеется у меня на сайте форма с классом bot и вот я хочу создать метод on как у телеграмм библиотеки, которая отслеживает, написал ли пользователь сообщение в чат и если написал, то выполнять какое-то действие, тоже как и в телеграмм библиотеки sendMessage Просто пишу своего бота для сайта, вот хочу реализовать как у телеграмма

Код телеграмм библиотеки:

bot.on('message', (msg) => {
  bot.sendMessage(chatId, 'Привет, Друг!');
});

На данный момент, у меня имеется класс JavaScript с названием Bot и в нем имеется метод on, который принимает параметр type, внутри данного метода у проверяется, нажал ли пользователь кнопку и если нажал, то я проверяю поле, пусто ли оно. Мой код:

class Bot {

   on (type) {
      form.addEventListener('submit', (e) => {
        if (msg.value.replace(/^\s+|\s+$/g, '')) {
         //
       }
   });
  }

Ответы (1 шт):

Автор решения: SwaD

Примерно это может выглядеть так. Смотрим на идею, а не на саму реализацию

import Events from 'eventemitter3';

class BotServer {
  constructor() {
    this.state = { }
  }
  /**
   * @param {Object} name
   * @param {string} name.name
   * @param {string} name.nik
   * @param {function} fn
   * @return {UserType}
   */
  regUser(name, fn) {
    this.state[name.name] = {
      nik: name.nik
    };
    this.state[name.name].event = new BotUser(name);
    console.log(`Пользователь ${name.name} подключен!`)
    return fn(this.state[name.name].event);
  }
  /** @param {string} user */
  deleteUser(user) {
    delete this.state[user];
    console.log(`Пользователь ${user} отключён!`)
  }

  /**
   * @param {string} from
   * @param {string} to
   * @param {string} msg
   * @return void
   */
  says(from, to, msg) {
    if (this.state[to] && this.state[to].event) {
      this.state[to].event.emit('message', {msg: msg, from: from});
    }
  }
}

/**
 * @typedef UserType
 */
class BotUser extends Events {
  constructor(user) {
    super();
    this.name = user.name;
    this.nik = user.name;
  }

  disconnect() {
    bot.deleteUser(this.name);
  }

  /**
   * @param {string} to
   * @param {string} msg
   */
  say(to, msg) {
    bot.says(this.name, to, msg);
  }
}

const bot = new BotServer();

let i = 0;
let j = 0;

bot.regUser({name: 'Vasya', nik: 'VAS'}, /** @param {BotUser} botUser */(botUser) => {

  botUser.on('message', (msg) => {
    i++;
    console.log('1', botUser.name, `Получено сообщение ${msg.msg} от ${msg.from}`, i);
    if (i < 10) {
      botUser.say('Vasya2', `Привет № ${i}!`);
    } else {
      botUser.disconnect();
    }

  });
  botUser.say('Vasya2', 'Это событие 555!')
});

bot.regUser({name: 'Vasya2', nik: 'VAS2'}, /** @param {BotUser} botUser */(botUser) => {
  botUser.on('message', (msg) => {
    j++;
    console.log('1', botUser.name, `Получено сообщение ${msg.msg} от ${msg.from}`, j);
    if (j < 10) {
      botUser.say('Vasya', `Хэлоу № #${j} !`);
    } else {
      botUser.disconnect();
    }

  });
  botUser.say('Vasya', 'Это событие 777!')
})

→ Ссылка