строка не имеет значения атрибута? - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть следующий скрипт,

for level in levels.keys():
    name=levels[level]['name']
    hoist=levels[level]['hoist']
    colour=levels[level]['colour']
    perms=levels[level]['permissions']
    await guild.create_role(name=name,hoist=hoist,permissions=perms)

Я использую этот скрипт со следующим словарем,

levels={"Admin":{"name":"Admin","hoist":"1","colour":"red","permissions":"8"},"Moderator":{"name":"Moderator","hoist":"1","colour":"yellow","permissions":"1610079683"},"Henchman":{"name":"Henchman","hoist":"1","colour":"yellow","permissions":"470011072"},"Member":{"name":"Member","hoist":"0","colour":"green","permissions":"67226688"},"Verify":{"name":"Verify","hoist":"1","colour":"white","permissions":""},"Leach":{"name":"Leach","hoist":"1","colour":"pink","permissions":""}}

Когда я запускаю скрипт, я получаю следующую ошибку,

Ignoring exception in command setup:
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/discord/ext/commands/core.py", line 83, in wrapped
    ret = await coro(*args, **kwargs)
  File "bot2.py", line 62, in setup
    await guild.create_role(name=name,hoist=hoist,permissions=perms)
  File "/usr/local/lib/python3.6/dist-packages/discord/guild.py", line 1576, in create_role
    fields['permissions'] = perms.value
AttributeError: 'str' object has no attribute 'value'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/discord/ext/commands/bot.py", line 892, in invoke
    await ctx.command.invoke(ctx)
  File "/usr/local/lib/python3.6/dist-packages/discord/ext/commands/core.py", line 797, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "/usr/local/lib/python3.6/dist-packages/discord/ext/commands/core.py", line 92, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'str' object has no attribute 'value'

Я понимаю, что строка не имеет значения, а объект не имеет значения, но я не понимаю, почему, когда perms объявляется и указывается равным значению словаря, он думает, что это строка или объект. Особенно, когда я использую тот же синтаксис, что и приведенные выше рабочие значения.

Что меня больше смущает, так это то, что если я использую следующий скрипт,

for level in levels.keys():
    perms=levels[level]['permissions']
    print(perms)

, он отлично работает и выдает следующий вывод:

8
1610079683
470011072
67226688

Включая печать двух пустых значений. (Я попытался изменить их на значение, но все равно получаю ошибку.)

Любая помощь, идеи и т. Д. c. будет оценена.

1 Ответ

0 голосов
/ 09 февраля 2020

Простой ответ: функция guild.create_role() ожидает как discord.Permissions объект для параметра permissions, и вы передаете строку.

Возможно, это будет работать:

await guild.create_role(name=name,hoist=hoist,permissions=discord.Permissions(int(perms)))

Ссылка на API может быть полезна: https://discordpy.readthedocs.io/en/latest/api.html

...