Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Обработчик сообщений (https://javascript.ru/forum/node-js-io-js/75133-obrabotchik-soobshhenijj.html)

SorryHanzoMain 05.09.2018 09:30

Обработчик сообщений
 
Есть код
client.on("message", request => {
        const REQUIRED_PREFIX = '?';
        const message = request.content.toString().trim();
    
        if (message.substr(0, 1) !== REQUIRED_PREFIX)
            return false
            sql.get('SELECT * FROM вопросы WHERE вопрос LIKE ?', [message]).then(string => {
                if(string){
                    sql.get('SELECT * FROM вопросы WHERE вопрос LIKE ?', [message]).then(string => {
                        if(string){
                            sql.get(`SELECT * FROM вопросы WHERE вопрос = '${message}' AND trueorfalse LIKE ?`, ['unfined']).then(string => {
                                if(string){
                                    request.reply("Я этого ещё пока не знаю, но это не надолго")
                                }
                            
                            if(!string){
                                sql.get(`SELECT * FROM вопросы WHERE вопрос = '${message}' AND trueorfalse LIKE ?`, ['true']).then(string => {
                                if(string){
                                request.reply("Да")
                                }
                                if(!string)(
                                    request.reply("Нет")
                                )
                                .catch(error => request.reply(error) )
                            })
                        
                        }
                    })
                      }
                    })
                }
                        if(!string){
                            sql.run('INSERT INTO вопросы (вопрос) VALUES (?)',[message])
                        }
                    
                    
                


            })})

Он работает прекрасно, но он воспринимает все сообщения и их обрабатывает. Нужно, чтобы происходила обработка сообщений типа
слово - описание. Сделать это сложно, по этому нужно, чтобы обработчик срабатывал если в сообщении есть - и слова русского алфавита.

Nexus 05.09.2018 09:54

Цитата:

Сообщение от SorryHanzoMain
Он работает прекрасно

На счет "прекрасно" я бы поспорил.
В вашем коде 4 раза из базы данных извлекаются одни и те же данные.
Можно получить результат единожды, дальше вместо сношения БД работать с полученной коллекцией данных (ниже пример кода).
Судя по всему, метод sql.get возвращает Promise, следовательно даже с таким обильным кол-вом запросов код можно было написать с значительно меньшим кол-вом уровней вложенности.

Цитата:

Сообщение от SorryHanzoMain
Сделать это сложно, по этому нужно, чтобы обработчик срабатывал если в сообщении есть...

Похоже на постановку задачи.


client.on("message", request => {
    const REQUIRED_PREFIX = '?';
    const message = request.content.toString().trim();

    if (message.substr(0, 1) !== REQUIRED_PREFIX)
        return;

    sql.get('SELECT * FROM вопросы WHERE вопрос LIKE ?', [message]).then(results => {
        if (!results)
            return void sql.run('INSERT INTO вопросы (вопрос) VALUES (?)', [message]);

        let response = 'Нет',
            hasUndefined = false,
            hasTrue = false;

        //хз что-такое results, поэтому
        [].forEach.call(results, row => {
            if (row.trueorfalse === 'unfined')
                hasUndefined = true;
            else if (row.trueorfalse === 'true')
                hasTrue = true;
        });

        if (hasUndefined)
            response = 'Я этого ещё пока не знаю, но это не надолго';
        else if (hasTrue)
            response = 'Да';

        request.reply(response);
    });
});

SorryHanzoMain 05.09.2018 18:49

Цитата:

Сообщение от Nexus (Сообщение 493979)
На счет "прекрасно" я бы поспорил.

Да согласен, но этот код использует методы с которыми я знаком и совершенствоваться он будет в будущем. Основная задача создать обработчик. Я где-то видел как делают обработчик, но не помню где. Там устанавливалось, что может быть в сообщении, но мне нужно сложнее, чтобы запрос на ответ был таким, что идёт слово через - его определение которое мы хотим проверить. Хотел бы сразу узнать возможно ли это? Если нет, то просто обработчик на наличие - и русских букв.


Часовой пояс GMT +3, время: 18:19.