Как сделать автоматическое изменение название определенных каналов 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 шт):
Ну для начала, чтобы 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="Нужное имя")
Это не то, мне нужно именно через таск. Автоматическая смена статуса бота будет реализована так:
@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()
Мне нужно тоже самое, только для автоматического изменения названия каналов