From 767db567ad04f0c7f1140cdf650fca9a58becda5 Mon Sep 17 00:00:00 2001 From: Shpuld Shpuldson Date: Mon, 30 Nov 2020 14:43:39 +0200 Subject: update emoji.json, add script that merges new emoji from another source --- tools/emoji_merger.js | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 tools/emoji_merger.js (limited to 'tools/emoji_merger.js') diff --git a/tools/emoji_merger.js b/tools/emoji_merger.js new file mode 100644 index 00000000..a74e847e --- /dev/null +++ b/tools/emoji_merger.js @@ -0,0 +1,67 @@ +/* + Emoji merger script, quick hack of a tool to: + - update some missing emoji from an external source + - sort the emoji + - remove all multipart emoji (reactions don't allow them) + + Merges emoji from here: https://gist.github.com/oliveratgithub/0bf11a9aff0d6da7b46f1490f86a71eb + to the simpler format we're using. +*/ + +// Existing emojis we have +const oldEmojiFilename = '../static/emoji.json' + +// The file downloaded from https://gist.github.com/oliveratgithub/0bf11a9aff0d6da7b46f1490f86a71eb +const newEmojiFilename = 'emojis.json' + +// Output, replace the static/emoji.json with this file if it looks correct +const outputFilename = 'output.json' + +const run = () => { + const fs = require('fs') + + let newEmojisObject = {} + let emojisObject = {} + + let data = fs.readFileSync(newEmojiFilename, 'utf8') + + // First filter out anything that's more than one codepoint + const newEmojis = JSON.parse(data).emojis.filter(e => e.emoji.length <= 2) + + // Create a table with format { shortname: emoji }, remove the : + newEmojis.forEach(e => { + const name = e.shortname.slice(1, e.shortname.length - 1).toLowerCase() + if (name.length > 0) { + newEmojisObject[name] = e.emoji + } + }) + + data = fs.readFileSync(oldEmojiFilename, 'utf8') + + emojisObject = JSON.parse(data) + + // Get rid of longer emojis that don't play nice with reactions + Object.keys(emojisObject).forEach(e => { + if (emojisObject[e].length > 2) emojisObject[e] = undefined + }) + + // Add new emojis from the new tables to the old table + Object.keys(newEmojisObject).forEach(e => { + if (!emojisObject[e] && newEmojisObject[e].length <= 2) { + emojisObject[e] = newEmojisObject[e] + } + }) + + // Sort by key + const sorted = Object.keys(emojisObject).sort().reduce((acc, key) => { + if (key.length === 0) return acc + acc[key] = emojisObject[key] + return acc + }, {}) + + fs.writeFile(outputFilename, JSON.stringify(sorted, null, 2), 'utf8', (err) => { + if (err) console.log('Error writing file', err) + }) +} + +run() -- cgit v1.2.3-70-g09d2