You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python中Discord Webhook发送消息时,message变量内的\n无法解析为换行的问题求助

解决Discord消息中\n无法解析为换行的问题

我来帮你搞定这个问题!核心原因其实很简单:你从文本文件里提取的\n字面量的两个字符(反斜杠+n),而不是Python中表示换行的转义字符。当这些内容被发送到Discord时,平台只会把它当成普通文本显示,不会解析成换行。

解决方案

这里有两个实用的方法可以修复这个问题:

方案1:直接替换转义的\n

这是最直接的方式,把文件里读出来的字面量\n替换成真正的换行符:

# 在提取到message之后添加这行代码
message = message.replace(r'\n', '\n')
  • r'\n'是原始字符串,用来匹配文件里的\n两个字符
  • '\n'是Python的换行转义字符,替换后Discord就能正确识别为换行

方案2:用ast.literal_eval解析转义序列

如果你的message里还有其他转义字符(比如\t\"),这个方法更通用,它会把字符串当作Python字面量来解析:

import ast

# 在提取到message之后添加这行代码
# 注意:如果message里包含双引号,先转义双引号
message = message.replace('"', '\\"')
message = ast.literal_eval(f'"{message}"')

这个方法会自动把所有标准的转义序列转换成对应的字符,不止是\n

整合到你的代码中

修改后的消息提取代码示例:

datei = open(f'./data/{guildname}/{kategorie}/{channelname}.txt','r')
nachrichten=datei.read()
for nachricht in nachrichten:
    if len(nachricht)>=10:
        try:
            s, message=nachricht.split("'content': '")
            message, s=message.split("', 'channel_id'")
            # 这里添加处理代码,二选一即可
            message = message.replace(r'\n', '\n')  # 方案1
            # 或者方案2:
            # import ast
            # message = message.replace('"', '\\"')
            # message = ast.literal_eval(f'"{message}"')
        except:
            message="."

为什么attachments里的\n能正常工作?

因为你是在代码里直接用attachments=f"{attachments}\n{value}"拼接的,这里的\n是Python的转义换行符,不是从文件里读出来的字面量,所以Discord能正确解析。

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

火山引擎 最新活动