我用discord.js开发了一个机器人,它使用msg.member.hasPermission("ADMINISTRATOR")
或msg.member.roles.cache.has(teacherRoleID)
之类的东西。一切都很好,直到我尝试了webhook。通过添加这两行:
client.on('ready', () => {
client.user.setStatus("online")
client.user.setActivity("!help", {
type: "PLAYING",
});
superConsole(`Logged in as ${client.user.tag} in ${client.guilds.size} guilds!`);
const hook = new Discord.WebhookClient("ID", "secret token"); // THESE
hook.send("I am now alive!"); // LINES
});
(btw超级控制台是一个函数(从那以后,该程序不再工作,并且总是返回相同的错误:(node:20736) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'hasPermission' of null
&(node:20736) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'roles' of null
当我删除webhook的这两行时,它又起作用了。为什么?我不明白。
权限和角色在消息侦听器中:
client.on('message', async msg => {
if (msg.member.hasPermission('ADMINISTRATOR') {
// some stuff here
}
if (msg.member.roles.cache.has(teacherRoleID) {
// some stuff here
}
});
问题是,当您从hook
发送消息时,它会触发客户端的message
事件。因为webhook不是公会成员,所以对于从webhook发送的消息,msg.member
将获得undefined
。
你必须使用这样的东西:
if (msg.member) {
if (msg.member.permissions.has('ADMINISTRATOR') {
// some stuff here
}
if (msg.member.roles.cache.has(teacherRoleID) {
// some stuff here
}
}