Permalink
Newer
100644
141 lines (112 sloc)
3.63 KB
4
const {
5
PREFIX,
6
AmbiguousMatchResultError,
7
matchNetwork,
8
scopedRedisClient,
9
userFirstSeen,
10
userLastSeen
11
} = require('../util');
12
const {
13
dynRequireFrom,
14
generateListManagementUCExport,
15
clearSquelched,
16
digest,
22
const fileExportReqdPaths = [];
23
const fileExportsPath = path.join(__dirname, path.parse(__filename).name);
24
const fileExports = dynRequireFrom(fileExportsPath, (fPath) => fileExportReqdPaths.push(fPath));
31
const matches = Object.keys(fs).sort().filter(x => x.match(new RegExp(`^${functionName}`)));
34
throw new AmbiguousMatchResultError('Possibile matches: ' + matches.join(', '));
43
scopedRedisClient(async (client, prefix) => {
44
await client.zincrby([prefix, 'userCommandResolver'].join(':'), '1',
45
functionName ?? f.__resolvedFullCommandName ?? '__unresolved__' + functionName);
46
});
47
49
}
50
51
resolver.__unrequireCommands = function () {
52
[
53
'../util',
54
'./common',
58
.forEach((fPath) => {
59
delete require.cache[require.resolve(fPath)];
60
require(require.resolve(fPath));
61
});
65
require(MODULENAME).__unrequireCommands();
66
delete require.cache[require.resolve(MODULENAME)];
69
70
resolver.__functions = {
71
...fileExports,
72
73
async ps (context) {
74
await context.redis.publish(PREFIX, JSON.stringify({ type: 'discord:requestPs:irc' }));
79
hilite: generateListManagementUCExport('hilite'),
80
81
onConnect: generateListManagementUCExport('onConnect'),
82
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
105
106
await context.publish({
107
type: 'discord:requestPing:irc',
108
data: { network }
117
const [network, minutes] = context.options._;
118
context.options._ = [network, 'digest', minutes];
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
}