Skip to content

About

Projek akhir Sistem Operasi - Sistem deteksi buzzer pada akun di X/Twitter

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Lacak Buzzer Banner

Lacak Buzzer

Indikator Risiko Amplifikasi Terkoordinasi pada Akun X/Twitter
Analisis Pola Perilaku Akun X secara Instan & Deterministik · Powered by FastAPI, Sentence-Transformers, twscrape & React

Release Python FastAPI React Vite Tailwind CSS Firestore License

Tentang • Preview • Tech Stack • Arsitektur • Metodologi • Instalasi • Keamanan


Apa itu Lacak Buzzer?

Lacak Buzzer adalah platform intelijen sosial open-source yang menganalisis profil dan riwayat postingan publik akun X (Twitter) untuk menghasilkan Indikator Risiko Amplifikasi Terkoordinasi (skor 0–100). Sistem ini memperkirakan anomali pola perilaku—seperti repetisi pesan, kepadatan tagar, intensitas aktivitas, dan ritme waktu posting—secara matematis dan deterministik.

  • 🎯 Indikator Risiko Objektif (Bukan Tuduhan): Menilai jejak perilaku linimasa tanpa pernah mengklaim bahwa suatu akun pasti palsu, berbayar, atau berafiliasi politik tertentu.
  • 🤖 Dual Surface (Website & X Bot): Analisis dapat diakses langsung melalui antarmuka web modern di lacakbuzzer.web.id atau cukup dengan me-mention bot resmi @lacakbuzzer di Twitter/X.
  • 🧠 Model NLP Lokal (MiniLM-L6-v2): Menghitung kemiripan semantik antar-tweet menggunakan model Sentence-Transformers yang berjalan lokal di server tanpa mengirim konten tweet mentah ke pihak ketiga.
  • 🔒 100% Stateless & Privacy-First: Membaca postingan publik secara live tanpa menyimpan teks tweet mentah ke dalam database demi menjaga privasi penuh pengguna.
  • ⚡ Formula Baku & Transparan: Dilengkapi sistem penilaian matematis 7 parameter dan logika peredam anti-false-positive yang terbuka untuk diaudit.

Preview

Tampilan Hasil Analisis Website   Tampilan Balasan Bot X

Kiri: Tampilan hasil analisis di Website (lacakbuzzer.web.id) • Kanan: Balasan publik otomatis dari Bot X (@lacakbuzzer)


Daftar Isi


Anggota Kelompok

Nama Tugas (Backend/Frontend)
Ridwan Backend 1
Dandy Backend 2
Naufal Frontend 1
Falen Frontend 2

Detail Tech Stack

1. Frontend

  • React.js (v18): Framework utama untuk pembuatan Single Page Application (SPA).
  • Vite: Alat build super cepat untuk manajemen aset dan hot module replacement (HMR).
  • CSS Kustom / Tailwind CSS: Desain visual responsif, premium, dan gelap (dark mode) dengan transisi halus.
  • Cloudflare Pages: Media hosting statis untuk frontend.

2. Backend (API)

  • Python (v3.12): Bahasa pemrograman utama backend.
  • FastAPI: Framework web asinkron dengan performa tinggi yang menyediakan endpoint REST API.
  • Uvicorn: Server web ASGI untuk menjalankan FastAPI.
  • Hugging Face Spaces: Platform hosting backend menggunakan kontainer Docker.

3. Layanan Pihak Ketiga & ML Lokal

  • Firebase Firestore: Database dokumen NoSQL untuk menyimpan statistik global dan riwayat pemindaian (scan_history).
  • twscrape: Kakas scraping data X/Twitter secara terprogram tanpa API X resmi.
  • all-MiniLM-L6-v2: Model Sentence-Transformers lokal untuk memproses kemiripan semantik antar-tweet.
  • OpenRouter (LLM): Model AI eksternal untuk menyusun eksplanasi perilaku dalam Bahasa Indonesia secara ramah dan terstruktur.

Arsitektur Sistem & Alur Request (Workflows)

Arsitektur Sistem

Aplikasi ini berjalan secara terpisah (decoupled):

  • Frontend Client terhubung ke FastAPI Backend via HTTP/HTTPS.
  • Backend menggunakan penyimpanan lokal untuk rate-limiting metadata (stateless JSON files) dan terhubung ke Firebase Firestore untuk leaderboard.
  • Backend memanggil model AI lokal untuk semantik, dan OpenRouter API untuk eksplanasi teks.

Diagram Alur Analisis Baru (Request Flow)

Berikut adalah visualisasi alur request ketika pengguna melakukan analisis akun baru:

sequenceDiagram
    autonumber
    actor User as Pengguna (Browser)
    participant FE as Frontend (React)
    participant BE as Backend (FastAPI)
    participant Scraper as twscrape (X/Twitter)
    participant ML as MiniLM (Embeddings)
    participant OR as OpenRouter (LLM)
    participant DB as Firestore (Firebase)

    User->>FE: Input Username Target (misal: @username)
    FE->>BE: POST /api/analyze {target, source: 'website'}
    Note over BE: Cek Rate Limit (Berbasis IP)
    
    alt Jika Kena Rate Limit
        BE-->>FE: Error 429: Batas analisis tercapai
        FE-->>User: Tampilkan Pesan Batas Analisis Tercapai
    else Valid & Aman
        BE->>Scraper: Ambil 100 Tweet Terbaru & Profil
        Scraper-->>BE: Data Profil & Tweets (Text, Hashtag, URL, Mentions)
        
        alt Tweets < 10
            BE-->>FE: Error: Data tweet tidak cukup
            FE-->>User: Tampilkan Pesan "Data Tidak Cukup"
        else Data Cukup (>= 10)
            BE->>ML: Bandingkan Kemiripan Semantik (MiniLM)
            ML-->>BE: Skor Kemiripan
            Note over BE: Hitung Metrik & Formula Scoring Baku
            BE->>OR: Minta Eksplanasi (Metrik Ringkasan)
            OR-->>BE: Teks Eksplanasi (Bahasa Indonesia)
            BE->>DB: Simpan Riwayat Tanpa Tweets (Firestore)
            BE-->>FE: Response (Score, Metrics, Signals, Explanations, raw_tweets)
            FE-->>User: Tampilkan ResultCard & Hubungkan ke Modal Detail (Lihat Detail)
        end
    end
Loading

Diagram Alur Mengambil Riwayat (History Flow)

Berikut adalah alur saat pengguna mengeklik akun dari papan Leaderboard (tanpa scraping ulang):

sequenceDiagram
    autonumber
    actor User as Pengguna (Browser)
    participant FE as Frontend (React)
    participant BE as Backend (FastAPI)
    participant DB as Firestore (Firebase)

    User->>FE: Klik Akun di Leaderboard
    FE->>BE: GET /api/history/{username}
    BE->>DB: Cari di Koleksi scan_history
    alt Ditemukan
        DB-->>BE: full_report (Skor, Metrik, Penjelasan, dll)
        BE-->>FE: Response full_report (tanpa raw_tweets)
        FE-->>User: Tampilkan Laporan (Modal Detail menunjukkan "Data Terlindungi" demi Privasi)
    else Tidak Ditemukan
        BE-->>FE: Error 404
        FE-->>User: Tampilkan Pesan Error
    end
Loading

Metodologi & Formula Penilaian (Scoring & Feature Extraction)

Sistem Lacak Buzzer dirancang transparan, deterministik, dan dapat diuji secara terbuka (white-box). Seluruh proses penilaian profil dilakukan melalui dua tahap: Ekstraksi Fitur Perilaku (backend/services/feature_extraction.py) dan Formula Pembobotan Risiko Tetap (backend/services/scoring.py).

Important

Prinsip Keamanan Produk:
Skor yang dihasilkan adalah Indikator Risiko Amplifikasi Terkoordinasi (0–100) berbasis pola statistik perilaku. Formula ini bukan bukti hukum/ilmiah bahwa suatu akun adalah buzzer, bot bayaran, palsu, memiliki agenda politik, atau terkoordinasi secara jahat.

Skor ini adalah indikator risiko berbasis pola perilaku, bukan bukti bahwa akun tersebut terkoordinasi, palsu, dibayar, atau memiliki niat tertentu.

1. Ekstraksi Fitur Statistik Perilaku

Sistem mengumpulkan maksimum 100 tweet terkini dari target dan mengekstrak 7 parameter perilaku:

A. Kemiripan Semantik Antar-Pesan ($S_{\text{sim}}$)

Menggunakan model Sentence-Transformers lokal sentence-transformers/all-MiniLM-L6-v2 (berjalan hemat memori pada CPU 2GB). Setiap teks tweet diubah menjadi vektor embedding $e_i \in \mathbb{R}^{384}$. Tingkat kemiripan dihitung dari rata-rata Cosine Similarity seluruh pasangan tweet unik:

$$\text{CosineSim}(e_i, e_j) = \frac{e_i \cdot e_j}{|e_i|_2 |e_j|_2}$$

$$S_{\text{sim}} = \frac{1}{\binom{N}{2}} \sum_{1 \le i < j \le N} \text{CosineSim}(e_i, e_j), \quad S_{\text{sim}} \in [0.0, 1.0]$$

Interpretasi: Nilai tinggi mengindikasikan akun sering mengulang narasi atau template teks serupa secara masif (copy-paste / blast messaging).

B. Kepadatan Tagar ($H_{\text{avg}}$)

Rata-rata jumlah tagar (hashtags) per tweet:

$$H_{\text{avg}} = \frac{\sum_{i=1}^{N} \text{Count}(\text{Hashtags}_i)}{N}$$

C. Intensitas Aktivitas Harian ($A_{\text{rate}}$)

Frekuensi rata-rata posting per hari berdasarkan rentang waktu tweet tertua dan terbaru:

$$\text{Active Days} = \max\left(1.0, \frac{t_{\max} - t_{\min}}{86400}\right)$$

$$A_{\text{rate}} = \frac{N}{\text{Active Days}}$$

D. Rasio Tautan ($R_{\text{url}}$) & Media ($R_{\text{photo}}$)

Proporsi posting yang memuat link eksternal atau lampiran gambar/video:

$$R_{\text{url}} = \frac{\text{Jumlah Tweet dengan URL}}{N}, \quad R_{\text{photo}} = \frac{\text{Jumlah Tweet dengan Media}}{N}$$

E. Perilaku Interaksi ($R_{\text{mention}}$ & $R_{\text{reply}}$)

Proporsi posting yang menyebut akun lain (mention) atau merupakan balasan (reply):

$$R_{\text{mention}} = \frac{\text{Jumlah Tweet dengan Mention}}{N}, \quad R_{\text{reply}} = \frac{\text{Jumlah Tweet Balasan}}{N}$$

F. Parameter Keaslian Akun ($P_{\text{risk}}$)

Menilai risiko awal berdasarkan umur akun sejak tanggal pendaftaran dan kelengkapan bio:

$$\text{Age}_{\text{days}} = \frac{t_{\text{now}} - t_{\text{created}}}{86400}$$

$$P_{\text{risk}} = \begin{cases} 70, & \text{jika } \text{Age}_{\text{days}} < 90 \ 0, & \text{lainnya} \end{cases} + \begin{cases} 30, & \text{jika Bio kosong} \ 0, & \text{lainnya} \end{cases}$$

G. Entropi Interval Waktu Posting ($E$)

Mengukur tingkat keacakan jeda waktu posting $\Delta t_i = t_{i} - t_{i-1}$ ke dalam 9 time bins (0–1 jam, 1–2 jam, ..., >24 jam) menggunakan Shannon Entropy:

$$H = -\sum_{k=1}^{K} p_k \log_2(p_k), \quad E = \frac{H}{\log_2(K)} \in [0.0, 1.0]$$

Interpretasi: Entropi rendah ($E \to 0$) berarti jeda waktu antar-tweet sangat konsisten dan terjadwal secara mekanis (otomatisasi / cron bot).


2. Normalisasi Metrik ke Skala Baku (0–100)

Sebelum pembobotan, seluruh metrik mentah dipetakan ke skala terstandardisasi $[0, 100]$:

Komponen Metrik ($M_i$) Rumus Normalisasi Internal Bobot ($w_i$) Indikator
Semantic Similarity ($M_{\text{sim}}$) $S_{\text{sim}} \times 100$ 30% Tingkat pengulangan narasi pesan
Hashtag Density ($M_{\text{hash}}$) $\min\left(\frac{H_{\text{avg}}}{4} \times 100, 100\right)$ 20% Kepadatan spam tagar kampanye
Activity Intensity ($M_{\text{act}}$) $\min\left(\frac{A_{\text{rate}}}{80} \times 100, 100\right)$ 15% Intensitas posting harian abnormal
Media & URL Ratio ($M_{\text{media}}$) $(R_{\text{url}} \times 60) + (R_{\text{photo}} \times 40)$ 10% Penyebaran tautan keluar dan media
Interaction Behavior ($M_{\text{int}}$) $(R_{\text{mention}} \times 50) + (R_{\text{reply}} \times 50)$ 10% Pola interaksi balasan/mention terarah
Profile Risk ($M_{\text{prof}}$) $\min(P_{\text{risk}}, 100)$ 10% Akun baru dibuat (<90 hari) & bio kosong
Interval Regularity ($M_{\text{intv}}$) $(1 - E) \times 100$ 5% Keteraturan jeda posting (jadwal otomatis)

3. Formula Skor Dasar (Raw Score)

Kombinasi linear berbobot dari seluruh metrik terstandardisasi:

$$S_{\text{base}} = \sum_{i=1}^{7} w_i M_i$$

$$S_{\text{base}} = 0.30 M_{\text{sim}} + 0.20 M_{\text{hash}} + 0.15 M_{\text{act}} + 0.10 M_{\text{media}} + 0.10 M_{\text{int}} + 0.10 M_{\text{prof}} + 0.05 M_{\text{intv}}$$

$$S = \min(S_{\text{base}}, 100)$$


4. Mekanisme Anti-False-Positive (Reducers)

Untuk mencegah akun personal aktif, jurnalis, atau kreator konten mendapatkan skor risiko tinggi secara tidak sengaja, sistem menerapkan pengurang skor otomatis (penalty reducers):

diversity_score = 1 - semantic_similarity

# 1. Reduksi Keberagaman Topik: narasi tweet sangat bervariasi
if diversity_score > 0.6:
    final_score *= 0.70

# 2. Reduksi Aktivitas Rendah: frekuensi posting wajar di bawah 5 tweet/hari
if posts_per_day < 5:
    final_score *= 0.80

# 3. Reduksi Percakapan Alami: bukan akun yang terus-menerus reply/mention terarah
if reply_ratio < 0.3 and mention_ratio < 0.3:
    final_score *= 0.85

Skor akhir dibatasi dalam rentang $[0, 100]$ dan dibulatkan:

$$\text{Skor Akhir} = \text{round}\Big(\max\big(0, \min(S, 100)\big)\Big)$$


5. Klasifikasi Kategori Risiko (Risk Bands) & Kepercayaan

Rentang Skor Kategori Risiko (Risk Band) Karakteristik Perilaku
0 – 35 🟢 Rendah Aktivitas organik, topik percakapan bervariasi, pola waktu alami.
36 – 65 🟡 Sedang Terdeteksi pola repetisi ringan atau intensitas posting tertentu.
66 – 85 🟠 Tinggi Terdeteksi kemiripan pesan kuat, kepadatan tagar padat, atau pola terjadwal.
86 – 100 🔴 Ekstrem Kombinasi repetisi teks sangat tinggi, akun baru, aktivitas posting sangat intensif.

Tingkat Kepercayaan (Confidence Level)

  • < 10 Tweet: Insufficient Data (sistem menolak kalkulasi skor demi menjaga keadilan analisis).
  • 10 – 49 Tweet: Rendah ("Kepercayaan hasil rendah karena jumlah tweet yang tersedia terbatas.").
  • $\ge$ 50 Tweet: Normal (data cukup representatif untuk evaluasi statistik).

Struktur Proyek

lacak-buzzer/
├── .github/
│   ├── changelog-config.json         # Konfigurasi kategori changelog otomatis
│   └── workflows/
│       ├── auto-release.yml          # Workflow Github Action untuk rilis versi
│       └── advanced-security.yml     # Pemindaian Gitleaks (Secrets) & Trivy (Container)
├── frontend/                         # Website SPA (React + Vite)
│   ├── public/
│   │   ├── metadata.json             # Meta data aplikasi
│   │   ├── robots.txt                # Aturan indexing mesin pencari
│   │   ├── sitemap.xml               # Peta situs pencarian
│   │   └── _headers                  # Aturan CSP dan header keamanan (Cloudflare)
│   ├── src/
│   │   ├── components/
│   │   │   ├── Footer.jsx            # Komponen catatan/disclaimer footer
│   │   │   ├── Header.jsx            # Komponen navigasi atas
│   │   │   ├── ResultCard.jsx        # Komponen penampil hasil skor risiko + detail modal
│   │   │   ├── SearchBar.jsx         # Komponen pencarian username
│   │   │   └── TweetDetailsModal.jsx # Pop-up rincian tweet & metrik detail (See Details)
│   │   ├── pages/
│   │   │   └── Home.jsx              # Halaman utama Lacak Buzzer dengan Skeleton Loaders
│   │   ├── App.jsx                   # Root komponen UI
│   │   ├── index.css                 # Global CSS (Tailwind directives)
│   │   └── main.jsx                  # Entry point aplikasi React
│   ├── index.html                    # Kerangka HTML utama
│   ├── package.json                  # Dependensi library NPM Node.js
│   ├── postcss.config.js             # Konfigurasi postcss (Tailwind)
│   ├── tailwind.config.js            # Konfigurasi Tailwind CSS
│   ├── vite.config.js                # Konfigurasi Vite bundler
│   └── wrangler.toml                 # Konfigurasi Cloudflare Pages
├── backend/                          # Backend API & Bot (FastAPI)
│   ├── api/
│   │   ├── analyze.py                # Endpoint `/analyze` FastAPI
│   │   └── leaderboard.py            # Endpoint stats, leaderboard, & detail history
│   ├── bot/
│   │   ├── mention_parser.py         # Ekstraktor username dari teks tweet bot
│   │   └── x_bot.py                  # Proses monitoring dan membalas tweet (Bot X)
│   ├── data/                         # Folder internal data (e.g. rate limit JSON)
│   ├── schemas/
│   │   └── analysis.py               # Schema validasi pydantic (Model Data)
│   ├── services/
│   │   ├── explanation.py            # Generator penjelasan via OpenRouter LLM
│   │   ├── feature_extraction.py     # Logika metrik hashtag, dll (NLP/Math)
│   │   ├── firebase_service.py       # Integrasi database Firestore & global stats
│   │   ├── rate_limits.py            # Pengecekan limit akses harian
│   │   ├── scoring.py                # Implementasi formula penilaian baku
│   │   └── scraper.py                # Wrapper twscrape untuk mengambil tweets
│   ├── tests/
│   │   ├── test_analyze_api.py       # Unit test endpoint analyze dan leaderboard
│   │   ├── test_bot_mentions.py      # Unit test parser mention bot
│   │   ├── test_confidence.py        # Unit test kalkulasi kepercayaan
│   │   ├── test_firebase_service.py  # Unit test integrasi Firebase Firestore
│   │   ├── test_rate_limits.py       # Unit test rate limiter
│   │   └── test_scoring.py           # Unit test algoritma scoring & reducers
│   ├── Dockerfile                    # Konfigurasi container Hugging Face Spaces
│   ├── main.py                       # Entry point ASGI FastAPI (Uvicorn)
│   └── requirements.txt              # Daftar pustaka Python backend
├── docs/                             # Dokumen progres dan manajerial
│   └── PROGRESS.md                   # Pelacakan status rilis MVP
├── AGENTS.md                         # Dokumen PRD / Panduan agen AI proyek
├── BRAND_RESOURCES.md                # Panduan identitas visual & copywriting
├── DESIGN.md                         # Spesifikasi teknis desain & UI komponen
├── DESIGN_RESEARCH.md                # Logika riset desain (ATM Method)
├── .env.example                      # Template variabel environment rahasia
├── .gitignore                        # Daftar file yang diabaikan Git
└── Procfile                          # Konfigurasi perintah runner production

Tabel Keamanan (Security Table)

Berikut adalah mekanisme keamanan yang diterapkan pada proyek Lacak Buzzer untuk menjamin integritas data dan proteksi sistem:

Fitur / Komponen Ancaman / Risiko Solusi & Mekanisme Proteksi
Kredensial API & Firebase Kebocoran kunci otentikasi di repositori publik Kredensial disimpan dalam .env dan backend/secrets/ — keduanya diabaikan melalui .gitignore. Pipeline GitHub Actions dilengkapi dengan Gitleaks untuk menyaring kebocoran rahasia secara otomatis.
Docker Container Celah keamanan (vulnerabilities) sistem operasi di image Integrasi Trivy Image Scanner pada CI workflow untuk memindai OS/library di backend. Direktori data/ berjalan dengan izin 755 (bukan 777) untuk membatasi akses write hanya pada proses aplikasi.
Stateless Tweets Pelanggaran privasi / memori server penuh Raw tweets tidak disimpan ke Firestore maupun dikirim ke LLM OpenRouter. Data hanya hidup sementara di memori selama kalkulasi, lalu langsung dibersihkan.
Rate Limiting — Website Pengurasan kuota token OpenRouter & Scraping (DDOS) Rate limiting lokal berbasis IP: maks 5 permintaan sukses per menit per IP. Menggunakan X-Forwarded-For header untuk membaca IP klien yang sesungguhnya di balik reverse proxy (Hugging Face).
Rate Limiting — Bot X Spam analisis & duplikasi mention Tiga lapis limit bot: maks 10 reply global/menit, maks 5 request per requester/menit, maks 1 analisis per target/menit. Operasi baca-tulis file JSON dilindungi threading.Lock untuk mencegah race condition pada concurrent requests.
Validasi Input Username Injeksi karakter aneh / input tak terbatas Setiap username divalidasi dengan regex [A-Za-z0-9_] dan dibatasi maksimum 50 karakter sebelum diteruskan ke scraper.
Validasi Mention ID (Bot) Manipulasi format mention_id / DoS pada file JSON mention_id divalidasi sebagai string numerik Twitter (maks 25 digit). List bot_processed_mentions dibatasi maksimum 500 entri terakhir agar file tidak tumbuh tak terbatas.
Privasi Log ke Firestore Penyimpanan IP address pengguna secara permanen di database Identifier (IP/username requester) dihapus dari execution logs sebelum disimpan ke Firestore.
CORS Akses API dari domain tidak sah allow_origins di-whitelist secara eksplisit. Method dibatasi hanya GET & POST, header dibatasi hanya Content-Type & Authorization.
Manipulasi Skor Penilaian bias atau salah diagnosis Penerapan logika Anti-False-Positive Reducers secara permanen. Pengurangan skor otomatis jika variansi semantik tinggi, total tweet harian kecil, atau aktivitas interaksi minim.
Bot Polling Backoff Rate limit ban dari Twitter akibat polling agresif saat error Bot menerapkan exponential backoff saat terjadi error polling: jeda berlipat ganda per error (1× → 2× → 4× → 8×) dan reset kembali ke normal setelah berhasil.
Dependency Pinning Pembaruan library tak terduga yang membawa breaking changes atau CVE baru Semua dependency Python di-pin ke versi spesifik di requirements.txt. Dependabot dikonfigurasi untuk membuka PR otomatis setiap ada versi terbaru (setiap Senin).

Instalasi & Cara Menjalankan

Panduan Kolaborasi

Bagi anggota kelompok yang baru bergabung, ikuti langkah-langkah berikut:

  1. Clone Repositori

    git clone https://github.com/Yogs4R/lacak-buzzer.git
    cd lacak-buzzer
  2. Alur Kerja Git (2 Opsi)

    Opsi A: Simple Workflow (Pemula) Gunakan alur ini jika tidak ingin pusing dengan branching.

    • Siapkan perubahan: git add .
    • Simpan perubahan: git commit -m "pesan singkat tentang fitur/perbaikan"
    • Ambil update teman: git pull origin main
    • Unggah pekerjaan: git push origin main

    Opsi B: Advanced Workflow (Standar Industri) Gunakan alur ini jika sudah terbiasa dengan Git.

    • Ambil update terbaru: git pull origin main
    • Buat branch fitur: git checkout -b nama-tugas
    • Simpan perubahan: git add . lalu git commit -m "feat: nama tugas"
    • Unggah & gabungkan: git push origin nama-tugas lalu buat Pull Request di GitHub.

Panduan Kredensial & Berkas Konfigurasi

Semua berkas kredensial sensitif diabaikan oleh Git demi keamanan. Pengembang yang melakukan clone atau fork dapat menyiapkan berkas-berkas berikut menggunakan template .example yang telah disediakan:

Berkas Asli (Sensitif/Lokal) Berkas Template (.example) Tujuan Impor / Penempatan Fungsi & Keterangan
backend/secrets/firebase-key.json backend/secrets/firebase-key.json.example Letakkan di backend/secrets/ atau copy isinya ke env FIREBASE_CREDENTIALS Service Account Google Cloud / Firebase Firestore untuk riwayat pemindaian & leaderboard. (Opsional: jika tidak diisi, backend otomatis jalan dalam mode offline tanpa database).
backend/twitter_accounts.json backend/twitter_accounts.json.example Copy seluruh string JSON ke env TWITTER_ACCOUNTS_JSON di .env / Hugging Face Secrets Kredensial dan session cookies (auth_token & ct0) untuk scraping X/Twitter tanpa API berbayar.
backend/accounts.txt backend/accounts.txt.example Digunakan sebagai input CLI twscrape add_accounts Format teks baris (user:pass:email:email_pass) untuk inisialisasi akun scraper secara manual via terminal.
accounts.db (Dihasilkan Otomatis) Direktori backend atau TWS_DATA_DIR Basis data SQLite sesi Twitter. Terbuat secara otomatis saat backend dijalankan jika TWITTER_ACCOUNTS_JSON terisi.
backend/data/rate_limits.json (Dihasilkan Otomatis) Direktori backend/data/ Cache rate limit (IP website & mention bot). Terbuat secara otomatis saat runtime oleh aplikasi.

Cara 1: Menjalankan dengan Docker Compose (Direkomendasikan & Paling Mudah)

Anda dapat menjalankan seluruh stack (Backend FastAPI + Frontend Nginx SPA) secara mandiri hanya dengan satu perintah:

# 1. Salin template konfigurasi environment
cp .env.example .env

# 2. Isi OPENROUTER_API_KEY dan TWITTER_ACCOUNTS_JSON pada file .env

# 3. Jalankan seluruh layanan
docker compose up --build

Cara 2: Menjalankan Manual (Tanpa Docker)

A. Backend (API)

Langkah 1: Setup Awal (Cukup dilakukan sekali) Buka PowerShell, lalu jalankan perintah berikut untuk membuat virtual environment menggunakan Python 3.12:

cd backend
py -3.12 -m venv venv

(Jika perintah py tidak dikenali, gunakan python -m venv venv asalkan versi Python adalah 3.12).

Langkah 2: Menjalankan Backend

cd backend
# Aktifkan virtual environment
.\venv\Scripts\Activate.ps1

# Install atau perbarui dependensi
pip install -r requirements.txt

# Jalankan server API
uvicorn main:app --reload

Perintah twscrape CLI (Jika Menyiapkan Akun via accounts.txt):

# 1. Tambah akun dari file accounts.txt
twscrape add_accounts accounts.txt username:password:email:email_password

# 2. Login seluruh akun
twscrape login_accounts

# 3. Cek status akun
twscrape accounts

# 4. Relogin atau reset locks jika terblokir sementara
twscrape relogin
twscrape reset_locks

Keluar dari Virtual Environment:

deactivate

B. Frontend (Website)

cd frontend
npm install
npm run dev

Status X Bot & Contoh Respon

Warning

Status X Bot (@lacakbuzzer): DALAM TAHAP EKSPERIMEN & PENYELIDIKAN (WIP)
Meskipun arsitektur dual-channel (twifork dan twscrape) telah diintegrasikan, deteksi mention otomatis di lingkungan cloud hosting saat ini masih mengalami kendala teknis akibat pembatasan IP data center oleh Twitter/X serta filter kualitas notifikasi internal.
Gunakan Web App Resmi: Untuk analisis instan dan akurat yang 100% aktif dan stabil, silakan gunakan antarmuka web di lacakbuzzer.web.id.

Format Respon X Bot

Jika bot dijalankan secara mandiri dengan kredensial cookies yang valid, format balasan otomatis di Twitter/X adalah sebagai berikut:

Risiko: Tinggi | Skor: 74/100

- Kemiripan pesan cukup tinggi
- Pola penggunaan tagar terlihat padat

⚠️ Indikator pola perilaku, bukan bukti koordinasi.

🔍 Cek analisis lengkap & coba gratis di sini:
https://lacakbuzzer.web.id atau mentions @lacakbuzzer

Catatan: Bot X membatasi panjang teks agar ketat berada di bawah batas 280 karakter Twitter/X dengan pemotongan otomatis.

Cara Menggunakan Bot X

Tip

Cukup mention @lacakbuzzer beserta username target di X/Twitter! Contoh: @lacakbuzzer analisis akun @detikcom Bot akan otomatis membalas dengan hasil analisis dalam beberapa saat.

Komunitas & Tata Kelola

Kami menyambut baik partisipasi komunitas dalam mengembangkan dan menjaga integritas proyek ini:

Catatan Keamanan

Skor yang dihasilkan adalah indikator risiko berbasis pola perilaku, bukan bukti bahwa akun tersebut terkoordinasi, palsu, dibayar, atau memiliki niat tertentu.

About

Projek akhir Sistem Operasi - Sistem deteksi buzzer pada akun di X/Twitter

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages