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

discord.py机器人如何发送与终端输出一致的ASCII图案消息

问题原因

排版错乱、空格丢失的核心诱因有三个:

  • Discord普通消息默认使用比例字体,不同字符显示宽度不统一,无法适配ASCII图案要求的等宽对齐规则
  • 普通消息中连续半角空格会被平台自动折叠,多余空格会被直接过滤
  • 逐行调用ctx.send()会将图案拆分为多条独立消息,消息间的间隔、行高和单块文本的排版逻辑完全不同,直接破坏图案完整性
可行实现方案

最稳定、和终端显示效果完全一致的方案是用Discord代码块包裹整段ASCII图案一次性发送:代码块会强制启用等宽字体,完整保留所有空格、换行格式,不会自动折叠字符,和终端的等宽显示逻辑完全匹配。

具体实现步骤

  1. 把你在on_ready事件里print的ASCII图案完整提取出来,存为三引号包裹的多行字符串常量,注意保留所有原始空格、换行不要修改:
# 替换成你自己的ASCII logo内容即可
LS_W_ASCII_LOGO = """
  ██╗     ███████╗██╗    ██╗
  ██║     ██╔════╝██║    ██║
  ██║     ███████╗██║ █╗ ██║
  ██║     ╚════██║██║███╗██║
  ███████╗███████║╚███╔███╔╝
  ╚══════╝╚══════╝ ╚══╝╚══╝ 
"""
  1. 重写name命令,不要逐行发送,把整段logo用三个反引号包裹后一次性发送,反引号和图案之间留换行避免格式解析失败:
@client.command()
async def name(ctx):
    # 三个反引号包裹整段内容,形成无语言标识的纯文本代码块,不会出现语法高亮色差
    await ctx.send(f"```\n{LS_W_ASCII_LOGO}\n```")

注意事项

  • 如果你的ASCII图案本身包含反引号字符,只需要把包裹图案的反引号从3个增加到4个即可,不会出现格式冲突
  • 不要给代码块加python/yaml这类语言标识,避免出现语法高亮的杂色,最大程度贴近终端纯文本显示效果
  • 单条Discord消息最多支持2000字符,常规ASCII logo长度远低于这个限制,不需要拆分发送

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:27:13