我已经把一个愚蠢的机器人放在一起,当提示时,它将加入一个声音频道,并播放一个戈登·拉姆齐的剪辑。经过一些尝试和错误之后,语音功能工作得很好。目前,我正在尝试让它,DM,一个列表的mp3是可用的,但我遇到了一个错误。我认为我对DM的if语句用户正在与我的逻辑交互,在语音信道中播放一个随机的mp3。我对这件事还是很陌生的。
client.on('message', async message => {
if(message.member.voice.channel && message.content === `${prefix}list`) {
message.author.send('placeholder');
}
if (message.member.voice.channel && message.content === `${prefix}gordon`) {
const connection = await message.member.voice.channel.join();
const dispatcher = connection.play(mp3[Math.floor(Math.random() * mp3.length)]);
dispatcher.on('start', () => {
console.log('Audio is now playing!\n Deleting command in chat.');
message.delete();
});
dispatcher.on('finish', () => {
console.log('Audio has finished playing!');
connection.disconnect();
});
dispatcher.on('error', console.error);
}});它成功地发送了DM,但是它有错误。
```(node:14168) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'voice' of null在客户那里。(c:\Users\Havok\Desktop\GordonBot\index.js:53:20)
在Client.emit (events.js:310:20)
在(c:\Users\Havok\Desktop\GordonBot\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14) MessageCreateAction.handle
在Object.module.exports as MESSAGE_CREATE
在(c:\Users\Havok\Desktop\GordonBot\node_modules\discord.js\src\client\websocket\WebSocketManager.js:386:31) WebSocketManager.handlePacket
在(c:\Users\Havok\Desktop\GordonBot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:436:22) WebSocketShard.onPacket
在(c:\Users\Havok\Desktop\GordonBot\node_modules\discord.js\src\client\websocket\WebSocketShard.js:293:10) WebSocketShard.onMessage
在(c:\Users\Havok\Desktop\GordonBot\node_modules\ws\lib\event-target.js:125:16) WebSocket.onMessage
在WebSocket.emit (events.js:310:20)
在Receiver.receiverOnMessage
```javascript(节点:14168) UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误起源于在异步函数中抛出而不带catch块,或者拒绝使用.catch()处理的承诺。若要在未处理的允诺拒绝时终止节点进程,请使用CLI标志--unhandled-rejections=strict (请参阅https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。(拒绝证: 1)
(节点:14168) DEP0018 DeprecationWarning:未处理的承诺拒绝被取消。在未来,承诺不处理的拒绝将使用非零退出代码终止Node.js进程。
发布于 2020-05-20 01:22:59
当机器人接收到DM消息时,message.member将是null (因为它不能是公会成员;它不是以公会的形式发送的)。
在尝试使用message.member.voice或播放音乐之前,先检查消息是否以公会的形式发送:
client.on('message', async message => {
if (!message.guild) return;
// rest of code...
})发布于 2020-05-20 02:07:36
dm用户
message.user.send("msg");
client.on('message', async message => {
if(message.member.voice.channel && message.content === `${prefix}list`) {
messsge.user.send("Message");
}
})https://stackoverflow.com/questions/61903330
复制相似问题