問題描述
我正在創建一個 Discord 機器人.我正在嘗試創建靜音命令,但總是遇到同樣的錯誤.
出了什么問題?
背景資料:
Discord.js 版本:
12.0.0-dev
使用版本
0.5.0-dev
的Klasa
代碼:
const { 命令 } = require('klasa');const { MessageEmbed } = require('discord.js');module.exports = 類擴展命令 {構造函數(...args){super(...args, { description: '靜音用戶.' })}異步運行(味精,參數){if(!msg.member.hasPermission("MANAGE_MEMBERS")) return msg.channel.send("你不能使用這個命令.");讓 MuteUser = msg.guild.member(msg.mentions.users.first() || msg.guild.members.get(args[0]))if(!MuteUser) return msg.channel.send("找不到用戶!");讓 MuteReason = msg.content.split(" ").slice(2).join(" ");讓 MuteRole = msg.guild.roles.find(r => r.name === "Spammer");if(!MuteRole) return msg.channel.send("找不到垃圾郵件發送者角色!");讓 MuteChannel = msg.guild.channels.find(guild => guild.name === 'bot-logs');if(!MuteChannel) return msg.channel.send("找不到#bot-logs 頻道.");if(MuteUser.roles.has(MuteRole)) return msg.channel.send("那個用戶已經被靜音了!");MuteUser.addRole(MuteRole.id);return MuteChannel.send(new MessageEmbed().setAuthor("靜音"|| '未知', "http://wolfdevelopment.cf/BotSymbols/info.png").setColor("#ff0000").addField("靜音用戶", `${MuteUser}`).addField("靜音者", `<@${msg.author.id}>`).addField("靜音", `${msg.channel}`).addField("時間", `${msg.createdAt}`).addField("原因", `${MuteReason}`));}}
我檢查了 MuteUser
是這一行的人:
if(!MuteUser) return msg.channel.send("找不到用戶!");
所以一定是人.為什么它沒有addRole
函數?
我決定從另一個角度看待這個問題,并搜索了 Discord.js 文檔以獲取更多信息.果然找到了東西:
我假設您對 msg.guild.member
的調用會產生一個 GuildMember
,因為這就是名稱的含義.
穩定版(大概是 11.x):
請注意,addRole
是 Methods 下面的第一項.
現在,切換到 master(又名 Development 分支 - 您從那里獲得 12.0.0-dev)...
addRole
已經不存在了.
單擊角色
的類型...add
是第一種方法.
您可以將 MuteUser.addRole
替換為 MuteUser.roles.add
.
注意:這不會使我在評論中的任何文字無效,因為您沒有在問題本身中提供足夠的信息來說明引發錯誤時 MuteUser
是什么類型.
注意 2:這只需要一次 Google 搜索.你在研究上投入了多少工作?
I am creating a Discord Bot. I am trying create a Mute command, but I always get the same error.
What went wrong?
Background information:
Discord.js version:
12.0.0-dev
Klasa with version
0.5.0-dev
is used
Code:
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}`));
}
}
I have checked that MuteUser
is a person in this line:
if(!MuteUser) return msg.channel.send("Can't find user!");
So it must be a person. Why doesn't it have an addRole
function?
I decided to look at this from another viewpoint and searched the Discord.js documentation for some more information. Sure enough, something is found:
I assume your call to msg.guild.member
would result in a GuildMember
because that is what the name implies.
Stable (Presumably 11.x): https://discord.js.org/#/docs/main/stable/class/GuildMember
Note that addRole
is the first item below Methods.
Now, switching to master (aka Development branch - where you got 12.0.0-dev from)... https://discord.js.org/#/docs/main/master/class/GuildMember
addRole
isn't there anymore.
Clicking the type of roles
...
https://discord.js.org/#/docs/main/master/class/GuildMemberRoleStore
add
is the first method.
You can probably replace MuteUser.addRole
with MuteUser.roles.add
.
Note: This does not invalidate any of my words in the comments because you didn't provide enough information in the question itself on what type MuteUser
is when the error was thrown.
Note 2: This took one Google search only. How much work did you even put into research?
這篇關于addRole 不是函數的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!