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

Python Discord Bot笔记命令报错:TypeError: quote_from_bytes() expected bytes

问题解决:Discord机器人笔记命令报错处理

报错原因分析

  1. 键类型不兼容:Replit Database要求键必须是字符串或字节类型,但你直接用ctx.author(Discord用户对象)作为键,urllib在处理非字符串键时触发类型错误。
  2. 条件判断逻辑错误:if note_add.lower() == "note" or "see"的写法等价于if (note_add.lower() == "note") or True,导致无论输入什么内容,都会执行读取笔记的分支,进一步触发键类型的报错。

修复代码

# 假设已完成导入、bot初始化等前置代码(前缀为!)

@bot.command()
async def note(ctx, *, note_add):
    # 使用用户ID的字符串形式作为数据库键,唯一且符合类型要求
    author_key = str(ctx.author.id)
    
    # 修正条件判断逻辑,准确匹配查看指令
    if note_add.lower() in ["note", "see"]:
        # 读取前先判断键是否存在,避免无笔记时的报错
        if author_key in db:
            note_text = db[author_key]
            await ctx.send(f"你的笔记:{note_text}")
            print(note_text)
        else:
            await ctx.send("你还没有创建笔记!")
    else:
        # 存储笔记
        db[author_key] = note_add
        await ctx.send("笔记已保存!")

修复说明

  • 用str(ctx.author.id)替代ctx.author作为数据库键,既保证唯一性,又符合Replit DB的键类型要求。
  • 修正条件判断为note_add.lower() in ["note", "see"],精准匹配查看指令。
  • 添加键存在性检查,避免用户查看未创建的笔记时触发新报错。
  • 增加机器人回复,让用户直观看到操作结果(原代码仅后台print,用户无反馈)。

内容的提问来源于stack exchange,提问作者Marijn Klasens

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:43:31