今天我要教你如何編程 BOT 為 IRC。 首先,對於不認識的人來說,機器人是一個程序,它連接到IRC頻道並與之交互,從而使我們能夠(例如)主持頻道而無需 我們已經連接 從而避免垃圾郵件,或者避免垃圾郵件識別出一系列命令並執行相應的代碼。
儘管已經有機器人可以使用了,但老實說,我是一個喜歡編寫自己的程序來學習的人,在看到它可以運行之後,它給我們帶來了極大的滿足感^^
話雖如此,讓我們繼續本教程。
要對機器人進行編程,我們需要一個 純文本編輯器 cualquiera (nano,gedit,medit等) Y EL python解釋器 (將需要2.6或2.7, 不適用於python 3.x).
首先,我們導入 所需模塊,在這種情況下,我們只需要兩個:
[代碼]#!/ usr / bin / env python#-*-編碼:utf-8-*-
進口插座
導入字符串
[/代碼]
現在我們繼續 設置 機器人:
[代號] HOST=»irc.desdelinux。網”PORT = 6667
尼克=»CalicoBot»
IDENT =»CalicoBot»
REALNAME =»CalicoBot»
CHAN =»#家»
readbuffer =»»
[/代碼]
我將解釋每個變量:
- 主持人: 我們將連接到的服務器的URL
- 港口: 服務器端口。 默認情況下為6667。
- NICK,IDENT和REALNAME: 它們對應於該機器人的暱稱,其標識和真實姓名。
- 陳: 機器人將進入的頻道
- 讀緩衝區: 在此變量中,服務器發送的數據將被保存。
配置好我們的漫遊器後,我們將繼續 連接
[代碼] s = socket.socket()s.connect((主機,端口))
s.send(“ NICK%s \ r \ n”%NICK)
s.send(“ USER%s%s bla:%s \ r \ n”%(IDENT,HOST,REALNAME))
s.send(“ JOIN:%s \ r \ n”%CHAN)
[/代碼]
第一行沒有太多的奧秘,第二行創建了 服務器連接 最後三個將bot的數據發送到服務器以繼續登錄。
連接後,我們將創建一個 無限循環 我們將在其中 從服務器接收數據或向服務器發送數據:
[code]而1:讀緩衝區=讀緩衝區+ s.recv(1024)
temp = string.split(readbuffer,“ \ n”)
readbuffer = temp.pop()
對於臨時行:
行= string.rstrip(行)
line = line.split(CHAN +':')
如果行[0] .find(“ PING”)!= -1:
pingid =行[0] .split()[1] s.send(“ PONG%s \ r \ n”%pingid)
[/代碼]
在上面寫的所有行中,我只會評論重要的行。
同 line = line.split(CHAN +':')我們要做的就是分割服務器在什麼時候向我們發送的內容 讓我們從渠道中獲取一些東西。
例如,以下行表示某人在頻道上寫了一些東西:
:son_link!sonlink@127.0.0.1 PRIVMSG #Home :Hola ^^
第一個是用戶的暱稱和連接數據(用!分隔),命令(在這種情況下,它表明他寫了),通道,最後是冒號之後的消息。 我不會解釋更多命令,因為該命令不屬於本教程。
其他重要的是 在if之後。 服務器經常發送PING命令以檢查用戶是否仍然連接。 在這種情況下,殭屍程序會將PING發送的ID發送給PONG命令,以向服務器表明它仍處於連接狀態。
有了這個,我們已經有了機器人的基礎。 現在,我將繼續說明如何使漫遊器根據我們希望對某些命令的響應,無論它們是來自IRC本身還是來自用戶。
響應IRC命令:
PING和PRIVMSG是IRC命令的示例。 有很多命令,但是正如我之前說過的,我將不再贅述。
例如,我們可以使機器人與連接的用戶打招呼:
name =行[0] .split('!')[0] .split(':')[1]如果name!= NICK和name.find(HOST)== -1:
s.send(“ PRIVMSG%s:Welcome @%s ^^ \ n”%(CHAN,名稱))
[/代碼]
首先我們檢查服務器是否發送命令 註冊 表示有人連接到服務器。 然後我們提取缺口,檢查缺口是否不是IRC網址 (如果不是在我們運行漫遊器後,它將立即迎接該網址) 最後,我們發送問候消息。
Bot命令:
現在如何製作我的機器人 響應我自己的命令? 讓我們更好地看一個例子:
[代碼]如果第[1]行=='$版本':發送(«PRIVMSG%s:CalicoBot 0.1.2(c)2012 Son Link \ n»%CHAN)
[/代碼]
在這個例子中,如果有人寫 $版本 機器人將顯示消息,指示其名稱,版本和作者。 該示例的完整代碼如下:
[代碼]導入套接字導入字符串
主機=»本地主機»
PORT = 6667
尼克=»CalicoBot»
IDENT =»CalicoBot»
REALNAME =»CalicoBot»
CHAN =»#家»
readbuffer =»»
s = socket.socket()
s.connect((主機,端口))
s.send(“ NICK%s \ r \ n”%NICK)
s.send(“ USER%s%s bla:%s \ r \ n”%(IDENT,HOST,REALNAME))
s.send(“ JOIN:%s \ r \ n”%CHAN)
而1:
讀緩衝區=讀緩衝區+ s.recv(1024)
temp = string.split(readbuffer,“ \ n”)
readbuffer = temp.pop()
對於臨時行:
打印線
行= string.rstrip(行)
line = line.split(CHAN +':')
如果行[0] .find(“ PING”)!= -1:
pingid =行[0] .split()[1] s.send(“ PONG%s \ r \ n”%pingid)
如果行[0] .find('JOIN')!= -1:
name =行[0] .split('!')[0] .split(':')[1]如果name!= NICK和name.find(HOST)== -1:
s.send(“ PRIVMSG%s:Welcome @%s ^^ \ n”%(CHAN,名稱))
如果len(line)<1:
如果第[1]行=='$版本':
發送(«PRIVMSG%s:CalicoBot 0.1.2(c)2012 Son Link \ n»%CHAN)
[/代碼]
我希望您喜歡本教程,當然,我會留下指向我的機器人代碼的鏈接,以便您可以完整查看其代碼並更好地了解其工作方式。 (儘管我刪除了一些個人使用的命令)。
嘿,我不能錯過您在IRC上玩的廢話的Bo-非常有趣的文章。
非常簡單明了的解釋。
如果python代碼缺少所有縮進,該怎麼辦。
已經解決了^^
優秀的文章,以及連接到IRC編程機器人的難易程度:)…
這讓我想起了那些時候,我們覺得程序員在MSN或MSNGroups聊天中為mIRC編寫腳本
有趣的是我keep
優秀的!
非常有用,謝謝Son_Link!
的問候!
乾杯…
遵循您的路線並測試唯一可行的方法是
進口插座
導入字符串
主機=»本地主機»
PORT = 6667
尼克=»CalicoBot»
IDENT =»CalicoBot»
REALNAME =»CalicoBot»
CHAN =»#家»
readbuffer =»»
s = socket.socket()
s.connect((主機,端口))
s.send(“ NICK%srn”%NICK)
s.send(“ USER%s%s bla:%srn”%(IDENT,HOST,REALNAME))
s.send(“ JOIN:%srn”%CHAN)
現在更改頻道和暱稱,以下內容將引發我錯誤語法
我問其他熟人,他們告訴我那看起來不像python
我不知道我在做什麼錯,或者為什麼我複制所有內容並將其粘貼到python中,然後輸入並連接到通道,但是250秒後通道將其刪除,因為pong沒有響應...
您正在使用哪個版本的Python?
它僅適用於python 2.6和2.7,不適用於3.x
我將修改條目以使其更清晰。
完整的代碼對我不起作用,最後一段是失敗的,並且我找不到錯誤。 如果刪除該部分,它將連接並正常工作。 在Windows 2.7.3上使用Python 7進行了測試。
PS:就我而言,我使用密碼連接到服務器並添加以下行:
通過=»Passdelbot»
s.send(“ PASS%s \ r \ n”%PASS)
嗨,兒子鏈接,非常感謝您的文章,這非常有趣,我只是無法響應發送的命令。 該程序不會進入最後一個if並且我不知道為什麼:“ if len(line)> 1:”
我在等你的回答。
謝謝
我只是將鏈接添加到該機器人的完整代碼中,該機器人會轉換一些符號,並且代碼會顯示其html代碼。
無論如何,我將嘗試嘗試正確顯示所有內容