Discord.py开发问题:.idea命令仅能向Embed传递首个短语如何解决
问题原因
discord.py框架的命令参数默认按空格切割输入内容,你当前仅定义了单个arg参数,只会接收第一个空格前的首个短语,后续内容会被直接丢弃。
修改方案
核心修改点
在arg参数前添加*标记,框架会自动将命令后所有的输入内容作为完整字符串传入arg,无需手动拼接。同时你代码中的pass_contxt存在拼写错误,正确写法为pass_context,如果你使用的是v1.x及以上版本的discord.py,该参数默认开启可直接省略。
修改后完整代码
兼容旧版本discord.py
@bot.command(pass_context=True) async def идея(ctx, *, arg): await ctx.channel.purge(limit = 1) emb = discord.Embed(title=f'`Начато голосование на идею` 💡', description='Идея: ' + str(arg), colour=discord.Color.purple() ) emb.set_footer(text = str(ctx.message.author)) message = await ctx.send(embed=emb) await message.add_reaction('✅') await message.add_reaction('❌') print('>>Была отправлена идея: ' + str(arg))
适配discord.py v2.x版本(更简洁)
@bot.command() async def идея(ctx, *, arg): await ctx.channel.purge(limit = 1) emb = discord.Embed(title=f'`Начато голосование на идею` 💡', description=f'Идея: {arg}', colour=discord.Color.purple() ) emb.set_footer(text = str(ctx.author)) message = await ctx.send(embed=emb) await message.add_reaction('✅') await message.add_reaction('❌') print(f'>>Была отправлена идея: {arg}')
可选优化(处理空输入)
如果需要避免用户未输入创意内容时抛出参数缺失错误,可以增加参数默认值和空值判断:
@bot.command() async def идея(ctx, *, arg: str = None): await ctx.channel.purge(limit = 1) if not arg: await ctx.send("请输入创意内容后再提交", delete_after=5) return emb = discord.Embed(title=f'`Начато голосование на идею` 💡', description=f'Идея: {arg}', colour=discord.Color.purple() ) emb.set_footer(text = str(ctx.author)) message = await ctx.send(embed=emb) await message.add_reaction('✅') await message.add_reaction('❌') print(f'>>Была отправлена идея: {arg}')
修改完成后调用命令即可正常捕获完整的创意文本。
内容的提问来源于stack exchange,提问作者Евгений
相关产品推荐
相关产品推荐

