Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.09.2018, 09:30
Аватар для SorryHanzoMain
Аспирант
Отправить личное сообщение для SorryHanzoMain Посмотреть профиль Найти все сообщения от SorryHanzoMain
 
Регистрация: 01.08.2018
Сообщений: 34

Обработчик сообщений
Есть код
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])
                        }
                    
                    
                


            })})

Он работает прекрасно, но он воспринимает все сообщения и их обрабатывает. Нужно, чтобы происходила обработка сообщений типа
слово - описание. Сделать это сложно, по этому нужно, чтобы обработчик срабатывал если в сообщении есть - и слова русского алфавита.
Ответить с цитированием
  #2 (permalink)  
Старый 05.09.2018, 09:54
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Сообщение от 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);
    });
});

Последний раз редактировалось Nexus, 05.09.2018 в 10:00.
Ответить с цитированием
  #3 (permalink)  
Старый 05.09.2018, 18:49
Аватар для SorryHanzoMain
Аспирант
Отправить личное сообщение для SorryHanzoMain Посмотреть профиль Найти все сообщения от SorryHanzoMain
 
Регистрация: 01.08.2018
Сообщений: 34

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как набить репутацию больше чем количество сообщений? EmperioAf Оффтопик 7 04.08.2015 14:54
Как заставить выполняться обработчик после всех имеющихся обработчиков данного элемен Анатолий Саратовцев jQuery 2 08.10.2012 18:49
Как снять обработчик с очередью FanAizu jQuery 0 11.02.2012 19:28
Логика звукового уведомления о поступлении новых сообщений Триви AJAX и COMET 1 11.08.2011 02:13
Как "обмануть" обработчик события? itPiligrim Events/DOM/Window 0 13.05.2010 22:55