thelounge/src/models/user.ts

49 lines
980 B
TypeScript

import _ from "lodash";
import Prefix from "./prefix";
class User {
modes!: string[];
// Users in the channel have only one mode assigned
mode!: string;
away!: string;
nick!: string;
account!: string;
lastMessage!: number;
constructor(attr: Partial<User>, prefix?: Prefix) {
_.defaults(this, attr, {
modes: [],
away: "",
nick: "",
account: "",
lastMessage: 0,
});
Object.defineProperty(this, "mode", {
get() {
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
return this.modes[0] || "";
},
});
this.setModes(this.modes, prefix || new Prefix([]));
}
setModes(modes: string[], prefix: Prefix) {
// irc-framework sets character mode, but The Lounge works with symbols
this.modes = modes.map((mode) => prefix.modeToSymbol[mode]);
}
toJSON() {
return {
nick: this.nick,
modes: this.modes,
lastMessage: this.lastMessage,
away: this.away,
account: this.account,
};
}
}
export default User;