Как реализовать такой же метод?
В общем, имеется у меня на сайте форма с классом 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 шт):
Примерно это может выглядеть так. Смотрим на идею, а не на саму реализацию
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!')
})