【问题标题】:Not finding an easy solution to unban command for Discord Bot没有找到一个简单的解决方案来解除 Discord Bot 的命令
【发布时间】:2023-03-10 07:48:02
【问题描述】:

在过去的 2 天里,我一直在尝试让 unban 命令工作,但我还没有找到一个简单的解决方案,我不断收到诸如“.find()”不是函数之类的错误,或者无法定义“id”。而且我只是没有得到我需要做的事情。 PS:在代码方面我是个菜鸟。 还值得一提的是,我已经经历了这段代码的许多变体,并且到此结束,可能以前的代码迭代更接近实际的解决方案。

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

const prefix = "+";

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);

});


client.on('message', msg => {
    const { content } = msg;

    if (!content.startsWith(prefix)) return;

    const args = content.slice(prefix.length).trim().split(/ +/g);
    const command = args.shift().toLowerCase();
    
    switch(command) {

        case "ping" : {
            let latency = Date.now() - msg.createdTimestamp;
            let latencyOfAPI = Math.round(client.ws.ping);
            msg.reply("This is the latency between the message and the response: " + latency + "."  + "\nThis is the API latency: " + latencyOfAPI + ".");

            break;
        } 

        case "pong" : {

            msg.reply("ping");
            break
        }

        case "ban" : {
            const user = msg.mentions.members.first();
            if (user) {
                msg.guild.members.ban(user);
                msg.reply("The user " + user + " has been banned.") 
            } else {
                 return msg.reply("There is no one to ban.").catch(console.error);

            }
            
            break
        }
        case "unban" : {
            const user = client.users.cache.find(user => user.username == "").id;
            let banList = msg.guild.fetchBans();
            if(banList = 0) {
                return msg.reply("This user isn't in the community, or he is not banned.");
            } else {
                banList.find(user)
                msg.guild.members.unban(user);
                msg.reply("User " + user + " has been unbanned.")
            }
            break
        }

    }
});
client.login('.....');

【问题讨论】:

  • 用户可能不一定在客户端用户缓存中。此外,使用 == 进行值比较,使用 === 进行值和类型比较。 = 用于分配变量。
  • 另外,fetchBans() 返回一个承诺。你应该await承诺在做任何事情之前得到解决。
  • 确实,=== 在很多情况下更好。
  • 话虽如此,在这种特殊情况下,等待 fetchBans 会给出一个集合。使用 banList.size 检查该公会中的禁令数量。 banList 保证不等于 0,因为它们的类型不同。
  • 我现在只收到“SyntaxError:await 仅在异步函数和模块的顶层主体中有效”,我很困惑,如果我听起来好像我什么都不知道,对不起。

标签: javascript node.js visual-studio-code discord discord.js


【解决方案1】:

试试这个:

    case "unban" : {

        const user = client.users.fetch(args[1]).catch((err) => console.log(err));
            user.then((u) => {
        if (!args[1]) {
            return msg.reply("Enter ID to unban")
        } else {
            if (u) {
                msg.guild.members.unban(u).then(() => {
                    msg.reply("The user " + u.username + " has been unbanned.")
                }).catch((err) => console.log(err))
            } else {
                return msg.reply("Cannot Find User")
            }
        }
    })


        break

用法: [prefix]unban [ID] 例如[prefix]unban 3426743678738(输入文本通道)

提示 #1: 尝试在返回承诺的函数上使用 .then().catch()。您可以使用.then() 确认您已成功取消禁止用户,并使用.catch() 了解取消禁止用户出现问题的原因。

提示 #2: 创建一个 if 语句,在尝试代码之前检查运行此命令的用户是否具有正确的权限,即 BAN_MEMBERSADMINISTRATOR

另外注意:.fetchBans() 返回一个collectionPromise

【讨论】:

  • 你不应该先验证 args[1] 是否存在,然后再按其值获取吗?
猜你喜欢
  • 2021-02-04
  • 1970-01-01
  • 2011-01-22
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-12
  • 2018-03-31
相关资源
最近更新 更多