權限設定檔
權限設定檔控制可執行哪些 discli 指令。當 discli 以 AI 代理的子程序執行時,這個機制非常重要,可限制代理可做的操作。
內建設定檔
full
完整權限,允許所有指令。預設值即為 full。
{ "description": "Full access to all commands", "allowed": ["*"], "denied": []}chat
訊息、反應、討論串、輸入狀態、DM、接聽、服務模式、設定、伺服器查詢。封鎖會造成破壞性的審核與基礎建設操作。
{ "description": "Messages, reactions, threads, typing only", "allowed": [ "message", "reaction", "thread", "typing", "dm", "listen", "serve", "config", "server" ], "denied": [ "member kick", "member ban", "member unban", "member timeout", "channel delete", "role delete", "role create", "channel create", "message bulk-delete", "webhook delete", "event delete" ]}readonly
唯讀權限。只允許 list、info、get、search 與 listen。其他行為預設全部拒絕。
{ "description": "Read-only: list, info, get, search, listen", "allowed": [ "message list", "message get", "message search", "message history", "channel list", "channel info", "server list", "server info", "role list", "member list", "member info", "reaction list", "thread list", "listen", "config show" ], "denied": ["*"]}moderation
包含所有指令與 moderation 動作的完整權限。功能上等同 full。
{ "description": "Full access including moderation", "allowed": ["*"], "denied": []}檢查目前權限檔
discli permission show純文字輸出:
Active profile: chatDescription: Messages, reactions, threads, typing onlyAllowed: message, reaction, thread, typing, dm, listen, serve, config, serverDenied: member kick, member ban, member unban, member timeout, channel delete, role delete, role create, channel create, message bulk-delete, webhook delete, event delete使用 --json:
{ "active_profile": "chat", "description": "Messages, reactions, threads, typing only", "allowed": ["message", "reaction", "thread", "typing", "dm", "listen", "serve", "config", "server"], "denied": ["member kick", "member ban", "member unban", "member timeout", "channel delete", "role delete", "role create", "channel create", "message bulk-delete", "webhook delete", "event delete"]}設定目前權限檔
discli permission set <profile><profile> 可使用 full、chat、readonly、moderation。
範例:
discli permission set readonly輸出:
Permission profile set to: readonly (Read-only: list, info, get, search, listen)設定會儲存在 ~/.discli/permissions.json。
列出所有設定檔
discli permission profiles單次命令覆蓋
使用 --profile 全域參數可覆蓋目前設定,只套用到單一指令,不修改持久化設定:
discli --profile readonly message list general也可以用 DISCLI_PROFILE 環境變數:
DISCLI_PROFILE=chat discli message send general "Hello"自訂權限檔
可直接編輯 ~/.discli/permissions.json。檔案格式如下:
{ "active_profile": "my-custom", "profiles": { "my-custom": { "description": "Only messaging and reactions", "allowed": ["message send", "message reply", "reaction add", "reaction remove"], "denied": ["*"] } }}自訂設定檔採用與內建相同比對規則;將 active_profile 設為自訂名稱即可啟用。
權限比對邏輯
執行指令時,discli 會先解析目前權限(來源順序:--profile、DISCLI_PROFILE 環境變數、~/.discli/permissions.json),再做以下判斷:
先比對 denied。 若任何 denied 規則符合,指令會被封鎖;只有在 denied 包含
"*"的情況下,且同時在 allowed 有明確放行時,才會放行(見步驟 2)。全域拒絕(
"*"在 denied)。 當denied包含"*"時,預設封鎖全部指令,只有 allowed 明確列出的指令才放行。readonly行為即如此。再比對 allowed。 若 denied 無任何命中,指令必須符合 allowed 規則才能執行。allowed 中若有
"*"則放行全部。
模式比對規則:
"*"符合全部指令。"message"符合message send、message list、message delete等message子指令。"message send"僅符合message send。"member kick"僅符合member kick。
比對邏輯是完整指令路徑完全相符,或以 pattern 開頭且後面接一個空白。也就是 "message" 能比對 message send,但不會比對 messaging。
Discord 權限對照表
部分指令仍需機器人本身在伺服器上具備對應 Discord 權限:
| 指令 | Discord 權限 |
|---|---|
member kick | kick_members |
member ban / member unban | ban_members |
member timeout | moderate_members |
message delete / message bulk-delete | manage_messages |
channel create / channel delete / channel edit | manage_channels |
role create / role delete / role edit | manage_roles |
webhook create / webhook delete | manage_webhooks |
event create / event delete | manage_events |
危險操作保護
即使未受權限檔限制,以下指令仍需互動確認:
member kickmember banmember unbanmember timeoutchannel deletemessage deletemessage bulk-deleterole deletewebhook deleteevent delete
可加上 --yes / -y 全域旗標跳過確認(例如腳本、代理自動化)。破壞性動作都會寫入稽核日誌 ~/.discli/audit.log。