addRole不是函数

时间:2018-12-02 12:51:57

标签: javascript bots discord discord.js

我正在创建Discord Bot。 我正在尝试创建一个“静音”命令,但总是收到相同的错误。

enter image description here

出了什么问题?

背景信息:

  • Discord.js版本:12.0.0-dev

  • 使用版本为0.5.0-dev的Klasa

代码:

const { Command } = require('klasa');
const { MessageEmbed } = require('discord.js');

module.exports = class extends Command {

    constructor(...args) {
        super(...args, { description: 'Mute an user.' })
    }

    async run(msg, args) {
        if(!msg.member.hasPermission("MANAGE_MEMBERS")) return msg.channel.send("You can't use this command.");

        let MuteUser = msg.guild.member(msg.mentions.users.first() || msg.guild.members.get(args[0]))
        if(!MuteUser) return msg.channel.send("Can't find user!");

        let MuteReason = msg.content.split(" ").slice(2).join(" ");

        let MuteRole = msg.guild.roles.find(r => r.name === "Spammer");
        if(!MuteRole) return msg.channel.send("Can't find the Spammer role!");

        let MuteChannel = msg.guild.channels.find(guild => guild.name === 'bot-logs');
        if(!MuteChannel) return msg.channel.send("Can't find the #bot-logs channel.");

        if(MuteUser.roles.has(MuteRole)) return msg.channel.send("That user is already muted!.");

        MuteUser.addRole(MuteRole.id);

        return MuteChannel.send(new MessageEmbed()
            .setAuthor("Mute"|| 'Unknown', "http://wolfdevelopment.cf/BotSymbols/info.png")
            .setColor("#ff0000")
            .addField("Muted User", `${MuteUser}`)
            .addField("Muted By", `<@${msg.author.id}>`)
            .addField("Muted In", `${msg.channel}`)
            .addField("Time", `${msg.createdAt}`)
            .addField("Reason", `${MuteReason}`));
    }
}

我已检查MuteUser是这一行的人:

    if(!MuteUser) return msg.channel.send("Can't find user!");

因此它必须是一个人。为什么没有addRole函数?

3 个答案:

答案 0 :(得分:1)

我决定从另一个角度看待这个问题,并在Discord.js文档中搜索了更多信息。果然找到了一些东西:

我假设您对msg.guild.member的呼叫将导致GuildMember,因为这就是名字的含义。

稳定(大概11.x):https://discord.js.org/#/docs/main/stable/class/GuildMember Documentation

请注意,addRole是“方法”下面的第一项。

现在,切换到master(又名Development分支-从那里获得12.0.0-dev)... https://discord.js.org/#/docs/main/master/class/GuildMember

Documentation

addRole不再存在。

点击roles的类型... https://discord.js.org/#/docs/main/master/class/GuildMemberRoleStore Documentation add是第一种方法。

您可能可以将MuteUser.addRole替换为MuteUser.roles.add

注意:这不会使我在注释中的任何单词无效,因为您没有在问题本身中提供有关引发错误时MuteUser的类型的足够信息。

注2:仅进行了一次Google搜索。您什至投入了多少工作?

答案 1 :(得分:0)

用户没有addRole:https://discord.js.org/#/docs/main/stable/class/User 但是GuildMembers确实如此。

您是否要在定义“ let MuteUser”的行中强制转换为成员?如果它是用户,则没有addRole方法可能是正常的。

答案 2 :(得分:0)

首先:用户没有角色。只有成员才有角色。

用户是不和谐的用户=现实生活中的人(或机器人)

成员对象是“附加”到服务器的用户。因此,成员可以具有角色,因为您仅在特定服务器内具有角色。

我也尝试了var ctx = document.getElementById('myChart').getContext('2d'); var myChart = new Chart(ctx, { type: 'line', data: { labels: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''], datasets: [{ label: '', data: [2, 4, 2, 14, 5, 8, 15, 3, 20, 4, 18, 6, 15, 2, 20, 3, 17, 1], backgroundColor: [ 'rgb(191,53,57)', 'rgb( 245,205,83)', 'rgb(62,107,154)', 'rgb(89,160,149)', 'rgb(124,124,124)', 'rgb(62,107,154)' ], borderColor: [ 'rgba(255, 99, 132, 1)', 'rgba(54, 162, 235, 1)', 'rgba(255, 206, 86, 1)', 'rgba(75, 192, 192, 1)', 'rgba(153, 102, 255, 1)', 'rgba(255, 159, 64, 1)' ], borderWidth: 2, fill: false, lineTension: 0, order: 2 }, { label: '(2018-08 To 2018-12-30)', data: [1, 7, 2, 8, 1, 2, 7, 2, 7, 2, 6, 3, 7, 1, 8, 3, 7, 2, 6], backgroundColor: [ 'rgb(89,160,149)', 'rgb(89,160,149)', 'rgb(89,160,149)', 'rgb(89,160,149)', 'rgb(89,160,149)', 'rgb(89,160,149)' ], borderColor: [ 'rgb(89,160,149)', ], type: 'line', borderWidth: 2, fill: false, lineTension: 0, order: 1 }, { label: '', data: [0, 2, 1, 3, 1, 2, 4, 2, 5, 4, 5, 3, 1, 3, 1, 3, 1, 3, 2, 1], borderColor: [ 'rgb(192,210,224)', ], type: 'line', borderWidth: 1, fill: false, lineTension: 0, order: 0 }], labels: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''] }, options: { scales: { xAxes: [{ gridLines: { display: false } }], yAxes: [{ stacked: true }] } } }); ,并收到了相同的someMember.addRole(someRole)错误消息。

只需尝试addRole is not a function可以使用!

提供我有

  1. guildID:服务器ID
  2. userID:用户ID
  3. roleID:角色ID
  4. 会员编号:不!哈哈,明白了!!!成员在Discord上没有ID。成员由guildID和userID定义,但是它没有自己的ID。

因此,如果我想向成员添加角色,这是我的工作:

someMember.roles.add(someRole)

如果这样不起作用:

  1. 检查成员的最高角色是否比bot的最高角色
  2. 检查您的机器人试图添加的角色是否比您的机器人的最高角色强大?
  3. 而且:在服务器配置的角色配置页面中的角色列表中,确保要尝试分配的角色在机器人的角色下列出(您可以拖动重新排序的角色)。 (那花了我几个小时才弄清楚!!)