“静音”命令给出随机输出

时间:2021-04-28 10:33:02

标签: javascript node.js discord.js

if(command === "mute"){
    const target = message.mentions.users.first();
    if (target) {

        if (!message.member.hasPermission("ADMINISTRATOR")) {
            return message.reply("Unauthorized");
        }
        let muted = client.settings.get(message.guild.id, 'mute')
        
        let muteRole = message.guild.roles.cache.find(role => role.name === muted);
        
        let memberTarget = message.guild.members.cache.get(target.id);

        let rolelist = memberTarget.roles.cache
            .map(r => r)

        if (!args[1]) {
          
            memberTarget.roles.remove(rolelist);
            memberTarget.roles.add(muteRole);
            message.channel.send(`<@${memberTarget.user.id}> has been muted`);
            return
        }
        memberTarget.roles.remove(rolelist);
        memberTarget.roles.add(muteRole);
        message.channel.send(`<@${memberTarget.user.id}> will be muted for ${ms(ms(args[1]))}`);

        setTimeout(function () {
            memberTarget.roles.add(rolelist);
            memberTarget.roles.remove(muteRole);
        }, ms(args[1]));
        
    } else {
        message.channel.send('User not found!');
    }

所以我有这个静音命令,它删除你所有的角色,给你 muteRole,当时间到了,它返回你以前的角色并删除 muteRole。我遇到的问题是它有时会删除您的所有角色并且不给您 muteRole,有时它不会在时间到时删除 muteRole。有时它会删除您的所有角色,并且不会为您提供 muteRole 当时间到了它不会让你的角色回来......

基本上结果总是随机的。所以我的问题是如何使它保持一致?

1 个答案:

答案 0 :(得分:1)

方法 .add().remove() 返回 Promise,因此您应该尝试使用 await / .then()

如果你这样做,下一个 function.then()不会被执行直到promise是<强>完全处理。

示例:

memberTarget.roles.remove(rolelist)
   .then(() => memberTarget.roles.add(muteRole))
   .then(() => message.channel.send('some message'));

现在你快完成了。您需要的最后一件事是 .catch() 块,因为如果上面的代码失败/抛出错误,您应该catch

.catch(err => console.log(`An error occured: ${err}`))

最终结果:

memberTarget.roles.remove(rolelist)
   .then(() => memberTarget.roles.add(muteRole))
   .then(() => message.channel.send('some message'))
   .catch(err => console.log(`An error occured: ${err}`));

参考资料

相关问题