Событие SQL UPDATE не работает правильно с discord.js через событие сообщения - PullRequest
1 голос
/ 26 июня 2019

В последние дни я пытался заставить событие SQL UPDATE корректно работать с discord.js, используя пакет mysql npm. Все данные для входа и таблица, имена столбцов верны. Это предназначено для обновления целого числа каждый раз, когда сообщение отправляется в текстовом канале Discord.

Я пробовал несколько типов ОБНОВЛЕНИЯ, даже ни один из которых не удался.

Смотрите эти скриншоты регистрации: - https://faxes.zone/img/y4fx1.png (до / после запуска события) - https://faxes.zone/img/8610v.png (консоль discord.js при отправке сообщения)

bot.on("message", message => {
    if ( message.channel.type === 'dm' ) return;
    if (message.author.bot) return;
    if (message.content.startsWith(".")) return;

    connection.query(`SELECT * FROM logs WHERE id = '${message.author.id}'`, function (err, resultLogs) {
        if(err) throw err;
        let sql;

        if(resultLogs[0]) {
            console.log(resultLogs[0].msgcount)
            let newMessageCount = resultLogs[0].msgcount++;
            sql = `UPDATE logs SET msgcount = ${newMessageCount} WHERE id=${message.author.id}`
            connection.query(sql, console.log)
        }
    });  
});

Ожидаемый результат должен быть целым числом, увеличивающимся на единицу при каждой отправке сообщения.

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Вы можете увеличить msgcount с помощью оператора MySql. Таким образом, вам не нужно делать запрос выбора. А также вам нужно экранировать значение в операторе sql для предотвращения инъекций.

Кстати, я переделал твой код.

bot.on('message', message => {
    if ( message.channel.type === 'dm' || message.author.bot || message.content.startsWith(".") ) return;

    connection.query('UPDATE logs SET msgcount = msgcount + 1 WHERE id = ?', [message.author.id], (error,  result) => {
      if (error) throw error;
      
      console.log(result);
    })
}
0 голосов
/ 26 июня 2019

Я никогда не использовал Discord JS, но ваша логика кода кажется мне правильной, хотя некоторые части кажутся мне странными:

sql = `UPDATE logs SET msgcount = ${newMessageCount} WHERE id=${message.author.id}`
        connection.query(sql, console.log)

почему эта часть не имеет точки с запятой после каждой строки?

Также я забыл поведение символа `со строками, но вы уверены, что запрос sql правильный (например, количество сообщений и значение идентификатора корректно заменяют переменные)? Попробуйте напечатать это, чтобы увидеть

(для запроса select вы использовали апострофы)

...