sandersik
@sandersik
Занимаюсь программированием 2-3 года

Почему не срабатывает проверка?

if (msg.message.text.match('!kick')) {
      if(await isAdmin(msg)) {
        let playerid = msg.message.text
        let findplayer = playerid.match(/\[id(\d+)/)[1];
        let causes = playerid.match(/] (.+)/)[1];
        if (findplayer && causes === ''){
          messagesend('запрос неверный')
        } else {
          vk.call('messages.removeChatUser', {
            chat_id: msg.message.peer_id - 2000000000,
            user_id: findplayer
          });
          messagesend('🔫Был исключен vk.com/id' + findplayer + ' | Причина: ' + causes)
        }
      } else {
        notmessage();
      }
    }

В чем проблема? Условия не срабатывают. Как должно быть при вводе !kick или !kick id или !kick и причина, должно выводится сообщение о том, что запрос не верный
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
Скорее всего, должно быть так:

async function test() {

    // ...

    if (msg.message.text.startsWith('!kick')) {
        if (await isAdmin(msg)) {
            const str = msg.message.text;
            const idStart = str.indexOf(' ');
            const idEnd = str.indexOf(' ', idStart + 1);
            const id = str.slice(idStart + 2, idEnd);
            const reason = str.slice(idEnd + 1);
            if ((idStart < 0) || (idEnd < 0) || (id.length === 0) || (reason.length === 0)) {
                messagesend('Неверная команда.');
            } else {
                vk.call('messages.removeChatUser', {
                    chat_id: msg.message.peer_id - 2000000000,
                    user_id: id
                });
                messagesend(`&#128299; Был исключен vk.com/${id} | Причина: ${reason}`);
            }
        } else {
            notmessage();
        }
    }

    // ...

}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@galaxy
Если регулярка /\[id(\d+)/ не смэтчится, match() вернет null, а null[1] выкинет исключение. Аналогично со второй регуляркой. У вас никогда ошибка не выведется.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы