Создание нумерованных каналов discord

Моя задача следующая:

Пользователь 1 создает канал - название канала должно быть 1.

После пользователь 2 создает канал - название канала должно быть 2.

После пользователь 1 выходит из своего канала и он удаляется.

Далее пользователь 3 создает канал и название канала должно быть 1 (То есть заполнило пропуск в последовательности. Всегда новый канал должен заполнять пропуск, если он есть)

Сейчас имею текущий код, пояснение ниже:

class App:
    def __init__(self):
        self.channels = self.generate_channels()

    @staticmethod
    def generate_channels():
        return [i for i in range(0, 1)]

    def append_channel(self, channel_to_add):
        for channel in self.channels:
            if channel is None:
                self.channels[self.channels.index(channel)] = channel_to_add
                break
        else:
            self.channels.append(channel_to_add)

    def remove_channel(self, channel_to_remove):
        for channel in self.channels:
            if channel == channel_to_remove:
                self.channels[self.channels.index(channel)] = None
                break
            else:
                raise ValueError(f'Not Found {channel_to_remove}')

app = App()

@client.event
async def on_voice_state_update(member, before, after, app=app):
    if before.channel is None and after.channel is not None:
            get_vc_data = func.member_channel_data(member=member)
            if get_vc_data[0] == '0':
                category = discord.utils.get(guild.categories, name = 'voices')

#4 строчки ниже, это для красивых цифр, это можно просто пропустить

                channel_num = ''
                for char in app.channels:
                    if char is not None:
                        channel_num = indexes[char] or ""
    
                app.append_channel(maximum(app.channels) + 1)
                create_vc = await category.create_voice_channel(f"{channel_num}", overwrites=None, reason=None)
                create_txt = await category.create_text_channel(f"{channel_num}", overwrites=None, reason=None)
            elif get_vc_data[0] == '1':
                try:
                    category = discord.utils.get(guild.categories, name = 'voices')
                    channel_num = ''
                    for char in app.channels:
                        channel_num = indexes[char] or ""
                    app.append_channel(maximum(app.channels) + 1)
                    create_vc = await category.create_voice_channel(f"{channel_num}", overwrites=None, reason=None)
                    create_txt = await category.create_text_channel(f"{channel_num}", overwrites=None, reason=None)


    elif before.channel is not None and after.channel is None:
        get_vc_data = func.member_channel_data(member=member)
        await asyncio.sleep(5)
        vc_to_delete = client.get_channel(int(get_vc_data[1]))
        txt_to_delete  = client.get_channel(int(get_vc_data[2]))
        await vc_to_delete.delete()
        await txt_to_delete.delete()

# back_indexes[vc_to_delete.name] - это штука, которая возвращает из красивых цифр - нормальные. Можно пропустить эту строчку и использовать обычные

        num_del = back_indexes[vc_to_delete.name]
        app.remove_channel(int(num_del))

def maximum(list_of_numbers: list) -> int:
    number_i = 0
    for i in list_of_numbers:
        if i == None:
            return number_i-1
            break
        else:
            return max([i for i in list_of_numbers])
        number_i = i

На данный момент оно создает каналы c последовательными цифрами, но не заполняет (а иногда и заполняет, но криво) пропуски.


Ответы (0 шт):