我制作了一个discord bot,如果用户输入特定的语音通道,则会临时创建另一个语音通道,然后将用户移入。但是该bot所创建的通道转到了discord服务器的顶部,并且进入“临时频道”。因此,您可以在屏幕上看到我的问题,临时频道会移动所有现有频道,并且服务器上是否有很多用户……这会造成问题。
https://gyazo.com/05853a3ba35d2850d60207459b0075ea
我尝试使用createChannel()或clone(),它可以工作,但存在相同的问题。
client.on('voiceStateUpdate', (oldMember, newMember) => {
const defaultCategory = '542554305194885120';
const defaultCreate = '541105891248701450';
if(newMember.voiceChannelID === defaultCreate){
newMember.guild.createChannel(`Salon de ${newMember.user.username}`, 'voice')
.then(tempChannel => {
tempChannel.setParent(defaultCategory);
newMember.setVoiceChannel(tempChannel.id);
})
.catch(console.error);
}
});
我想在“临时频道”类别中创建频道,而不是先在不和谐的服务器上先创建频道,然后再进入类别
谢谢您的帮助。
答案 0 :(得分:0)
我认为不可能直接将频道创建为类别频道的子频道。
client.guild.createChannel()
没有任何与排名相关的选项。
答案 1 :(得分:0)
这是Discord.js的
client.on('voiceStateUpdate', (oldMember, newMember) => {
// todo create channel
if (newMember.voiceChannel != null && newMember.voiceChannel.name.startsWith('+ ')) {
newMember.guild.createChannel(`- ${newMember.displayName}`, {
type: 'voice',
parent: newMember.voiceChannel.parent
}).then(cloneChannel => newMember.setVoiceChannel(cloneChannel))
}
// ! leave
if (oldMember.voiceChannel != undefined) {
if (oldMember.voiceChannel.name.startsWith('- ')) {
if (oldMember.voiceChannel.members.size == 0) {
oldMember.voiceChannel.delete()
}
else { // change name
let matchMember = oldMember.voiceChannel.members.find(x => `- ${x.displayName}` == oldMember.voiceChannel.name);
if (matchMember == null) {
oldMember.voiceChannel.setName(`- ${oldMember.voiceChannel.members.random().displayName}`)
}
}
}
}
});
感谢reddit vn中的Pie
您需要一个https://imgur.com/a/vQ8xwTY这样的创建频道
和https://discord.js.org/#/docs/main/stable/class/VoiceChannel?scrollTo=clone