繁体   English   中英

discord.py - 未返回更改的权限

[英]discord.py - Not Returning Changed Permissions

我希望我的机器人打印添加和删除的权限,但即使我更改了权限,我的机器人也没有返回任何内容

这是我的代码:

async def on_server_role_update(before, after):
    list_a = []
    list_b = []
    list_a.append(str([p[0] for p in before.permissions]))
    list_b.append(str([p[0] for p in after.permissions]))
    dif_add = set(list_b).difference(list_a)
    dif_rem = set(list_a).difference(list_b)
    print("Added Permissons: " + ", ".join(dif_add))
    print("Removed Permissons: " + ", ".join(dif_rem))

首先在更新的discord py中它不是on_server_role_update而是on_guild_role_update ,不再支持旧版本所以我建议你更新。

其次,在设置后尝试打印list_alist_b ,你会看到你只获得所有权限名称的列表: ['add_reactions', 'administrator', 'attach_files', 'ban_members', ....怎么会你比较一下?

你也错过了非常重要的陈述:

if before.permissions != after.permissions:

你需要它,因为on_server_role_update aka on_guild_role_update将触发多个事件,如名称更改,描述更改,可提及的更改,位置更改,颜色更改等

所以对于一个很好的干净代码:

if before.permissions != after.permissions:
        diff = list(set(after.permissions).difference(set(before.permissions)))
        # diff will be a list which has changed roles and their state AFTER the change, example:
        # [('manage_channels', True), ('view_audit_log', True), ('manage_roles', True), ('manage_guild', False)]
        for changed_perm in diff:
            print(f"Changed role permission {changed_perm[0]} to {changed_perm[1]}")

示例输出:

Changed role permission manage_channels to True
Changed role permission view_audit_log to True
Changed role permission manage_roles to True
Changed role permission manage_guild to False

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM