Задача Discord Bot не обновляется - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь создать группу голосовых каналов на сервере разногласий, которые отображают статистику, но по какой-то причине моя задача не обновляется. Не уверен почему. Он создаст каналы, если их нет, но не обновит их, если они уже существуют.

@tasks.loop(seconds = 30)
async def serverstats():
    guild = discord.utils.get(bot.guilds)
    total_channels = len(guild.text_channels) + len(guild.voice_channels)
    list_channels = []
    perms = {
        guild.default_role: discord.PermissionOverwrite(connect = False, view_channel = True)
    }

    for channel in guild.channels:
        list_channels.append(channel.name)

    if 'Server Stats' not in list_channels:
        stat_category = await guild.create_category('Server Stats')
        stat_memb_channel = await guild.create_voice_channel(f'Users: {len(guild.members)} ', overwrites=perms, category = stat_category)
        stat_role_channel = await guild.create_voice_channel(f'Roles: {len(guild.roles)} ', overwrites=perms, category = stat_category)
        stat_voice_channel = await guild.create_voice_channel(f'Channels: {total_channels} ', overwrites=perms, category = stat_category)
    if 'Server Stats' in list_channels:
        await stat_memb_channel.edit(name = f'Users: {len(guild.members)}')
        await stat_role_channel.edit(name = f'Roles: {len(guild.roles)}')
        await stat_voice_channel.edit(name = f'Channels: {total_channels} ')

При дальнейшем исследовании удаление дна для l oop исправляет бот, останавливающий задачу l oop, но не решает мою проблему.

РЕДАКТИРОВАТЬ: Это убрал код от автора, который напечатал решение. Было несколько синтаксических ошибок, но общая идея кода была правильной.

@tasks.loop(seconds = 15)
async def serverstats():
    guild = discord.utils.get(bot.guilds)
    stat_memb_channel = None
    stat_role_channel = None
    stat_voice_channel = None
    stat_category = None
    bot_channel = None
    perms = {
        guild.default_role: discord.PermissionOverwrite(connect = False, view_channel = True)
    }

    for channel in guild.channels:
        if channel.name.startswith('Server Stats'):
            stat_category = channel
        if channel.name.startswith('Users: '):
            stat_memb_channel = channel
        if channel.name.startswith('Roles: '):
            stat_role_channel = channel
        if channel.name.startswith('Channels: '):
            stat_voice_channel = channel
        if channel.name.startswith('Bots: '):
            bot_channel = channel
    Bots = 0
    for member in guild.members:
        for role in member.roles:
            if role.name == 'Bot':
                Bots += 1


    if stat_category is None:
        stat_category = await guild.create_category('Server Stats')
    if bot_channel is None:
        bot_channel = await guild.create_voice_channel(f'Bots: {Bots} ', overwrites=perms, category = stat_category)
    else:
        await bot_channel.edit(name = f'Bots: {Bots}')
    if stat_memb_channel is None:
        stat_memb_channel = await guild.create_voice_channel(f'Users: {len(guild.members)} ', overwrites=perms, category = stat_category)
    else:
        await stat_memb_channel.edit(name = f'Users: {len(guild.members)}')
    if stat_role_channel is None:
        stat_role_channel = await guild.create_voice_channel(f'Roles: {len(guild.roles)} ', overwrites=perms, category = stat_category)
    else:
        await stat_role_channel.edit(name = f'Roles: {len(guild.roles)}')
    if stat_voice_channel is None:
        total_channels = len(guild.text_channels) + len(guild.voice_channels) 
        stat_voice_channel = await guild.create_voice_channel(f'Channels: {total_channels} ', overwrites=perms, category = stat_category)
    else:
        total_channels = len(guild.text_channels) + len(guild.voice_channels) 
        await stat_voice_channel.edit(name = f'Channels: {total_channels - 4} ')

1 Ответ

0 голосов
/ 05 апреля 2020

Вот один из способов сделать это:

@tasks.loop(seconds = 30)
async def serverstats():
    guild = discord.utils.get(bot.guilds)
    stat_memb_channel = None
    stat_role_channel = None
    stat_voice_channel = None
    stat_category = None
    perms = {
        guild.default_role: discord.PermissionOverwrite(connect = False, view_channel = True)
    }

    for channel in guild.channels:
        if channel.name.startswith('Server Stats'):
            stat_category = channel
        if channel.name.startswith('Users: '):
            stat_memb_channel = channel
        if channel.name.startswith('Roles: '):
            stat_roles_channel = channel
        if channel.name.startswith('Channels: '):
            stat_voice_channel = channel

    if stat_category is None:
        stat_category = await guild.create_category('Server Stats')
    if stat_memb_channel is None:
        stat_memb_channel = await guild.create_voice_channel(f'Users: {len(guild.members)} ', overwrites=perms, category = stat_category)
    else:
        await stat_memb_channel.edit(name = f'Users: {len(guild.members)}')
    if stat_role_channel is None:
        stat_role_channel = await guild.create_voice_channel(f'Roles: {len(guild.roles)} ', overwrites=perms, category = stat_category)
    else:
        await stat_role_channel.edit(name = f'Roles: {len(guild.roles)}')
    if stat_voice_channel is None:
        total_channels = len(guild.text_channels) + len(guild.voice_channels) + 1
        stat_voice_channel = await guild.create_voice_channel(f'Channels: {total_channels} ', overwrites=perms, category = stat_category)
    else:
        await stat_voice_channel.edit(name = f'Channels: {total_channels} ')
...