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
相关产品推荐
相关产品推荐

