Discord.js 取消禁止命令

时间:2021-01-13 14:44:30

标签: javascript discord discord.js dc

我收到一个取消禁止命令代码,并且在控制台中收到以下错误:

<块引用>

(节点:9348)未处理的承诺拒绝警告:类型错误:无法读取未定义的属性“成员” 在 Object.execute (C:\Users\19nik\Documents\GitHub\bot-project\commands\unban.js:9:22) 在客户端。 (C:\Users\19nik\Documents\GitHub\bot-project\gb.js:81:17) 在 Client.emit (events.js:315:20) 在 MessageCreateAction.handle (C:\Users\19nik\Documents\GitHub\bot-project\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14) 在 Object.module.exports [as MESSAGE_CREATE] (C:\Users\19nik\Documents\GitHub\bot-project\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32) 在 WebSocketManager.handlePacket (C:\Users\19nik\Documents\GitHub\bot-project\node_modules\discord.js\src\client\websocket\WebSocketManager.js:384:31) 在 WebSocketShard.onPacket (C:\Users\19nik\Documents\GitHub\bot-project\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22) 在 WebSocketShard.onMessage (C:\Users\19nik\Documents\GitHub\bot-project\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10) 在 WebSocket.onMessage (C:\Users\19nik\Documents\GitHub\bot-project\node_modules\ws\lib\event-target.js:132:16) 在 WebSocket.emit (events.js:315:20)

这是我的代码:

const { MessageEmbed } = require('discord.js');
const fs = require("fs");

module.exports = {
    name: `unban`,
    description: `Unbans given user ID or mentioned user.`,
    async execute(bot, args, message) {

        if (!message.member.hasPermission(["BAN_MEMBERS"])) return message.channel.send("You do not have the required permissions to use the unban command.")

        if (!args[0]) return message.channel.send("Provide me a valid USER ID.");
        //This if() checks if we typed anything after "!unban"

        let bannedMember;
        //This try...catch solves the problem with the await
        try {
            bannedMember = await bot.users.cache.fetch(args[0])
        } catch (e) {
            if (!bannedMember) return message.channel.send("That's not a valid USER ID.")
        }

        //Check if the user is not banned
        try {
            await message.guild.fetchBan(args[0])
        } catch (e) {
            message.channel.send('This user is not banned.');
            return;
        }

        let reason = args.slice(1).join(" ")
        if (!reason) reason = "No reason provided."

        if (!message.guild.me.hasPermission(["BAN_MEMBERS"])) return message.channel.send("I am missing permissions to unban.")
        message.delete()
        try {
            message.guild.members.unban(bannedMember, { reason: reason })
            message.channel.send(`${bannedMember.tag} has been unbanned.`)
            console.log(`AUDIT LOG: [UNBAN] ${message.author.tag} unbanned ${member.user.tag} from ${message.guild.name}.`);
            var readmessagefile = fs.readFileSync('./logging/UnbanLog.txt', 'utf-8');
            var writemessagefile = fs.writeFileSync('./logging/UnbanLog.txt', 'Type: [UNBAN] ' + 'Time ' + '(' + message.createdAt + ')' + ' | ' + member.user.tag + ' from ' + message.guild.name + ' | Moderator ' + message.author.tag + '\n' + readmessagefile)
            console.log('BOT LOG: [INTERNAL] Writing to unban log file.');
        } catch (e) {
            console.log(e.message)
        }
    }
}

我不知道该怎么办。也弹出了cannot read property 'hasPermissions' of undefined 的错误。

4 个答案:

答案 0 :(得分:0)

我认为您的问题的主要来源是您的回调,在 clientmessage 之前先调用了您的 args。 由于 JS 对回调参数放置很敏感,因此您应该将回调编写如下:

async execute(message, args, bot)

答案 1 :(得分:0)

错误似乎在第 9 行

if (!message.member.hasPermission(["BAN_MEMBERS"])) return message.channel.send("You do not have the required permissions to use the unban command.")

哪个没有错误,也许命令是在 DMS 中运行的?也许使用:

if(!message.guild) return;

哪个应该解决问题。

答案 2 :(得分:0)

两个可能的原因:

回调

确保 execute() 的参数与主文件中的顺序完全相同

命令在公会外使用

错误可能是因为该命令在公会外部使用来解决此问题,请将其添加到您在 execute() 下方的代码中

if (!message.guild) return;

答案 3 :(得分:-1)

我认为这会奏效。

const { MessageEmbed } = require('discord.js');
const fs = require("fs");

module.exports = {
    name: `unban`,
    description: `Unbans given user ID or mentioned user.`,
    async execute(bot, args, message) {
        if(!message.guild) return message.channel.send("This Command Can't Be Executed In DMs.");
        if (!message.author.hasPermission(["BAN_MEMBERS"])) return message.channel.send("You do not have the required permissions to use the unban command.")

        if (!args[0]) return message.channel.send("Provide me a valid USER ID.");
        //This if() checks if we typed anything after "!unban"

        let bannedMember;
        //This try...catch solves the problem with the await
        try {
            bannedMember = await bot.users.cache.fetch(args[0])
        } catch (e) {
            if (!bannedMember) return message.channel.send("That's not a valid USER ID.")
        }

        //Check if the user is not banned
        try {
            await message.guild.fetchBan(args[0])
        } catch (e) {
            message.channel.send('This user is not banned.');
            return;
        }

        let reason = args.slice(1).join(" ")
        if (!reason) reason = "No reason provided."

        if (!message.guild.me.hasPermission(["BAN_MEMBERS"])) return message.channel.send("I am missing permissions to unban.")
        message.delete()
        try {
            message.guild.members.unban(bannedMember, { reason: reason })
            message.channel.send(`${bannedMember.tag} has been unbanned.`)
        } catch (e) {
            console.log(e.message)
        }
    }
}

我删除了控制台日志记录部分,因为它可能会开始出现一些错误。

这可能是错误的,因为我是新手