Как сделать автоматическое изменение название определенных каналов discord py

Я решил создать процесс, который будет автоматически менять название определенных каналов каждые 10 минут. Питон я учу несколько дней и мало что понимаю.

@tasks.loop(minutes=10.0)
async def change_status(self): 
    guild = self.bot.get_guild(920934903699365929)
    members = guild.members
    channels = [] 
    for channel in channels:
        channels.append(channel.id)
    channel = bot.get_channel(channels) 
    members_in_voice = len(channel.members)
    boosts = guild.premium_subscription_count
    bots = sum(member.bot for member in guild.members)
    print(f'{len(members_in_voice)}')
    member_stats = bot.get_channel ( 924678209751089212 )
    bot_stats = bot.get_channel ( 947888377183744052 ) 
    voice_users_stats = bot.get_channel ( 947903513768366100 )
    boosts_stats = bot.get_channel ( 947903896821596261 ) 
    await member_stats.edit(name=f'?| Участников: {len(members)}')
    await bot_stats.edit(name=f'?| Ботов: {bots}')
    await voice_users_stats.edit(name=f'?| Разговариают: {len(members_in_voice)}')
    await boosts_stats.edit(name=f'?| Бустов: {boosts}')

Оно не работает. Ошибок нет и как починить, понятия не имею. ПОодскажите пожалуйста


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

Автор решения: Universall

Ну для начала, чтобы loop заработал, нужно его запустить await название_функции.start(). Это можно сделать например в евенте on_ready. Затем нужно включить member indents, чтобы бот мог видеть участников сервера. Посмотреть как это сделать можно тут. Затем находим канал, и с помощью TextChannel.edit() меняем ему название на нужное. Вот пример, а дальше, я думаю, вы сами справитесь:

from discord.utils import get
async def test(self):
    guild = self.bot.get_guild(920934903699365929)  # Ищем сервер
    channel_1 = get(guild.text_channels, name="Название нужного канала 1")  # Ищем 1 канал, который нужно переименовать
    channel_2 = get(guild.text_channels, name="Название нужного канала 2")  # Ищем 2 канал, который нужно переименовать
    channel_3 = get(guild.text_channels, name="Название нужного канала 3")  # Ищем 3 канал, который нужно переименовать
    num_members = len(guild.members)  # Ищем кол-во людей на сервере
    speaking = 0 
    num_bots = 0
    for member in guild.members:  # Ищем кол-во ботов
        if member.bot:
            num_bots += 1
    for channel in guild.voice_channels:  # Ищем кол-во людей в голосовых каналах
        if channel.members:
            speaking += len(channel.members)

    await channel_1.edit(name="Нужное имя")  # Меняем названия
    await channel_2.edit(name="Нужное имя")
    await channel_3.edit(name="Нужное имя")
→ Ссылка
Автор решения: oogyre4ik

Это не то, мне нужно именно через таск. Автоматическая смена статуса бота будет реализована так:

    @tasks.loop(minutes=5.0) `
async def change_status(self):
    botstatus = discord.Activity(
    type = discord.ActivityType.watching, name=f'за {len(self.bot.users)} участниками')
    await self.bot.wait_until_ready()
    await self.bot.change_presence(activity=botstatus)

@change_status.before_loop
async def before_changetatus(self):
    print('Загружает активность')
    await self.bot.wait_until_ready()

Мне нужно тоже самое, только для автоматического изменения названия каналов

→ Ссылка