-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathusers.js
73 lines (62 loc) · 1.44 KB
/
users.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/**
* Users
* BotStuff - https://github.com/CheeseMuffin/BotStuff
*
* This file tracks information about users.
*
* @license MIT license
*/
'use strict';
const PRUNE_INTERVAL = 60 * 60 * 1000;
class User {
constructor(name, id) {
this.name = Tools.toName(name);
this.id = id;
this.rooms = new Map();
}
hasRank(room, targetRank) {
if (!Config.groups) return false;
let rank = this.rooms.get(room) || room;
return Config.groups[rank] >= Config.groups[targetRank];
}
isDeveloper() {
return Config.developers && Config.developers.indexOf(this.id) !== -1;
}
say(message) {
message = Tools.normalizeMessage(message);
if (!message) return;
Client.send('|/pm ' + this.id + ', ' + message);
}
}
class Users {
constructor() {
this.users = {};
this.self = this.add(Config.username);
this.pruneUsersInterval = setInterval(() => this.pruneUsers(), PRUNE_INTERVAL);
}
get(name) {
if (name && name.rooms) return name;
return this.users[Tools.toId(name)];
}
add(name) {
let id = Tools.toId(name);
if (!id) return;
let user = this.get(id);
if (!user) {
user = new User(name, id);
this.users[id] = user;
}
return user;
}
pruneUsers() {
let users = Object.keys(this.users);
users.splice(users.indexOf(this.self.id), 1);
for (let i = 0, len = users.length; i < len; i++) {
let user = this.users[users[i]];
if (!user.rooms.size) {
delete this.users[user.id];
}
}
}
}
module.exports = new Users();