mIRCBOT篇
基本語法
變數(Variables)
變數是用來暫時儲存某個資料以便以後在mIRC指令碼中使用的。它的基本構成是"%"+"變數名",例如%a、%b、%test。在mIRC中對變數的限制很寬鬆,甚至連任何符號都可以用來作為變數,比如%a@b、%[names等都是合法的變數。當某個變數不存在或者未設定變數值時,該變數的值將被認為是$null(空值)。
下面介紹一下如何對變數進行設定,以及如何對它們進行操作。
在mIRC中專門有一個與Alias、Popup和Remote類似的變數編輯視窗(按Alt+R,再選項Variables選擇項),你可以直接在這裡寫入變數名以及所對應的變數值。但是,建議你用如下的mIRC指令根據需要來設定變數,因為這樣更便於在指令碼中引用。
/SET 指令
【語法】
/set [-szuN] <變數> [變數值]
【描述】
用來設定一個變數,並可以給它賦予初始值。參數-uN是指在設定變數N秒後,如果沒有其它指令碼引用該變數,則將其自動移除;-s是指在設定變數時讓mIRC做出回顯(下同);-z是指遞減該變數值,直至其為0的時候將其自動移除。
利用/SET指令設定的變數都可以在變數(Variables)編輯視窗看到,並可以進行編輯。
/UNSET 指令
【語法】
/unset [-s] <變數>
【描述】
用來從變數編輯視窗中移除掉指定的變數。可以使用萬用字元,例如:/unset %chan*,這將移除掉所有以%chan開頭的變數。
/UNSETALL 指令
【語法】
/unsetall
【描述】
這將移除掉變數編輯視窗中的所有變數。
/INC 指令
【語法】
/inc [-cszuN] <變數> [步長]
【描述】
根據指定的步長來增加某個指定變數的值。參數-uN是指只增加該變數的值一次,然後在N秒後移除該變數;-c是指每秒增加該變數的值一次;-z指遞減該變數的值,直至其為0的時候將其自動移除。
/DEC 指令
【語法】
/dec [-cszuN] <變數> [步長]
【描述】
根據指定的步長來減少某個指定變數的值。參數-uN是指只減少該變數的值一次,然後在N秒後移除該變數;-c是指每秒遞減該變數的值一次;-z指遞減該變數的值,直至其為0的時候將其自動移除。
你也可以在指令碼中(注意,不是在指令輸入欄)直接用英文等號("=")來設定某個變數,如「%x = 88」;你也可以利用英文等號來對變數進行一個簡單的運算,如「%x = 88 + 5」(注意,如果要進行更複雜的運算,則必須使用$calc()函數)
你還可以利用/VAR指令來設定一個臨時變數,它將只能在指令碼中進行設定,並且當該指令碼執行完畢時將被自動移除。例如:/var %x、 /var %x = hello、 /var %x = hello, %y, %z = $me …
運算符
在mIRC中也有很多運算符,基本的包括:+(加)、-(減)、*(乘)、/(除)、%(求餘數)、^(乘方),不過通常都要配合$calc()函數使用,以讓mIRC識別這是一個運算式。例如:%count = $calc((%x + 1) * 4)
在編寫mIRC指令碼時還經常會用到一個很有用的運算符,那就是「[」和「]」。當陳述式或者函數被這兩個符號包括起來時,則mIRC會優先執行這裡面的運算(按從左到右的順序)。需要注意的是在「[」和「]」的兩旁必須留有一個英文空格,否則將不起作用。
其它還有很多運算符,如關係運算符等,這將在判斷語句中進行介紹。
判斷語句
在mIRC中,判斷語句(If-Then-Else)的基本句法是:
if (v1 運算符 v2) { 指令 }
elseif (v1 運算符 v2) { 指令 }
else { 指令 }
「()」括號裡的內容是表明進行判斷,如果為真,則執行「{}」括號裡的指令(可以是任何指令)。
這裡的運算符包括:
== 等於
=== 等於(對大小寫敏感)
!= 不等於
< 小於
> 大於
>= 不小於
<= 不大於
// 存在倍數關係
\\ 不存在倍數關係
& 存在位與關係
isin 字元串v1被包含在字元串v2里
isincs 字元串v1被包含在字元串v2里(對大小寫敏感)
iswm v2符合包含萬用字元的字元串v1
isnum 數位v1在指定的v2範圍內(v2可省略);例如:(8 isnum 6-10)、(6 isnum)
isletter 字母v1包含在v2列出的英文字母裡(v2可省略);例如:(t isletter fantasy)、(s isletter)
isalnum v1為一個英文字母或者數位
isalpha v1為一個英文字母
ison 別名v1在閒聊室v2里
isop 別名v1是閒聊室v2的主持人(有@帽子)
isowner 別名v1是閒聊室v2的擁有者(OWNER, 見於IRCX伺服器)
isvo 別名v1在閒聊室v2里有發言權
ishop 別名v1是閒聊室v2里的一個助理主持人(HalfOP,舊稱Helper)
isreg v1是閒聊室v2里的一個普通別名
ischan v1是你目前已經進入的閒聊室
isban v1是mIRC的內部BAN列表裡被BAN掉的位址
isauto v1是自動給帽子(Auto-Op)列表中的人(v2用來指明是在哪個閒聊室,可選)
isignore v1是忽略(Ignore)列表中的人
isprotect v1是自動保護(Protect)列表中的人(v2用來指明是在哪個閒聊室,可選)
isnotify v1是你的通知(Notify)列表中的人
要進行相反的判斷,則在運算符前面加「!」號,例如:(55 !isletter)、(TigTag !ison #Chat) 等等。
函數$ifmatch可以用來返回被IF判斷語句捕獲的第一個參數,例如:if (TigTag isin TigTagIsHelisheep) { ... },由於「TigTag」被包含在了「TigTagIsHelisheep」這個字元串中,因此這裡的$ifmatch就將返回TigTag。
你也可以利用邏輯運算符&&(And)和||(Or)來組合更為複雜的判斷,例如:if (($nick ison #Chat) && ($nick == TigTag)) { ... }
循環語句
在mIRC中目前只提供了一種循環語句,即While循環。它的基本句法如下:
while (v1 運算符 v2) {
指令
}
(v1 運算符 v2)表示判斷(參見判斷語句),如果為真則進行循環。你可以用/break跳出該循環,也可以用/continue跳到循環的最開始處。
使用While語句的時候很容易造成一個死循環,用它只是可以讓程序流程看起來更清晰明瞭罷了(個人觀點)。你當然也可以利用IF語句+GOTO語句形成一個循環(儘管GOTO語句會讓程序變得很晦澀,而且容易打亂程序的結構)。例如:
...
var %i = 0
:nexti
inc %i 1
if (%i >= 10) { goto endi }
goto nexti
:endi
...
PS: 在編寫Remote指令碼的時候,所有用到的IRC指令都可以省略掉前面的「/」號。
|