#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
, поэтому я предложил распечатать некоторые материалы. Убедитесь, что вы вызываете ее в правильной гильдии и что имя указано правильно.