Discord.py命令如何正确接收两个参数实现字符串count计数功能
问题根源
Discord.py 默认以空格为分隔符拆分命令后的输入内容,按顺序对应你定义的参数。你输入的count i love you so much love会被拆分为6个独立片段,前两个片段i和love会分别赋值给par和par2,剩下的内容因为没有对应接收参数被直接丢弃,因此统计结果不符合预期。
解决方案
方案一:不修改代码,调整输入规则
只需要告知用户,输入包含空格的长文本参数时用双引号包裹即可,正确输入示例:count "i love you so much" love
此时 Discord.py 会自动将引号内的完整内容识别为par,后续的love识别为par2,即可得到正确统计结果。
方案二:修改代码,适配无引号输入习惯
如果希望用户不需要手动加引号就能直接输入,可以调整代码逻辑,先统一接收所有输入内容,再按最后一个空格拆分出「待统计文本」和「目标关键词」,修改后代码如下:
@commands.command() async def count(self, ctx, *, input_content: str): # 查找最后一个空格的位置,拆分两个参数 split_pos = input_content.rfind(' ') if split_pos == -1: await ctx.send("输入格式错误,请按照 `count 待统计文本 目标关键词` 格式输入") return par = input_content[:split_pos] par2 = input_content[split_pos+1:] x = par.count(par2) emBed = discord.Embed(title="try count", description="", color=0x6F9DC3) emBed.add_field(name="Output", value=f'text = "{par}"\nx = text.count({par2})\nprint(x)') emBed.add_field(name="Result", value=str(x)) await ctx.channel.send(embed=emBed)
修改后用户直接输入count i love you so much love即可正常运行,系统会自动将i love you so much作为待统计文本,love作为目标关键词,返回统计结果为1,符合预期。
内容的提问来源于stack exchange,提问作者user17430284
相关产品推荐
相关产品推荐

