javascript - 我如何定义公会(discord.js)
问题描述
我正在尝试制作一个不和谐的机器人,当您键入 !mute @user 时,它会为他们提供静音角色,如果没有静音角色,它会创建一个并将其添加给用户。这是我的代码: else if (message.content.startsWith( ${prefix}mute
)) {
let role = message.guild.roles.cache.find(x => x.name == 'mute');
if(!role) {
guild.roles.create({
data: {
name: 'mute haha',
color: 'GRAY',
},
reason: 'you probably spammed',
})
.then(console.log)
.catch(console.error);
}
const user = message.mentions.users.first();
if (user) {
const member = message.guild.members.resolve(user);
if (member) {
let mute = message.guild.roles.cache.find(role => role.name === "mute");
member.addRole(mute);
} else {
message.channel.send("That user isn't in this server");
}
} else {
message.channel.send("You didn't mention the user to kick");
}
这是我尝试运行它时遇到的错误:
C:\Users\COOKIE\Desktop\bot\main.js:157
guild.roles.create({
^
TypeError: Cannot read properties of undefined (reading 'roles')
at Client.<anonymous> (C:\Users\COOKIE\Desktop\bot\main.js:157:10)
at Client.emit (node:events:390:28)
at MessageCreateAction.handle (C:\Users\COOKIE\Desktop\bot\node_modules\discord.js\src\client\actions\MessageCreate.js:31:18)
at Object.module.exports [as MESSAGE_CREATE] (C:\Users\COOKIE\Desktop\bot\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
at WebSocketManager.handlePacket (C:\Users\COOKIE\Desktop\bot\node_modules\discord.js\src\client\websocket\WebSocketManager.js:350:31)
at WebSocketShard.onPacket (C:\Users\COOKIE\Desktop\bot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:443:22)
at WebSocketShard.onMessage (C:\Users\COOKIE\Desktop\bot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:300:10)
at WebSocket.onMessage (C:\Users\COOKIE\Desktop\bot\node_modules\ws\lib\event-target.js:199:18)
at WebSocket.emit (node:events:390:28)
at Receiver.receiverOnMessage (C:\Users\COOKIE\Desktop\bot\node_modules\ws\lib\websocket.js:1022:20)
解决方案
guild
未定义的错误状态,那是因为guild
实际上是消息对象的属性,所以你应该这样做
message.guild.roles.create()
并确保您检查该命令是在公会中运行而不是在用户的 DM 中运行,否则公会将是未定义的
if (!message.guild) return console.log('command is being run outside a server');
message.guild.roles.create(/* do ur stuff*/);
// rest of the code
推荐阅读
- python - Jupyter 笔记本出现故障
- python - ANSIBLE:使用多个变量循环复杂的字典
- vaadin - Vaadin:将值设置为“来自服务器”的 TextField 不会触发 CustomField::generateModelValue
- puppeteer - 为什么 puppeteer 在管道中找不到选择器
- sql-server - SQL Server 服务代理端对话在启动器队列上创建新条目
- typescript - 将值从 AppComponent 传递到任何路由组件
- r - R内存错误(RStudio)在命令过程中执行
- openapi - 如何使用 OpenApi 3 记录这种结构?
- flutter - 在 Flutter 中使用 ListView 从 API 检索 json 对象列表时。拥有有状态或无状态小部件是否正确?
- java - JMeter Java 测试 - JSON 中的 ${__UUID()} 函数不起作用