Хотелось бы сделать небольшой функционал для своего дискорд канала. При заходе в определённый voice канал, под этим каналом создавался другой канал с названием ( ник пользователя's channel ), если выходят все пользователи из этого канала, то канал бы удалялся. Можно что-то похожее на пример, документации или подобное. Я нашёл видео где создаётся канал, но как его удалить... Я так и не смог найти ответ на этот вопрос.
У меня есть почти рабочий код, но с удалением канала тут проблемы. Да и код сам по себе мне не очень нравится, хотелось бы что-то более ёмкое. Хотелось бы увидеть хороший пример, подобного функционала, либо же как-то этот доработать или подсказочку, потому что я правда не могу понять, как я могу удалить канал, который создался. Айди созданного канала, я смог получить, но как его использовать в if, я не понимаю, так как он не сразу же его получает, а пока асинхронно дойдёт и поэтому выкидывает мне ошибку. Не понимаю, как я могу решить эту проблему, не переписав полностью этот функционал, как-то иначе, чего тоже пока не представляю как
const channelName = 'zzz'
const getVoiceChannels = (guild) => {
return guild.channels.cache.filter((channel) => {
return channel.type === 'voice' && channel.name === channelName
})
}
bot.on('voiceStateUpdate', async (oldState, newState) => {
const {guild} = oldState
const joined = !!newState.channelID
const channelId = joined ? newState.channelID : oldState.channelID
const channel = guild.channels.cache.get(channelId)
let channelCreate
if (channel.name === channelName) {
if (joined) {
const channels = getVoiceChannels(guild)
let hasEmpty = false
channels.forEach((channel) => {
if (!hasEmpty && channel.members.size === 0) {
hasEmpty = true
}
})
if (!hasEmpty) {
const {
bitrate,
parentID,
permissionOverwrites,
rawPosition
} = channel
async function createChannel() {
const tempo1 = await guild.channels.create("kanal " + newState.member.user.username + "'s", {
type: "voice",
bitrate,
userLimit: 99,
parent: parentID,
permissionOverwrites,
position: rawPosition
})
await newState.member.voice.setChannel(tempo1)
channelCreate = await guild.channels.cache.get(tempo1.id)
return tempo1
}
await createChannel()
}
}
}
if (channelCreate.members.size === 0) {
channelCreate.delete()
}
})