如何为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
相关产品推荐
相关产品推荐

