LNNBot/指令
指令是 LNNBot 功能的一類,基於 Koishi.js 框架的指令系統,可通過發送以斜槓(/)開頭的消息來調用,有共通的語法。
語法
在 Koishi.js 框架中,指令由名稱、若干參數和若干選項組成,其間使用空格、換行等空白字符分隔。一般情況下,指令選項和參數可以任意排列順序。
參數
參數可以是不含空白字符的內容或用引號(""、''、“”、‘’)包圍的任意內容,如果參數值本身就以引號開頭和結尾則需要再加一層引號(可以是相同的引號,如 ""content"")。
參數分為必填參數和可選參數,在指令用法中分別使用角括號和方括號包圍參數名表示,如指令 5k 有一個必填參數 text1 和一個可選參數 text2,寫作 5k <text1> [text2]。
有些指令有可變參數,即接受任意數量的額外參數,在指令用法中表示為最後一個參數的名稱前加三點(如<...words>;區別於下文的貪婪值)。
選項
選項的通用語法是兩個橫槓(--)後緊跟選項名。很多選項是具值選項,它們後面需要再跟一個選項值,選項值的語法類似於參數。選項名和選項值之間由空白字符或一個等號(=)相隔,等號之後也可以有空白。等號後不能緊跟使用引號語法的選項值,可以在等號後添加空白或直接用空白代替等號。
大多數選項有單個字符的短名,可以用一個橫槓後跟短名的短語法表示(如 -a)。短語法可以串聯,寫成一個橫槓後連續跟上多個選項的短名(如 -abc)。串聯短語法中除最後一個選項外,其他具值選項(若有)的值為空,最後一個選項可以正常指定值(如 -abc "选项c的值")。
有些選項有符號名,可以用一個或幾個特殊符號(如 /、--)的符號語法表示。具值選項使用符號語法時不能使用等號分隔名和值,只能用空白字符分隔。
有些指令使用嚴格選項解析,這些指令在解析時若遇到不存在的長、短選項,會將其視為參數,而非報錯或忽略。
貪婪值
有些選項/參數是貪婪選項/貪婪參數(貪婪選項的值和貪婪參數合稱貪婪值),它們會使指令其餘的部分不再解析選項和參數語法,直接視為一個值(首尾若有引號也會視為值的一部分)。因此,貪婪值必須寫在指令的末尾(即使用貪婪參數時其他參數和所有選項必須寫在貪婪參數之前,使用貪婪選項時其他選項和所有參數必須寫在貪婪選項之前),且貪婪選項和貪婪參數不能同時使用。貪婪值在指令用法中表示為值名稱後加三點(如 <input...>;區別於上文的可變參數)。
插值
插值是將一條指令的結果直接作為另一條指令輸入的一部分的功能,可以用於指令的參數和選項(包括貪婪值)內,但在直單引號('')包圍的值中無效。基本的插值語法是 $(指令)(被插值的指令不可包含半角右圓括號),同時也存在一些其他插值語法,會直接使用對應的指令進行插值:
| 語法 | 等價指令 | 備註 |
|---|---|---|
${代码...} |
eval 代码... |
|
$¿{代码...} |
whatlang 代码... |
|
$¿(名称 参数...) |
whatcmd 名称 参数... |
WhatCommands指令不可包含半角右圓括號 |
在一些情況下(如輸入 JavaScript 代碼時),我們可能不希望指令系統解析插值語法。在 QQ 平台,對於一些會自動過濾掉 QQ 表情的指令(如 eval),可以通過在美元符與括號之間添加一個 QQ 表情來「轉義」插值語法。也可以通過先發送代碼,再引用這條消息調用指令的方法來繞過插值解析。
機制
查詢幫助
指令 help 可顯示指令菜單或查詢特定指令的幫助。有些指令是隱藏指令,不會出現在菜單裡,但仍能通過 help 查詢到其幫助信息。
特殊調用方式
在 QQ 私聊和部分群聊調用指令時可以省略斜槓,直接發送指令內容;在 Discord 平台,因為斜槓有時是一種特殊語法,所以也允許以兩個斜槓開頭。
部分指令也能用其他獨特的語法來調用,稱為快捷方式,如 eval 指令可以通過發送大於號和空格開頭的消息來調用。
捕獲引用
當調用指令的消息引用(回復)了另一條消息,大多數指令都會將被引用的消息內容自動添加到指令末尾。
請求輸入參數
有些指令在缺少必填參數時,會顯示「請發送(參數描述)…」(區別於報錯「缺少某參數…」),調用指令的用戶若在 1 分鐘內在同一聊天內發送了消息,bot 會將該消息的內容作為缺少的參數使用。目前無法在 bot 請求輸入參數時手動取消調用,需要等待 1 分鐘或通過發送一條任意內容來完成調用,否則直接重新進行指令調用不會被 bot 正常識別。
子指令
有些指令是另一個指令的子指令。子指令不會在頂層幫助菜單中顯示,只會在其父指令的幫助信息內顯示。子指令分為層級式和派生式兩種,派生式子指令的名稱總是以其父指令的名稱加句點(.)開頭。
有些指令本身並沒有功能,僅用於收納其他指令作為子指令,稱為分組指令。調用分組指令的派生式子指令時可以用空格代替指令名中的句點;而如果直接調用分組指令本身,或將空格替換為句點後並不是一個存在的派生式子指令名稱,則會直接顯示分組指令的幫助信息。
指令列表
指令文檔索引尚未建成,您可以瀏覽下列已編寫的指令條目:
- LNNBot/指令/alias
- LNNBot/指令/balance
- LNNBot/指令/bind
- LNNBot/指令/camxes
- LNNBot/指令/checkin
- LNNBot/指令/dpsk
- LNNBot/指令/helpv
- LNNBot/指令/jboski
- LNNBot/指令/lojban
- LNNBot/指令/microcommand
- LNNBot/指令/musicjs
- LNNBot/指令/musicjs*
- LNNBot/指令/numberblocks
- LNNBot/指令/oeis
- LNNBot/指令/saucenao
- LNNBot/指令/song
- LNNBot/指令/song-search
- LNNBot/指令/thursday
- LNNBot/指令/uiua
- LNNBot/指令/unalias
- LNNBot/指令/xdi8
- LNNBot/指令/xiujy
- LNNBot/指令/xy6