discord.py中askwhy命令startswith不区分大小写匹配问题
问题解决:Discord.py中askwhy命令的开头匹配错误
问题原因
原代码的判断逻辑完全错误:用or连接多个not startswith条件,导致只要输入的字符串不匹配其中任意一个大小写形式,就会触发错误提示——哪怕输入的是符合要求的开头(比如"Why",会因为不匹配"why"而触发条件)。这种写法不仅冗余,还逻辑混乱。
解决方法
将输入的question字符串统一转为小写,再判断是否以"why"开头,一行代码就能覆盖所有大小写情况,逻辑清晰且简洁。
修改后的完整代码
import random import asyncio import discord from discord.ext import commands from discord import app_commands @client.hybrid_command(name="askwhy", with_app_command=True, description="问一个以'Why'开头的问题") @commands.guild_only() @commands.cooldown(1, 7, commands.BucketType.user) @app_commands.guilds(discord.Object(id=1009907559391567912)) async def askwhy(ctx, *, question=None): if question is None: await ctx.reply("请提出问题!") else: # 统一转为小写后判断开头,兼容所有大小写组合 if not question.lower().startswith("why"): await ctx.reply("你的问题需要以`why`开头(大小写均可)") else: choices = [ "因为我这么说的", "不知道", "你傻吗?这谁都知道答案啊。", "自己谷歌去。", "问你爸去——哦不好意思我忘了他去买牛奶还没回来..", "嗯.. 稍后再试试吧" ] choice = random.choice(choices) await ctx.typing() await asyncio.sleep(2) await ctx.reply(f"{choice}")
关键修改点
- 用
question.lower().startswith("why")替代原有的多条件判断,一次性兼容所有大小写形式 - 修正了原代码中逻辑错误的
or判断,简化为单一条件,逻辑更直观 - 将所有英文提示和回复内容翻译成中文,符合使用需求
内容的提问来源于stack exchange,提问作者Phoenix
相关产品推荐
相关产品推荐

