(Discord.js) 如何让所有成员连接到某个类别的语音频道?
Posted
技术标签:
【中文标题】(Discord.js) 如何让所有成员连接到某个类别的语音频道?【英文标题】:(Discord.js) How do i get all the members connected to the voice channels of a category? 【发布时间】:2019-10-27 11:24:02 【问题描述】:所以,我正在制作一个名为“movedebat”的命令,将所有连接到频道类别的语音频道的成员移动到专用于辩论的频道。
为了实现我的目标,我试图获取所有连接成员的列表,然后使用 for(member in members) 循环并移动每个成员。
let debate_channel = message.guild.channels.find(c => c.id === '497910775512563742');
let group_of_channels = message.guild.channels.find(c => c.id === '497908108803440653');
let connected_members = message.guild.channels.filter((c => parentID === group_of_channels.id)&&(c => c.type == 2)).members;
if(message.member.permissions.has('ADMINISTRATOR'))
for(connected_member in connected_members)
console.log(connected_member.id);
connected_member.setVoiceChannel(debate_channel)
.then(() => console.log(`Moved $connected_member.displayName`))
.catch(console.error);
问题是它根本不起作用。我没有收到任何错误,无论是机器人本身在不和谐还是在控制台中。
我唯一得到的是警告DeprecationWarning: Collection#filterArray: use Collection#filter instead
,但我用谷歌搜索了它,人们似乎说这并不重要。
我认为有问题的行是'让 connected_members(...)members;'一。
我应该提到我希望在我的控制台中看到至少 1 个成员 ID,但我没有得到任何,这意味着 for 循环没有“执行”。
感谢您阅读我,我希望有人可以帮助! ^^
【问题讨论】:
【参考方案1】:当你声明connected_members
时,你应该在Collection.filter()
中使用一个单个函数。
Collection.filter()
返回另一个 Collection,其中 members
不是属性。您必须遍历每个频道才能获得其成员。
for...in
“遍历对象的所有非符号、可枚举的属性”(MDN)。在 Collection (Map) 中,元素不是属性,而是键值对。在这种情况下,您可以改用for...of
。
if (message.member.permissions.missing('ADMINISTRATOR')) return;
const channels = message.guild.channels.filter(c => c.parentID === '497908108803440653' && c.type === 'voice');
for (const [channelID, channel] of channels)
for (const [memberID, member] of channel.members)
member.setVoiceChannel('497910775512563742')
.then(() => console.log(`Moved $member.user.tag.`))
.catch(console.error);
旁注:使用 Map.get()
通过其 ID 从集合中查找值。
【讨论】:
天哪,非常感谢!我是 javascript 环境的新手,我不知道 for(..of..) 存在。谢谢!!! 很高兴我能帮上忙!如果它解决了您的问题,请随时使用左侧的复选标记接受此答案。以上是关于(Discord.js) 如何让所有成员连接到某个类别的语音频道?的主要内容,如果未能解决你的问题,请参考以下文章
Discord.js 如何列出具有特定角色的所有成员的显示名称