wechaty-puppet-wechat4u
Version:
Wechat4u Puppet for Wechaty
141 lines • 5.49 kB
JavaScript
import { isRoomId } from '../utils/is-type.js';
import { removeRoomLeaveDebounce } from './event-room-leave.js';
import { executeRunners } from '../utils/runner.js';
import { WebMessageType } from '../../web-schemas.js';
const YOU_INVITE_OTHER_REGEX_LIST = [
/^你邀请"(.+)"加入了群聊 {2}/,
/^You invited (.+) to the group chat/,
];
const OTHER_INVITE_YOU_REGEX_LIST = [
/^"([^"]+?)"邀请你加入了群聊,群聊参与人还有:(.+)/,
/^(.+) invited you to a group chat with (.+)/,
];
const OTHER_INVITE_YOU_AND_OTHER_REGEX_LIST = [
/^"([^"]+?)"邀请你和"(.+?)"加入了群聊/,
/^(.+?) invited you and (.+?) to (the|a) group chat/,
];
const OTHER_INVITE_OTHER_REGEX_LIST = [
/^"(.+)"邀请"(.+)"加入了群聊/,
/^(.+?) invited (.+?) to (the|a) group chat/,
];
const OTHER_JOIN_VIA_YOUR_QRCODE_REGEX_LIST = [
/^" ?(.+)"通过扫描你分享的二维码加入群聊/,
/^" ?(.+)" joined group chat via the QR code you shared/,
];
const OTHER_JOIN_VIA_OTHER_QRCODE_REGEX_LIST = [
/^" (.+)"通过扫描"(.+)"分享的二维码加入群聊/,
/^"(.+)" joined the group chat via the QR Code shared by "(.+)"/,
];
export default async (puppet, message) => {
const roomId = message.FromUserName;
if (!isRoomId(roomId)) {
return null;
}
const timestamp = message.CreateTime;
if (![WebMessageType.SYS].includes(message.MsgType)) {
return null;
}
/**
* 1. You Invite Other to join the Room
* (including other join var qr code you shared)
* /^你邀请"(.+)"加入了群聊 {2}\$revoke\$/,
* /^" ?(.+)"通过扫描你分享的二维码加入群聊/,
*/
const youInviteOther = async () => {
let matches = null;
[...YOU_INVITE_OTHER_REGEX_LIST, ...OTHER_JOIN_VIA_YOUR_QRCODE_REGEX_LIST].some((re) => !!(matches = message.Content.match(re)));
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
if (matches) {
const inviteName = matches[1];
const inviteeId = (await puppet.roomMemberSearch(roomId, inviteName))[0];
return {
inviteeIdList: [inviteeId],
inviterId: puppet.currentUserId,
roomId,
timestamp,
};
}
return null;
};
/**
* 2. Other Invite you to join the Room
* /^"([^"]+?)"邀请你加入了群聊/,
*/
const otherInviteYou = async () => {
let matches = null;
OTHER_INVITE_YOU_REGEX_LIST.some((re) => !!(matches = message.Content.match(re)));
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
if (matches) {
const inviteName = matches[1];
const inviterId = (await puppet.roomMemberSearch(roomId, inviteName))[0];
return {
inviteeIdList: [puppet.currentUserId],
inviterId,
roomId,
timestamp,
};
}
return null;
};
/**
* 3. Other invite you and others to join the room
* /^"([^"]+?)"邀请你和"(.+?)"加入了群聊/,
* /^"(.+)"邀请"(.+)"加入了群聊/,
*/
const otherInviteOther = async () => {
let matches = null;
[...OTHER_INVITE_YOU_AND_OTHER_REGEX_LIST, ...OTHER_INVITE_OTHER_REGEX_LIST].some((re) => !!(matches = message.Content.match(re)));
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
if (matches) {
const inviteeIdList = [];
const inviterName = matches[1];
const inviterId = (await puppet.roomMemberSearch(roomId, inviterName))[0];
const inviteeName = matches[2];
const inviteeId = (await puppet.roomMemberSearch(roomId, inviteeName))[0];
// 如果包含ni则把机器人的id放进去
if (message.Content.includes('你')) {
inviteeIdList.push(puppet.currentUserId);
}
inviteeIdList.push(inviteeId);
return {
inviteeIdList,
inviterId,
roomId,
timestamp,
};
}
return null;
};
/**
* 4. Other Invite Other via Qrcode to join a Room
* /^" (.+)"通过扫描"(.+)"分享的二维码加入群聊/,
*/
const otherJoinViaQrCode = async () => {
let matches = null;
OTHER_JOIN_VIA_OTHER_QRCODE_REGEX_LIST.some((re) => !!(matches = message.Content.match(re)));
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
if (matches) {
const inviteeIdList = [];
const inviteeName = matches[1];
const inviteeId = (await puppet.roomMemberSearch(roomId, inviteeName))[0];
inviteeIdList.push(inviteeId);
const inviterName = matches[2];
const inviterId = (await puppet.roomMemberSearch(roomId, inviterName))[0];
return {
inviteeIdList,
inviterId,
roomId,
timestamp,
};
}
return null;
};
const ret = await executeRunners([youInviteOther, otherInviteYou, otherInviteOther, otherJoinViaQrCode]);
if (ret) {
ret.inviteeIdList.forEach((inviteeId) => {
removeRoomLeaveDebounce(ret.roomId, inviteeId);
});
}
return ret;
};
//# sourceMappingURL=event-room-join.js.map