[英]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_a
和list_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.