From cc2c5612248c53470f3ffee510f6ccf847eac6b5 Mon Sep 17 00:00:00 2001 From: ikechan8370 Date: Tue, 28 Mar 2023 19:50:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20qq=E8=A1=A8=E6=83=85=E5=92=8C=E7=9C=9F?= =?UTF-8?q?=E7=9A=84=E7=BE=A4=E8=81=8Aat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/chat.js | 5 +- utils/config.js | 1 + utils/face.js | 543 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 547 insertions(+), 2 deletions(-) create mode 100644 utils/face.js diff --git a/apps/chat.js b/apps/chat.js index 1ffebac..f7a2aca 100644 --- a/apps/chat.js +++ b/apps/chat.js @@ -21,6 +21,7 @@ import fetch from 'node-fetch' import { deleteConversation, getConversations, getLatestMessageIdByConversationId } from '../utils/conversation.js' import { convertSpeaker, generateAudio, speakers } from '../utils/tts.js' import ChatGLMClient from '../utils/chatglm.js' +import {convertFaces} from "../utils/face.js"; try { await import('keyv') } catch (err) { @@ -767,7 +768,7 @@ export class chatgpt extends plugin { audioErr = true } if (Config.alsoSendText || audioErr) { - await this.reply(`${response}`, e.isGroup) + await this.reply(await convertFaces(response, Config.enableRobotAt, e), e.isGroup) if (quotemessage.length > 0) { this.reply(await makeForwardMsg(this.e, quotemessage)) } @@ -798,7 +799,7 @@ export class chatgpt extends plugin { this.reply(`建议的回复:\n${chatMessage.suggestedResponses}`) } } else { - await this.reply(`${response}`, e.isGroup) + await this.reply(await convertFaces(response, Config.enableRobotAt, e), e.isGroup) if (quotemessage.length > 0) { this.reply(await makeForwardMsg(this.e, quotemessage)) } diff --git a/utils/config.js b/utils/config.js index 1351257..b5d0e29 100644 --- a/utils/config.js +++ b/utils/config.js @@ -72,6 +72,7 @@ const defaultConfig = { emojiBaseURL: 'https://www.gstatic.com/android/keyboard/emojikitchen', enableGroupContext: false, groupContextLength: 50, + enableRobotAt: true, version: 'v2.4.3' } const _path = process.cwd() diff --git a/utils/face.js b/utils/face.js new file mode 100644 index 0000000..2224d8c --- /dev/null +++ b/utils/face.js @@ -0,0 +1,543 @@ +// import { segment } from 'oicq' +export const faceMap = { + 0: '惊讶', + 1: '撇嘴', + 2: '色', + 3: '发呆', + 4: '得意', + 5: '流泪', + 6: '害羞', + 7: '闭嘴', + 8: '睡', + 9: '大哭', + 10: '尴尬', + 11: '发怒', + 12: '调皮', + 13: '呲牙', + 14: '微笑', + 15: '难过', + 16: '酷', + 18: '抓狂', + 19: '吐', + 20: '偷笑', + 21: '可爱', + 22: '白眼', + 23: '傲慢', + 24: '饥饿', + 25: '困', + 26: '惊恐', + 27: '流汗', + 28: '憨笑', + 29: '悠闲', + 30: '奋斗', + 31: '咒骂', + 32: '疑问', + 33: '嘘', + 34: '晕', + 35: '折磨', + 36: '衰', + 37: '骷髅', + 38: '敲打', + 39: '再见', + 41: '发抖', + 42: '爱情', + 43: '跳跳', + 46: '猪头', + 49: '拥抱', + 53: '蛋糕', + 54: '闪电', + 55: '炸弹', + 56: '刀', + 57: '足球', + 59: '便便', + 60: '咖啡', + 61: '饭', + 63: '玫瑰', + 64: '凋谢', + 66: '爱心', + 67: '心碎', + 69: '礼物', + 74: '太阳', + 75: '月亮', + 76: '赞', + 77: '踩', + 78: '握手', + 79: '胜利', + 85: '飞吻', + 86: '怄火', + 89: '西瓜', + 96: '冷汗', + 97: '擦汗', + 98: '抠鼻', + 99: '鼓掌', + 100: '糗大了', + 101: '坏笑', + 102: '左哼哼', + 103: '右哼哼', + 104: '哈欠', + 105: '鄙视', + 106: '委屈', + 107: '快哭了', + 108: '阴险', + 109: '亲亲', + 110: '吓', + 111: '可怜', + 112: '菜刀', + 113: '啤酒', + 114: '篮球', + 115: '乒乓', + 116: '示爱', + 117: '瓢虫', + 118: '抱拳', + 119: '勾引', + 120: '拳头', + 121: '差劲', + 122: '爱你', + 123: '不', + 124: '好', + 125: '转圈', + 126: '磕头', + 127: '回头', + 128: '跳绳', + 129: '挥手', + 130: '激动', + 131: '街舞', + 132: '献吻', + 133: '左太极', + 134: '右太极', + 136: '双喜', + 137: '鞭炮', + 138: '灯笼', + 140: 'K歌', + 144: '喝彩', + 145: '祈祷', + 146: '爆筋', + 147: '棒棒糖', + 148: '喝奶', + 151: '飞机', + 158: '钞票', + 168: '药', + 169: '手枪', + 171: '茶', + 172: '眨眼睛', + 173: '泪奔', + 174: '无奈', + 175: '卖萌', + 176: '小纠结', + 177: '喷血', + 178: '斜眼笑', + 179: '表情', + 180: '惊喜', + 181: '骚扰', + 182: '笑哭', + 183: '我最美', + 184: '河蟹', + 185: '羊驼', + 187: '幽灵', + 188: '蛋', + 190: '菊花', + 192: '红包', + 193: '大笑', + 194: '不开心', + 197: '冷漠', + 198: '呃', + 199: '好棒', + 200: '拜托', + 201: '点赞', + 202: '无聊', + 203: '托脸', + 204: '吃', + 205: '送花', + 206: '害怕', + 207: '花痴', + 208: '小样儿', + 210: '飙泪', + 211: '我不看', + 212: '托腮', + 214: '啵啵', + 215: '糊脸', + 216: '拍头', + 217: '扯一扯', + 218: '舔一舔', + 219: '蹭一蹭', + 220: '拽炸天', + 221: '顶呱呱', + 245: '加油必胜', + 246: '加油抱抱', + 247: '口罩护体', + 260: '/搬砖中', + 261: '/忙到飞起', + 262: '/脑阔疼', + 263: '/沧桑', + 264: '/捂脸', + 265: '/辣眼睛', + 266: '/哦哟', + 267: '/头秃', + 268: '/问号脸', + 269: '/暗中观察', + 270: '/emm', + 271: '/吃瓜', + 272: '/呵呵哒', + 273: '/我酸了', + 274: '/太南了', + 276: '/辣椒酱', + 277: '/汪汪', + 278: '/汗', + 279: '/打脸', + 280: '/击掌', + 281: '/无眼笑', + 282: '/敬礼', + 283: '/狂笑', + 284: '/面无表情', + 285: '/摸鱼', + 286: '/魔鬼笑', + 287: '/哦', + 288: '/请', + 289: '/睁眼', + 290: '/敲开心', + 291: '/震惊', + 292: '/让我康康', + 293: '/摸锦鲤', + 294: '/期待', + 295: '/拿到红包', + 296: '/真好', + 297: '/拜谢', + 298: '/元宝', + 299: '/牛啊', + 300: '/胖三斤', + 301: '/好闪', + 302: '/左拜年', + 303: '/右拜年', + 304: '/红包包', + 305: '/右亲亲', + 306: '/牛气冲天', + 307: '/喵喵', + 308: '/求红包', + 309: '/谢红包', + 310: '/新年烟花', + 311: '/打call', + 312: '/变形', + 313: '/嗑到了', + 314: '/仔细分析', + 315: '/加油', + 316: '/我没事', + 317: '/菜狗', + 318: '/崇拜', + 319: '/比心', + 320: '/庆祝', + 321: '/老色痞', + 322: '/拒绝', + 323: '/嫌弃', + 324: '/吃糖' +} + +export const faceMapReverse = { + 惊讶: '0', + 撇嘴: '1', + 色: '2', + 发呆: '3', + 得意: '4', + 流泪: '5', + 害羞: '6', + 闭嘴: '7', + 睡: '8', + 大哭: '9', + 尴尬: '10', + 发怒: '11', + 调皮: '12', + 呲牙: '13', + 微笑: '14', + 难过: '15', + 酷: '16', + 抓狂: '18', + 吐: '19', + 偷笑: '20', + 可爱: '21', + 白眼: '22', + 傲慢: '23', + 饥饿: '24', + 困: '25', + 惊恐: '26', + 流汗: '27', + 憨笑: '28', + 悠闲: '29', + 奋斗: '30', + 咒骂: '31', + 疑问: '32', + 嘘: '33', + 晕: '34', + 折磨: '35', + 衰: '36', + 骷髅: '37', + 敲打: '38', + 再见: '39', + 发抖: '41', + 爱情: '42', + 跳跳: '43', + 猪头: '46', + 拥抱: '49', + 蛋糕: '53', + 闪电: '54', + 炸弹: '55', + 刀: '56', + 足球: '57', + 便便: '59', + 咖啡: '60', + 饭: '61', + 玫瑰: '63', + 凋谢: '64', + 爱心: '66', + 心碎: '67', + 礼物: '69', + 太阳: '74', + 月亮: '75', + 赞: '76', + 踩: '77', + 握手: '78', + 胜利: '79', + 飞吻: '85', + 怄火: '86', + 西瓜: '89', + 冷汗: '96', + 擦汗: '97', + 抠鼻: '98', + 鼓掌: '99', + 糗大了: '100', + 坏笑: '101', + 左哼哼: '102', + 右哼哼: '103', + 哈欠: '104', + 鄙视: '105', + 委屈: '106', + 快哭了: '107', + 阴险: '108', + 亲亲: '109', + 吓: '110', + 可怜: '111', + 菜刀: '112', + 啤酒: '113', + 篮球: '114', + 乒乓: '115', + 示爱: '116', + 瓢虫: '117', + 抱拳: '118', + 勾引: '119', + 拳头: '120', + 差劲: '121', + 爱你: '122', + 不: '123', + 好: '124', + 转圈: '125', + 磕头: '126', + 回头: '127', + 跳绳: '128', + 挥手: '129', + 激动: '130', + 街舞: '131', + 献吻: '132', + 左太极: '133', + 右太极: '134', + 双喜: '136', + 鞭炮: '137', + 灯笼: '138', + K歌: '140', + 喝彩: '144', + 祈祷: '145', + 爆筋: '146', + 棒棒糖: '147', + 喝奶: '148', + 飞机: '151', + 钞票: '158', + 药: '168', + 手枪: '169', + 茶: '171', + 眨眼睛: '172', + 泪奔: '173', + 无奈: '174', + 卖萌: '175', + 小纠结: '176', + 喷血: '177', + 斜眼笑: '178', + 表情: '179', + 惊喜: '180', + 骚扰: '181', + 笑哭: '182', + 我最美: '183', + 河蟹: '184', + 羊驼: '185', + 幽灵: '187', + 蛋: '188', + 菊花: '190', + 红包: '192', + 大笑: '193', + 不开心: '194', + 冷漠: '197', + 呃: '198', + 好棒: '199', + 拜托: '200', + 点赞: '201', + 无聊: '202', + 托脸: '203', + 吃: '204', + 送花: '205', + 害怕: '206', + 花痴: '207', + 小样儿: '208', + 飙泪: '210', + 我不看: '211', + 托腮: '212', + 啵啵: '214', + 糊脸: '215', + 拍头: '216', + 扯一扯: '217', + 舔一舔: '218', + 蹭一蹭: '219', + 拽炸天: '220', + 顶呱呱: '221', + 加油必胜: '245', + 加油抱抱: '246', + 口罩护体: '247', + '/搬砖中': '260', + '/忙到飞起': '261', + '/脑阔疼': '262', + '/沧桑': '263', + '/捂脸': '264', + '/辣眼睛': '265', + '/哦哟': '266', + '/头秃': '267', + '/问号脸': '268', + '/暗中观察': '269', + '/emm': '270', + '/吃瓜': '271', + '/呵呵哒': '272', + '/我酸了': '273', + '/太南了': '274', + '/辣椒酱': '276', + '/汪汪': '277', + '/汗': '278', + '/打脸': '279', + '/击掌': '280', + '/无眼笑': '281', + '/敬礼': '282', + '/狂笑': '283', + '/面无表情': '284', + '/摸鱼': '285', + '/魔鬼笑': '286', + '/哦': '287', + '/请': '288', + '/睁眼': '289', + '/敲开心': '290', + '/震惊': '291', + '/让我康康': '292', + '/摸锦鲤': '293', + '/期待': '294', + '/拿到红包': '295', + '/真好': '296', + '/拜谢': '297', + '/元宝': '298', + '/牛啊': '299', + '/胖三斤': '300', + '/好闪': '301', + '/左拜年': '302', + '/右拜年': '303', + '/红包包': '304', + '/右亲亲': '305', + '/牛气冲天': '306', + '/喵喵': '307', + '/求红包': '308', + '/谢红包': '309', + '/新年烟花': '310', + '/打call': '311', + '/变形': '312', + '/嗑到了': '313', + '/仔细分析': '314', + '/加油': '315', + '/我没事': '316', + '/菜狗': '317', + '/崇拜': '318', + '/比心': '319', + '/庆祝': '320', + '/老色痞': '321', + '/拒绝': '322', + '/嫌弃': '323', + '/吃糖': '324' +} + +export async function convertFaces (msg, handleAt = false, e) { + handleAt = e?.isGroup && handleAt + let groupMembers + let groupCardQQMap = {} + if (handleAt) { + groupMembers = await e.group.getMemberMap() + for (let key of groupMembers.keys()) { + groupCardQQMap[groupMembers.get(key).card] = groupMembers.get(key).user_id + } + } + let tmpMsg = '' + let tmpFace = '' + let tmpAt = '' + let foundFace = false + let foundAt = false + let msgs = [] + for (let i = 0; i < msg.length; i++) { + // console.log(msg[i]) + if (msg[i] === '[') { + foundFace = true + continue + } + if (!foundFace) { + if (handleAt && msg[i] === '@') { + foundAt = true + continue + } + if (handleAt && foundAt) { + tmpAt += msg[i] + if (groupCardQQMap[tmpAt]) { + foundAt = false + msgs.push(segment.at(groupCardQQMap[tmpAt], groupMembers.get(groupCardQQMap[tmpAt]).card, false)) + tmpAt = '' + continue + } + } else { + tmpMsg += msg[i] + } + } else { + if (msg[i] !== ']') { + tmpFace += msg[i] + } else { + foundFace = false + if (faceMapReverse[tmpFace]) { + if (tmpMsg) { + msgs.push(tmpMsg) + } + msgs.push(segment.face(parseInt(faceMapReverse[tmpFace]))) + tmpMsg = '' + } else { + tmpMsg += `[${tmpFace}]` + } + tmpFace = '' + } + } + } + if (tmpMsg) { + msgs.push(tmpMsg) + } + if (tmpFace) { + msgs.push(`[${tmpFace}`) + } + if (handleAt && tmpAt) { + msgs.push(`@${tmpAt}`) + } + return msgs +} + +export function testConvertFaces () { + const toTest = [ + '你好啊[微笑][惊讶]' + ] + toTest.forEach(t => { + console.log(convertFaces(t)) + }) +} + +// testConvertFaces()