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

Discord机器人持久化命令冷却strptime运行报错排查

错误原因排查

你的测试代码存在3个明确问题,都会导致运行失败:

  • 方法调用错误:datetime.date类本身没有strptime方法,这个方法归属于datetime.datetime类,直接调用datetime.date.strptime()会抛出AttributeError。
  • 格式符匹配风险:你用的%y是匹配2位数字的年份(比如传入24-05-20会解析为2024年5月20日),如果你的数据库存的是4位年份格式(比如2024-05-20),会直接抛解析错误,这种场景要改用%Y格式符。
  • 类型拼接错误:两个日期相减得到的是datetime.timedelta对象,不能直接和字符串"days."做拼接,必须取对象的.days属性拿到整数类型的天数差,转成字符串后才能拼接发送。
修正后的测试代码
import datetime
from discord.ext import commands

@bot.command()
async def datetest(ctx, date):
    today = datetime.date.today()
    print(today)
    # 注意:如果传入的日期是4位年份格式,把下面的%y改成%Y
    someday = datetime.datetime.strptime(date, "%y-%m-%d").date()
    diff = someday - today
    await ctx.send(f"{diff.days} days.")
正式冷却逻辑实现建议
  • 数据库存储上次使用时间时,优先存UTC时区的date或datetime类型字段,不要存字符串,避免后续解析出错、时区偏差导致冷却计算不准;读取时如果拿到的是原生日期类型对象,不需要额外做strptime解析,直接做日期差计算即可。
  • 冷却判断逻辑直接取时间差的天数做判断:当(当前日期 - 数据库存储的上次使用日期).days >=7时,才允许用户执行命令,执行后同步更新数据库里对应用户的上次使用日期为当前日期。
  • 不要在冷却校验逻辑里硬编码依赖用户传入的日期参数,避免被恶意构造参数绕过校验。

内容的提问来源于stack exchange,提问作者Zaid Hussain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:03:28