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

Discord.py 如何实现消息长度超过指定数值时自动拆分为多行显示

实现思路
  • 优先采用「不拆分完整单词」的拆分逻辑,避免把单个短语切成两半降低可读性,匹配你给出的示例在语义边界拆分的效果
  • 封装可复用的消息拆分工具函数,支持自定义单行长上限,同时兼容单个单词超出长度限制的极端场景,避免运行报错
  • 在Discord.py的消息发送逻辑中,先调用工具函数处理原始文本,再发送处理后的内容即可
代码实现

首先是保留单词完整性的拆分工具函数:

def split_message(text: str, max_line_length: int = 30) -> str:
    words = text.split()
    lines = []
    current_line = []
    current_length = 0

    for word in words:
        # 计算当前单词加入当前行后的总长度(前置空格仅当前行非空时计算)
        word_length = len(word) + 1 if current_line else len(word)
        if current_length + word_length <= max_line_length:
            current_line.append(word)
            current_length += word_length
        else:
            # 保存当前行,开启新行
            if current_line:
                lines.append(' '.join(current_line))
            # 处理单个单词超过长度限制的极端情况
            while len(word) > max_line_length:
                lines.append(word[:max_line_length])
                word = word[max_line_length:]
            current_line = [word]
            current_length = len(word)
    # 拼接最后剩余的内容
    if current_line:
        lines.append(' '.join(current_line))
    return '\n'.join(lines)

在Discord.py中的使用示例:

import discord
from discord.ext import commands

# 初始化Bot,根据需要调整Intents配置
bot = commands.Bot(command_prefix='!', intents=discord.Intents.all())

# 示例命令:发送自定义内容,自动按长度拆分
@bot.command(name='send')
async def send_processed_msg(ctx, *, content: str):
    # 可自行调整max_line_length参数匹配你需要的拆分长度
    processed_content = split_message(content, max_line_length=28)
    await ctx.send(processed_content)

bot.run("你的Bot Token")

如果不需要保留单词完整性,直接按固定字符数硬切,可以使用简化版本的拆分函数:

def split_message_hard(text: str, max_line_length: int = 30) -> str:
    return '\n'.join(text[i:i+max_line_length] for i in range(0, len(text), max_line_length))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:06:08