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
相关产品推荐
相关产品推荐

