You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.py Say命令多行文本格式异常问题求助

解决Discord.py Say命令的多行格式问题

我之前也碰到过一模一样的问题!你的核心问题出在命令参数的处理方式上,咱们来一步步调整代码:

问题根源

你现在用的*message是可变位置参数,Discord.py会把用户输入的内容拆分成一个字符串元组(比如用户输入!say 这是第一行 这是第二行,message就会变成('这是第一行', '这是第二行'))。直接把这个元组传给send(),Discord会把它转换成类似('这是第一行', '这是第二行')的文本输出,自然没法保留你想要的换行和格式。

修改后的代码

把参数改成接收完整字符串的形式,就能解决这个问题:

@commands.command()
@commands.has_any_role(*Say_Role)
async def say(self, ctx, *, message: str):
    await ctx.message.delete()
    await ctx.send("✅", delete_after=0.1)
    # 直接发送完整的message字符串,保留所有格式和换行
    await ctx.send(message)

关键改动说明

  • *, message: str:这里的*是Python的语法,用来标记后面的参数是关键字-only参数,Discord.py会把用户输入的所有内容(包括空格、换行、Markdown标记)合并成一个完整的字符串传给message,不会拆分。
  • 去掉了多余的channel = ctx.channel,直接用ctx.send()就可以发送到当前频道,当然如果需要指定其他频道的话也可以保留。

额外提示

如果需要支持用户输入换行,用户可以在命令里用\n(比如!say 第一行\n第二行),或者在Discord输入框里直接换行输入内容,修改后的代码都能正确解析并发送带换行的文本。另外,Discord自带的Markdown格式(比如加粗、斜体、代码块)也会被正常渲染,只要你的频道允许发送带格式的消息就行。

内容的提问来源于stack exchange,提问作者user15558580

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 21:42:33