diff --git a/src/clients/openai.js b/src/clients/openai.js index 930c65f..2ac52c9 100644 --- a/src/clients/openai.js +++ b/src/clients/openai.js @@ -71,5 +71,34 @@ async function chatWithAI(chatId, prompt) { return reply; } +/** + * Slice the message content into multiple snippets. + * @param {string} content - The content to slice. + * @param {number} maxLength - The maximum length of each snippet. + * @param {string} separator - The separator to split the content. + * @return {Array} The sliced snippets. + */ +function sliceContent(content, maxLength, separator="\n") { + const substrings = content.separator(separator); + const snippets = []; + + let lastSnippet = ""; + for (const text of substrings) { + if (!text) { + lastSnippet += separator; + continue; + } + if (text.length + lastSnippet.length < maxLength) { + lastSnippet += text; + continue; + } + snippets.push(lastSnippet); + lastSnippet = ""; + } + + return snippets; +} + exports.useClient = () => client; exports.chatWithAI = chatWithAI; +exports.sliceContent = sliceContent; diff --git a/src/triggers/discord/message_create/index.js b/src/triggers/discord/message_create/index.js index b29768f..0e660e4 100644 --- a/src/triggers/discord/message_create/index.js +++ b/src/triggers/discord/message_create/index.js @@ -5,7 +5,7 @@ const discord = require("discord.js"); const discordToMatrix = require("../../../bridges/discord_matrix"); const {useClient} = require("../../../clients/discord"); -const {chatWithAI} = require("../../../clients/openai"); +const {chatWithAI, sliceContent} = require("../../../clients/openai"); /** * @param {discord.Message} message @@ -47,5 +47,13 @@ module.exports = async (message) => { return; } - message.reply(responseContent); + if (responseContent.length < 2000) { + message.reply(responseContent); + } else { + const snippets = sliceContent(responseContent, 2000); + message.reply(snippets.shift()); + snippets.forEach((snippet) => { + message.channel.send(snippet); + }); + } };