javascript - 无法读取 null 的属性“角色”
问题描述
我希望我的机器人向加入我的服务器的用户发送私人消息。
为此,我使用了:
client.on('guildMemberAdd', member => {
const channel = member.guild.channels.find(ch => ch.name === 'benvenuto');
channel.send(`Date il benvenuto a ${member}!`);
member.send('test');
});
一旦用户加入服务器,我就会收到此错误:
TypeError: Cannot read property 'roles' of null
at Client.client.on.message (C:\Users\Kikkiu\Desktop\BotTuttofare\index.js:9:19)
[...]
该错误将我带到了这部分代码:
if(message.member.roles.find(r => r.name === "Admin") || message.member.roles.find(r => r.name === "Mod")) {
if(!message.author.bot) {
if(message.content == '.del50')
message.channel.bulkDelete(50)
if(message.content == '.del100')
message.channel.bulkDelete(100)
if(message.content == '.del1')
message.channel.bulkDelete(2)
if(message.content == '.del10')
message.channel.bulkDelete(10)
if(message.content == '.del2')
message.channel.bulkDelete(3)
}}
如果我删除发送私人消息的部分,我不会收到此错误。会是什么呢?
解决方案
我不认为你可以在这样的成员中找到角色。您使用.find()
公会 ( member.guild.roles.find(r => r.name == "Admin")
)
如果您想检查他们是否获得了 corect 角色,这样的事情应该可以工作:
let adminRole = message.guild.roles.get("ADMIN_ROLE_ID") //same with mod role
if (message.member.roles.has(adminRole.id)) {
//If they have admin & mod role they can do this
} else {
//If they do not have the one of the roles, this happens. Either just do return; or do //something like dm them that they don't have roles/permissions
}
但是我确实建议您为此使用单独的逗号来使用 args 或其他东西来定义您想要在频道中批量处理多少,这只是令人困惑。
推荐阅读
- git - 如何删除要求凭据的 github 登录弹出窗口?
- asp.net - 在 ASP.NET Web 窗体中使用 OpenId Connect 时的身份验证 Cookie 超时
- python - 如果其中一个值为空,Python 会继续打印。csv字典
- java - 访问同一包的另一个类中的嵌套类
- arrays - GNU Octave/Matlab:如何获取数组中三个最大值的索引?
- java - JScrollPane 不显示
- mysql - 批处理模式下的mysql
- javascript - React Native 错误:路由“Home”的组件必须是 React 组件
- pandas - Python 3.9.1 - Numpy 1.19.4
- node.js - 如何将nodejs连接到SQL Server