1 | import * as hash from 'string-hash';
|
2 |
|
3 | const adminSockets = require.main.require('./src/socket.io/admin');
|
4 | const db = require.main.require('./src/database');
|
5 |
|
6 | const emojisKey = 'emoji:customizations:emojis';
|
7 | const adjunctsKey = 'emoji:customizations:adjuncts';
|
8 |
|
9 | interface SortedResult {
|
10 | value: string;
|
11 | score: number;
|
12 | }
|
13 | export 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 |
|
28 | const 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 |
|
36 | const deleteThing = async (key: string, name: string) => {
|
37 | const num = hash(name);
|
38 | await db.sortedSetsRemoveRangeByScore([key], num, num);
|
39 | };
|
40 |
|
41 | const 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 |
|
61 | adminSockets.plugins.emoji = emojiSockets;
|