【问题标题】:Discord.py Rewrite Cooldown CommandsDiscord.py 重写冷却命令
【发布时间】:2021-03-30 04:46:41
【问题描述】:

我正在使用 Discord.py Rewrite 来制作 Discord 机器人。我有一个名为work 的命令,代码如下:

import discord
from discord.ext import commands

client = commands.Bot(command_prefix="c!")
# on_ready command

@client.command()
async def work(ctx):
    author_id = ctx.author.id
    currency_dict[author_id] += 50
    await ctx.send("You Gained 50 Coins")
# currency_dict is a dictionary that is already defined

有没有办法让用户每 30 秒只能使用一次命令?谢谢!

【问题讨论】:

    标签: python python-3.x discord discord.py discord.py-rewrite


    【解决方案1】:

    首先,您必须导入 from discord.ext.commands.cooldowns import BucketType。这将帮助您进行冷却。下面是可用于此导入的 cooldown 检查和 max_concurrency 检查。

    from discord.ext.commands.cooldowns import BucketType
    # BucketType can be BucketType.default, member, user, guild, role, or channel
    @commands.cooldown(rate,per,BucketType) 
    # Limit how often a command can be used, (num per, seconds, BucketType)
    
    @commands.max_concurrency(number, per=BucketType.default, *, wait=False)
    # Limit how many instances of the command can be running at the same time.
    # Setting wait=True will queue up additional commands. False will raise MaxConcurrencyReached
    
    # Checks can be stacked, and will Raise a CheckFailure if any check fails.
    

    在你的情况下,你会想使用commands.cooldown(rate,per,BucketType)

    import discord
    from discord.ext import commands
    from discord.ext.commands.cooldowns import BucketType
    
    client = commands.Bot(command_prefix="c!")
    # on_ready command
    
    @client.command()
    @commands.cooldown(1,30,commands.BucketType.user) # one command, every 30 seconds, per user
    async def work(ctx):
        author_id = ctx.author.id
        currency_dict[author_id] += 50
        await ctx.send("You Gained 50 Coins")
    # currency_dict is a dictionary that is already defined
    
    # cooldown error-handling
    @work.error
    async def work_error(ctx, error):
        if isinstance(error, commands.CommandOnCooldown):
            await ctx.send(f'This command is on cooldown, you can use it in {round(error.retry_after, 2)} seconds')
    
    

    参考:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-13
      • 2021-03-11
      • 1970-01-01
      • 2021-04-25
      • 2021-04-06
      • 1970-01-01
      • 2021-05-20
      • 2019-02-17
      相关资源
      最近更新 更多