如何跟踪 discord.py 中发送的消息

Posted

技术标签:

【中文标题】如何跟踪 discord.py 中发送的消息【英文标题】:How to keep track of messages sent in discord.py 【发布时间】:2021-02-28 02:33:41 【问题描述】:

我想跟踪并为 discord.py 中发送的每条消息分配一个编号,我正在构建一个反垃圾邮件机器人,基本上每次有人发送消息时,我都希望它添加到用户消息数量的计数器中已经发送了一定的时间,然后我希望它每隔 5 秒重置一次计数器。

@b.event
async def on_message(message):
    await b.process_commands(message)
    #Add 1 to a user specific counter
    if counter > 5:
        await message.send("Stop sending messages")
    #Reset the counter every 20 seconds

【问题讨论】:

【参考方案1】:

首先,您需要创建一个字典来跟踪每个用户发送了多少消息。

spam_logger =

其次,当发送消息时,您希望将用户添加到字典中。如果用户存在于字典中,我们在他们发送的消息数量上加一,如果他们不存在于字典中,我们添加他们的名字并给它一个值。

@client.event 
async def on_message(message):
    global spam_logger
    try:
        spam_logger[str(message.author)] += 1
    except KeyError:
        spam_logger[str(message.author)] = 1

第三,我们要检查用户是否发送了超过 5 条消息。

    for name, messages_sent in spam_logger.items():
        if messages_sent >= 5:
            await message.channel.send(f'Stop sending messages!')

最后,我们希望每 5 秒清除一次列表。

@tasks.loop(seconds=5)
async def clear_spam_logger():
    global spam_logger
    spam_logger.clear()

@clear_spam_logger.before_loop
async def before():
    await client.wait_until_ready()

clear_spam_logger.start()

【讨论】:

以上是关于如何跟踪 discord.py 中发送的消息的主要内容,如果未能解决你的问题,请参考以下文章

(discord.py) 有啥方法可以自动保存嵌入图像?

在discord.py中发送X消息之前,如何一个接一个地运行多个discord令牌?

Discord.py 如何从不和谐消息中读取 int 并将其作为变量发送到嵌入中

Discord.py - 如何接收和发送消息到特定频道?

如何让 Discord.py 机器人向服务器所有者发送消息?

用户执行命令后,如何删除 discord.py 中的消息?