-
Notifications
You must be signed in to change notification settings - Fork 37
/
Copy pathCooldownLib.js
121 lines (98 loc) · 2.21 KB
/
CooldownLib.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
let LIB_PREFIX = "CooldownLib"
let curCooldown;
function loadCurCooldown(name, chat){
var resLib = Libs.ResourcesLib;
var name = LIB_PREFIX + "-" + name
curCooldown = chat ? resLib.anotherChatRes(name, chat.chatid) : resLib.userRes(name);
return curCooldown;
}
function resetCooldown(){
var time = curCooldown.growth.info().max;
curCooldown.set(time);
}
function setupCooldown(time){
if(curCooldown.growth.isEnabled()){
if(curCooldown.growth.info().max == time){
// already setuped
return
}
}
curCooldown.set(time);
curCooldown.growth.add({
value: -1, // just add negative value
interval: 1, // -1 once at 1 sec
min: 0,
max: time
});
return true;
}
function isCooldown(){
return curCooldown.value() > 0;
}
function require(name, value){
if(!value){
throw new Error(LIB_PREFIX + ": need param " + name)
}
}
function checkOptions(options){
require("name", options.name);
require("time", options.time);
require("onEnding", options.onEnding);
}
function checkErrors(options){
if(!Libs.ResourcesLib){
throw new Error("Cooldown Lib: Please install ResourcesLib")
}
checkOptions(options);
}
function watch(options, chat){
checkErrors(options);
loadCurCooldown(options.name, chat);
if(setupCooldown(options.time)){
// just started
if(options.onStarting){
options.onStarting();
}
return
}
if(isCooldown()&&(options.onWaiting)){
options.onWaiting(curCooldown.value());
}else{
let result = options.onEnding();
if(result){
resetCooldown();
}
}
}
// watching
function watchUserCooldown(options){
watch(options);
}
function watchChatCooldown(options){
watch(options, chat);
}
function watchCooldown(options){
watch(options, { chatid: "global" });
}
// getting
function getUserCooldown(name){
return loadCurCooldown(name);
}
function getChatCooldown(name){
return loadCurCooldown(name, chat);
}
function getCooldown(name){
return loadCurCooldown(name, { chatid: "global" });
}
publish({
user: {
watch: watchUserCooldown,
getCooldown: getUserCooldown
},
chat: {
watch: watchChatCooldown,
getCooldown: getChatCooldown
},
watch: watchCooldown,
getCooldown: getCooldown
})