나는 자동화를 위해 만든 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,())
이 일이 다른 모든 것을 중지 무한 루프에 걸리면에서 호출되지 않도록 : 프로그램의 끝에서 , 나는라는 작은 라인. 이것이 좋은 해결책이 될 것인가 아니면 내가 할 수있는 더 나은 것이 있습니까?
목록의 길이를 확인하기 전에 각 메시지의 시간을 목록에 저장하고 이전 메시지를 제거 할 수 있습니다. – ejno
실제로'analyseIRCText'를'adminList','userList','commandPat' 및'flood'를 클래스로 인스턴스 속성으로 리팩토링해야합니다. 전역 변수는 대개 [나쁜 생각]입니다 (http://stackoverflow.com/questions/146557/do-you-use-the-global-statement-in-python). –