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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:57:25