Discord bot开发时JSON用户bag字段Log条目匹配异常问题求助
1. 消息发送参数错误
discord.py的ctx.send()方法第二个参数是tts(文本转语音开关,布尔值),你写的await ctx.send("YES", name)实际上是把name传给了tts参数,根本不会把name拼到消息里。就算匹配逻辑触发了,你也只会收到一条内容为YES的消息,很容易误以为逻辑没运行。
你可以先在if代码块里加一行调试打印确认:
if 'Log' in item["item"]: print("匹配逻辑已触发") # 控制台能看到这行就说明匹配是正常的 await ctx.send("YES", name)
修复方法:把两个参数拼接为单个字符串传入:
await ctx.send(f"YES {name}")
2. 字符串匹配存在隐性问题
你直接打印item["item"]看到Log不代表字符串完全匹配,可能存在前后空格、不可见字符、大小写差异的情况。用repr()打印字符串原始值可以精准排查:
print(repr(item["item"]))
如果输出不是完全的'Log',可以调整匹配逻辑提升兼容性:
# 忽略前后空格+忽略大小写匹配,适配更多异常情况 if "log" in item["item"].strip().lower(): await ctx.send(f"YES {name}")
额外优化建议
你当前的逻辑是遍历背包所有物品,每匹配到一次Log就发一次消息,如果背包里有多条Log条目会重复发消息。如果只需要判断是否存在Log,可以改成:
has_log = any("log" in item["item"].strip().lower() for item in bag) if has_log: await ctx.send("YES 背包里存在Log")
内容的提问来源于stack exchange,提问作者peet214
相关产品推荐
相关产品推荐

