-
Notifications
You must be signed in to change notification settings - Fork 0
/
commandHandler.js
74 lines (66 loc) · 1.73 KB
/
commandHandler.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
function commandHandler(string)
{
let mtags = {};
let from = {};
let cmd = "";
let target = {};
let parv = [];
// for debugging urhurhurhur.
console.log("RECV: "+string);
// sort through mtags
if (string.substring(0,1) == "@")
{
const mtok = string.substring(1).split(' ');
const tags = mtok[0].split(';');
let key, value;
tags.forEach(tag => {
if (tag.includes('='))
{
let keypairs = tag.split('=');
key = keypairs[0];
value = keypairs[1];
} else {
key = tag;
value = true;
}
mtags[key] = value;
});
string = string.split(' ').slice(1).join(' ');
}
if (string[0] !== ':')
string = ":null " + string;
const bigparv = string.substring(1).split(' ');
cmd = bigparv[1];
const tok = (string.substring(1).includes(" :")) ? string.substring(1).split(" :") : [bigparv];
parv = tok[1] ? tok[1].split(' ') : null;
if (bigparv[0] && bigparv[0].includes("!"))
{
let ntok = bigparv[0].split("!");
from.name = ntok[0];
let itok = ntok[1].split("@");
from.ident = itok[0];
from.host = itok[1];
} else if (bigparv) {
from.name = bigparv[0];
from.ident = null;
from.host = null;
} else {
from.name = null;
from.ident = null;
from.host = null;
}
/** Hook Params */
const cmdData = {
mtags: Object.keys(mtags).length ? mtags : null,
from: from,
cmd: cmd,
param: tok,
parc: parv ? parv.length : null,
parv: parv,
parvstring: parv ? parv.join(" ") : null,
};
const customEvent = new CustomEvent(cmd.toLowerCase(), {
detail: cmdData
});
document.dispatchEvent(customEvent);
}