Skip to content

reiyuura/mikrobot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

8 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ€– MikroBot

Telegram Bot untuk manajemen Hotspot MikroTik via REST API. Buat, kelola, dan hapus user hotspot langsung dari Telegram.

Pengganti MiHKMon yang sudah outdated dan buggy di RouterOS 7.x.

✨ Fitur

Command Deskripsi
/start Menu utama dengan inline keyboard
/adduser Buat user (auto generate username/password)
/adduser nama Buat user manual (username = password)
/adduser user pass Buat user dengan custom user & password
/voucher Generate batch voucher (3/5/10/20 sekaligus)
/listuser Lihat semua user dengan pagination
/deleteuser Hapus user + kick session aktif
/active Lihat user yang sedang online
/info Info server (CPU, RAM, uptime)
/income Laporan pendapatan (harian/mingguan/bulanan)
/reboot Reboot MikroTik (dengan konfirmasi)
/help Panduan penggunaan

Highlight

  • πŸ” Admin-only β€” hanya Telegram ID tertentu yang bisa akses
  • πŸ”— WireGuard β€” koneksi aman VPS ↔ MikroTik (support CGNAT)
  • ⚑ REST API β€” native RouterOS 7.x, tanpa library tambahan
  • 🧹 Auto-cleanup β€” user otomatis dihapus saat masa aktif habis
  • πŸ’° Income tracking β€” pendapatan dihitung saat user pertama kali login
  • 🎫 Batch Voucher β€” generate banyak user sekaligus
  • πŸ“‹ Username = Password β€” format simple, tinggal copy
  • πŸ“Š Manual & Auto β€” bisa buat user custom atau auto generate
  • 🌐 WebFig Proxy β€” akses MikroTik WebFig dari mana saja via HTTPS
  • πŸ”„ Reboot β€” restart router dari Telegram dengan auto status check

πŸ’° Harga Default

Profile Harga Masa Aktif Speed
1 Hari Rp 3.000 1 hari ↓10M / ↑3M
2 Hari Rp 5.000 2 hari ↓15M / ↑3M
7 Hari Rp 15.000 7 hari ↓20M / ↑4M
Keluarga Rp 50.000 30 hari ↓20M / ↑5M

Edit src/utils.js untuk menyesuaikan harga dan profile.

πŸ“‹ Persyaratan

  • MikroTik RouterOS 7.x (tested on 7.21.3)
  • VPS Ubuntu 20.04+ dengan Node.js 18+
  • WireGuard tunnel antara VPS dan MikroTik
  • Telegram Bot Token dari @BotFather

πŸ›  Instalasi

1. Setup WireGuard

Bot berjalan di VPS dan berkomunikasi dengan MikroTik melalui WireGuard tunnel.

πŸ“– Panduan WireGuard (klik untuk expand)

VPS (Ubuntu) β€” WireGuard Server

# Install WireGuard
sudo apt update && sudo apt install wireguard -y

# Generate keys
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key

# Lihat keys
cat /etc/wireguard/server_private.key
cat /etc/wireguard/server_public.key

Edit config:

sudo nano /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <PRIVATE_KEY_VPS>
Address = 10.10.10.1/24
ListenPort = 51820
PostUp = iptables -A INPUT -p udp --dport 51820 -j ACCEPT
PostDown = iptables -D INPUT -p udp --dport 51820 -j ACCEPT

[Peer]
# MikroTik
PublicKey = <PUBLIC_KEY_MIKROTIK>
AllowedIPs = 10.10.10.2/32
sudo systemctl enable --now wg-quick@wg0

MikroTik β€” WireGuard Client

# Buat WireGuard interface
/interface wireguard add name=wg-vps listen-port=13231

# Lihat public key (catat untuk config VPS)
/interface wireguard print

# Tambah peer (VPS)
/interface wireguard peers add \
  interface=wg-vps \
  public-key="<PUBLIC_KEY_VPS>" \
  endpoint-address=<IP_PUBLIC_VPS> \
  endpoint-port=51820 \
  allowed-address=10.10.10.0/24 \
  persistent-keepalive=25

# Assign IP
/ip address add address=10.10.10.2/24 interface=wg-vps

# Firewall
/ip firewall filter add chain=input action=accept protocol=udp dst-port=13231

Penting: Public key saling tukar!

  • VPS config [Peer] β†’ isi public key MikroTik
  • MikroTik peer β†’ isi public key VPS

Aktifkan REST API di MikroTik

# Enable www service (allow dari WireGuard + lokal)
/ip service set www address=10.10.10.1/32,192.168.88.0/24 disabled=no port=80

# Buat user khusus API
/user add name=mikrobot password=PASSWORD_KUAT group=full

Verifikasi

# Dari VPS
ping 10.10.10.2
curl -u mikrobot:PASSWORD http://10.10.10.2/rest/system/resource

2. Deploy Bot

# Clone repository
git clone https://github.com/username/mikrobot.git /opt/mikrobot
cd /opt/mikrobot

# Install dependencies
npm install

# Copy dan edit config
cp .env.example .env
nano .env

3. Konfigurasi .env

# Telegram Bot (dari @BotFather)
BOT_TOKEN=your_telegram_bot_token
ADMIN_IDS=123456789

# MikroTik (via WireGuard)
ROUTER_HOST=10.10.10.2
ROUTER_PORT=80
ROUTER_USER=mikrobot
ROUTER_PASS=your_password

# Settings
USERNAME_LENGTH=6
TIMEZONE=Asia/Jakarta
Variable Deskripsi
BOT_TOKEN Token dari @BotFather
ADMIN_IDS Telegram user ID admin (pisahkan dengan koma untuk multiple admin)
ROUTER_HOST IP MikroTik di WireGuard network
ROUTER_PORT Port REST API (default: 80)
ROUTER_USER Username API di MikroTik
ROUTER_PASS Password API
USERNAME_LENGTH Panjang username yang di-generate (default: 6)
TIMEZONE Timezone untuk format tanggal

πŸ’‘ Dapatkan Telegram ID kamu dengan mengirim pesan ke @userinfobot

4. Jalankan

# Test run
node src/index.js

# Production dengan PM2
npm install -g pm2
pm2 start src/index.js --name mikrobot
pm2 startup
pm2 save

5. WireGuard Watchdog (Recommended)

Kalau ISP pakai CGNAT, IP publik MikroTik bisa berubah setelah mati listrik/reboot. Pasang watchdog agar tunnel auto-recover:

# Copy script
sudo cp scripts/wg-watchdog.sh /opt/wg-watchdog.sh
sudo chmod +x /opt/wg-watchdog.sh

# Test
sudo /opt/wg-watchdog.sh

# Pasang cron (cek setiap 5 menit)
sudo crontab -e

Tambahkan baris ini:

*/5 * * * * /opt/wg-watchdog.sh

πŸ“‹ Log watchdog bisa dilihat di /var/log/wg-watchdog.log

πŸ“± Cara Pakai

Tambah User

Auto generate:

  1. Kirim /adduser atau tap "βž• Tambah User" di menu
  2. Pilih profile (1 Hari, 2 Hari, 7 Hari, Keluarga)
  3. Bot auto-generate username & password (format: abc123 / abc123)

Manual username:

  1. Kirim /adduser nama β†’ username=password=nama
  2. Atau /adduser user pass β†’ custom username & password
  3. Pilih profile, selesai!

Generate Voucher

  1. Kirim /voucher
  2. Pilih profile
  3. Pilih jumlah (3, 5, 10, atau 20)
  4. Bot generate semua voucher sekaligus

Hapus User

  • Kirim /deleteuser β†’ pilih dari daftar
  • Atau langsung: /deleteuser username123
  • User yang sedang online akan di-kick otomatis

Laporan Pendapatan

  • Kirim /income β†’ pilih periode (hari ini, minggu ini, bulan ini, atau total)
  • Income hanya dihitung saat user pertama kali login ke hotspot
  • Breakdown per profile: jumlah Γ— harga

Auto-Cleanup

  • Bot cek setiap 1 jam apakah ada user yang masa aktifnya sudah habis
  • User expired otomatis di-kick + dihapus dari MikroTik
  • Admin mendapat notifikasi di Telegram setiap kali ada user yang dihapus

πŸ”§ Kustomisasi Profile & Harga

Edit file src/utils.js:

export const PROFILES = {
  '1hari': {
    name: '1hari',
    label: '1 Hari',
    'session-timeout': '1d 00:00:00',
    'rate-limit': '3M/10M',
    price: 3000,        // Harga dalam Rupiah
    validityDays: 1,    // Masa aktif (hari)
  },
  // Tambah profile baru di sini...
};

⚠️ Nama profile (name) harus sama persis dengan user-profile di MikroTik.

πŸ— Arsitektur

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Admin        β”‚     β”‚  VPS Ubuntu       β”‚     β”‚  MikroTik    β”‚
β”‚ (Telegram)   │────▢│  MikroBot (Node)  │────▢│  RouterOS 7  β”‚
β”‚              │◀────│  Grammy + Axios   │◀────│  REST API    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚  WireGuard Client β”‚     β”‚  WireGuard   β”‚
                     β”‚  ⏰ Scheduler      β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                      10.10.10.1                10.10.10.2

Alur Income

User dibuat β†’ Belum login (income: 0)
           β†’ Pertama login ke hotspot
           β†’ Scheduler deteksi di active sessions
           β†’ Income tercatat βœ…

πŸ“ Struktur Project

mikrobot/
β”œβ”€β”€ package.json
β”œβ”€β”€ .env.example
β”œβ”€β”€ .gitignore
β”œβ”€β”€ README.md
β”œβ”€β”€ scripts/
β”‚   └── wg-watchdog.sh    # Auto-recovery WireGuard tunnel
β”œβ”€β”€ hotspot/               # Template login MikroTik
β”‚   β”œβ”€β”€ login.html         # Login (2 tab: Voucher + Manual)
β”‚   β”œβ”€β”€ alogin.html        # After login + status
β”‚   β”œβ”€β”€ status.html        # Status koneksi
β”‚   β”œβ”€β”€ logout.html        # Logout + summary
β”‚   β”œβ”€β”€ error.html         # Error page
β”‚   β”œβ”€β”€ redirect.html      # Redirect page
β”‚   └── md5.js             # CHAP authentication
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ index.js           # Entry point
β”‚   β”œβ”€β”€ bot.js             # Grammy bot + admin middleware
β”‚   β”œβ”€β”€ config.js          # Environment config
β”‚   β”œβ”€β”€ mikrotik.js        # MikroTik REST API client
β”‚   β”œβ”€β”€ database.js        # JSON-based logging + income tracking
β”‚   β”œβ”€β”€ scheduler.js       # Auto-cleanup + activation checker
β”‚   β”œβ”€β”€ utils.js           # Helpers + profile/price definitions
β”‚   └── commands/
β”‚       β”œβ”€β”€ start.js       # /start
β”‚       β”œβ”€β”€ adduser.js     # /adduser (auto & manual)
β”‚       β”œβ”€β”€ voucher.js     # /voucher
β”‚       β”œβ”€β”€ listuser.js    # /listuser
β”‚       β”œβ”€β”€ deleteuser.js  # /deleteuser
β”‚       β”œβ”€β”€ activeuser.js  # /active
β”‚       β”œβ”€β”€ serverinfo.js  # /info
β”‚       β”œβ”€β”€ income.js      # /income
β”‚       β”œβ”€β”€ reboot.js      # /reboot
β”‚       └── help.js        # /help
└── data/
    └── mikrobot.json      # Database (auto-created)

πŸ” Keamanan

  • REST API di-bind hanya ke IP WireGuard (10.10.10.1/32)
  • Hanya admin (by Telegram ID) yang bisa mengakses bot
  • Semua traffic terenkripsi melalui WireGuard tunnel
  • Gunakan user API terpisah di MikroTik (jangan pakai admin)
  • WireGuard watchdog auto-recovery jika tunnel putus (CGNAT)

🌐 WebFig Reverse Proxy (Opsional)

Akses MikroTik WebFig dari mana saja melalui domain HTTPS, tanpa perlu expose port router langsung.

Cara Kerja

Browser β†’ https://mikro.domain.com β†’ Nginx (VPS) β†’ WireGuard β†’ MikroTik WebFig (10.10.10.2:80)

Setup

1. DNS Record

Tambahkan A record di DNS provider:

mikro.domain.com β†’ IP_VPS

Jika pakai Cloudflare, set DNS Only (grey cloud) agar SSL certbot bisa jalan.

2. Nginx Config

sudo nano /etc/nginx/sites-available/mikro-webfig
server {
    listen 80;
    server_name mikro.domain.com;

    # Basic auth (wajib! jangan expose WebFig tanpa password)
    auth_basic "MikroTik WebFig";
    auth_basic_user_file /etc/nginx/.htpasswd-mikro;

    location / {
        proxy_pass http://10.10.10.2/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket support (untuk WebFig terminal)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
# Enable site
sudo ln -s /etc/nginx/sites-available/mikro-webfig /etc/nginx/sites-enabled/

# Buat password file
sudo apt install apache2-utils -y
sudo htpasswd -c /etc/nginx/.htpasswd-mikro admin

# Test & reload
sudo nginx -t && sudo systemctl reload nginx

3. SSL (Let's Encrypt)

sudo certbot --nginx -d mikro.domain.com

4. Verifikasi

Buka https://mikro.domain.com di browser β†’ masukkan basic auth β†’ WebFig muncul.

⚠️ Keamanan

  • Selalu pakai basic auth β€” WebFig punya login sendiri, tapi basic auth menambah layer proteksi
  • Gunakan password kuat untuk basic auth dan user MikroTik
  • Jangan disable HTTPS β€” semua traffic harus terenkripsi
  • Traffic mengalir: Browser β†’ HTTPS β†’ Nginx β†’ WireGuard (encrypted) β†’ MikroTik
  • Pertimbangkan whitelist IP di nginx jika hanya diakses dari lokasi tertentu:
# Tambahkan di dalam block server
allow 123.456.789.0/24;  # IP kantor/rumah
deny all;

πŸ“„ Lisensi

MIT License β€” Bebas dipakai dan dimodifikasi.

πŸ™ Credits

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors