Проверка, есть ли канал, содержащий слово?

#javascript #node.js #discord #discord.js

#JavaScript #node.js #Discord #discord.js

Вопрос:

По какой-то причине, которую я не знаю, мой код не понимает, что существует канал, содержащий имя пользователя отправителя сообщения. Чтобы использовать этого бота, вы DM бота, а затем он создает канал с именем вашего тега. Например, мой тег discord — Llama #0729, и он создает канал с именем llama0729. Проблема в том, что при запуске кода перед созданием канала он проверяет, чтобы убедиться, что нет канала, который содержит какую-либо часть имени пользователя пользователя. Однако он всегда создает канал.

 if (msg.channel.type == "dm") {
        if (!client.guilds.cache.get('720571393636434031').channels.cache.find(channel => channel.name == msg.author.username.toLowerCase())) {
            client.guilds.cache.get('720571393636434031').channels.create(msg.author.tag, {type: 'text'}).then((channel) => {
                channel.setParent('778216162403942401');
            });
        };
    } else {
            console.log('A Channel For ', msg.author.tag, 'Has Already Been Made.');
            return;
        };
  

Ответ №1:

Когда вы проверяете, существуют ли какие-либо каналы, вы должны сравнивать их tag , а не их username . Я немного изменил ваш код, а также удалил # из их tag .

 var newChannelName = msg.author.tag.replace("#", "").toLowerCase();

if (msg.channel.type == "dm") {
    if (!client.guilds.cache.get('720571393636434031').channels.cache.find(channel => channel.name == newChannelName)) {
        client.guilds.cache.get('720571393636434031').channels.create(newChannelName, {type: 'text'}).then((channel) => {
            channel.setParent('778216162403942401');
        })
        .catch(error => {
            console.log(error);
        });
    } 
    else 
    {
        console.log('A Channel For '   newChannelName   ' Has Already Been Made.');
        return;
    }
}
  

Комментарии:

1. Не сработало, хотя удаление # было хорошей идеей.

2. Я просто попробовал его с .catch(x => {console.log(x);}); помощью after .then , чтобы перехватить любые исключения при создании канала, и обнаружил, что у меня нет разрешений. Вы устранили это как причину, по которой оно не работает?

3. Теперь у бота есть права администратора

4. Мне удалось заставить его работать после добавления .toLowerCase() , похоже, что Discord преобразуется в нижний регистр при создании канала. Я отредактировал свой ответ с помощью нижнего регистра и catch.

5. Цым! Это очень поможет в будущем и для этого проекта!