UNPKG

progressive-chatgpt-bot

Version:

A progressive ChatGPT feishu bot, made to assist my girlfriend's work.

56 lines 2.42 kB
import { replyCard, editCard, reply, buildProgressiveCard } from './lark'; import { OpenAIMessageDB } from './aircode'; import { throttle } from './utils'; export async function handleByOpenAI(logger, larkClient, setting, messageId, content) { logger.debug(`content:${content}`); logger.debug(`messageId:${messageId}`); logger.debug(`apiKey:${setting.openaiApiKey}`); const { ChatGPTAPI } = await import('chatgpt'); logger.debug('ChatGPTAPI', ChatGPTAPI); const api = new ChatGPTAPI({ apiKey: setting.openaiApiKey, debug: true, }); let pendingRequest; let progressMessageId; const onProgress = throttle(async (partialResponse) => { var _a; logger.debug('partialResponse', partialResponse); if (pendingRequest) { const replyResponse = await pendingRequest; if (!progressMessageId) { progressMessageId = (_a = replyResponse === null || replyResponse === void 0 ? void 0 : replyResponse.data) === null || _a === void 0 ? void 0 : _a.message_id; } } if (!progressMessageId) { pendingRequest = replyCard(larkClient, messageId, buildProgressiveCard(partialResponse.text)); } else { pendingRequest = editCard(larkClient, progressMessageId, buildProgressiveCard(partialResponse.text)); } await pendingRequest; }, 2000); try { logger.debug('sendMessage start'); const lastMessage = await OpenAIMessageDB.where().findOne(); logger.debug('lastMessage', lastMessage); const res = await api.sendMessage(content, { onProgress, parentMessageId: lastMessage === null || lastMessage === void 0 ? void 0 : lastMessage.pid, conversationId: lastMessage === null || lastMessage === void 0 ? void 0 : lastMessage.cid, }); if (lastMessage) { await OpenAIMessageDB.delete([lastMessage]); } await OpenAIMessageDB.save({ pid: res.id, cid: res.conversationId }); logger.debug('res.text', res.text); // do not send message when it has been processed under `onProgress` callback if (!progressMessageId) { await reply(larkClient, messageId, res.text); } } catch (e) { await reply(larkClient, messageId, `failed: ${e}`); } } //# sourceMappingURL=openai.js.map