Last active
April 29, 2020 14:43
-
-
Save masuidrive/0bea937bcaf12bc94e7fba8acf13382a to your computer and use it in GitHub Desktop.
Slack用Google翻訳Bot on Firebase Functions
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 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