查看單個文章
舊 2005-04-26, 06:39 PM   #11 (permalink)
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

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指令都可以省略掉前面的「/」號。
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1628 篇, 收花: 3199 次