67 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | |
|   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()
 | 
