Причина, по которой он не работает должным образом, заключается в следующем:
status = cycle(["?help", "Welcoming People", f"Playing with {len(set(client.users))} users"])
Мы запускаем цикл с массивом, который не обновляется. Чтобы объяснить, давайте напечатаем это (интересующая нас строка):
f"Playing with {len(set(client.users))} users"
В момент создания строки мы вводим значения в этот момент. Это становится:
"Playing with 0 users"
Это будет использоваться в цикле удержания массива. Поскольку цикл знает только эту строку, он будет использовать только эту строку. Если вы хотите обновить строку, вы должны вручную изменить строку и обновлять ее каждый раз, когда она нам понадобится.
Я предлагаю вам создать свой собственный вариант цикла. Который обновляет строки. Один из способов сделать это:
last_string = 0
@tasks.loop(seconds=10)
async def change_status():
# Update the member count string
list[str_member_index] = f"Playing with {len(set(client.users))} users"
status_str = list[last_string]
await client.change_presence(status=discord.Status.idle, activity=discord.Game(status_str))
last_string += 1
if last_string == len(list):
last_string = 0
Этот код не завершен, так как вам все еще нужно присвоить str_member_index
, например. Но это будет через ваши статусы. А также обновите статус количества участников.