【问题标题】:discord py roles creation with permissions使用权限创建不和谐 py 角色
【发布时间】:2020-04-11 06:24:49
【问题描述】:

我已经将这个作为一个副项目工作了大约 2 个月,在我的一生中,我无法让机器人创建具有权限的角色。这是我所拥有的。

levels={
        "Admin":{"name":"ADMIN","hoist":"1","colour":"0x6F0A0A","permissions":""},
    "Moderator":{"name":"WATCHMEN","hoist":"1","colour":"0xFF611A","permissions":"discord.permissions(manage_roles=True,kick_members=True,ban_members=True,create_instant_invite=True,mention_everyone=True,change_nickname=True,manage_nicknames=True,read_message_history,send_messages=True,embed_links=True,send_tts_messages,attach_files=True,external_emojis=True,add-reactions=True)"},
    "Member":{"name":"MEMBER","hoist":"0","colour":"0x52D41A","permissions":"discord.permissions(send_messages=True)"},
    "Verify":{"name":"VERIFY","hoist":"1","colour":"0xFFFFFF","permissions":"discord.permissions(send_messages=True)"},

}

async def cook_roles(ctx):
    for level in levels.keys():
        guild=ctx.guild
        name=levels[level]['name']
        hoist=levels[level]['hoist']
        colour=levels[level]['colour']
      #  perms=levels[level]['permissions']
        if name == "Admin":
            perms=discord.Permissions.all()
        else:
            perms=discord.Permissions(levels[level]['permissions'])
        print=(perms)
        await ctx.send(perms)
        await guild.create_role(name=name,hoist=hoist,permissions=perms,colour=discord.Colour(int(colour,16)))

如有任何帮助,我们将不胜感激!

我尝试删除 discord.Permissions() 并像这样格式化 perms

perms=discord.Permissions(levles[level]['permissions'])

但这也没有用。 (我已经尝试了很多东西,但还没有弄清楚。)


这是第一个提供的答案的回溯:

Traceback(最近一次调用最后一次): 文件“/usr/local/lib/python3.6/dist-packages/discord/ext/commands/core.py”,第 83 行,已包装 ret = 等待 coro(*args, **kwargs) 文件“ny.py”,第 483 行,在构建中 等待厨师角色(ctx) 文件“ny.py”,第 551 行,在 cook_roles 中 await guild.create_role(name=name,hoist=hoist,permissions=perms,colour=discord.Colour(int(colour,16))) TypeError: int() 无法转换具有显式基数的非字符串

上述异常是以下异常的直接原因:

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: TypeError: int() can't convert non-string with explicit base

【问题讨论】:

  • 也使用了 .getvalue() 但没有这样的运气

标签: python-3.x discord.py


【解决方案1】:

你在dict中有一个字符串值,它不被认为是真实的对象。

您可以将任何类型的对象存储在 dicts 中,因此您需要做的基本上就是将 dict 中的值设为具有实际类型的实际对象。

您还尝试使用 permissions 模块而不是 Permissions 类。 并始终确保权限名称存在:discord.Permissions (您的错误在于缺少=Trueadd-reactions 而不是add_reactions

levels = {
    "Admin": {"name": "ADMIN", "hoist": True, "colour": 0x6F0A0A, "permissions": discord.Permissions()},
    "Moderator": {
        "name": "WATCHMEN",
        "hoist": True,
        "colour": 0xFF611A,
        "permissions": discord.Permissions(manage_roles=True,
        kick_members=True,
        ban_members=True,
        create_instant_invite=True,
        mention_everyone=True,
        change_nickname=True,
        manage_nicknames=True,
        read_message_history=True,
        send_messages=True,
        embed_links=True,
        send_tts_messages=True,
        attach_files=True,
        external_emojis=True,
        add_reactions=True),
    },
    "Member": {
        "name": "MEMBER",
        "hoist": False,
        "colour": 0x52D41A,
        "permissions": discord.Permissions(send_messages=True),
    },
    "Verify": {
        "name": "VERIFY",
        "hoist": True,
        "colour": 0xFFFFFF,
        "permissions": discord.Permissions(send_messages=True),
    },
}

【讨论】:

  • 这会产生一个回溯,我现在已将其包含在我的问题中。
  • int(str, base) 仅用于字符串转换,仅使用 discord.Colour(colour)
猜你喜欢
  • 1970-01-01
  • 2018-12-29
  • 2020-05-07
  • 1970-01-01
  • 2021-05-31
  • 2018-08-11
  • 2020-10-16
  • 2019-06-26
  • 1970-01-01
相关资源
最近更新 更多