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

Discord Bot文本匹配问题求助:含空格键与精确匹配失效

解决Discord Bot的两个匹配问题

问题1:带空格的键无法匹配

原代码用*message会把命令后的内容按空格拆成多个独立字符串,比如输入!grading abi ayyash会被拆成("abi", "ayyash"),但JSON里的键是完整的"abi ayyash",自然匹配不上。

解决方式:改用*, message: str参数格式,直接获取命令后的全部文本内容,保留空格。

问题2:无法优先匹配长键,出现短键误匹配

原代码逐个检查拆分后的单词,会导致长键被拆分成短单词单独匹配,比如存在"aban test"时,会错误返回"aban"和"test"。

解决方式:

  1. 先筛选出所有值为"weak"的键,按长度从长到短排序,确保长键优先被匹配
  2. 匹配到长键后,从输入文本中移除该键的内容,避免后续匹配到它包含的短键

修改后的完整代码

@commands.command()
async def grading(self, ctx, *, message: str):
    # 筛选所有值为"weak"的键,按长度降序排序(长键优先)
    weak_keys = [key for key, value in narrators.items() if value == "weak"]
    weak_keys.sort(key=lambda x: len(x), reverse=True)
    
    found_keys = []
    remaining_message = message.strip()
    
    for key in weak_keys:
        if key in remaining_message:
            found_keys.append(key)
            # 移除已匹配的键内容,防止短键被误匹配
            remaining_message = remaining_message.replace(key, "").strip()
            # 文本为空时提前结束,提升效率
            if not remaining_message:
                break
    
    if found_keys:
        nars = ', '.join(found_keys)
        await ctx.send(f"This is unreliable because of:\n{nars}")
    else:
        await ctx.send("No weak keys found.")

代码说明

  • *, message: str:确保命令后的所有内容(包括空格)被作为一个完整字符串接收
  • 按长度降序排序:保证像"aban b. abi ayyash"这类长键先被匹配,不会被拆成短键误判
  • 移除已匹配内容:比如匹配到"aban test"后,输入文本里的该内容会被删掉,不会再触发"aban"或"test"的匹配
  • 增加无匹配的提示:避免空输出,提升用户体验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:20:22