Python编写Discord命令时参数含空格、网页请求传参问题修复
问题根因
你碰到的两个问题都是Discord机器人开发里的常见坑:
- discord.py 默认的命令解析逻辑按空格切割命令后的输入,你代码里只定义了普通位置参数
msg,框架只会把第一个空格前的片段传入该参数,后续所有带空格、换行的内容都会被直接忽略。 - 直接把用户输入裸拼到URL里没有做转义编码,空格、特殊符号会破坏URL的参数结构,直接导致接口请求异常。
修复步骤
- 给
msg参数前加*标记,告诉解析器这个参数要捕获命令后所有剩余内容,不管中间有多少空格、换行,全部完整传入。 - 用Python标准库的URL编码方法处理用户输入,自动把空格、特殊字符转成URL合法的格式,再拼接请求地址,避免传参异常。
修复后可直接运行的代码
import discord from urllib.parse import urlencode @client.command() async def cautionsign(ctx, *, msg): # 自动编码参数,处理空格、特殊字符转义 img_url = "https://api.popcat.xyz/caution?" + urlencode({"text": msg}) embed = discord.Embed(title="Here's your caution sign!") embed.set_image(url=img_url) await ctx.send(embed=embed)
修复后不管是!cautionsign test 测试文本 带空格,还是命令后换行输入多段内容,都能完整识别,不会出现内容截断,特殊字符也不会导致接口请求失败。
内容的提问来源于stack exchange,提问作者Ocryol
相关产品推荐
相关产品推荐

