-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
126 lines (103 loc) · 2.73 KB
/
index.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import ServerModule from './structures/ServerModule.js'
import ServerModel from './structures/models/ServerModel.js'
export default class ServerSetting extends ServerModule {
_data = null;
/**
* @param {Main} main
* @param {Server} server
*/
constructor(main, server) {
super(main, server);
this.register(ServerSetting, {
name: 'serverSettings',
scope: {
group: 'server',
name: 'settings'
},
requires: [],
events: [
{
name: 'guildCreate',
call: '_onGuildJoin'
},
{
name: 'ready',
call: '_onReady'
}
]
});
}
get data() {
if (!this._data) return {};
return this._data;
}
/**
* Server Methods
*/
/**
* @returns {Promise<void>} Returns when Mongo fetched data from the server
*/
awaitData() {
return new Promise((resolve, reject) => {
if (this._data) return resolve(this._data);
this._call = resolve;
});
}
async getAll() {
const data = await ServerModel.getAll(this.server.id);
this._data = data;
if (typeof this._call === 'function') this._call(data);
this._call = null;
}
initScope() {
if (this.modules.mongodb.ready) this.getAll();
else this.modules.mongodb.on('ready', this.getAll.bind(this));
}
/**
* @param {Object} update
* @returns {Promise<void>}
*/
async update(update) {
this._data = await ServerModel.updateServer(this.server.id, update);
}
/**
* Global Methods
* Methods Part of the global scope of the module
*/
/**
* @private
*/
async _createBulk() {
const amount = await ServerModel.createBulkUnique(this._m.guilds.cache);
this.log.info('SERVER_SETTINGS', `Added ${amount} new servers to DB.`);
}
/**
* @private
* @param {Guild} guild
*/
_onGuildJoin(guild) {
ServerModel.createIfNotExists(guild.id);
}
/**
* @private
*/
_onReady() {
this._createBulk();
}
/**
* @param {Server} server
*/
async getPrefix(server) {
await server.settings.awaitData();
if (!server.settings.data.prefix) return this.globalStorage.get('prefix');
return server.settings.data.prefix;
}
/**
* Is not called when initiated for a server
*/
init() {
this.modules.commandHandler.setPrefixSupplier(this.getPrefix.bind(this));
this.log.verbose('SERVER_SETTINGS', 'Set prefix supplier.');
return true;
}
}