-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.js
159 lines (147 loc) · 4.43 KB
/
main.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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
const fs = require('fs');
const login = require("fb-chat-api");
// get version from package
let pkg = JSON.parse(fs.readFileSync('./package.json', 'utf-8'));
const version = pkg['version'];
console.log(`v${version}`);
// make sure database folder is present
if (!fs.existsSync('./database')) {
fs.mkdirSync('./database');
}
// setup user cookie credentials
const credentials = {
appState: JSON.parse(
fs.readFileSync("fbcookies.json", "utf-8"))
.cookies
}
// use cookie extractor extension to log in
login(credentials, (err, api) => {
const self = require('./self.js');
const func = require('./func.js');
const tool = require('./tool.js');
// check for errors when logging in
if(err) return console.error(err);
// allow listening and self events
api.setOptions({listenEvents: true});
api.setOptions({selfListen: true})
// chatbot event listener
const listen = api.listen(
(err, event) => {
if(err) return console.error(err);
// check what thread event-type recieved
if (event.type == 'message')
{ // check chat thread information
api.getThreadInfo(event.threadID,
(err, message) => {
if(err) console.error(err);
if (event.body.startsWith('>'))
{ // message has command key?
const metadata = event.body.toLowerCase().slice(6);
const request = event.body.toLowerCase().slice(1,5);
let arr = metadata.split(" ");
const key = arr.shift();
const args = arr;
self.markRead(api, event); // mark read when event recieved
self.typingIndicator(api, event); // show typing indicator
setTimeout(() => { // add 2s delay to prevent spam
// listening to global
switch (request)
{
case 'echo':
self.echo(api, event, '```'+metadata+'```');
break;
case 'calc':
func.eval(metadata, event);
break;
case 'wiki':
func.wiki(api, event, metadata);
break;
case 'what':
func.what();
break;
case 'func':
self.echo(
"```\n"+
"---------------------------\n"+
`As of v${version},\n\n`+
">echo <text> // print text\n"+
">calc <math> // assess math\n"+
">func // functions\n"+
">tool // group tools\n"+
">what // show about\n"+
"---------------------------\n"+
"```"
);
break;
default:
// listening to superuser
if(message.snippetSender === self.superuser)
{
switch (request)
{
case "stop":
self.echo(api, event, ```--offline--```);
return listen.stopListening();
default:
// superuser
self.echo(api, event, '```command <sudo> not found..```');
}
}
// listening to user only
else if (!message.isGroup) {
// ...
}
// listening to group only
else if (message.isGroup) {
switch (request)
{
case 'actv': // working
tool.showActive(api, event);
break;
case 'memb': // working
tool.showMember(api, event, key);
break;
case 'crte': // working
tool.createStack(api, event, key, args);
break;
case 'dlte': // working
tool.deleteStack(api, event, key);
break;
case 'join': // working
tool.joinStack(api, event, message, key, args);
break;
case 'leav': // working
tool.leaveStack(api, event, message, key);
break;
case 'tool': // working
self.echo(api, event,
"```\n"+
"------------------------\n"+
"stack member on a list\n\n"+
"([<key>] optional parameter/s)\n"+
">crte <name> [<key>] // create\n"+
">join <name> [<key>] // join\n"+
">show <name> // show members\n"+
">dlte <name> // delete stack\n"+
">leav <name> // leave stack\n"+
">actv // show stacks\n"+
"------------------------\n"+
"```"
);
break;
default:
// regular user
self.echo(api, event, '```command <rudo> not found..```');
}
}
}
}, 2000)
}
})
}
else if (event.type == 'event')
{ // miscellaneous events (added, nickname, etc)
console.log(event, 'event occured');
}
});
});