2017-04-17 29 views
0

這是我要實現的代碼。簡單地說,它是一個小型聊天機器人,連接到服務器,並將testroom1userpass憑證相連接。使用圖書館,事件被稱爲每次有人進入消息進入聊天室,而這個機器人將打印他們的消息,與格式化:在事件中使用條件

import ch 

class bot(ch.RoomManager): 
    for x in range(0, 3): 
    def onMessage(self, room, user, message): 
     print("[{0}] {1}: {2}".format(room.name, user.name.title(), message.body)) 

rooms = ["testroom1"] 
username = "user" 
password = "pass" 

bot.easy_start(rooms,username,password) 

然而,關鍵的問題是這樣的:

for x in range(0, 3): 

我只想讓「onMessage」函數訪問3次,然後不打印任何更多的消息。這似乎不起作用,並且在我退出之前它會繼續打印消息。

如果可能,我想限制onMessage函數,while循環在我的程序中進一步循環,並在幾種不同的情況下使用它來解析不同時間的消息。

的CH庫和基礎我簡單的代碼的來源是here

在這個問題上的任何見解表示讚賞。

+0

你能提供基類'ch.RoomManager'的代碼嗎?或者其他的'easy_start'定義在哪裏?也有可能你打算把你的for循環放在方法'onMessage'中? – stoebelj

+0

代碼太長,所以我在這裏粘貼了RoomManager:https://pastebin.com/aJzYbFhc 由於或者沒有循環,onMessage方法會持續運行。我想使用onMessage在倒計時的最後幾秒鐘內打印郵件,然後在完全獨立的情況下再次使用它來處理命令的郵件。 – chatbottest

+0

這是可以找到onMessage的完整ch.py​​:https://pastebin.com/8ukS4VR1 – chatbottest

回答

0

我想你誤解了Python的語法。在你的班的for循環將定義三次相同的onMessage方法,每個新的迭代替換舊的。如果您嘗試在您的功能中使用x(或更確切地說self.x),這將會很明顯。

你想要什麼,是方法或類中的一個計數器,隨着每次調用而遞增,然後,當達到最大計數時,您可以僅使onMessage方法無效。

嘗試下面的代碼,我覺得你想要做什麼:

import ch 

class bot(ch.RoomManager): 
    messages_left = 3 

    def onMessage(self, room, user, message): 
    if self.messages_left > 0: 
     print("[{0}] {1}: {2}".format(room.name, user.name.title(), message.body)) 
     self.messages_left -=1 

rooms = ["testroom1"] 
username = "user" 
password = "pass" 

bot.easy_start(rooms,username,password) 

我在這裏做,是增加一個初始化函數,定義了在onMessage調用遞減一個對象變量messages_left,直到它達到零。此外,我添加了一個類參數,它允許您控制您想要使用onMessage格式化消息的次數。

+0

謝謝,此代碼現在正在工作。我有進一步的問題讓這個更復雜一點,用時間作爲循環中的決定因素。我應該在這裏作爲評論嗎? – chatbottest

+0

這可能是一個更好的選擇來問一個新的問題,因爲這將更有可能吸引更多的關注,並提高你獲得答案的機會。另外,如果你通過提高投票和接受這個答案來提高你的聲譽(和業力;-)),它可能會有所幫助。 – JohanL

+0

http://stackoverflow.com/questions/43467515/loop-within-a-class-negates-the-code-before-it這是我問過的新問題。再次感謝您的幫助! – chatbottest