簡體   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