问题描述
所以这是代码:
final int TIME_TO_WAIT = 20;
public void onMessage(Message,message)
{
:
:
int t = message.getIntProperty("JMSXDeliveryCount");
if(t > 1)
{
// Figure out a way to wait for (TIME_TO_WAIT * t)
}
}
catch(Exception e)
{
// Do some logging/cleanup etc.
throw new RunimeException(e);// this causes a message retry
}
运行机器人时,出现错误消息:
const mutedRole = message.guild.roles.cache.find(role => role.name === "Muted");
if (!mutedUser) return message.channel.send()
if (!message.author) return;
if (!mutedRole) {
message.guild.roles.create({
data: {
name: 'Muted',color: '#6C877C',permissions: ["CREATE_INSTANT_INVITE","VIEW_CHANNEL"],},})
.catch(console.error);
}
mutedUser.roles.add(mutedRole).catch(console.error);
从代码上可以看到,我添加了机器人将在其中扮演角色的部分(当角色不可用时)。但是,它仍然认为该角色永远不存在。
在复制此代码之前,我还编写了如下代码:
2020-08-14T05:22:08.731213+00:00 app[Worker.1]: TypeError: Cannot read property 'add' of undefined
2020-08-14T05:22:08.731236+00:00 app[Worker.1]: at Object.execute (/app/commands/mute.js:69:29)
2020-08-14T05:22:08.731236+00:00 app[Worker.1]: at Client.<anonymous> (/app/bread.js:111:14)
2020-08-14T05:22:08.731238+00:00 app[Worker.1]: at Client.emit (events.js:315:20)
2020-08-14T05:22:08.731239+00:00 app[Worker.1]: at MessageCreateAction.handle (/app/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
2020-08-14T05:22:08.731241+00:00 app[Worker.1]: at Object.module.exports [as MESSAGE_CREATE] (/app/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
2020-08-14T05:22:08.731242+00:00 app[Worker.1]: at WebSocketManager.handlePacket (/app/node_modules/discord.js/src/client/websocket/WebSocketManager.js:386:31)
2020-08-14T05:22:08.731242+00:00 app[Worker.1]: at WebSocketShard.onPacket (/app/node_modules/discord.js/src/client/websocket/WebSocketShard.js:436:22)
2020-08-14T05:22:08.731242+00:00 app[Worker.1]: at WebSocketShard.onMessage (/app/node_modules/discord.js/src/client/websocket/WebSocketShard.js:293:10)
2020-08-14T05:22:08.731243+00:00 app[Worker.1]: at WebSocket.onMessage (/app/node_modules/ws/lib/event-target.js:125:16)
2020-08-14T05:22:08.731244+00:00 app[Worker.1]: at WebSocket.emit (events.js:315:20)
结果仍然相同。 我还将机器人的角色放在了测试服务器上所有角色的最顶层。谁能找到原因?
我目前正在使用discord.js v12和稳定版本的节点。
注意:此处为完整代码:https://github.com/centralomd/breadbot/blob/master/commands/mute.js
解决方法
错误来自第14行:
const mutedUser = message.mentions.users.first() || message.guild.members.get(args[0])
如果message.mentions.users
集合中没有提及,则您尝试使用GuildMember
获得message.guild.members.get()
。
Discord JS v12引入了管理器的概念,您将不再能够在Collection.get()
和Client.users
之类的数据结构上直接使用诸如Guild.members
之类的Collection方法。
您必须使用以下方法进行更改:
const mutedUser = message.mentions.users.first() || message.guild.members.cache.get(args[0])
if (!mutedUser) return message.channel.send("Invalid user.");
注意:message.mentions.users
也将使用户进入其他行会。我建议您使用message.mentions.members
。