为多个discord.py bot命令设置相同的冷却时间?

2024-08-11Python开发问题
2

本文介绍了为多个discord.py bot命令设置相同的冷却时间?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

这是用discord.py编写的。

我有多个类似以下内容的命令:

@bot.command(name ="hi")
async def hi(ctx):
    link = ["https://google.com", "https://youtube.com"]
    chosen = random.choice(link)
    url = chosen
    embed = discord.Embed(title="Your Link", description=f"[Click Here]({url})", color=0x00ff00)
    if ctx.message.guild == None:
        await ctx.author.send('You can not use this command in your DM!')
        pass
    else:
        await ctx.author.send(embed=embed)

如果有人使用其中一个命令,则应对所有命令实施冷却(例如,如果使用!hi,则!hi!bye都将应用冷却。

我知道您可以使用@commands.cooldown(1, 600, commands.BucketType.user),但这只对当前命令应用冷却。

推荐答案

代码中的cooldowns修饰符是这样定义的:

def cooldown(rate, per, type=BucketType.default):
    def decorator(func):
        if isinstance(func, Command):
            func._buckets = CooldownMapping(Cooldown(rate, per, type))
        else:
            func.__commands_cooldown__ = Cooldown(rate, per, type)
        return func
    return decorator

我们可以对此进行修改,以便只创建一个在命令之间共享的Cooldown对象:

def shared_cooldown(rate, per, type=BucketType.default):
    cooldown = Cooldown(rate, per, type=type)
    def decorator(func):
        if isinstance(func, Command):
            func._buckets = CooldownMapping(cooldown)
        else:
            func.__commands_cooldown__ = cooldown
        return func
    return decorator

我们将通过调用它来获取装饰器,然后将其应用于命令:

my_cooldown = shared_cooldown(1, 600, commands.BucketType.user)

@bot.command()
@my_cooldown
async def hi(ctx):
    await ctx.send("Hi")


@bot.command()
@my_cooldown
async def bye(ctx):
    await ctx.send("Bye")

这篇关于为多个discord.py bot命令设置相同的冷却时间?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

在xarray中按单个维度的多个坐标分组
groupby multiple coords along a single dimension in xarray(在xarray中按单个维度的多个坐标分组)...
2024-08-22 Python开发问题
15

Pandas中的GROUP BY AND SUM不丢失列
Group by and Sum in Pandas without losing columns(Pandas中的GROUP BY AND SUM不丢失列)...
2024-08-22 Python开发问题
17

pandas 有从特定日期开始的按月分组的方式吗?
Is there a way of group by month in Pandas starting at specific day number?( pandas 有从特定日期开始的按月分组的方式吗?)...
2024-08-22 Python开发问题
10

GROUP BY+新列+基于条件的前一行抓取值
Group by + New Column + Grab value former row based on conditionals(GROUP BY+新列+基于条件的前一行抓取值)...
2024-08-22 Python开发问题
18

PANDA中的Groupby算法和插值算法
Groupby and interpolate in Pandas(PANDA中的Groupby算法和插值算法)...
2024-08-22 Python开发问题
11

PANAS-基于列对行进行分组,并将NaN替换为非空值
Pandas - Group Rows based on a column and replace NaN with non-null values(PANAS-基于列对行进行分组,并将NaN替换为非空值)...
2024-08-22 Python开发问题
10