UNPKG

1.86 kBPlain TextView Raw
1import * as hash from 'string-hash';
2
3const adminSockets = require.main.require('./src/socket.io/admin');
4const db = require.main.require('./src/database');
5
6const emojisKey = 'emoji:customizations:emojis';
7const adjunctsKey = 'emoji:customizations:adjuncts';
8
9interface SortedResult {
10 value: string;
11 score: number;
12}
13export const getCustomizations = async (): Promise<Customizations> => {
14 const [emojis, adjuncts]: [SortedResult[], SortedResult[]] = await Promise.all([
15 db.getSortedSetRangeWithScores(emojisKey, 0, -1),
16 db.getSortedSetRangeWithScores(adjunctsKey, 0, -1),
17 ]);
18
19 const emojisParsed: CustomEmoji[] = emojis.map((emoji) => JSON.parse(emoji.value));
20 const adjunctsParsed: CustomAdjunct[] = adjuncts.map((adjunct) => JSON.parse(adjunct.value));
21
22 return {
23 emojis: emojisParsed,
24 adjuncts: adjunctsParsed,
25 };
26};
27
28const editThing = async (key: string, name: string, thing: CustomEmoji | CustomAdjunct) => {
29 const num = hash(name);
30 await db.sortedSetsRemoveRangeByScore([key], num, num);
31
32 const thingNum = hash(thing.name);
33 await db.sortedSetAdd(key, thingNum, JSON.stringify(thing));
34};
35
36const deleteThing = async (key: string, name: string) => {
37 const num = hash(name);
38 await db.sortedSetsRemoveRangeByScore([key], num, num);
39};
40
41const emojiSockets = {
42 getCustomizations,
43 editEmoji: async (
44 socket: SocketIO.Socket,
45 [name, emoji]: [string, CustomEmoji]
46 ) => editThing(emojisKey, name, emoji),
47 deleteEmoji: async (
48 socket: SocketIO.Socket,
49 name: string
50 ) => deleteThing(emojisKey, name),
51 editAdjunct: async (
52 socket: SocketIO.Socket,
53 [name, adjunct]: [string, CustomAdjunct]
54 ) => editThing(adjunctsKey, name, adjunct),
55 deleteAdjunct: async (
56 socket: SocketIO.Socket,
57 name: string
58 ) => deleteThing(adjunctsKey, name),
59};
60
61adminSockets.plugins.emoji = emojiSockets;