我如何做到这一点,以便Python中的discord bot会暂停任何活动,如果它被多次调用,以阻止垃圾邮件。
机器人在聊天中查找关键字,如果找到任何关键字,则打印出一条消息。如果这些关键字中的任何一个是垃圾邮件,那么机器人也会发送垃圾邮件。我想这样做,如果它在某个时间段内响应y次,它基本上会停止听这些单词的时间。
您可以查看完整代码here,这是相关的代码(忽略缩进) -
xmlns:android="http://schemas.android.com/apk/res/android"
使用当前代码,任何人都可以垃圾邮件包含在禁止词中的一个词,机器人会垃圾邮件回复wordlist的回复,这是不可取的>。>
非常感谢任何帮助,非常感谢! :d
答案 0 :(得分:0)
这样的事情应该有效。每次收到邮件时,请检查过去10秒内是否有超过5封邮件,如果是,则不要打印。否则,请附加当前消息时间,然后打印。
我在这里使用了一些全局变量,这通常被认为是不好的做法。在这个玩具示例中不需要它,但是当您使用不能修改参数的异步功能时,我不确定如何避免使用它们。
我确信拥有比我更多蟒蛇技能的人可能会提出比这更好的方法。
import time
lastMessageTimes = []
maxResponses = 5
timeFrameWindow = 10
def shouldPrint():
currentTime = time.time()
global lastMessageTimes
# remove any messages that haven't occured in the last timeFrameWindow seconds
lastMessageTimes = [x for x in lastMessageTimes if not currentTime - x > timeFrameWindow]
# check if we've had over maxResponses in the last timeFrameWindow
if len(lastMessageTimes) >= maxResponses:
return False
return True
def on_message(message):
if shouldPrint():
# insert the current message timestamp
lastMessageTimes.append(time.time())
print("Hello world!")
while(True):
# empty message for demonstration purposes
on_message("")
如果你试试这个,你应该看到它打印" Hello World"每隔10秒,每5秒钟,我认为这是你想要的。