Статус ботов изменен на

#python #discord #discord.py

#python #Discord #discord.py

Вопрос:

Я пытаюсь заставить моего бота автоматически изменить свой статус discord, но он меняется на <itertools.cycle object at 0x03EA9488>

Это все в шестеренке, и без кода изменения статуса все работает отлично. Я не получаю никаких ошибок.

Это код, который я использую:

 import discord
from discord.ext import commands, tasks
from itertools import cycle

status = cycle(['status 1', 'status 2', 'status 3'])

class OnReady(commands.Cog):

    def __init__(self, client):
        self.client = client

    @tasks.loop(seconds=10)
    async def change_status(self):
        await self.client.change_presence(status=discord.Status.idle, activity=discord.Game(status))

    @commands.Cog.listener()
    async def on_ready(self):
        self.change_status.start()
        print('Bot is online.')

def setup(client):
    client.add_cog(OnReady(client))
  

Любая помощь приветствуется. Спасибо тебе.

Ответ №1:

Ну, да. Вы устанавливаете переменную состояния в

 cycle(['status 1', 'status 2', 'status 3'])
  

который является

 itertools.cycle object
  

точно так, как там написано. Цикл — это бесконечно повторяющийся объект, который работает следующим образом:

 >>> import itertools
>>> c = itertools.cycle([1, 2, 3])
>>> next(c)
1
>>> next(c)
2
>>> next(c)
3
>>> next(c)
1
  

Я не знаю, что discord.Game такое, но, исходя из контекста, который вы, вероятно, захотите изменить activity = discord.Game(status) , который вызывает discord.Game со всем циклом в качестве параметра, на activity = discord.Game(next(status)) .