UNPKG

kivibot-plugin-jikipedia

Version:

QQ 机器人框架 KiviBot 的 小鸡词典(梗词典)插件

126 lines (98 loc) 3.02 kB
const { KiviPlugin } = require('@kivibot/core') const { autoComplete, translatePlaintext } = require('./api') const { version } = require('../package.json') const plugin = new KiviPlugin('Jikipedia', version) const config = { // 触发小鸡词典前缀 cmdPrefix: '#' } const msgs = { unknownPhrase: '词典未收录', nullPhrase: '未查询到释义' } const cmds = [ '/jikipedia prefix [触发前缀]' ] plugin.onMounted(async bot => { plugin.saveConfig(Object.assign(config, plugin.loadConfig())) plugin.onAdminCmd('/jikipedia', (e, params) => { const [cmd, value] = params if (cmd === 'prefix' && value) { config.cmdPrefix = value plugin.saveConfig(config) return e.reply('成功修改词典查询触发前缀', true) } return e.reply(cmds.join('\n'), true) }) plugin.onMessage(async event => { const { message, raw_message } = event // 消息符合触发条件 const isHit = raw_message.trim().startsWith(config.cmdPrefix) // 过滤不触发的消息 if (!isHit) { return } const isEmoji = raw_message.trim().startsWith(config.cmdPrefix + 'emoji') // TODO 响应失败处理 if (isEmoji) { const content = raw_message .replace(new RegExp(`^\\s*${config.cmdPrefix + 'emoji'}`), '') .trim() await replyEmoji(event, content) } else { const phrase = raw_message .replace(new RegExp(`^\\s*${config.cmdPrefix}`), '') .trim() await replyAutoComplete(event, phrase) } }) }) async function replyAutoComplete(event, phrase) { plugin.debug(phrase) const response = await autoComplete(phrase) const { data } = response.data plugin.debug(JSON.stringify(data)) // 无梗 if (data.length === 0) { await event.reply(msgs.unknownPhrase, true) return } // process if (data.length >= 1) { let mainContent = data[0].entities?.[0]?.content // 无释义 if (!mainContent) { mainContent = msgs.nullPhrase if (data.length > 1) { mainContent += '\n\n猜你想问:' mainContent = addRelatedContent(data, mainContent) } await event.reply(mainContent, true) return } if (data.length > 1) { mainContent += '\n\n相关内容:' mainContent = addRelatedContent(data, mainContent) } await event.reply(mainContent, true) } } async function replyEmoji(event, content) { plugin.debug(content) const response = await translatePlaintext(content) const { translation } = response.data await event.reply(translation, true) } /** * 添加相关词 * @param data * @param mainContent * @return {*} */ function addRelatedContent(data, mainContent) { for (let i = 1; i < data.length; i++) { mainContent += data[i].word + (i === data.length - 1 ? '' : '、') } return mainContent } module.exports = { plugin }