Membuat Bot Telegram Terjemah dari Google Translate (GAS II-08)
Setelah beberapa materi belajar dengan hal-hal dasar, kali ini materi aplikatif saja ya. Biar semakin bermanfaat bot kita dan memperbanyak studi kasus.
Ok, kali ini kita membuat bot penerjemah bahasa. Atau secara umum memanfaatkan Google Translate, yang memiliki fitur terjemahan banyak bahasa di dunia. Bahkan bahasa daerah, termasuk bahasa jawa.
Kita implementasikan di bot Telegram kita. OK, letโs Go!
Pendahuluan
Sengaja materi aplikatif agak belakang-belakangan, agar teman-teman bisa belajar dasar-dasar bot lebih banyak. Memang lebih kerasa membosankan dan kurang menarik, tapi itu lah aku rasa metode yang lebih tepat untuk menanamkan pemahaman yang matang.
Dalam belajar hal-hal dasar, kita sisipkan materi aplikatif sesekali seperti ini ya. Yakni bot penerjemah, yang secara umum banyak dipakai terutama yang kesulitan memahami dalam beda bahasa.
Ruang Lingkup
Materi pada tulisan dan materi pada youtube akan berbeda kali ini ya. Di youtube akan menjelaskan cara membuat dan cara pakai. Sedangkan di tulisan ini, akan lebih detail karena bersifat referensial dan memiliki tambahan-tambahan fungsi lain.
Jadi pastikan, teman-teman yang belajar membuat bot telegram mengecek keduanya. Yakni, menyimak video nya untuk mempermudah pemahaman dan belajar, juga membaca blog materi ini untuk menambah referensi dan update script, fitur dan juga keterangan.
Preview
Library
- ID :
MWkhreE4chZ56V_bDwpYUBPvg_do21SJR
- Fungsi : Library Bot API Telegram Versi 2
- Versi : silakan gunakan versi terbaru (angka yang paling besar)
Menggunakan versi-2 ya
- ๐ Cekidot Dokumentasinya: Library Telegram Ver-2
Pra-Materi
Sudah praktek dan berhasil menjalankan:
- ๐ Ikuti terlebih dahulu materi Halo Bot
- ๐ Ikuti materi Custom Command dan Regex
Syntax
Untuk membuat terjemahan atau mengkonversi dari bahasa sumber ke bahasa tujuan, kita akan menggunakan class dari Google Apps Script yang disebut LanguageApp
.
Class ini sudah bundle ya, jadi tinggal pakai.
Berikut syntax nya:
LanguageApp.translate(text, sourceLanguage, targetLanguage)
Dimana :
- text adalah teks atau kalimat yang akan diterjemahkan
- sourceLanguage kode bahasa sumber atau asal
- targetLanguage kode bahasa target atau tujuan
Contoh
Misalnya untuk menerjemahkan dari bahasa Indonesia ke inggris:
var pesan = LanguageApp.translate('Selamat pagi semuanya!', 'id', 'en');
Logger.log(pesan);
Maka hasilnya adalah: Good morning everyone
.
Sederhana bukan ?
Code Bot
Mari praktekkan ke dalam bot!
Berikut saya buat berbagai pola secara bertingkat seperti biasanya ya. Selain mempermudah pemahaman, juga menangkap berbagai variasi penggunaan.
Pola 1
Format
!(tr/tl/trans/translate) (bahasaSumber),(bahasaTujuan) (teks)
Codingnya seperti ini:
// pola 1
// format: !(tr/tl/trans/translate) (bahasaSumber),(bahasaTujuan) (teks)
var pola = /^([\/!](tr|tl|trans|translate) ([\w-]{2,5}),\s*([\w-]{2,5}) ).+/i;
if ( cocok = pola.exec(msg.text) ){
var kalimat = msg.text.replace(cocok[1],'');
var pesan = LanguageApp.translate(kalimat.trim(), cocok[3], cocok[4]);
return tg.sendMsg(msg, pesan, false, true, msg.message_id);
}
Peletaknya dimana? Ikuti pra-materi nya! Dipahami, jangan asal copas hehe.
Penerapan pada chat:
user: !translate id, en Selamat pagi!
bot : Good morning!
user: !tr id,ar Hayo belajar dengan giat
bot : ู
ููุง ุ ุงุฏุฑุณ ุจุฌุฏ
Pola 2
Format
!(tr/tl/trans/translate) (bahasaTujuan) (teks)
Di sini kita buat kata pertama yang maksimal 5 karakter, adalah bahasa tujuan.
Penerapan sederhananya:
user: !tr en Selamat pagi!
bot : Good morning!
Bahasa sumber kita buat auto
.
// pola 2
// format: !(tr/tl/trans/translate) (bahasaTujuan) (teks)
var pola = /^([\/!](tr|tl|trans|translate) ([\w-]{2,5}) ).+/i;
if ( cocok = pola.exec(msg.text) ){
var kalimat = msg.text.replace(cocok[1],'');
var pesan = LanguageApp.translate(kalimat.trim(), '', cocok[3]);
return tg.sendMsg(msg, pesan, false, true, msg.message_id);
}
Pola 3
Kalau sebelumnya teks harus diketik, maka pola yang ini dipakai untuk reply pesan kemudian menerjemahkan.
Formatnya sama dengan pola 1, hanya saja tidak ada teks yang diterjemahkan karena mengambil dari teks reply.
Format:
[REPLY]-> !(tr/tl/trans/translate) (bahasaSumber),(bahasaTujuan)
Kode:
// pola 3
// format: [REPLY]-> !(tr/tl/trans/translate) (bahasaSumber),(bahasaTujuan)
var pola = /^[\/!](?:tr|tl|trans|translate) ([\w-]{2,5}),\s*([\w-]{2,5})$/i;
if ( cocok = pola.exec(msg.text) ){
// periksa ada reply nya kah
if (msg.reply_to_message) {
// sederhanakan variable
var msgr = msg.reply_to_message;
// jika yang di reply adalah text
if (msgr.text) {
var kalimat = msgr.text;
var pesan = LanguageApp.translate(kalimat.trim(), cocok[1], cocok[2]);
return tg.sendMsg(msg, pesan, false, true, msgr.message_id);
}
}
}
Perhatikan kode polanya:
/^[\/!](?:tr|tl|trans|translate) ([\w-]{2,5}),\s*([\w-]{2,5})$/i
Di sini hanya membuat 2 buah grup cocok saja, yakni bahasa sumber dan bahasa tujuan. Karena teks yang akan diterjemahkan sudah bersih, jadi bisa langsung pakai.
Penerapan:
user A: Good Morning
user B: (reply pesan A) !tr en,id
bot : Selamat Pagi
Pola 4
Yakni penggabungan pola 2 dan 3. Dibikin bahasa sumbernya auto, dan dari reply pesan.
Format:
[REPLY]-> !(tr/tl/trans/translate) (bahasaTujuan)
Kode:
// pola 4
// format: [REPLY]-> !(tr/tl/trans/translate) (bahasaTujuan)
var pola = /^[\/!](?:tr|tl|trans|translate) ([\w-]{2,5})$/i;
if ( cocok = pola.exec(msg.text) ){
// periksa ada reply nya kah
if (msg.reply_to_message) {
// sederhanakan variable
var msgr = msg.reply_to_message;
// jika yang di reply adalah text
if (msgr.text) {
var kalimat = msgr.text;
var pesan = LanguageApp.translate(kalimat.trim(), '', cocok[1]);
return tg.sendMsg(msg, pesan, false, true, msgr.message_id);
}
}
}
Penerapan:
user A: Good Morning
user B: (reply pesan A) !tr id
bot : Selamat Pagi
TIPS dan TRIK
- Jika menggunakan pola 2 dan pola 4, bahasa sumber tidak sesuai, pakailah Pola 1
- Urutan pola sangat pennting dalam coding, terkait pada alur logika penangkapan teks kode bahasa.
- Kode bahasa yang ingin di-auto-kan, cukup di kosongin saja (pola 2 dan 4).
Verifikasi
Ini adalah tambahan materi hanya ada / untuk di blog. Dengan kata lain: hanya untuk yang rajin membaca yang mendapatkan manfaatnya.
Karena akan ada isu: bisa saja kode bahasa tidak ditemukan dan kita tidak ingin terjadi error, maka kita perlu membuat kode verifikasi.
// indek bahasa yang di support Google Translate
var languages = {
'auto': 'Automatic',
'af': 'Afrikaans',
'sq': 'Albanian',
'am': 'Amharic',
'ar': 'Arabic',
'hy': 'Armenian',
'az': 'Azerbaijani',
'eu': 'Basque',
'be': 'Belarusian',
'bn': 'Bengali',
'bs': 'Bosnian',
'bg': 'Bulgarian',
'ca': 'Catalan',
'ceb': 'Cebuano',
'ny': 'Chichewa',
'zh-cn': 'Chinese Simplified',
'zh-tw': 'Chinese Traditional',
'co': 'Corsican',
'hr': 'Croatian',
'cs': 'Czech',
'da': 'Danish',
'nl': 'Dutch',
'en': 'English',
'eo': 'Esperanto',
'et': 'Estonian',
'tl': 'Filipino',
'fi': 'Finnish',
'fr': 'French',
'fy': 'Frisian',
'gl': 'Galician',
'ka': 'Georgian',
'de': 'German',
'el': 'Greek',
'gu': 'Gujarati',
'ht': 'Haitian Creole',
'ha': 'Hausa',
'haw': 'Hawaiian',
'iw': 'Hebrew',
'hi': 'Hindi',
'hmn': 'Hmong',
'hu': 'Hungarian',
'is': 'Icelandic',
'ig': 'Igbo',
'id': 'Indonesian',
'ga': 'Irish',
'it': 'Italian',
'ja': 'Japanese',
'jw': 'Javanese',
'kn': 'Kannada',
'kk': 'Kazakh',
'km': 'Khmer',
'ko': 'Korean',
'ku': 'Kurdish (Kurmanji)',
'ky': 'Kyrgyz',
'lo': 'Lao',
'la': 'Latin',
'lv': 'Latvian',
'lt': 'Lithuanian',
'lb': 'Luxembourgish',
'mk': 'Macedonian',
'mg': 'Malagasy',
'ms': 'Malay',
'ml': 'Malayalam',
'mt': 'Maltese',
'mi': 'Maori',
'mr': 'Marathi',
'mn': 'Mongolian',
'my': 'Myanmar (Burmese)',
'ne': 'Nepali',
'no': 'Norwegian',
'ps': 'Pashto',
'fa': 'Persian',
'pl': 'Polish',
'pt': 'Portuguese',
'pa': 'Punjabi',
'ro': 'Romanian',
'ru': 'Russian',
'sm': 'Samoan',
'gd': 'Scots Gaelic',
'sr': 'Serbian',
'st': 'Sesotho',
'sn': 'Shona',
'sd': 'Sindhi',
'si': 'Sinhala',
'sk': 'Slovak',
'sl': 'Slovenian',
'so': 'Somali',
'es': 'Spanish',
'su': 'Sundanese',
'sw': 'Swahili',
'sv': 'Swedish',
'tg': 'Tajik',
'ta': 'Tamil',
'te': 'Telugu',
'th': 'Thai',
'tr': 'Turkish',
'uk': 'Ukrainian',
'ur': 'Urdu',
'uz': 'Uzbek',
'vi': 'Vietnamese',
'cy': 'Welsh',
'xh': 'Xhosa',
'yi': 'Yiddish',
'yo': 'Yoruba',
'zu': 'Zulu'
};
// buat fungsi pengecekan ke index
function getISOCode(language) {
if (!language) {
return null;
}
language = language.toLowerCase();
if (language in languages) {
return language;
}
var keys = Object.keys(languages).filter(function (key) {
return typeof languages[key] !== 'string'
? null
: languages[key].toLowerCase() === language;
});
return keys[0] || null;
}
// fungsi sederhana untuk kode bahasa yang disupport
function isSupported(language) {
return Boolean(getISOCode(language));
}
Code
Untuk penerapannya silakan disesuaikan sendiri-sendiri ya. Saya kasihkan contoh salah satu aja, yakni di coding pola 1. Selebihnya selamat belajar membuat berbagai variasi.
var pola = /^([\/!](tr|tl|trans|translate) ([\w-]{2,5}),\s*([\w-]{2,5}) ).+/i;
if ( cocok = pola.exec(msg.text) ){
// periksa kode sumber bahasa
if (!isSupported(cocok[3])) return tg.sendMsg(msg, "Maaf, kode bahasa <b>"+cocok[3]+"</b> tidak dikenali.", "HTML", true, msg.message_id);
// periksa kode tujuan bahasa
if (!isSupported(cocok[4])) return tg.sendMsg(msg, "Maaf, kode bahasa <b>"+cocok[4]+"</b> tidak dikenali.", "HTML", true, msg.message_id);
var kalimat = msg.text.replace(cocok[1],'');
var pesan = LanguageApp.translate(kalimat.trim(), cocok[3], cocok[4]);
return tg.sendMsg(msg, pesan, false, true, msg.message_id);
}
Penerapan:
user : !tr id,japan aku cinta kamu
bot : Maaf, kode bahasa japan tidak dikenali.
Referensi
- Library Bot API Telegram Ver-2 untuk Google Aps Script
- Google Apps dokumentasi untuk Language App
- Kode Bahasa Google Translate
Video
Materi ini dapat juga disimak pada video berikut:
Penutup
Jika ada pertanyaan, saran atau masukkan silakan didiskusikan. Jika ingin live dan biasanya tanggapan juga lebih cepat, sangat disarankan bergabung pada group Telegram @botIndonesia. Semoga bermanfaat.