Python-Robot(1) IRC
要撰寫IRC 機器人其實不難,網路上到處都有範例,其實就是簡單的NP,字串來回處理而以。
- Connect To IRC SERVER
- Send User Infomation
- Join a channel
- Read data from irc channel and do response
- Send something to irc channel
- looping (4~5)
第一步: 我們使用TCP建立連線
self.sock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
self.sock.connect( (self.config['HOST'],int(self.config['PORT'])))
HOST:"HOST":"irc.freenode.org", PORT:6667
第二步: 發送機器人的資訊給IRC 頻道
self.sock.send ( 'NICK '+self.config['NICK']+'\r\n' )
self.sock.send ( 'USER '+self.config['IDENT']+' '+self.config['HOST']+' bla :'+self.config['REALNAME']+'\r\n')
第三步: 加入某個頻道,做為該頻道的機器人
self.sock.send ( 'JOIN '+self.config['CHANNELINIT']+'\r\n')
第四步+第五步:
while True:
data = self.sock.recv(4096)
if(data.find('PING'))!=-1: ##response to server avoid be kicked
self.sock.send('PONG ' + data.split()[1]+'\r\n')
elif(data.find('PRIVMSG'))!=-1:
for module in self.modules:
response = module.run(data)
self.sock.send(" PRIVMSG "+channel + " :"+response+"\r\n")
.....
接下來就是一個無窮的從channel讀取資訊然後處理後再送回
這邊要注意的是IRC會定期送一個PING的資訊過來,必須要回一個PONG回去,否則該機器人不久後就會被踢下線
得到的data格式大概是如這種
###:hwchiu![email protected] PRIVMSG #hwchiu_test :hi
分別是使用者名稱、所在的機器位置、訊息類型、頻道(私人訊息的話就會是機器人本身)、以及說話內容
所以只要針對這些格式去處理,得到想要的資訊,就可以進行各種想要的功能了
這邊因為我有很多個功能module,所以每次收到訊息的時候,就把這些資料都送給所有的module
讓每個module自己去處理並且回應。