Membuat Bot Telegram Terjemah dari Google Translate (GAS II-08)

7 menit saja |

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

"Yuk Belajar"

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

"Yuk Belajar"

  • ID : MWkhreE4chZ56V_bDwpYUBPvg_do21SJR
  • Fungsi : Library Bot API Telegram Versi 2
  • Versi : silakan gunakan versi terbaru (angka yang paling besar)

Menggunakan versi-2 ya

Pra-Materi

Sudah praktek dan berhasil menjalankan:

"Yuk Belajar"

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 ?

"Yuk Belajar"

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);
}

"Yuk Belajar"

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

"Yuk Belajar"

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

"Yuk Belajar"

Video

Materi ini dapat juga disimak pada video berikut:

Penutup

"Yuk Belajar"

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.