UNPKG

progressive-chatgpt-bot

Version:

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

80 lines 3.5 kB
import aircode from 'aircode'; import { getLarkClient, reply } from './lark'; import { getSettingFromNodeEnv, checkSetting } from './env'; import { handleByOpenAI } from './openai'; import { Logger } from './logger'; const MessageDB = aircode.db.table('lark_message'); export const OpenAIMessageDB = aircode.db.table('openai_message'); export function defineFunction(fn) { return fn; } export function getAircodeHandler(options) { const logger = new Logger(options.debug); return defineFunction(async (params, context) => { var _a, _b; logger.debug('params', params); // Pass Lark's challenge check if (params.type === 'url_verification') { logger.debug('deal feishu url_verification'); return { challenge: params.challenge, }; } // Encrypt should be disabled. if (params.encrypt) { return { code: 1, message: 'please disable lark encrypt', }; } const setting = getSettingFromNodeEnv(); const larkClient = getLarkClient(setting); logger.debug('setting', setting); // Check env if (!params.hasOwnProperty('header')) { return checkSetting(setting); } // Handle message if (params.header.event_type === 'im.message.receive_v1') { const eventId = params.header.event_id; logger.debug(`eventId:${eventId}`); const messageId = params.event.message.message_id; const count = await MessageDB.where({ message_id: messageId }).count(); if (count !== 0) { return { code: 2, message: 'skip redundant message', }; } await MessageDB.save({ message_id: messageId }); if (params.event.message.chat_type === 'p2p') { if (params.event.message.message_type !== 'text') { await reply(larkClient, messageId, 'Currently only plain text questions are supported'); return { code: 0 }; } const userInput = JSON.parse(params.event.message.content); const question = userInput.text.replace('@_user_1', ''); await handleByOpenAI(logger, larkClient, setting, messageId, question); return { code: 0 }; } if (params.event.message.chat_type === 'group') { if (!params.event.message.mentions || params.event.message.mentions.length === 0) { return { code: 0, message: 'do not process message without mention' }; } if (((_b = (_a = params.event.message) === null || _a === void 0 ? void 0 : _a.mentions[0]) === null || _b === void 0 ? void 0 : _b.name) !== setting.feishuBotName) { return { code: 0, message: 'bot name does not equal to first mention name' }; } const userInput = JSON.parse(params.event.message.content); const question = userInput.text.replace('@_user_1', ''); await handleByOpenAI(logger, larkClient, setting, messageId, question); return { code: 0 }; } } return { code: 2, message: `unknown params:${JSON.stringify(params)}`, }; }); } //# sourceMappingURL=aircode.js.map