Last active
February 20, 2019 15:36
-
-
Save jkcgs/ed568dd22534b0127fcc05df4d3b6fcb to your computer and use it in GitHub Desktop.
Translations Crowdin-compatible webhook, for Amazon AWS Lambda, using NodeJS 8.10.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"key": "", | |
"discord": { | |
"endpoint": "https://canary.discordapp.com/api/webhooks", | |
"channel": "", | |
"key": "" | |
}, | |
"projects": { | |
"3ds-guide": "3DS Guide", | |
"vita-guide": "PS Vita Guide", | |
"guide-landing": "Guide Landing", | |
"switch-guide": "Switch Guide", | |
"3ds-devguide": "3DS Dev Guide", | |
"wii-u-guide": "Wii U Guide" | |
}, | |
"languages": { | |
"af": "Afrikaans", "ar": "Arabic", "ca": "Catalan", "zh-CN": "Chinese Simplified", "zh-TW": "Chinese Traditional", | |
"cs": "Czech", "da": "Danish", "nl": "Dutch", "fi": "Finnish", "fr": "French", "de": "German", "el": "Greek", | |
"he": "Hebrew", "hu": "Hungarian", "id": "Indonesian", "it": "Italian", "ja": "Japanese", "ko": "Korean", | |
"ms": "Malay", "no": "Norwegian", "en-PT": "Pirate English", "pl": "Polish", "pt-PT": "Portuguese", "pt-BR": "Portuguese (Brazilian)", | |
"ro": "Romanian", "ru": "Russian", "sr": "Serbian (Cyrillic)", "es-ES": "Spanish", "sv-SE": "Swedish", "th": "Thai", | |
"tr": "Turkish", "uk": "Ukrainian", "vi": "Vietnamese" | |
}, | |
"flags": { | |
"en-PT": "<:flag_enpt:527182931417104416>", | |
"el": ":flag_gr:" | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const request = require('request'); | |
const settings = require('./settings.json'); | |
const endpoint = `${settings.discord.endpoint}/${settings.discord.channel}/` + | |
`${settings.discord.key}`; | |
exports.handler = (event, context, callback) => { | |
const done = (err, res) => callback(null, { | |
statusCode: err ? '400' : '200', | |
body: JSON.stringify(err ? err.message : res), | |
headers: { | |
'Content-Type': 'application/json', | |
}, | |
}); | |
let channel = event.pathParameters.channel; | |
let key = event.pathParameters.key; | |
let language = event.queryStringParameters.language; | |
let project = event.queryStringParameters.project; | |
// Verify if required parameters have been set | |
if (typeof channel === 'undefined' || typeof key === 'undefined' || | |
typeof language === 'undefined' || typeof project === 'undefined' || | |
language.trim() === '' || project.trim() === '') { | |
done(new Error('Invalid request (01)')); | |
return; | |
} | |
// Validate key | |
if (key !== settings.key) { | |
done(new Error('Invalid request (02)')); | |
return; | |
} | |
// Validate channel | |
if (channel !== settings.discord.channel) { | |
done(new Error('Invalid request (03)')); | |
return; | |
} | |
// Validate project code | |
if (!settings.projects.hasOwnProperty(project)) { | |
done(new Error('Invalid request (04)')); | |
return; | |
} | |
// Validate language code | |
if (!settings.languages.hasOwnProperty(language)) { | |
done(new Error('Invalid request (05)')); | |
return; | |
} | |
let projectName = settings.projects[project]; | |
let languageName = settings.languages[language]; | |
let text = ''; | |
let flag = ` :flag_${language.substring(0, 2)}:`; | |
if (language.length === 5) { | |
flag = ` :flag_${language.substring(3, 5).toLowerCase()}:`; | |
} | |
if (settings.flags.hasOwnProperty(language)) { | |
flag = ` ${settings.flags[language]}`; | |
} | |
if (event.resource.endsWith('/completed')) { | |
text = `${projectName}: ${languageName}${flag} is now **fully translated**! Time to proofread!`; | |
} else if (event.resource.endsWith('/verified')) { | |
text = `${projectName}: ${languageName}${flag} is now **completed and verified**!` | |
} else { | |
done(new Error('Invalid request (06)')); | |
return; | |
} | |
let req = { url: endpoint, form: { content: text } }; | |
request.post(req, function(reqErr, reqResp, body){ | |
if (body !== '') { | |
done(new Error(`Error from Discord: ${body}`)) | |
} else { | |
done(null, 'Message sent: ' + text); | |
} | |
}); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment