如何限制discord bot在Python中打印的次数?

时间:2018-05-07 10:53:10

标签: python bots discord

我如何做到这一点,以便Python中的discord bot会暂停任何活动,如果它被多次调用,以阻止垃圾邮件。

机器人在聊天中查找关键字,如果找到任何关键字,则打印出一条消息。如果这些关键字中的任何一个是垃圾邮件,那么机器人也会发送垃圾邮件。我想这样做,如果它在某个时间段内响应y次,它基本上会停止听这些单词的时间。

您可以查看完整代码here,这是相关的代码(忽略缩进) -

xmlns:android="http://schemas.android.com/apk/res/android"

使用当前代码,任何人都可以垃圾邮件包含在禁止词中的一个词,机器人会垃圾邮件回复wordlist的回复,这是不可取的>。>

非常感谢任何帮助,非常感谢! :d

1 个答案:

答案 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秒钟,我认为这是你想要的。