Skip to content

Instantly share code, notes, and snippets.

@jkcgs
Last active February 20, 2019 15:36
Show Gist options
  • Save jkcgs/ed568dd22534b0127fcc05df4d3b6fcb to your computer and use it in GitHub Desktop.
Save jkcgs/ed568dd22534b0127fcc05df4d3b6fcb to your computer and use it in GitHub Desktop.
Translations Crowdin-compatible webhook, for Amazon AWS Lambda, using NodeJS 8.10.
{
"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:"
}
}
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