Siapa yang tidak pernah mengalami komentar spam, trolling, atau bahkan pertanyaan berulang-ulang saat sedang live streaming di YouTube? Mengelola komentar secara manual memang menguras energi, apalagi kalau penonton bertambah ratusan bahkan ribuan. Di sinilah bot moderasi komentar berperan penting: ia membantu menapis, menghapus, atau memberi respons otomatis tanpa harus Anda lakukan satu per satu. Artikel ini akan membahas cara membuat bot tersebut dan menyimpannya di GitHub, sehingga Anda bisa mengaksesnya kapan saja, memperbarui kode dengan mudah, dan menjaga keamanan kunci API lewat GitHub Secrets.

Kita akan menyelami langkah demi langkah mulai dari persiapan akun Google Cloud, menulis skrip Python yang memanfaatkan YouTube Data API, hingga mengatur workflow GitHub Actions yang otomatis menjalankan bot setiap kali live dimulai. Semua dijelaskan dengan bahasa santai, contoh kode yang mudah dipahami, serta tips praktis supaya bot Anda tidak melanggar kebijakan YouTube. Siap? Yuk, mulai petualangan mengotomatiskan komentar YouTube Live!

Jika Anda penasaran bagaimana menghubungkan Google Cloud Function, GitHub, dan YouTube Live secara mulus, cek Cara Mudah Menghubungkan Google Cloud Function, GitHub, dan YouTube Live: Panduan Lengkap Tanpa Ribet! untuk referensi tambahan. Artikel ini akan melengkapi pengetahuan Anda dengan fokus pada bot moderasi yang berjalan di server GitHub Actions.

Kenapa Perlu Bot untuk Mengelola Komentar di YouTube Live?

Live streaming di YouTube semakin populer, baik untuk gaming, tutorial, maupun webinar. Namun, popularitas itu membawa tantangan: komentar yang tidak relevan, spam, atau bahkan ujaran kebencian. Berikut beberapa alasan mengapa bot menjadi solusi terbaik:

  • Kecepatan respon: Bot dapat menanggapi atau menghapus komentar dalam hitungan detik, jauh lebih cepat daripada manusia.
  • Skalabilitas: Saat penonton meningkat, beban kerja moderasi tidak bertambah secara linear karena bot menangani semuanya secara otomatis.
  • Konsistensi: Bot menerapkan aturan yang sama setiap saat, sehingga tidak ada kebingungan soal apa yang dianggap spam atau tidak.
  • Efisiensi waktu: Anda bisa fokus pada konten dan interaksi langsung tanpa terganggu menghapus komentar satu per satu.

Langkah Persiapan Awal: Membuat Proyek di Google Cloud dan GitHub

1. Aktifkan YouTube Data API v3

Masuk ke Google Cloud Console, buat proyek baru, lalu navigasi ke APIs & Services > Library. Cari “YouTube Data API v3” dan aktifkan. Selanjutnya, buat OAuth 2.0 Client ID (tipe “Desktop app” sudah cukup) atau API key jika hanya membutuhkan akses read‑only. Untuk bot moderasi yang dapat menghapus komentar, gunakan OAuth karena memerlukan izin youtube.force-ssl.

2. Simpan Kredensial dengan Aman di GitHub Secrets

Jangan pernah menaruh client secret atau refresh token langsung di repositori. Buka repositori GitHub Anda, pilih Settings > Secrets & variables > Actions, lalu tambahkan:

  • YT_CLIENT_ID
  • YT_CLIENT_SECRET
  • YT_REFRESH_TOKEN

Jika ingin mempelajari cara mengamankan kunci API di GitHub Secrets, baca Rahasia Terungkap! Cara Mengamankan Kunci API YouTube di GitHub Secrets Tanpa Ribet.

3. Siapkan Repository GitHub

Buat repository baru, misalnya youtube-live-comment-bot. Struktur folder yang sederhana sudah cukup:

.
├─ .github
│   └─ workflows
│       └─ run-bot.yml
├─ bot
│   └─ main.py
├─ requirements.txt
└─ README.md

File requirements.txt akan berisi paket Python yang diperlukan, seperti google-auth, google-auth-oauthlib, dan google-api-python-client.

Membuat Skrip Bot di Python

1. Menghubungkan ke YouTube Data API

Berikut contoh kode singkat untuk otentikasi menggunakan refresh token yang disimpan di Secrets:

import os
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build

def get_youtube_service():
    creds = Credentials(
        None,
        refresh_token=os.getenv('YT_REFRESH_TOKEN'),
        client_id=os.getenv('YT_CLIENT_ID'),
        client_secret=os.getenv('YT_CLIENT_SECRET'),
        token_uri='https://oauth2.googleapis.com/token',
        scopes=['https://www.googleapis.com/auth/youtube.force-ssl']
    )
    return build('youtube', 'v3', credentials=creds)

2. Mengambil Daftar Komentar Live

Setiap live streaming memiliki liveChatId. Kita harus mengekstrak ID tersebut lewat liveBroadcasts().list() atau videos().list() bila sudah tahu video ID. Berikut contoh fungsi untuk mendapatkan liveChatId:

def get_live_chat_id(youtube, video_id):
    resp = youtube.videos().list(
        part='liveStreamingDetails',
        id=video_id
    ).execute()
    items = resp.get('items', [])
    if not items:
        raise ValueError('Video tidak memiliki live chat')
    return items[0]['liveStreamingDetails']['activeLiveChatId']

3. Menyaring dan Menghapus Komentar Spam

Kita dapat menggunakan filter sederhana seperti:

  • Apakah komentar mengandung link yang tidak diizinkan?
  • Apakah ada kata kotor yang masuk dalam blacklist?
  • Apakah pengirim sudah melanggar aturan sebelumnya (misal > 3 peringatan)?

Contoh implementasi:

import re

BLACKLIST_WORDS = ['spamword1', 'spamword2']
BLACKLIST_LINKS = ['bit.ly', 'tinyurl.com']

def is_spam(comment_text):
    lower = comment_text.lower()
    if any(word in lower for word in BLACKLIST_WORDS):
        return True
    if any(link in lower for link in BLACKLIST_LINKS):
        return True
    if re.search(r'http[s]?://', lower):
        return True
    return False

def delete_comment(youtube, comment_id):
    youtube.liveChatMessages().delete(id=comment_id).execute()

4. Loop Utama Bot

Bot akan melakukan polling ke endpoint liveChatMessages.list tiap 5 detik (batas kuota YouTube memperbolehkan). Berikut contoh loop yang lengkap:

import time

def run_bot(video_id):
    youtube = get_youtube_service()
    chat_id = get_live_chat_id(youtube, video_id)
    next_page_token = None

    while True:
        resp = youtube.liveChatMessages().list(
            liveChatId=chat_id,
            part='id,snippet,authorDetails',
            pageToken=next_page_token or '',
        ).execute()

        for item in resp.get('items', []):
            comment_id = item['id']
            text = item['snippet']['displayMessage']
            author = item['authorDetails']['displayName']

            if is_spam(text):
                print(f'Deleting spam from {author}: {text}')
                delete_comment(youtube, comment_id)

        next_page_token = resp.get('nextPageToken')
        time.sleep(5)

Automasi dengan GitHub Actions

1. Membuat Workflow YAML

File .github/workflows/run-bot.yml akan men-trigger bot setiap kali Anda menambahkan tag run-bot pada commit atau secara manual lewat “Run workflow”. Berikut contoh sederhana:

name: Run YouTube Live Comment Bot

on:
  workflow_dispatch:
    inputs:
      video_id:
        description: 'ID video YouTube Live'
        required: true
  push:
    tags:
      - 'run-bot*'

jobs:
  bot:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.10'

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt

      - name: Run the bot
        env:
          YT_CLIENT_ID: ${{ secrets.YT_CLIENT_ID }}
          YT_CLIENT_SECRET: ${{ secrets.YT_CLIENT_SECRET }}
          YT_REFRESH_TOKEN: ${{ secrets.YT_REFRESH_TOKEN }}
        run: |
          python bot/main.py ${{ github.event.inputs.video_id || env.VIDEO_ID }}

Dengan workflow ini, cukup klik “Run workflow”, masukkan video ID, dan GitHub Actions akan mengeksekusi bot di lingkungan cloud tanpa harus menyiapkan server sendiri.

2. Mengatur Notifikasi ke Slack (Opsional)

Supaya tim Anda tahu kapan bot menghapus komentar, Anda dapat menambahkan langkah tambahan yang mengirim pesan ke Slack lewat webhook. Lihat contoh integrasi di Cara Cerdas Atur Notifikasi Slack Saat Streaming YouTube lewat GitHub – Panduan Lengkap Tanpa Ribet!.

Tips & Trik Agar Bot Berjalan Lancar

Gunakan Cache untuk Menghindari Duplikasi

Setiap panggilan list mengembalikan token nextPageToken. Simpan token terakhir di file .github/cache atau di GitHub Actions cache supaya bot tidak memproses komentar yang sama berulang kali. Ini menghemat kuota API.

Batasi Rate Limit dengan Exponential Backoff

Jika YouTube mengembalikan error 403 (quota exceeded), terapkan strategi backoff: tunggu 30 detik, kemudian 60 detik, dan seterusnya. Hal ini mengurangi risiko pemblokiran akun API.

Gunakan Regex untuk Deteksi Spam Lebih Canggih

Spam biasanya memakai variasi huruf, misalnya “c0mmen+ar”. Buat pola regex yang lebih fleksibel untuk menangkap variasi tersebut. Contoh:

spam_pattern = re.compile(r'c[0o]m{2,}e?nt+ar?', re.IGNORECASE)
if spam_pattern.search(text):
    # hapus komentar

Integrasikan dengan GitHub Copilot untuk Menulis Skrip Lebih Cepat

Jika Anda belum pernah coba, GitHub Copilot dapat membantu menulis fungsi-fungsi boilerplate, seperti otentikasi atau parsing JSON. Lihat tutorial lengkapnya di Cara Praktis Pakai GitHub Copilot Tulis Skrip Streaming YouTube – Langkah demi Langkah Tanpa Ribet!.

Uji Coba Bot Sebelum Live

Sebelum mengaktifkan bot pada siaran utama, lakukan uji coba pada private stream. Buat video berstatus “Unlisted” atau “Private”, lalu jalankan workflow dengan ID video tersebut. Perhatikan log pada tab “Actions” di GitHub untuk memastikan tidak ada error otentikasi atau kuota yang terlampaui.

Jika ada komentar yang terhapus namun seharusnya tidak, perbaiki BLACKLIST_WORDS atau tambahkan pengecualian pada fungsi is_spam. Selalu lakukan iterasi; spam terus berubah, jadi bot juga harus terus di‑update.

Skalabilitas Lebih Lanjut: Menggabungkan Bot dengan Sistem Lain

1. Menghubungkan Bot ke Sistem Analitik

Data tentang komentar yang di‑delete dapat dikirim ke Google BigQuery atau ke spreadsheet Google Sheets untuk analisis tren spam. Dengan begitu, Anda dapat melihat kata kunci apa yang paling sering muncul dan menyesuaikan filter.

2. Menyediakan Respons Otomatis

Selain menghapus, bot bisa membalas pertanyaan umum secara otomatis, misalnya “Kapan sesi Q&A?” atau “Link materi ada di deskripsi”. Tambahkan endpoint liveChatMessages().insert dengan parameter snippet.type = 'textMessageEvent'.

3. Integrasi dengan CI Pipeline untuk Transcoding

Jika Anda juga meng‑record livestream dan perlu melakukan transcoding otomatis, pertimbangkan untuk menghubungkan bot dengan pipeline CI yang menangani proses tersebut. Baca selengkapnya di Kenapa Perlu CI Pipeline untuk Transcoding? untuk melihat cara mengotomatiskan workflow video pasca‑live.

Dengan kombinasi bot moderasi, analitik, dan respon otomatis, pengalaman penonton akan terasa lebih profesional dan interaktif, sementara Anda tetap dapat fokus pada konten utama.

Semoga panduan ini membantu Anda membangun bot yang handal, aman, dan mudah dikelola lewat GitHub. Selamat mencoba, dan selamat streaming tanpa gangguan komentar tak diinginkan!