我正在创建Discord Bot。 我正在尝试创建一个“静音”命令,但总是收到相同的错误。
出了什么问题?
背景信息:
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
函数?
答案 0 :(得分:1)
我决定从另一个角度看待这个问题,并在Discord.js文档中搜索了更多信息。果然找到了一些东西:
我假设您对msg.guild.member
的呼叫将导致GuildMember
,因为这就是名字的含义。
稳定(大概11.x):https://discord.js.org/#/docs/main/stable/class/GuildMember
请注意,addRole
是“方法”下面的第一项。
现在,切换到master(又名Development分支-从那里获得12.0.0-dev)... https://discord.js.org/#/docs/main/master/class/GuildMember
addRole
不再存在。
点击roles
的类型...
https://discord.js.org/#/docs/main/master/class/GuildMemberRoleStore
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
并可以使用!
提供我有
因此,如果我想向成员添加角色,这是我的工作:
someMember.roles.add(someRole)
如果这样不起作用: