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

如何为Discord bot实现支持可选多词参数的命令功能

问题核心原因

你之前遇到的语法错误、运行错误都是对Python可变参数的用法理解有误导致的:

  • Python中*arg是可变位置参数,本身就默认是可选的,用户不传参数时arg的值是空元组(),不需要也不能给它加= None的默认值,所以*arg = None直接触发语法错误
  • *, arg = None是关键字-only参数声明,要求参数必须以arg=xxx的形式传入,而Discord.py会把用户输入的空格分隔内容按位置参数传递,根本不会赋值给arg,导致arg始终是None,调用切片、拼接方法自然抛出类型错误,返回奇怪内容也是参数没有正确传递导致的。

正确实现方式

你原有的async def get_inspiration(ctx, *arg):参数写法本身是符合需求的,只需要补充空参数的判断逻辑,匹配你get_poem的调用要求即可:

async def get_inspiration(ctx, *arg):
    "Returns random poetry quote from Goodreads"
    search_key = " ".join(arg)
    # 无参数时调用get_poem的原有随机逻辑
    if not search_key:
        # 如果你原来的get_poem是传空字符串返回随机,就改成response = get_poem("")
        response = get_poem()
    else:
        response = get_poem(search_key)
    await ctx.send(response)

如果修改后无参数时还是返回异常内容,你需要检查get_poem函数的入参处理逻辑,确认空参数/空字符串的分支是否正确走了随机语录返回的逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:24:04