UNPKG

lib-wechat

Version:
111 lines (110 loc) 3.56 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GroupMessageEvent = exports.PrivateMessageEvent = exports.Message = void 0; const elements_1 = require("./elements"); const utils_1 = require("./utils"); class Message { static genMsgId() { return Math.ceil(Date.now() * 1e3); } constructor(c, original) { this.c = c; this.original = original; this.raw_message = ''; this.message = []; this.parser = new elements_1.Parser(c); this.message_id = original.MsgId; this.create_time = original.CreateTime; this.time = original.CreateTime; } async parse() { await this.parser.parse(this.original); this.message = this.parser.message; this.raw_message = this.parser.brief; } async forward(user_id) { return (0, utils_1.isRoomContact)(user_id) ? this.c.sendGroupMsg(user_id, this.message) : this.c.sendPrivateMsg(user_id, this.message); } [Symbol.unscopables]() { return { parser: true, c: true, }; } toJSON() { return Object.fromEntries(Object.keys(this).filter((key) => { return typeof this[key] !== "function" && !['parser', 'c', 'group', 'friend', 'member', 'original'].includes(key); }).map(key => { return [key, this[key]]; })); } static from(original) { return (0, utils_1.isRoomContact)(original.FromUserName) ? new GroupMessageEvent(this, original) : new PrivateMessageEvent(this, original); } } exports.Message = Message; class PrivateMessageEvent extends Message { get user_id() { return this.sender.user_id; } constructor(c, original) { super(c, original); this.c = c; this.post_type = 'message'; this.message_type = 'private'; this.is_self = original.FromUserName === this.c.info.username; try { this.sender = { user_id: original.FromUserName, nickname: (0, utils_1.convertEmoji)(this.is_self ? this.c.info.nickname : this.c.pickFriend(original.FromUserName)?.info.nickname) }; } catch (e) { console.log(original, this.c.fl); throw e; } } reply(message) { return this.c.sendPrivateMsg(this.user_id, message); } recall() { return this.c.recallMsg(this.user_id, this.message_id); } } exports.PrivateMessageEvent = PrivateMessageEvent; class GroupMessageEvent extends Message { get group_name() { return this.c.gl.get(this.group_id).group_name; } get group() { return this.c.pickGroup(this.group_id); } get member() { return this.group.pickMember(this.sender.user_id); } constructor(c, original) { const [_, user_id] = original.Content.match(/(\S+):<br\/>/) || []; original.Content = original.Content.replace(/^@[^<]+<br\/>/, ''); super(c, original); this.c = c; this.post_type = 'message'; this.message_type = 'group'; this.group_id = original.FromUserName; this.sender = { user_id, nickname: this.group.pickMember(user_id)?.info.nickname }; } reply(message) { return this.group.sendMsg(message); } recall() { return this.group.recallMsg(this.message_id); } } exports.GroupMessageEvent = GroupMessageEvent;