Я пытаюсь создать группу голосовых каналов на сервере разногласий, которые отображают статистику, но по какой-то причине моя задача не обновляется. Не уверен почему. Он создаст каналы, если их нет, но не обновит их, если они уже существуют.
@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} ')