Skip to content

Instantly share code, notes, and snippets.

@masuidrive
Last active April 29, 2020 14:43
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save masuidrive/0bea937bcaf12bc94e7fba8acf13382a to your computer and use it in GitHub Desktop.
Save masuidrive/0bea937bcaf12bc94e7fba8acf13382a to your computer and use it in GitHub Desktop.
Slack用Google翻訳Bot on Firebase Functions
const functions = require('firebase-functions');
const request = require('request');
const { Translate } = require('@google-cloud/translate');
/*
Firebase Functionsの環境変数
slack.bot_user_tokenとgoogle.project_idを適当に設定してください
*/
async function postMessage(payload) {
return await request.post('https://slack.com/api/chat.postMessage', {
headers: { 'Authorization': `Bearer ${functions.config().slack.bot_user_token}` },
json: payload,
});
}
const projectId = functions.config().google.project_id;
exports.bot = functions.https.onRequest(async (req, res) => {
const payload = req.body;
if (payload.type === 'url_verification') {
return res.status(200).json({ 'challenge': payload.challenge });
}
else if (payload.event && payload.event.type === 'app_mention') {
console.log("payload:",JSON.stringify(payload) );
var originalText = payload.event.text;
payload.authed_users.forEach(user => (originalText = originalText.split(`<@${user}>`).join("")));
const translate = new Translate({ projectId });
const langulagesResult = await translate.detect(originalText);
let translateTo = ['en', 'ja'];
if(langulagesResult[0].language == 'en') {
translateTo = ['ja'];
}
else if(langulagesResult[0].language == 'ja') {
translateTo = ['en'];
}
let translatedText = [];
for (var lang of translateTo) {
const translatedResult = await translate.translate(originalText, lang);
translatedText.push(translatedResult[0].replace(/<@\s+/g, '<@'));
};
const slackRes = await postMessage({
text: translatedText.join("\n\n"),
channel: payload.event.channel,
thread_ts: payload.event.ts
});
}
res.status(200).send('OK');
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment