Discord.py автоматическое редактирование цвета роли

#python-3.x #discord.py-rewrite

#python-3.x #discord.py-переписать

Вопрос:

Я пытаюсь создать бота, используя discord.py , который может менять цвет роли роли каждые X секунд.

Я написал этот код :

 @client.command()
async def c(ctx):
    role=discord.utils.get(ctx.guild.roles, name='colour')
    user=ctx.message.author
    await user.add_roles(role)
    while True:
        g=random.randint(1000,16777215)
        await role.edit(name='colour', colour=discord.Colour(g))
        time.sleep(0.5)
 

Иногда это работает, но большую часть времени я не получаю никаких ошибок, и это ничего не дает.
Я почти уверен await role.edit(name='colour', colour=discord.Colour(g)) , что в этом и есть проблема, но я не могу понять, почему.

Спасибо за помощь.

Ответ №1:

Проблема заключается в выполнении бесконечного цикла, который меняет цвет каждые 0.5 секунды. Discord — это ratelimiting вы, потому что вы спамите API тысячами запросов. Попробуйте изменить цвет один раз (вместо цикла) и вручную вызывать команду каждые несколько секунд, и посмотрите, работает ли это каждый раз.

Не все ratelimits ошибки throw (например, отправка большого количества messages сразу приведет к их задержке и отправке только 5 каждые 5 секунд, но это не приведет к ошибке).

Комментарии:

1. Я удалил цикл и попытался изменить цвет вручную с помощью команды, но он по-прежнему не работает. Я не получаю никакого сообщения об ошибке. Я не уверен в том, как использовать role.edit и какое значение присвоено role .

2. Если имя роли colour означает, что вы тестируете эту команду в гильдии, и у гильдии есть вызываемая роль colour , тогда все должно быть в порядке. Помимо нескольких ненужных вещей, ваша команда выглядит правильно, я только что протестировал ее, и она хорошо работает для меня. Вы пробовали печатать все свои переменные, чтобы посмотреть, что из них получится? В том, как вы используете, нет ничего плохого role.edit , за исключением name устаревания, но это ничего не нарушает.

3. Так что это работает для вас, а не для меня xD. Значение роли — это цвет, но когда я пытаюсь что-то напечатать после await role.edit(name='colour', colour=discord.Colour(g)) , это не работает. Цвет роли существует, idk, почему цвет не меняется. Опять же, я не получаю никаких сообщений об ошибках, так что это очень странно. Есть идеи?

4. РЕДАКТИРОВАТЬ: я, наконец, получил эту ошибку: Traceback (most recent call last): File "C:Python39libsite-packagesdiscordextcommandscore.py", line 85, in wrapped ret = await coro(*args, **kwargs) File "C:UsersUSERDesktopholyFolderpythonDiscordmain.py", line 78, in c await user.add_roles(role) File "C:Python39libsite-packagesdiscordmember.py", line 664, in add_roles await req(guild_id, user_id, role.id, reason=reason) AttributeError: 'NoneType' object has no attribute 'id'

5. Это означает, что роль не может быть найдена, как есть None , поэтому я предложил распечатать некоторые материалы. Убедитесь, что вы вызываете ее в правильной гильдии и что имя указано правильно.