我正在尝试为 discord bot (js) 制作离开/断开 VC 命令,我遇到了下面讨论的一些问题
Posted
技术标签:
【中文标题】我正在尝试为 discord bot (js) 制作离开/断开 VC 命令,我遇到了下面讨论的一些问题【英文标题】:I'm trying to make leave/disconnect VC command for discord bot (js), I'm facing some issues discussed bellow 【发布时间】:2021-06-26 03:48:35 【问题描述】:代码不能完美运行,我发现了几个问题:
-
当我连接到
VC
并尝试一次尝试命令 bot leaves the VC
但 triggers two functions
时,即 General leave function 并且 author 不在同一频道。
当我发出命令 being outside the VC
(连接到 VC 的机器人)时,机器人会响应函数 我们不在同一个频道功能中。,我希望 it to respond
与 你'没有连接到 VC
当我在being outside VC
和bot not connected to VC
发出命令时,它没有任何反应,at console
我得到错误:
(node:37) UnhandledPromiseRejectionWarning: TypeError: cannot read property "id" of undefined
代码:
client.on('message', async (message) =>
const args = message.content.slice(prefix.length).trim().split(/ +/);
const command = args.shift().toLowerCase();
if (command === 'leave')
let authorVoice = message.member.voice;
const embed1 = new discord.MessageEmbed()
.setTitle('????`You are not in a Voice Channel!`')
.setColor('RED')
.setTimestamp();
if (!authorVoice.channel) return message.channel.send(embed1);
const embed2 = new discord.MessageEmbed()
.setTitle('⛔`We are not in a same Voice Channel`')
.setColor('YELLOW')
.setTimestamp();
if (authorVoice.channel.id !== client.voice.channel.id)
return message.channel.send(embed2);
const embed = new discord.MessageEmbed()
.setTitle('`Successfully left the Voice Channel`✔')
.setColor('RED')
.setTimestamp();
authorVoice.channel.leave()
message.channel.send(embed);
);
有人可以帮我解决吗?
【问题讨论】:
【参考方案1】:client.voice
没有 channel
属性。这意味着client.voice.channel
未定义。当您尝试读取其中的id
时,您会收到错误消息:“无法读取未定义的属性“id””。
您可能想要connections
,它是VoiceConnection
s 的集合。连接确实具有 channel
属性,但由于 client.voice.connections
是一个集合,您需要先找到您需要的那个。
由于您只想检查是否存在具有相同ID的频道,您可以使用.some()
方法。在其回调函数中,您检查是否有任何连接具有与消息作者的频道 ID 相同的频道 ID。因此,您可以创建一个返回布尔值的变量,而不是 if(authorVoice.channel.id !== client.voice.channel.id)
。如果机器人在同一频道,则返回true
,否则返回false
:
const botIsInSameChannel = client.voice.connections.some(
(c) => c.channel.id === authorVoice.channel.id,
);
// bot is not in the same channel
if (!botIsInSameChannel)
return message.channel.send(embed2);
【讨论】:
【参考方案2】:如果有人关注,这里是更新的代码:
client.on('message', async message =>
const args = message.content.slice(prefix.length).trim().split(/ +/);
const command = args.shift().toLowerCase();
if (command === 'leave')
let authorVoice = message.member.voice;
const botIsInSameChannel = client.voice.connections.some(
(c) => c.channel.id === authorVoice.channel.id,
);
const embed1 = new discord.MessageEmbed()
.setTitle(':no_entry_sign: You are not in a Voice Channel!')
.setColor('RED')
.setTimestamp();
if(!authorVoice.channel) return message.channel.send(embed1);
const embed2 = new discord.MessageEmbed()
.setTitle(':no_entry: We are not in a same Voice Channel')
.setColor('YELLOW')
.setTimestamp();
if (!botIsInSameChannel) return message.channel.send(embed2)
const embed = new discord.MessageEmbed()
.setTitle('Successfully left the Voice Channel✔')
.setColor('RED')
.setTimestamp();
authorVoice.channel.leave();
message.channel.send(embed);
);
【讨论】:
以上是关于我正在尝试为 discord bot (js) 制作离开/断开 VC 命令,我遇到了下面讨论的一些问题的主要内容,如果未能解决你的问题,请参考以下文章
从数组中获取项目并将其删除,直到 Discord JS bot 的数组为空
Discord.js Bot 赠品命令:.array() 不是函数
Discord bot 在尝试播放链接后崩溃(Node.js)