03.08.2018, 09:17
|
|
Аспирант
|
|
Регистрация: 01.08.2018
Сообщений: 34
|
|
js цикл с постоянным вносом сообщений в таблицу
Вопрос заключается в том, что у меня есть код.
client.on("message", async message => {
var quest = config_quest.prefix
for (var i = 0; i < quest + forbidenMessage; i++) {
if (message.content.includes(forbidenMessage[i]))
if(!forbidenMessage[i]){
}else{sql.run('INSERT INTO вопросы (вопрос) VALUES (?)', [forbidenMessage[i]])}
break;
}
})
и в нём как видно есть цикл. Проблема в том, что я не знаю как обозначить forbidenMessage. По сути это любое сообщение в чате. То есть если кто-то написал ?javascript, то это и есть quest + forbidenMessage. Может вы знаете как по другому сделать или как обозначить forbidenMessage. Благодарен за помощь.
|
|
03.08.2018, 09:27
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,795
|
|
Я совсем не понял вопроса (да и nodejs не знаю), однако если нет веской причины не вставлять в бд все записи сразу, то лучше именно так и поступить.
Еще у вас код какой-то странный.
Если forbidenMessage - array, тогда что это может значить?
i < quest + forbidenMessage;
Почему "запрещенноеСообщение" вносится в БД?
Почему условие такое странное?
|
|
03.08.2018, 10:42
|
|
Аспирант
|
|
Регистрация: 01.08.2018
Сообщений: 34
|
|
Nexus
i < quest + forbidenMessage;
forbidenMessage- это сообщение. Если оно больше чем ноль то оно суммируется с i(равное нулю), а поскольку forbidenMessage + 0, получается forbidenMessage. Сообщение уходящее в таблицу. Вот почему <. Иначе выйдет, что forbidenMessage должно быть меньше нуля, и ничего не выйдет. Я сам тоже новичок и могу ошибаться. И, что такое БД(я так понимаю это i)?
|
|
03.08.2018, 10:51
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,795
|
|
SorryHanzoMain,
Сообщение от SorryHanzoMain
|
forbidenMessage- это сообщение. Если оно больше чем ноль то оно суммируется с i(равное нулю), а поскольку forbidenMessage + 0, получается forbidenMessage.
|
У вас в коде отсутствует инициализация этой переменной, значит она должна быть инициализирована до обработчика "сообщений". Она инициализируется?
Допустим да. Какой тип данных хранится в этой переменной?
Если число, то значение переменной "quest" обязательно должно быть числом и у вас в коде ошибка:
forbidenMessage[i]
к числу неприменимо. Так можно написать только если forbidenMessage является массивом либо строкой.
Если "forbidenMessage" является массивом, то строка
i < quest + forbidenMessage;
неверна, т.к. условие никогда не выполнится.
Если "forbidenMessage" является строкой, то снова ошибка: цикл не будет выполнен ни разу, т.к. число не больше, не меньше и не равно непустой строке.
Последний раз редактировалось Nexus, 03.08.2018 в 10:55.
|
|
03.08.2018, 11:08
|
Профессор
|
|
Регистрация: 28.04.2017
Сообщений: 214
|
|
О-хо-хо...
Ну вот есть строчка
client.on("message", async message => {
Я не знаю, зачем там async - ну ладно, пусть будет async.
В переменную message (которая сразу после async и на месте которой может быть, конечно, любое имя, хоть матерное слово) передано сообщение.
Теоретически можно догадаться (но это не точно), что это socket.io, и видимо (если это не старая его версия), в эту переменную передан объект - "хеш" с ключами и значениями.
Так что это за объект? Что за сообщение клиент получил?
Как только вы догадаетесь, как тут этот объект продемонстрировать (хотя я предполагаю, что вы его сами не видели) - так получите от кого-нибудь вразумительный ответ на вразумительный вопрос.
|
|
03.08.2018, 11:14
|
|
Аспирант
|
|
Регистрация: 01.08.2018
Сообщений: 34
|
|
Nexus
Я так понимаю, что forbidenMessage- это строка(текст), quest-это префикс "?". Он стоит перед сообщением и на него реагируют в первую очередь. Да этот код он для массива, но он очень похож на то, что должно быть. Как должен выглядеть этот код? Ещё всё дело в том, что это бот для дискорда. И там любое сообщение к боту это команда. Quest это активатор всего цикла.
|
|
03.08.2018, 11:24
|
|
Аспирант
|
|
Регистрация: 01.08.2018
Сообщений: 34
|
|
Audaxviator
client.on("message", async message => {
Как я понимаю message содержит в себе токен(адрес бота на сервере дискорд). Хотя я в этом не уверен.
|
|
03.08.2018, 11:25
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,795
|
|
SorryHanzoMain, а как сообщение попало в "forbidenMessage"?
По идее оно должно быть либо в аргументе "message" (судя по строке 4 это не так), либо как-то из него извлекаться.
Чтобы реализовать задуманное, вам нужно сначала получить список сообщений (разве не должно оно быть единственным?), удалить из списка сообщения, которые не начинаются на префикс (знак вопроса), проверить наличие сообщений в массиве. Если сообщения есть есть, то вставить их в бд.
Если в таблице "вопросы" поле "вопрос" имеет уникальный ключ, то стоит либо при фильтрации сообщений проверять их на уникальность, либо изменить запроса на insert ignore либо добавить on duplicate key update.
|
|
03.08.2018, 11:33
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,795
|
|
Так работает?
//пример смотрел тут: [url]https://github.com/eslachance/bot-guide[/url]
client.on("message", request => {
const REQUIRED_PREFIX='?';
const message=request.content.toString().trim();
if(message.substr(0,1)!==REQUIRED_PREFIX)
return request.reply('Bad request'), false;
sql.run('INSERT INTO вопросы (вопрос) VALUES (?)',[message]);
return request.reply('Saved successfully'), true;
});
Последний раз редактировалось Nexus, 03.08.2018 в 11:35.
|
|
03.08.2018, 11:36
|
Профессор
|
|
Регистрация: 28.04.2017
Сообщений: 214
|
|
Так надо посмотреть - чтоб быть хоть в чём-то уверенным.
Потому что этот объект много чего содержит - текст вопроса в том числе.
|
|
|
|