我想制作一个不和谐的机器人程序。 当新人进入服务器时,他们必须键入!daftar才能享受服务器。 当他们输入时!daftar消息列表将出现在 #welcome 频道上。 但是我收到标题中的错误。 这是我的代码
const { GuildMember } = require("discord.js");
module.exports = {
name: 'daftar',
description: "This is for add roles to a member",
execute(message, args) {
let role = message.guild.roles.cache.find(r => r.name === "Members")
if (message.member.roles.cache.some(r => r.name === "Members")) {
message.channel.send('Kamu sudah menjadi MEMBER Di grup ini');
} else {
message.member.roles.add('817360044622217276');
message.member.roles.remove('817965925122048010');
message.channel.send('Baiklah silahkan menikmati Server');
GuildMember.guild.channels.cache.get('817957997312737290').send(`Selamat Datang <@${GuildMember.user.id}>`)
}
}
}
GuildMember
没有完全定义。是的,您正在将其解构为discord.js
的属性,但它并没有完全定义为成员的实际身份。现在它只是一个不属于任何人的空对象,这意味着它本身也没有属性,因为它不知道它指的是什么。
假设您要将角色授予键入此命令的成员,则必须使GuildMember
对象成为在参数中定义为message
的Message
对象的属性。我们可以使用message
=>message.member
的member
属性获取此对象。
现在,假设您要向其发送消息的通道与message
对象位于同一公会中,那么使用GuildMember
对象查找某个通道是没有意义的,而我们可以改用Message
对象,如下所示:
最终代码
module.exports = {
name: 'daftar',
description: "This is for add roles to a member",
execute(message, args) {
let role = message.guild.roles.cache.find(r => r.name === "Members")
if (message.member.roles.cache.some(r => r.name === "Members")) {
message.channel.send('Kamu sudah menjadi MEMBER Di grup ini');
} else {
message.member.roles.add('817360044622217276');
message.member.roles.remove('817965925122048010');
message.channel.send('Baiklah silahkan menikmati Server');
message.guild.channels.cache.get('817957997312737290').send(`Selamat Datang <@${GuildMember.user.id}>`)
}
}
}