我有一些代码可以检测某人何时输入命令 role
并为他们赋予角色,并将第一个参数的名称传递给命令 (args[0]
)。例如,机器人会尝试检测诸如 !role nameOfTheRole
之类的东西,这将为用户提供名称为 nameOfTheRole
的角色。
但是,代码不起作用,我不知道为什么。这是我到目前为止所得到的:
var cmdmap = {
role: gimmerole
}
function gimmerole(member, args, message) {
var memb = message.member() //<------- ERROR
const role = memb.guild.roles.find(r => r.name == args[0])
memb.roles.add(role)
}
client.on('message', (msg) => {
var cont = msg.content,
author = msg.member,
chan = msg.channel,
guild = msg.guild
if (author.id != client.user.id && cont.startsWith(config.prefix)) {
var invoke = cont.split(' ')[0].substr(config.prefix.length),
args = cont.split(' ').slice(1)
console.log(invoke, args)
if (invoke in cmdmap) {
cmdmap[invoke](msg, args)
}
}
})
答案 0 :(得分:0)
我注意到您试图寻找角色的方式不当。为了获得完整的角色集合,您需要使用 cache
的 message.guild.roles
方法,结果如下:
const roleObject = memb.guild.roles.cache.find(...);
答案 1 :(得分:0)
我对您的代码进行了一些修改:
function gimmerole(member, args, message) {
行更改为 function gimmerole(message, args) {
,就像在 cmdmap[invoke](msg, args);
行中一样,您使用消息对象和参数调用它,因此消息被分配给 {{ 1}} 而 member
本来是 message
。undefined
更改为 message.member()
,因为 message.member
是 member
的属性,而不是方法。message
),以便在角色不存在时将机器人记录到控制台。if (!role) return console.log(`The role "${args[0]}" does not exist`);
更改为 args[0]
以启用要指定空格的角色。args.join(' ')
如果您想要跟随某些东西,可以使用 Discord.js Guide。这真的很有帮助而且很详细。
答案 2 :(得分:0)
var cmdmap = {
role: gimmerole
};
函数 gimmerole(message, args) {
const member = message.member;
const role = message.guild.roles.cache.find(r => r.name === args.join(' '));
if (!role) return console.log(`The role "${args.join(' ')}" does not exist`);
member.roles.add(role);
}
client.on('message', (msg) => {
var cont = msg.content,
author = msg.member,
chan = msg.channel,
guild = msg.guild;
if (author.id !== client.user.id && cont.startsWith(config.prefix)) {
const [invoke, ...args] = cont.slice(config.prefix.length).trim().split(' ');
console.log(invoke, args);
if (invoke in cmdmap) {
cmdmap[invoke](msg, args);
}
}
}