2013-03-13 62 views
0

我期待着開始一個新的項目,讓我的腳溼與Python。我有一個IRC頻道,並希望有一個bot來維護一個日誌,並會在出現提示時吐出x行消息,但我不知道從哪裏開始寫這樣的東西。Python IRC日誌機器人

我看到this教程,我認爲這會讓我開始在機器人本身,但我不知道下一步的日誌功能。有人能指引我朝着正確的方向嗎?

+1

要執行日誌記錄功能,我只需保留一段簡單的列表,說明最後100行以及其他任何我將推送到文件的行。 [Python文件I/O](http://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files) – sean 2013-03-13 05:35:21

+1

我想找一個更高級別的教程。用原始套接字和明確的命令解析來實現IRC並不是世界上最困難的事情,但這不是我開始做的事情。要麼抓取像SupyBot這樣的骨架機器人或機器人框架,要麼使用像'irclib'或'twisted.IRCClient'這樣的庫。 – abarnert 2013-03-13 05:38:41

回答

1

假設你已經編寫了一個調度函數,它爲每種消息調用一個適當的處理函數,以及一個發送函數來適當地格式化和發送消息。

處理程序可能是這個樣子:

MAX_LINES = 100 

channel_logs = defaultdict(list) 

def handle_public_message(user, channel, msg): 
    log = logs[channel] 
    log.append((user, msg)) 
    if len(log) > MAX_LINES: 
     log.pop(0) 
    if msg.partition(' ')[0].lower() == 'dumplog': 
     dumplog(log, channel) 

def handle_private_message(user, channel, msg): 
    if msg.partition(' ')[0].lower() == 'dumplog': 
     dumplog(logs[channel], channel, user) 

def dumplog(log, channel, user=None): 
    for line in log: 
     send_msg(line, channel, user) 

這一切就是這麼簡單。

如果你想變得很花哨,你可以編寫一個類來包裝「只保留最後100個附加的列表」的東西,使它成爲一個寫入緩存,存儲到磁盤,添加一個請求的方式20行而不是100等。

您也可以放置更多機器人特定的功能,例如以更標準化的方式處理命令。但是,真的,你最好爲此獲得一個bot框架。

事實上,我強烈建議您不要開始處理原始套接字和命令解析的第一個項目。你將花費更多的時間來調試繁瑣和煩人的問題,而不是處理你的實際代碼。其他選項包括:

  • 與Python「AI」插件的完整機器人,如supybot
  • 這是一個帶有「在此添加自己的代碼」的註釋框架,其中您可以從快速搜索中找到約3000個註釋。
  • twisted框架的IRCClient協議。看看像this one這樣的教程,看看有多高級和簡單的一切。
  • irclib