mirror of https://github.com/Nofated095/Q2TG.git
perf: 优化 lottie 表情处理
This commit is contained in:
parent
3c582e1f9b
commit
55cded00c8
|
@ -1,3 +1,10 @@
|
||||||
|
const TGS = ['打call', '流泪', '变形', '比心', '庆祝', '鞭炮'];
|
||||||
export default {
|
export default {
|
||||||
TGS_MAP: ['打call', '流泪', '变形', '比心', '庆祝', '鞭炮'].map(text => `[${text}]请使用最新版手机QQ体验新功能`)
|
getTgsIndex(message: string) {
|
||||||
}
|
const index1 = TGS.map(text => `[${text}]请使用最新版手机QQ体验新功能`).indexOf(message);
|
||||||
|
if (index1 > -1) {
|
||||||
|
return index1;
|
||||||
|
}
|
||||||
|
return TGS.map(text => `/${text}`).indexOf(message);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
|
@ -42,8 +42,8 @@ export default class ForwardController {
|
||||||
const pair = this.instance.forwardPairs.find(target);
|
const pair = this.instance.forwardPairs.find(target);
|
||||||
if (!pair) return;
|
if (!pair) return;
|
||||||
if (!pair.enable) return;
|
if (!pair.enable) return;
|
||||||
const tgMessages = await this.forwardService.forwardFromQq(event, pair);
|
const tgMessage = await this.forwardService.forwardFromQq(event, pair);
|
||||||
for (const tgMessage of tgMessages) {
|
if (tgMessage) {
|
||||||
// 更新数据库
|
// 更新数据库
|
||||||
await db.message.create({
|
await db.message.create({
|
||||||
data: {
|
data: {
|
||||||
|
|
|
@ -11,7 +11,7 @@ import db from '../models/db';
|
||||||
import { Button } from 'telegram/tl/custom/button';
|
import { Button } from 'telegram/tl/custom/button';
|
||||||
import { SendMessageParams } from 'telegram/client/messages';
|
import { SendMessageParams } from 'telegram/client/messages';
|
||||||
import { Api } from 'telegram';
|
import { Api } from 'telegram';
|
||||||
import { file as createTempFile, FileResult } from 'tmp-promise';
|
import { file, file as createTempFile, FileResult } from 'tmp-promise';
|
||||||
import fsP from 'fs/promises';
|
import fsP from 'fs/promises';
|
||||||
import eviltransform from 'eviltransform';
|
import eviltransform from 'eviltransform';
|
||||||
import silk from '../encoding/silk';
|
import silk from '../encoding/silk';
|
||||||
|
@ -40,11 +40,11 @@ export default class ForwardService {
|
||||||
public async forwardFromQq(event: PrivateMessageEvent | GroupMessageEvent, pair: Pair) {
|
public async forwardFromQq(event: PrivateMessageEvent | GroupMessageEvent, pair: Pair) {
|
||||||
try {
|
try {
|
||||||
const tempFiles: FileResult[] = [];
|
const tempFiles: FileResult[] = [];
|
||||||
let message = '', files: FileLike[] = [], buttons: ButtonLike[] = [], replyTo = 0, tgs = -1;
|
let message = '', files: FileLike[] = [], buttons: ButtonLike[] = [], replyTo = 0;
|
||||||
let messageHeader = '';
|
let messageHeader = '', sender = '';
|
||||||
if (event.message_type === 'group') {
|
if (event.message_type === 'group') {
|
||||||
// 产生头部,这和工作模式没有关系
|
// 产生头部,这和工作模式没有关系
|
||||||
let sender = event.sender.card || event.sender.nickname;
|
sender = event.sender.card || event.sender.nickname;
|
||||||
if (event.anonymous) {
|
if (event.anonymous) {
|
||||||
sender = `[${sender}]${event.anonymous.name}`;
|
sender = `[${sender}]${event.anonymous.name}`;
|
||||||
}
|
}
|
||||||
|
@ -63,10 +63,16 @@ export default class ForwardService {
|
||||||
message += `<a href="${instantViewUrl}">\u200e</a>`;
|
message += `<a href="${instantViewUrl}">\u200e</a>`;
|
||||||
}
|
}
|
||||||
// 判断 tgs 表情
|
// 判断 tgs 表情
|
||||||
tgs = lottie.TGS_MAP.indexOf(elem.text);
|
let tgs = lottie.getTgsIndex(elem.text);
|
||||||
if (tgs === -1) {
|
if (tgs === -1) {
|
||||||
message += helper.htmlEscape(elem.text);
|
message += helper.htmlEscape(elem.text);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
files.push(`assets/tgs/tgs${tgs}.tgs`);
|
||||||
|
if (event.message_type === 'group') {
|
||||||
|
buttons.push(Button.inline(`${sender}:`));
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'at': {
|
case 'at': {
|
||||||
|
@ -240,23 +246,14 @@ export default class ForwardService {
|
||||||
buttons.length && (messageToSend.buttons = _.chunk(buttons, 3));
|
buttons.length && (messageToSend.buttons = _.chunk(buttons, 3));
|
||||||
replyTo && (messageToSend.replyTo = replyTo);
|
replyTo && (messageToSend.replyTo = replyTo);
|
||||||
|
|
||||||
const tgMessages: Api.Message[] = [];
|
const tgMessage = await pair.tg.sendMessage(messageToSend);
|
||||||
|
|
||||||
if (message || files.length || buttons) {
|
|
||||||
tgMessages.push(await pair.tg.sendMessage(messageToSend));
|
|
||||||
}
|
|
||||||
if (tgs > -1) {
|
|
||||||
tgMessages.push(await pair.tg.sendMessage({
|
|
||||||
file: `assets/tgs/tgs${tgs}.tgs`,
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.instance.workMode === 'personal' && event.message_type === 'group' && event.atall) {
|
if (this.instance.workMode === 'personal' && event.message_type === 'group' && event.atall) {
|
||||||
await tgMessages[0].pin({ notify: false });
|
await tgMessage.pin({ notify: false });
|
||||||
}
|
}
|
||||||
|
|
||||||
tempFiles.forEach(it => it.cleanup());
|
tempFiles.forEach(it => it.cleanup());
|
||||||
return tgMessages;
|
return tgMessage;
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
this.log.error('从 QQ 到 TG 的消息转发失败', e);
|
this.log.error('从 QQ 到 TG 的消息转发失败', e);
|
||||||
|
@ -265,7 +262,7 @@ export default class ForwardService {
|
||||||
}
|
}
|
||||||
catch {
|
catch {
|
||||||
}
|
}
|
||||||
return [];
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -116,7 +116,7 @@ export default {
|
||||||
}
|
}
|
||||||
if (message.content) {
|
if (message.content) {
|
||||||
const FORWARD_REGEX = /\[Forward: ([A-Za-z0-9\/+=]+)]/;
|
const FORWARD_REGEX = /\[Forward: ([A-Za-z0-9\/+=]+)]/;
|
||||||
const tgsIndex = lottie.TGS_MAP.indexOf(message.content);
|
const tgsIndex = lottie.getTgsIndex(message.content);
|
||||||
if (tgsIndex > -1) {
|
if (tgsIndex > -1) {
|
||||||
output += `${format(date, 'DD/MM/YYYY, HH:mm')} - ${sender}: tgs${tgsIndex}.file (file attached)\n`;
|
output += `${format(date, 'DD/MM/YYYY, HH:mm')} - ${sender}: tgs${tgsIndex}.file (file attached)\n`;
|
||||||
files.add(`tgs${tgsIndex}`);
|
files.add(`tgs${tgsIndex}`);
|
||||||
|
|
Loading…
Reference in New Issue