crystelf-plugin/apps/face-reply.js

49 lines
1.4 KiB
JavaScript

import ConfigControl from '../lib/config/configControl.js';
import Message from '../lib/yunzai/message.js';
import YunzaiUtils from '../lib/yunzai/utils.js';
export class FaceReply extends plugin {
constructor() {
super({
name: 'face-reply',
dsc: '给消息中的表情贴上回应',
event: 'message.group',
priority: -114,
});
}
async accept(e) {
if (!ConfigControl.get('config')?.faceReply) return;
if (!e.message_id || e.message.length === 0) return;
let face = [];
e.message.forEach((m) => {
if (m.type === 'face') {
face.push({ id: m.id });
} else if (m.type === 'text') {
let emojiList = exEmojis(m.text);
if (emojiList.length) {
for (const emoji of emojiList) {
const id = emoji.codePointAt(0);
face.push({ id: id });
}
}
}
});
const adapter = await YunzaiUtils.getAdapter(e);
if (face.length) {
for (const f of face) {
await Message.emojiLike(e, e.message_id, String(f.id), e.group_id, adapter);
}
}
}
}
//从消息中提取emoji
function exEmojis(text) {
//没错,爆红了
const emojiRegex =
/(?:\p{Extended_Pictographic}(?:\uFE0F|\uFE0E)?(?:\u200D\p{Extended_Pictographic}(?:\uFE0F|\uFE0E)?)*|\p{Emoji_Presentation}|\p{Emoji}\uFE0F)/gu;
const emojis = text.match(emojiRegex);
return emojis || [];
}