简体   繁体   中英

Cooldowns in discord.py with on_message

So, I basically messed up. This is the first time I've ever tried a discord bot and I've done all my code in on_message with it checking the content of the message to see if it matches with the command name (example below). I've added a few commands, which are quite long, and I don't really want to rewrite it. Is there any way around this or do I have to rewrite it?

  if message.content.lower().startswith("!test"):  
    await message.channel.send(db[str(message.author.id)])

Simple example of what I'm doing, just a test command.

I have tried looking inside other questions but I either: don't want to do that or don't understand what people are saying.

Any help would be appreciated and since I'm new to discord.py; I might need it explained in bit easier terms please.

You can do something like this:

users_on_cooldown = [] # Consider renaming this if you are going to have multiple commands with cooldowns.
def on_message(msg):
    if msg.content.lower().startswith("!test") and not msg.author.id in users_on_cooldown:  
        await msg.channel.send(db[str(msg.author.id)])
        users_on_cooldown.append(msg.author.id)
        asyncio.sleep(20) # time in seconds
        users_on_cooldown.remove(msg.author.id)

Since you said you are a beginner, please note that if you make another command with a separate cooldown, use another variable that users_on_cooldown , maybe something like ban_cmd_cooldown and test_cmd_cooldown .

How It Works When the command is used, the user is added to a list, and after a certain amount of seconds, they are removed. When the command is run, it is checked if the user is on the list.

Note: When the bot is reset, cooldowns will be reset too.

If you have any questions about this, feel free to ask in the comments below.

Here how to use

@client.command()
@commands.cooldown(1, 60, commands.BucketType.user)
async def test(ctx):
    await ctx.send(db[str(message.author.id)])

(1, 60, commands.BucketType.user) means 1 msg per 60sec or a 60sec cooldown.

I would recommend you rewrite your bot. It may take some time but it'll be worth it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM