lib-wechat
Version:
111 lines (110 loc) • 3.56 kB
JavaScript
"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;