使用不和谐机器人将多行字符串作为消息发送时出现布局错误

Posted

技术标签:

【中文标题】使用不和谐机器人将多行字符串作为消息发送时出现布局错误【英文标题】:Layout error when sending a multiline string as message with discord bot 【发布时间】:2021-12-12 20:27:31 【问题描述】:

我启动并运行了一个不和谐机器人。我的目标是在某个命令后向用户发送消息。这行得通,但不知何故我的布局是错误的。我的字符串的第一行是正确的,然后其余的以一些前导空格发送。

client = commands.Bot(command_prefix = '/')

@client.command()
async def start(ctx):
    welcome_message = f"""
    Welcome to my bot
    here is a new line which has leading spaces
    this line here has some aswell
    """
    await ctx.send(welcome_message)

所以基本上我的信息是这样的:

Welcome to my bot
    here is a new line which has leading spaces
    this line here has some aswell

即使在发送前使用welcome_message = welcome_message.lstrip() 也无法解决问题。

【问题讨论】:

【参考方案1】:

这种情况下的缩进是字符串的一部分(因为它是一个多行字符串),你可以简单地删除它:

@client.command()
async def start(ctx):
    welcome_message = welcome_message = f"""
Welcome to my bot
here is a new line which has leading spaces
this line here has some aswell
    """
    await ctx.send(welcome_message)

如果要保留缩进,请使用textwrap.dedent 方法:

import textwrap

@client.command()
async def start(ctx):
    welcome_message = welcome_message = f"""
    Welcome to my bot
    here is a new line which has leading spaces
    this line here has some aswell
    """
    await ctx.send(textwrap.dedent(welcome_message))

【讨论】:

我认为字符串不能免于缩进,因为它会超出范围。 python中总是这样吗? 缩进仍然是多行字符串的一部分(因为它仍然在引号内)。

以上是关于使用不和谐机器人将多行字符串作为消息发送时出现布局错误的主要内容,如果未能解决你的问题,请参考以下文章

Python,捕获操作系统输出并作为不和谐的消息发送

如何使用不和谐机器人将消息发送到特定频道?

如何使不和谐机器人自动发送消息?

如何使不和谐机器人将消息发送到不和谐 Node js 的特定频道机器人

尝试通过电报机器人发送消息时出现语法错误

Discord.py 如何从不和谐消息中读取 int 并将其作为变量发送到嵌入中