【问题标题】:!unban id with spaces discord.js!unban id 带空格 discord.js
【发布时间】:2021-09-03 21:53:05
【问题描述】:

我是这个平台的新手,我拼命地绕着圈子来解禁一个不和谐的玩家。 它的 id 有空格,我总是遇到 400 或 404 错误... 你有什么想法可以解决我的问题吗?

我测试了很多代码,最后一个是这样的:

if (message.content.startsWith('!unban')) {
    let args = message.content.split(/ +/g);
    let user = message.guild.members.cache.get(args[1]);
    if (!user) return message.channel.send('Please specify a user ID');
    user.unban().then(() => message.channel.send('Success'));
}

我目前收到消息“请指定用户 ID”。

仅供参考,我没有使用异步功能:

const Discord = require('discord.js');const client = new Discord.Client();client.on('message', message => {}

感谢您的帮助!

【问题讨论】:

    标签: javascript discord.js


    【解决方案1】:

    由于用户被禁止,他不在公会中,并且您试图从公会成员中获取用户,这返回未定义,因此机器人不断发送错误消息。 要解禁用户,您需要使用GuildMemberManager#unban 方法。

    这是一个例子:

    if (message.content.startsWith('!unban')) {
        let args = message.content.split(/ +/g);
        let user = args[1];
        if (!user) return message.channel.send('Please specify a user ID');
        message.guild.members.unban(user).then((u) => {
            message.channel.send(`Successfully unbanned ${u.tag}`);
        }).catch((err) => {
            console.log(err);
            message.channel.send("I couldn't unban this user, please check if i have the required permissions and if the user id is correct");
        });
    }
    

    【讨论】:

    • 谢谢你,我还没有把它植入我的小脑袋里。但是,我们可以将标签转换为 id 吗?否则对于普通的解禁用户来说会很困难。
    • 只要let user = message.mentions.users.first() || args[0] 会尝试禁止提到的用户,但如果它是 undefined/null,它将默认为 ID。
    • @ApprenticeofDiscord 我不明白你的意思?
    • @Squidleton 他想解禁用户而不是禁止他
    【解决方案2】:

    如果我对您的理解正确,您想使用!unban idBeforeSpace afterSpace 之类的命令。
    在这种情况下,您的代码运行如下:

    if (message.content.startsWith('!unban')) {
        let args = message.content.split(/ +/g); //args = ["!unban", "idBeforeSpace", "afterSpace"]
        let user = message.guild.members.cache.get(args[1]); //args[1] = "idBeforeSpace"; user = null
        if (!user) return message.channel.send('Please specify a user ID');
        user.unban().then(() => message.channel.send('Success'));
    }
    

    但是你想要这个:

    args = ["!unban", "idBeforeSpace afterSpace"]
    

    split你在你找到的每个空格上的 arglist。不是在每次出现正则表达式时都拆分,而是在第一次之后拆分。

    【讨论】:

    • 用户标签是 @Manu du 6'9#9521,我收到“请指定用户 ID”。
    • 您说要通过ID解禁,这里没有提供。您提供的是服务器特定的用户标签。正如@ahmed benn 所说,您提供的用户标签不再是您服务器的一部分(用户必须被禁止,所以您取消禁止它)。您需要按 ID 解禁,而不是按标签。另外,请不要提供真实世界的数据 - 稍微修改一下,以免像这样泄露信息。
    • 谢谢你,我还没有把它植入我的小脑袋里。但是,我们可以将标签转换为 id 吗?否则对于普通的解禁用户来说将是困难的。我提到的标签来自我的测试帐户。
    • 问题是标签不存在。禁止用户访问服务器会从服务器中删除此信息。您仍然拥有的被禁止用户的唯一信息是 id。
    猜你喜欢
    • 2020-08-12
    • 2018-08-07
    • 1970-01-01
    • 2020-12-05
    • 2017-03-22
    • 1970-01-01
    • 2021-10-13
    • 2021-02-17
    • 2021-11-19
    相关资源
    最近更新 更多