首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当我检查成员角色时,“无法读取未定义的属性'cache‘”

当我检查成员角色时,“无法读取未定义的属性'cache‘”
EN

Stack Overflow用户
提问于 2021-01-09 22:49:01
回答 1查看 102关注 0票数 0

我想为我的Discord机器人创建一个静音命令,但这会产生错误:

代码语言:javascript
运行
复制
C:\Program Files\nodejs\node.exe .\index.js
|------ Bot on ------|
index.js:22
Uncaught TypeError: Cannot read property 'cache' of undefined
No debugger available, can not send 'variables'
Process exited with code 1

我想检查被提及的用户是否已经具有mute角色,以及执行者是否具有admin角色。但是这就产生了这个错误。

我的代码:

代码语言:javascript
运行
复制
bot.on("message", async message => {
    if(message.content.startsWith(prefix + "mute")){
        let User = message.mentions.users.first();
        let time = message.content.split(" ").slice(2)
        let reason = message.content.split(" ").slice(3)
        if(!reason){ let reason = "aucune"}      
        if(!time || !User) return message.reply("Veuillez entrer une commande valide !\n" + prefix + "mute @user <temps> <raison>")
        
        let dUser = User.id
        if(dUser == message.author.id) return message.reply("Vous ne pouvez pas vous mute vous même !")
    

        if(isNaN(time[0]) || time < 1) return message.reply("Veuillez entrer une valeur chiffrée et supérieur à 1 !")
        let muterole = "793840735266013205"
che
        if(User.roles.cache.has(muterole)) return message.reply("Ce membre est déjà mute !")
        if(!message.author.roles.cache.has("783758067111428126" || "783758066138218577")) return message.reply("Vous n'avez pas la permission d'utiliser cette commande !")
        if(User.roles.cache.has("783758067111428126" || "783758066138218577")) return message.reply("Vous ne pouvez pas mute un membre du staff !")

        let emb = new Discord.MessageEmbed()
        .setTitle(Mute)
        .setDescription(User.username + " a bien été mute par " + message.author.username + " pendant " + time[0] + " secondes pour la raison suivante : " + reason)
        .setColor("#E74C3C")
pendant " + time[0] + " secondes pour la raison suivante : " + reason)
        User.roles.add(muterole)

        setTimeout(() => {
            User.roles.remove(muterole)
            let reply = new Discord.MessageEmbed()
            .setDescription(User + " a bien été unmute !")
            .setColor("#E74C3C")
            message.guild.channels.cache.get("795063422386569298").send(reply)

            let mp = new Discord.MessageEmbed()
            .setDescription("Vous avez été unmute de " + guild)
            .setColor("#E74C3C")
            message.author.send(mp)



        }, time[0] = 60000
        )}
})

不要担心法语单词。

EN

回答 1

Stack Overflow用户

发布于 2021-01-09 23:29:19

你的代码不会做你想让它做的事情,因为你弄乱了一些部分。User将是第一个可以在参数中找到的用户。因此,如果您在参数的第一个位置提到用户,那么它将位于索引0处。这是因为参数存储在数组中,并且数组总是从索引0开始。这意味着现在您的以下参数必须位于索引1和2处。因此,您可以将timereason更改为:

代码语言:javascript
运行
复制
let time = message.content.split(" ").slice(1);
let reason = message.content.split(" ").slice(2).join(" ");

确保在reason中使用.join(" "),这将允许您添加多个单词。下一个错误是在if -语句中,您询问是否没有原因。您在语句中创建了一个新变量,这没有任何意义。你只需要做:

代码语言:javascript
运行
复制
if(!reason){ reason = "aucune"; } 

现在,如果没有提供任何原因,则原因将是aucune

如果要询问用户是否已经具有mute角色,可以使用GuildMember对象。它看起来像这样:

代码语言:javascript
运行
复制
if(message.guild.member(User).roles.cache.has(muterole)) return message.reply("Ce membre est déjà mute !")

在if语句之后,您询问用户是否具有某些角色,如果没有这些角色,则没有权限。这样的代码应该始终是这样的命令的第一行代码,并且应该如下所示:

代码语言:javascript
运行
复制
if(!message.author.roles.cache.has("783758067111428126") || !message.author.roles.cache.has("783758066138218577")) return message.reply("Vous n'avez pas la permission d'utiliser cette commande !")

使用以下if语句执行相同的过程:

代码语言:javascript
运行
复制
if(User.roles.cache.has("783758067111428126") || User.roles.cache.has("783758066138218577")) return message.reply("Vous ne pouvez pas mute un membre du staff !")

然后在您的嵌入中使用time[0],尽管时间不是一个数组。只要是time就行了。

您的代码现在应该如下所示:

代码语言:javascript
运行
复制
bot.on("message", async message => {
    if(message.content.startsWith(prefix + "mute")){
        if(!message.author.roles.cache.has("783758067111428126") || !message.author.roles.cache.has("783758066138218577")) return message.reply("Vous n'avez pas la permission d'utiliser cette commande !")
        let User = message.mentions.users.first();
        if(User.roles.cache.has("783758067111428126") || User.roles.cache.has("783758066138218577")) return message.reply("Vous ne pouvez pas mute un membre du staff !")
        let time = message.content.split(" ").slice(2)
        let reason = message.content.split(" ").slice(3)
        if(!reason){ reason = "aucune"; }      
        if(!time || !User) return message.reply("Veuillez entrer une commande valide !\n" + prefix + "mute @user <temps> <raison>")
        
        let dUser = User.id
        if(dUser == message.author.id) return message.reply("Vous ne pouvez pas vous mute vous même !")
    

        if(isNaN(time) || time < 1) return message.reply("Veuillez entrer une valeur chiffrée et supérieur à 1 !")
        let muterole = "793840735266013205"

        if(message.guild.member(User).roles.cache.has(muterole)) return message.reply("Ce membre est déjà mute !")

        let emb = new Discord.MessageEmbed()
        .setTitle(Mute)
        .setDescription(User.username + " a bien été mute par " + message.author.username + " pendant " + time + " secondes pour la raison suivante : " + reason)
        .setColor("#E74C3C")

        User.roles.add(muterole)

        setTimeout(() => {
            User.roles.remove(muterole)
            let reply = new Discord.MessageEmbed()
            .setDescription(User + " a bien été unmute !")
            .setColor("#E74C3C")
            message.guild.channels.cache.get("795063422386569298").send(reply)

            let mp = new Discord.MessageEmbed()
            .setDescription("Vous avez été unmute de " + message.guild)
            .setColor("#E74C3C")
            message.author.send(mp)



        }, time
        )}
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65643980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档