UnhandledPromiseRejectionWarning: ReferenceError: имя не определено - PullRequest
0 голосов
/ 28 июня 2019

В моем боте я получаю ошибку:

UnhandledPromiseRejectionWarning: ReferenceError: имя не определено

Проблема возникает, когда я не в голосовом канале и набираю команду !ph.

Командный тег для роли помощников (@helpers) и роли персонала (@staff) и эта работа, когда я нахожусь в голосовом канале.

Ошибка в if(commandfile) commandfile.run(bot, message, args); в основной конфигурации.

Код для команды !ph.

const Discord = require("discord.js");
const client = new Discord.Client();

module.exports.run = async (bot, message, args) => {

    let target = message.mentions.users.first() || message.author;
    let room = message.member.voiceChannel.name;

    if (!room) {
        return message.channel.send("<@&587662170548994076>" + " <@&594077199859187723> " + "**!צריך את עזרתכם** " + target + " ** :name_badge: המשתמש לא נמצא בשום חדר**\n");
    } else {

        return message.channel.send("<@&587662170548994076> <@&594077199859187723> " + target + " **!צריך את עזרתכם** \n" + " `` " + room + " `` " + "**המשתמש נמצא בחדר :bell:**");

    }

}

module.exports.help = {
    name: "ph"
}

код для бота:

const botconfig = require("./botconfig.json");
const Discord = require("discord.js");
const fs = require("fs");
const bot = new Discord.Client({disableEveryone: true});
bot.commands = new Discord.Collection();
let xp = require("./xp.json");
let purple = botconfig.purple;

fs.readdir("./commands/", (err, files) => {

    if (err) console.log(err);

    let jsfile = files.filter(f => f.split(".").pop() === "js")
    if (jsfile.length <= 0) {
        console.log("Couldn't find commands.");
        return;
    }

    jsfile.forEach((f, i) => {
        let props = require(`./commands/${f}`);
        console.log(`${f} loaded!`)
        bot.commands.set(props.help.name, props);
    });

})


bot.on("ready", async () => {
    console.log(`${bot.user.username} is online!`);
    bot.user.setGame("PeDiXOL Server!");
});

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

    let prefix = botconfig.prefix;
    let messageArray = message.content.split(" ");
    let cmd = messageArray[0];
    let args = messageArray.slice(1)

    let commandfile = bot.commands.get(cmd.slice(prefix.length));
    if (commandfile) commandfile.run(bot, message, args);

    let xpAdd = Math.floor(Math.random() * 7) + 8
    console.log(xpAdd)

    if (!xp[message.author.id]) {
        xp[message.author.id] = {
            xp: 0,
            level: 1
        };
    }

    let curxp = xp[message.author.id].xp;
    let curlvl = xp[message.author.id].level;
    let nxtLvl = xp[message.author.id].level * 300;
    xp[message.author.id].xp = curxp + xpAdd;
    if (nxtLvl <= xp[message.author.id].xp) {
        xp[message.author.id].level = curlvl + 1;
        let lvlup = new Discord.RichEmbed()
            .setTitle("Level Up!")
            .setColor(purple)
            .addField("New Level", curlvl + 1);

        message.channel.send(lvlup).then(msg => {
            msg.delete(5000)
        });

    }

    fs.writeFile("./xp.json", JSON.stringify(xp), (err) => {
        if (err) console.log(err)
    });

});

bot.login(botconfig.token);

Это необходимо для вывода, когда вы не находитесь в голосовом канале, что-то, что помечает помощников и персонал и говорит, что вы не находитесь в голосовом канале.

Когда вы находитесь в голосовом канале, выведите the username needs help, отметьте сотрудников и помощников и произнесите имя голосового канала, к которому подключен пользователь.

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

message.member.voiceChannel не определено, потому что пользователь не находится в голосовом канале. При попытке прочитать его свойство name выдается ошибка, поскольку голосовой канал не определен.

Перед использованием message.member.voiceChannel убедитесь, что оно определено. Оператор if ниже вернет true, когда message.member.voiceChannel равен falsy , что означает, что пользователь не в голосовом канале.

if (!message.member.voiceChannel) return; // Or return an error message.

let room = message.member.voiceChannel.name;

Также убедитесь, что вы перехватили все отклоненные Обещания в своем коде, чтобы предотвратить предупреждение UnhandledPromiseRejection. Сделайте это с помощью try...catch операторов или catch() методов.

0 голосов
/ 28 июня 2019

message.member.voiceChannel не определено, поэтому message.member.voiceChannel.name выдаст ошибку.Вы можете исправить это так:


let room = message.member.voiceChannel;

if(room == undefined) {
  return message.channel.send("<@&587662170548994076>" + " <@&594077199859187723> " + "**!צריך את עזרתכם** " + target + " ** :name_badge: המשתמש לא נמצא בשום חדר**\n");
} else {
  return message.channel.send("<@&587662170548994076> <@&594077199859187723> " + target + " **!צריך את עזרתכם** \n" + " `` " + room.name + " `` " + "**המשתמש נמצא בחדר :bell:**");
}
...