You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord机器人开发求助:实现15分钟冷却与周五专属命令

Discord机器人命令功能优化方案

嗨,我来帮你搞定这两个功能!作为编程新手,Discord.py的一些实用特性确实容易被忽略,我给你一步步拆解实现方法:

一、给beg命令添加15分钟冷却机制

Discord.py内置了非常方便的冷却装饰器,不需要自己手动处理时间计算,直接用@commands.cooldown()就能搞定。你只需要在@client.command()下面加一行这个装饰器,参数分别代表:允许执行的次数、冷却时长(秒)、冷却作用范围(这里选用户级,每个用户单独冷却)。

修改后的beg命令代码如下:

@client.command()
@commands.cooldown(1, 900, commands.BucketType.user)  # 1次/900秒(15分钟),每个用户独立冷却
async def beg(ctx):
    await open_account(ctx.author)
    users = await get_bank_data()
    user = ctx.author
    earn = random.randrange(6900)
    await ctx.send(f'Someone gave you {earn} coins!')
    users[str(user.id)]["wallet"] += earn
    with open('main code\\economy.json', 'w') as f:
        json.dump(users,f)

如果用户在冷却时间内再次调用命令,Discord.py会自动发送冷却提示,新手阶段先用默认提示就足够啦。

二、让friday命令仅在周五可用

我们可以通过datetime模块获取当前星期几来做判断,注意Python里weekday()方法返回的是0(周一)到6(周日),所以周五对应的是4。这里给你两种实现方式:

方法1:命令内直接判断(简单直观)

修改后的friday命令代码:

@client.command()
async def friday(ctx):
    # 获取当前星期几,周五对应数字4
    current_weekday = datetime.datetime.today().weekday()
    if current_weekday != 4:
        await ctx.send('这个命令只有周五才能用哦!😎')
        return
    # 仅周五执行发送视频的操作
    vid = '<URL>'
    await ctx.send(vid)

方法2:用检查装饰器(更优雅,适合复用)

如果你以后还有其他需要限制日期的命令,可以写一个通用的检查函数,用@commands.check()装饰器来统一管理:

def is_friday():
    def predicate(ctx):
        return datetime.datetime.today().weekday() == 4
    return commands.check(predicate)

# 给friday命令添加检查装饰器
@client.command()
@is_friday()
async def friday(ctx):
    vid = '<URL>'
    await ctx.send(vid)

# 自定义检查不通过时的错误提示
@friday.error
async def friday_error(ctx, error):
    if isinstance(error, commands.CheckFailure):
        await ctx.send('这个命令只有周五才能用哦!😎')

这种方式代码结构更清晰,后续扩展同类命令也更方便。

内容的提问来源于stack exchange,提问作者bat beat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:30:05