如何在动态输入的代码块中正确进行换行?

问题描述 投票:0回答:1

我有一个问题。我有一个 Discord 机器人,允许用户使用 chatgpt npm 包与 GPT-4 进行通信。然而,当人工智能断行时,这并没有正确反映在 Discord 消息中,因此该消息被“挤在一起”。像这样: no line breaks

我该怎么做才能真正在那里换行?我尝试告诉 GPT4 使用 在响应中,但是当我这样做时,它被发送为“ " 在代码块中,仍然没有换行符。只是 各个句子之间。这是我负责发送消息的代码的片段:

       response = await api.sendMessage("User has sent you a query to the roleplay. Respond without breaking character in terms of the roleplay as you were taught at the start. His query is: "+message.content, {
          parentMessageId: lastResponseId
        }).then(async (response) => {
          //add to user message history
          if (userMessageHistory.has(message.author.id)) {
            let userMessageHistoryArray = userMessageHistory.get(message.author.id);
            userMessageHistoryArray.push(response.id);
            userMessageHistory.set(message.author.id, userMessageHistoryArray);
          } else {
            let userMessageHistoryArray = [];
            userMessageHistoryArray.push(response.id);
            userMessageHistory.set(message.author.id, userMessageHistoryArray);
          }

          let responseFiltered = response.text.replace(/[^a-zA-ZěščřžýáíéďťňůúĚŠČŘŽÝÁÍÉĎŤŇŮÚ\?!,.0-9\\ -]/g, '');

          const responseChunks = responseFiltered.match(/.{1,1800}/g) || [responseFiltered]; // Handle case of no long responses
      
          for (const chunk of responseChunks) {
            // Use template literal for line breaks
            await message.channel.send({
              content: `<@${message.author.id}>\n\n\`\`\`\n${chunk}\n\`\`\``
            });
          }
      
          await message.reactions.removeAll();
          await message.react('<a:checkmark2:751058781156278382>')

谢谢你。

javascript discord.js line-breaks chatgpt-api
1个回答
0
投票

使用特洛伊木马解决方案,用临时分隔符替换换行符。然后将消息分割成块,传递给discord块,最后让木马跳出来!

const delimiter = '|||'; // Choose a delimiter that won't be present in the text

const responseWithDelimiter = responseFiltered.replace(/\n/g, delimiter);

const responseChunks = responseWithDelimiter.match(/.{1,1800}/g) || [responseWithDelimiter]; // Handle case of no long responses

for (const chunk of responseChunks) {
    // Jumping out
    const formattedChunk = chunk.replace(new RegExp(delimiter, 'g'), '\n');

    await message.channel.send({
        content: `<@${message.author.id}>\n\n\`\`\`\n${formattedChunk}\n\`\`\``
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.