Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.08.2018, 09:17
Аватар для SorryHanzoMain
Аспирант
Отправить личное сообщение для SorryHanzoMain Посмотреть профиль Найти все сообщения от SorryHanzoMain
 
Регистрация: 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. Благодарен за помощь.
Ответить с цитированием
  #2 (permalink)  
Старый 03.08.2018, 09:27
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

Я совсем не понял вопроса (да и nodejs не знаю), однако если нет веской причины не вставлять в бд все записи сразу, то лучше именно так и поступить.
Еще у вас код какой-то странный.
Если forbidenMessage - array, тогда что это может значить?
i < quest + forbidenMessage;

Почему "запрещенноеСообщение" вносится в БД?
Почему условие такое странное?
Ответить с цитированием
  #3 (permalink)  
Старый 03.08.2018, 10:42
Аватар для SorryHanzoMain
Аспирант
Отправить личное сообщение для SorryHanzoMain Посмотреть профиль Найти все сообщения от SorryHanzoMain
 
Регистрация: 01.08.2018
Сообщений: 34

Nexus
i < quest + forbidenMessage;

forbidenMessage- это сообщение. Если оно больше чем ноль то оно суммируется с i(равное нулю), а поскольку forbidenMessage + 0, получается forbidenMessage. Сообщение уходящее в таблицу. Вот почему <. Иначе выйдет, что forbidenMessage должно быть меньше нуля, и ничего не выйдет. Я сам тоже новичок и могу ошибаться. И, что такое БД(я так понимаю это i)?
Ответить с цитированием
  #4 (permalink)  
Старый 03.08.2018, 10:51
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

SorryHanzoMain,
Сообщение от SorryHanzoMain
forbidenMessage- это сообщение. Если оно больше чем ноль то оно суммируется с i(равное нулю), а поскольку forbidenMessage + 0, получается forbidenMessage.
У вас в коде отсутствует инициализация этой переменной, значит она должна быть инициализирована до обработчика "сообщений". Она инициализируется?
Допустим да. Какой тип данных хранится в этой переменной?
Если число, то значение переменной "quest" обязательно должно быть числом и у вас в коде ошибка:
forbidenMessage[i]
к числу неприменимо. Так можно написать только если forbidenMessage является массивом либо строкой.
Если "forbidenMessage" является массивом, то строка
i < quest + forbidenMessage;

неверна, т.к. условие никогда не выполнится.
Если "forbidenMessage" является строкой, то снова ошибка: цикл не будет выполнен ни разу, т.к. число не больше, не меньше и не равно непустой строке.

Последний раз редактировалось Nexus, 03.08.2018 в 10:55.
Ответить с цитированием
  #5 (permalink)  
Старый 03.08.2018, 11:08
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

О-хо-хо...
Ну вот есть строчка
client.on("message", async message => {

Я не знаю, зачем там async - ну ладно, пусть будет async.
В переменную message (которая сразу после async и на месте которой может быть, конечно, любое имя, хоть матерное слово) передано сообщение.
Теоретически можно догадаться (но это не точно), что это socket.io, и видимо (если это не старая его версия), в эту переменную передан объект - "хеш" с ключами и значениями.
Так что это за объект? Что за сообщение клиент получил?
Как только вы догадаетесь, как тут этот объект продемонстрировать (хотя я предполагаю, что вы его сами не видели) - так получите от кого-нибудь вразумительный ответ на вразумительный вопрос.
Ответить с цитированием
  #6 (permalink)  
Старый 03.08.2018, 11:14
Аватар для SorryHanzoMain
Аспирант
Отправить личное сообщение для SorryHanzoMain Посмотреть профиль Найти все сообщения от SorryHanzoMain
 
Регистрация: 01.08.2018
Сообщений: 34

Nexus
Я так понимаю, что forbidenMessage- это строка(текст), quest-это префикс "?". Он стоит перед сообщением и на него реагируют в первую очередь. Да этот код он для массива, но он очень похож на то, что должно быть. Как должен выглядеть этот код? Ещё всё дело в том, что это бот для дискорда. И там любое сообщение к боту это команда. Quest это активатор всего цикла.
Ответить с цитированием
  #7 (permalink)  
Старый 03.08.2018, 11:24
Аватар для SorryHanzoMain
Аспирант
Отправить личное сообщение для SorryHanzoMain Посмотреть профиль Найти все сообщения от SorryHanzoMain
 
Регистрация: 01.08.2018
Сообщений: 34

Audaxviator
client.on("message", async message => {

Как я понимаю message содержит в себе токен(адрес бота на сервере дискорд). Хотя я в этом не уверен.
Ответить с цитированием
  #8 (permalink)  
Старый 03.08.2018, 11:25
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

SorryHanzoMain, а как сообщение попало в "forbidenMessage"?
По идее оно должно быть либо в аргументе "message" (судя по строке 4 это не так), либо как-то из него извлекаться.
Чтобы реализовать задуманное, вам нужно сначала получить список сообщений (разве не должно оно быть единственным?), удалить из списка сообщения, которые не начинаются на префикс (знак вопроса), проверить наличие сообщений в массиве. Если сообщения есть есть, то вставить их в бд.
Если в таблице "вопросы" поле "вопрос" имеет уникальный ключ, то стоит либо при фильтрации сообщений проверять их на уникальность, либо изменить запроса на insert ignore либо добавить on duplicate key update.
Ответить с цитированием
  #9 (permalink)  
Старый 03.08.2018, 11:33
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

Так работает?
//пример смотрел тут: [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.
Ответить с цитированием
  #10 (permalink)  
Старый 03.08.2018, 11:36
Профессор
Отправить личное сообщение для Audaxviator Посмотреть профиль Найти все сообщения от Audaxviator
 
Регистрация: 28.04.2017
Сообщений: 214

Так надо посмотреть - чтоб быть хоть в чём-то уверенным.
Потому что этот объект много чего содержит - текст вопроса в том числе.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отобразить таблицу из скрипта PHP в JS используя AJAX vladiksan1998 AJAX и COMET 1 24.05.2018 02:04
Диалог между HTML и внешним JS в контексте расширения GoogleChrome ev1lart Events/DOM/Window 0 26.04.2017 19:25
Подскажите, как создать хэш таблицу (или массив) через цикл osetr Общие вопросы Javascript 6 11.11.2014 12:08
Как удалить таблицу созданную в JS? konstantinopol Общие вопросы Javascript 9 10.09.2011 10:55
Цикл функции в JS Nikitos* Общие вопросы Javascript 2 31.03.2009 19:51