首页 > 解决方案 > 当您不提及时,机器人崩溃了

问题描述

我的机器人上有这个命令,您可以使用命令 g!mute 将某人静音,其中使用 @ 提到“用户”。但是,如果您不提及例如 GeoGeo 而不是 @GeoGeo,则会导致机器人崩溃。我知道你需要把 .catch(console.error); 某处,但我不确定在哪里。提前致谢。错误是

let person = message.guild.member(message.mentions.users.first() || message.guild.members.get(args[1]))
                                                                                             ^

TypeError: message.guild.members.get is not a function

代码:

const Discord = require('discord.js');
const ms = require('ms');

module.exports = {
    name: 'mute',
    description: "this is mute command",
    execute(message, args){
        
        if(!message.member.roles.cache.find(r => r.name ==="Staff", "Head Staff", "Owner", "Co-Owner")) return message.channel.send(`YOU DO NOT HAVE PERMISSION TO DO THAT`)

        let members = args[0];
        if(!members) return message.reply("g!mute <user> <time>")
        
        let person = message.guild.member(message.mentions.users.first() || message.guild.members.get(args[1]))
        if(!person) return message.reply("That person is not in the server!");

        let mainrole = message.guild.roles.cache.find(role => role.name === "Fans");
        let muterole = message.guild.roles.cache.find(role => role.name === "muted");

        if(!muterole) return message.reply("That role does not exist");

        let time = args[1];
        if(!time){
            return message.reply("g!mute <user> <time>");
        }

        person.roles.remove(mainrole.id);
        person.roles.add(muterole.id);

        const embed = new Discord.MessageEmbed()
                .setTitle ("Muted:")
                .setDescription (`${person.user.tag} has now been muted for ${ms(ms(time))}`)
                .setColor(0x01B8FF)
                message.channel.send(embed);

        setTimeout(function(){
            person.roles.add(mainrole.id)
            person.roles.remove(muterole.id)

            const embed = new Discord.MessageEmbed()
            .setTitle ("Muted:")
            .setDescription (`${person.user.tag} has been unmuted`)
            .setColor(0x01B8FF)
            message.channel.send(embed);
            
        }, ms(time));

    }
}

标签: discorddiscord.js

解决方案


当遇到如下错误时:TypeError: message.guild.members.get is not a function

合乎逻辑的做法是检查文档以查看message.guild.members确实有一个名为get. 这是文档:https ://discord.js.org/#docs/main/stable/class/GuildMemberManager

没有get。但是cache你在代码的其他地方使用了一个类似的东西。只需检查文档,您就可以知道您现有的代码是错误的(它已经过时了),您需要cache像在代码中的其他地方一样使用:

message.guild.members.cache.get(args[1])

推荐阅读