on_message 事件的冷却时间,discord.py

cooldown on an on_message event, discord.py

我正在尝试对 on_message 事件应用冷却时间。 我该怎么做?

这是代码

import discord
from discord.ext import commands
json
import os

client = commands.Bot(command_prefix = '!')

#more code

@client.event
async def on_message(message):
  await open_account(message.author) #opens an account in a json file for this particular user
  
   users = await get_users_data() #returns the users in the json file
   user = message.author

   #more code

此代码用于分级系统,我希望它每 1 分钟只发生一次,这样人们就不会发送垃圾邮件,如何实现?

这在 discord.py 中是不可能的。需要自定义处理程序。例如:

COOLDOWN_AMOUNT_SECONDS = 60
last_executed = {}

async def on_message(message):
    # ...
    if last_executed.get(message.author.id, 1.0) + COOLDOWN_AMOUNT_SECONDS < time.time():
        do_things()
        last_executed[message.author.id] = time.time()
    else:
        do_things_if_the_cooldown_isnt_over_or_just_do_nothing()

这会为每个用户保留一个带有事件 运行 时间戳的字典 last_executed。每次触发它时,它都会检查是否已经过了足够的时间,如果是,则执行操作并将时间设置为当前时间。