discord.py如何绕过多词命令参数需加引号的限制?
解决discord.py命令无需引号传递多词参数的方案
这是discord.py默认参数解析逻辑导致的:解析器默认以空格作为参数分隔符,单个位置参数只会匹配第一个空格前的内容,因此只能拿到第一个单词。可以通过以下两种方式实现无引号传递多词参数:
方案1:使用贪婪参数捕获(最常用)
在需要接收多词内容的参数前添加*,标识,discord.py会将命令后面的所有剩余内容合并为单个字符串传入该参数,无需用户添加引号。
代码示例:
@bot.command() async def example(ctx, *, text): await ctx.send(text)
此时用户输入example Hello world,text变量会拿到完整的Hello world内容,可直接返回。
如果命令还有其他前置参数,只需要将贪婪参数放在所有参数的最后即可,示例:
# 先接收@用户参数,再接收多词消息内容 @bot.command() async def send(ctx, target_user: discord.User, *, message_content): await target_user.send(message_content)
方案2:手动提取原始消息内容
如果有自定义解析需求,可以直接从消息对象中提取完整内容,手动去掉前缀和命令名即可:
@bot.command() async def example(ctx): # 去掉命令前缀和命令名,拿到剩余所有内容 full_content = ctx.message.content.removeprefix(f"{ctx.prefix}{ctx.invoked_with}").strip() await ctx.send(full_content)
该方法灵活性更高,可适配复杂的自定义参数解析场景。
内容的提问来源于stack exchange,提问作者Mushtaq Mahar
相关产品推荐
相关产品推荐

