@outplayedrq

Как я могу при заходе на определённый voice канал создавать под ним другой voice канал и при выходе всех пользователей из этого канала, удалять его?

Хотелось бы сделать небольшой функционал для своего дискорд канала. При заходе в определённый 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()
    }
})
  • Вопрос задан
  • 206 просмотров
Пригласить эксперта
Ответы на вопрос 1
KIRIK12
@KIRIK12
Замените
if (channelCreate.members.size === 0) {
        channelCreate.delete()
    }
на
if (channelCreate.members.cache.array().length == 0) {
        channelCreate.delete()
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы