Skip to content
Permalink
Newer
Older
100644 141 lines (112 sloc) 3.63 KB
January 12, 2022 23:22
1
'use strict';
2
December 14, 2021 20:05
3
const path = require('path');
4
const {
5
PREFIX,
6
AmbiguousMatchResultError,
7
matchNetwork,
8
scopedRedisClient,
9
userFirstSeen,
10
userLastSeen
11
} = require('../util');
December 27, 2022 18:55
12
const {
13
dynRequireFrom,
14
generateListManagementUCExport,
15
clearSquelched,
16
digest,
17
getNetworkAndChanNameFromUCContext
December 27, 2022 18:55
18
} = require('./common');
November 26, 2021 21:30
19
December 14, 2021 20:05
20
const MODULENAME = path.join(__dirname, path.parse(__filename).name);
November 26, 2021 21:30
21
December 14, 2021 20:05
22
const fileExportReqdPaths = [];
23
const fileExportsPath = path.join(__dirname, path.parse(__filename).name);
January 12, 2022 23:22
24
const fileExports = dynRequireFrom(fileExportsPath, (fPath) => fileExportReqdPaths.push(fPath));
November 26, 2021 21:30
25
26
function resolver (functionName) {
December 14, 2021 20:05
27
const fs = require(MODULENAME).__functions;
28
let f = fs[functionName];
November 26, 2021 21:30
29
30
if (!f) {
December 14, 2021 20:05
31
const matches = Object.keys(fs).sort().filter(x => x.match(new RegExp(`^${functionName}`)));
November 26, 2021 21:30
32
33
if (matches.length > 1) {
December 14, 2021 20:05
34
throw new AmbiguousMatchResultError('Possibile matches: ' + matches.join(', '));
November 26, 2021 21:30
35
}
36
December 14, 2021 20:05
37
f = fs[matches[0]];
38
if (f) {
39
f.__resolvedFullCommandName = matches[0];
40
}
November 26, 2021 21:30
41
}
42
43
scopedRedisClient(async (client, prefix) => {
44
await client.zincrby([prefix, 'userCommandResolver'].join(':'), '1',
45
functionName ?? f.__resolvedFullCommandName ?? '__unresolved__' + functionName);
46
});
47
December 14, 2021 20:05
48
return f;
November 26, 2021 21:30
49
}
50
51
resolver.__unrequireCommands = function () {
52
[
53
'../util',
54
'./common',
November 26, 2021 21:30
56
...fileExportReqdPaths
57
]
January 8, 2022 23:37
58
.forEach((fPath) => {
59
delete require.cache[require.resolve(fPath)];
60
require(require.resolve(fPath));
61
});
December 14, 2021 20:05
62
};
November 26, 2021 21:30
63
64
resolver.__unresolve = function () {
December 14, 2021 20:05
65
require(MODULENAME).__unrequireCommands();
66
delete require.cache[require.resolve(MODULENAME)];
January 8, 2022 23:37
67
require(MODULENAME);
December 14, 2021 20:05
68
};
November 26, 2021 21:30
69
70
resolver.__functions = {
71
...fileExports,
72
73
async ps (context) {
December 14, 2021 20:05
74
await context.redis.publish(PREFIX, JSON.stringify({ type: 'discord:requestPs:irc' }));
November 26, 2021 21:30
75
},
76
October 9, 2022 15:25
77
identsIgnored: generateListManagementUCExport('identsIgnored'),
78
November 26, 2021 21:30
79
hilite: generateListManagementUCExport('hilite'),
80
81
onConnect: generateListManagementUCExport('onConnect'),
82
October 9, 2022 15:25
83
muted: generateListManagementUCExport('muted', { clearSquelched, digest }, false, 'ignore'),
84
85
aliveChecks: generateListManagementUCExport('aliveChecks', {
86
listAllNetworks: () => scopedRedisClient(async (client, PREFIX) =>
87
(await client.keys(`${PREFIX}:aliveChecks:*`)).map(x => x.split(':')).map(x => x.pop()))
88
}),
89
90
siteChecks: generateListManagementUCExport('siteChecks', {
91
listAllNetworks: () => scopedRedisClient(async (client, PREFIX) =>
92
(await client.keys(`${PREFIX}:siteChecks:*`)).map(x => x.split(':')).map(x => x.pop()))
93
}),
94
95
killmenow: () => process.exit(-1),
November 26, 2021 21:30
96
97
async ping (context) {
December 14, 2021 20:05
98
const [netStub] = context.options._;
November 26, 2021 21:30
99
100
if (!netStub) {
December 14, 2021 20:05
101
return 'Not enough arguments!';
November 26, 2021 21:30
102
}
103
December 14, 2021 20:05
104
const { network } = matchNetwork(netStub);
November 26, 2021 21:30
105
106
await context.publish({
107
type: 'discord:requestPing:irc',
108
data: { network }
December 14, 2021 20:05
109
});
November 26, 2021 21:30
110
},
111
113
if (context.options._.length !== 2) {
117
const [network, minutes] = context.options._;
118
context.options._ = [network, 'digest', minutes];
119
return resolver('logs')(context);
December 27, 2022 18:55
120
},
121
122
userFirstSeen: async (context) => {
123
const { network } = getNetworkAndChanNameFromUCContext(context);
124
if (network) {
125
return (await userFirstSeen(network, context.options))[0];
126
} else {
127
return `Unknown network ${network}`;
128
}
129
},
130
131
userLastSeen: async (context) => {
132
const { network } = getNetworkAndChanNameFromUCContext(context);
133
if (network) {
134
return (await userLastSeen(network, context.options))[0];
135
} else {
136
return `Unknown network ${network}`;
137
}
November 26, 2021 21:30
138
}
December 14, 2021 20:05
139
};
November 26, 2021 21:30
140
December 14, 2021 20:05
141
module.exports = resolver;