自動化のために作成した IRC ボットがあります。
これがそのスニペットです:
def analyseIRCText(connection, event):
global adminList, userList, commandPat, flood
userName = extractUserName(event.source())
userCommand = event.arguments()[0]
escapedChannel = cleanUserCommand(config.channel).replace('\\.', '\\\\.')
escapedUserCommand = cleanUserCommand(event.arguments()[0])
#print userName, userCommand, escapedChannel, escapedUserCommand
if flood.has_key(userName):
flood[userName] += 1
else:
flood[userName] = 1
... (if flood[userName] > certain number do...)
つまり、洪水は、最近ボットにコマンドを入力したユーザーのリストが保持されている辞書であり、一定の時間が保持され、その期間内に何回そう言ったかということです。 .
ここで私はトラブルに遭遇します。ユーザーが時々何かを言うことができるように、この辞書をリセットする何かが必要ですよね? こういうちょっとした工夫でうまくいくと思います。
def floodClear():
global flood
while 1:
flood = {} # Clear the list
time.sleep(4)
しかし、これを行う最善の方法は何でしょうか? プログラムの最後に、次のような小さな行があります。
thread.start_new_thread(floodClear,())
このことが呼び出されないように、他のすべてを停止させる無限ループに陥ります。これは良い解決策でしょうか、それとももっと良い方法がありますか?