Discord secara aktif melawan otomatisasi dan bot dengan menggunakan sistem deteksi canggih: analisis alamat IP, pola perilaku, dan batasan laju. Jika Anda menjalankan bot untuk moderasi, pengiriman pesan, atau otomatisasi tindakan di server, tanpa proksi yang diatur dengan benar, Anda akan menghadapi pemblokiran dalam beberapa jam pertama. Dalam panduan ini, kita akan membahas proksi mana yang cocok untuk Discord, cara mengatur rotasi IP, dan cara menghindari mekanisme perlindungan platform.
Mengapa Discord Memblokir Bot dan Bagaimana Perlindungannya Bekerja
Discord menggunakan sistem perlindungan multi-lapis terhadap otomatisasi yang menganalisis beberapa parameter secara bersamaan. Platform ini tidak hanya memeriksa jumlah permintaan dari satu IP — ia membangun profil perilaku setiap koneksi dan membandingkannya dengan pola pengguna normal.
Mekanisme utama deteksi bot di Discord:
- Batasan Laju — Discord menetapkan batasan ketat pada jumlah tindakan dalam satu waktu. Misalnya, tidak lebih dari 5 pesan dalam 5 detik dari satu akun, tidak lebih dari 50 permintaan ke API dalam satu menit. Melampaui batasan ini mengakibatkan pemblokiran sementara (HTTP 429).
- Analisis Alamat IP — jika beberapa bot beroperasi dari satu IP atau ada aktivitas mencurigakan (pergantian akun yang cepat, tindakan massal), Discord dapat memblokir seluruh alamat IP selama beberapa jam atau hari.
- Fingerprinting Koneksi — platform menganalisis parameter teknis: User-Agent, header permintaan, versi perpustakaan, waktu respons. Jika parameter tidak sesuai dengan klien Discord biasa, akun ditandai sebagai mencurigakan.
- Analisis Perilaku — Discord melacak pola tindakan: reaksi yang terlalu cepat, interval ideal antara pesan, tidak adanya kebetulan dalam tindakan. Bot yang beroperasi dengan algoritma kaku terdeteksi lebih cepat.
Skenario pemblokiran umum tanpa proksi:
- Menjalankan 3-5 bot dari satu IP rumah — pemblokiran IP dalam 2-6 jam setelah mulai bekerja
- Pengiriman massal undangan ke server — pemblokiran akun dan IP setelah 10-15 undangan terkirim
- Moderasi otomatis (penghapusan pesan, pemberian peran) — pemblokiran saat melampaui 100 tindakan per jam dari satu IP
- Pemindaian anggota server — deteksi dan pemblokiran setelah memindai 200-300 profil
Proksi menyelesaikan masalah ini dengan mendistribusikan permintaan di antara alamat IP yang berbeda dan menciptakan ilusi pengguna biasa dari lokasi yang berbeda. Namun, penting untuk memilih jenis proksi yang tepat dan mengatur rotasi — konfigurasi yang salah dapat menyebabkan pemblokiran yang lebih cepat.
Jenis Proksi Apa yang Cocok untuk Bot Discord
Pemilihan jenis proksi tergantung pada tugas Anda: jumlah bot, frekuensi permintaan, anggaran, dan tingkat anonimitas yang dibutuhkan. Mari kita bahas tiga jenis proksi utama dan penerapannya untuk Discord.
| Jenis Proksi | Keuntungan | Kekurangan | Cocok untuk |
|---|---|---|---|
| Proksi Data Center | Kecepatan tinggi (ping 10-50 ms), harga rendah ($1-3 per IP/bulan), stabilitas | Discord mudah mengenali IP data center, risiko tinggi pemblokiran saat melakukan tindakan massal | Pengujian, otomatisasi ringan (1-2 bot), tugas tanpa permintaan massal |
| Proksi Residensial | IP nyata dari pengguna rumah, risiko pemblokiran minimal, kumpulan alamat besar (jutaan IP) | Kecepatan rata-rata (ping 100-300 ms), harga lebih tinggi ($5-15 per GB trafik), ketidakstabilan beberapa IP | Pengiriman massal, pemindaian server, bekerja dengan 5+ bot, proyek jangka panjang |
| Proksi Seluler | IP dari operator seluler (4G/5G), kepercayaan maksimum dari Discord, perubahan IP dinamis | Harga tinggi ($50-150 per IP/bulan), kumpulan alamat lebih kecil, kemungkinan terputusnya koneksi | Akun yang sangat penting, menghindari pemblokiran ketat, bekerja dengan akun bernilai tinggi |
Rekomendasi pemilihan untuk berbagai tugas:
Moderasi dan manajemen server (1-3 bot): Proksi residensial dengan IP tetap. Satu bot — satu IP, tanpa rotasi. Ini menciptakan profil koneksi yang stabil yang dianggap Discord sebagai pengguna biasa-admin.
Pengiriman massal dan undangan (10+ bot): Proksi residensial dengan rotasi setiap 5-10 menit. Sebarkan beban: tidak lebih dari 20 tindakan per jam dari satu IP. Gunakan kumpulan 50+ alamat IP untuk 10 bot.
Pemindaian anggota dan server: Proksi residensial dengan rotasi cepat (setiap 1-3 menit) atau proksi seluler. Pemindaian adalah salah satu aktivitas yang paling berisiko, Discord mudah menghitung pola pemindaian. Gunakan jeda acak antara permintaan (30-120 detik).
Pengujian dan pengembangan: Proksi data center cukup untuk debugging fungsionalitas. Namun, sebelum meluncurkan ke produksi, pastikan untuk beralih ke proksi residensial — perilaku Discord dapat sangat berbeda untuk berbagai jenis IP.
Poin penting: Discord sangat ketat terhadap alamat IP dari negara dan wilayah tertentu. IP dari Rusia, Cina, Vietnam, India menghadapi pemeriksaan yang lebih ketat karena tingginya aktivitas spam. Jika audiens target Anda berada di AS atau Eropa, gunakan proksi dari wilayah tersebut — ini akan mengurangi kemungkinan pemblokiran sebesar 40-60%.
Cara Menghindari Batasan Laju Discord Melalui Proksi
Batasan laju di Discord adalah batasan pada jumlah permintaan ke API dalam satu waktu. Ada dua jenis: global (untuk seluruh aplikasi) dan per-route (untuk endpoint tertentu). Proksi membantu mendistribusikan beban di antara IP yang berbeda, tetapi ini tidak berarti Anda bisa mengabaikan batasan — Discord melacak aktivitas pada tingkat token bot.
Batasan laju utama API Discord:
- Pengiriman pesan: 5 pesan dalam 5 detik ke satu saluran, 50 pesan dalam 10 detik secara global untuk bot
- Pembuatan/penghapusan saluran: 50 permintaan dalam 10 menit
- Perubahan peran anggota: 10 permintaan dalam 10 detik
- Mendapatkan daftar anggota: 1 permintaan per detik (batasan paling ketat)
- Pengiriman DM (pesan pribadi): 5 DM dalam 5 detik, pemblokiran untuk pengiriman massal kepada pengguna yang tidak dikenal
Ketika Anda melampaui batas, Discord mengembalikan HTTP 429 (Terlalu Banyak Permintaan) dengan header Retry-After, yang menunjukkan waktu tunggu dalam detik. Penanganan yang tepat terhadap respons ini sangat penting.
Strategi menghindari batasan laju dengan proksi:
# Contoh dalam Python (discord.py) dengan rotasi proksi saat batas laju
import discord
from discord.ext import commands
import aiohttp
import asyncio
import random
class ProxyRotator:
def __init__(self, proxy_list):
self.proxies = proxy_list # ['http://user:pass@ip:port', ...]
self.current_index = 0
self.failed_proxies = set()
def get_next_proxy(self):
# Melewatkan proksi yang tidak berfungsi
available = [p for p in self.proxies if p not in self.failed_proxies]
if not available:
self.failed_proxies.clear() # Reset setelah siklus penuh
available = self.proxies
proxy = available[self.current_index % len(available)]
self.current_index += 1
return proxy
def mark_failed(self, proxy):
self.failed_proxies.add(proxy)
# Inisialisasi
proxy_rotator = ProxyRotator([
'http://user1:pass1@192.168.1.1:8080',
'http://user2:pass2@192.168.1.2:8080',
# ... tambahkan 10-20 proksi untuk operasi yang stabil
])
intents = discord.Intents.default()
bot = commands.Bot(command_prefix='!', intents=intents)
async def send_with_retry(channel, message, max_retries=3):
"""Mengirim pesan dengan penanganan otomatis batasan laju"""
for attempt in range(max_retries):
try:
# Mendapatkan proksi baru pada setiap percobaan
proxy = proxy_rotator.get_next_proxy()
# Discord.py menggunakan aiohttp di dalamnya, mengatur proksi
connector = aiohttp.TCPConnector()
async with aiohttp.ClientSession(connector=connector) as session:
bot.http.connector = connector
bot.http.proxy = proxy
await channel.send(message)
return True
except discord.HTTPException as e:
if e.status == 429: # Batas laju
retry_after = e.retry_after if hasattr(e, 'retry_after') else 5
print(f"Batas laju! Menunggu {retry_after} detik, mengganti proksi...")
# Menandai proksi sebagai tidak tersedia sementara
proxy_rotator.mark_failed(proxy)
# Menambahkan kebetulan pada jeda
await asyncio.sleep(retry_after + random.uniform(1, 3))
else:
print(f"Kesalahan pengiriman: {e}")
await asyncio.sleep(2)
return False
@bot.event
async def on_ready():
print(f'Bot dijalankan: {bot.user}')
# Contoh penggunaan
@bot.command()
async def pengiriman_massal(ctx):
channels = ctx.guild.text_channels[:5] # 5 saluran pertama
for channel in channels:
success = await send_with_retry(channel, "Pesan percobaan")
if success:
print(f"Dikirim ke {channel.name}")
# Jeda acak antara saluran
await asyncio.sleep(random.uniform(3, 7))
Prinsip kunci untuk menghindari batasan laju:
- Selalu tangani HTTP 429: Jangan abaikan header Retry-After. Discord meningkatkan waktu pemblokiran untuk pelanggaran berulang (dari 5 detik menjadi 60 detik atau lebih).
- Tambahkan kebetulan: Jeda antara permintaan harus acak (misalnya, 2-5 detik daripada tetap 3 detik). Ini meniru perilaku manusia.
- Distribusikan beban: Jika Anda memiliki 10 bot dan 20 proksi, tetapkan masing-masing bot 2 proksi untuk rotasi. Jangan gunakan satu proksi untuk semua bot.
- Pantau kualitas proksi: Beberapa IP mungkin sudah diblokir oleh Discord. Secara otomatis kecualikan proksi yang terus-menerus mendapatkan 403 atau 429.
Strategi Rotasi IP untuk Berbagai Tugas
Rotasi proksi bukan hanya sekadar pergantian IP secara acak setiap N menit. Strategi yang tepat tergantung pada jenis aktivitas bot dan persyaratan Discord untuk stabilitas koneksi. Mari kita bahas empat pendekatan utama.
1. IP Tetap (tanpa rotasi)
Kapan digunakan: Bot moderasi, bot manajemen server, bot musik, bot dengan kehadiran tetap di server.
Logika: Satu bot = satu alamat IP selama masa kerja (minggu, bulan). Discord menganggap koneksi seperti ini sebagai pengguna biasa-admin yang selalu masuk dari satu tempat.
Pengaturan:
# Python (discord.py) - proksi tetap
import discord
from discord.ext import commands
PROXY = 'http://username:password@192.168.1.100:8080'
intents = discord.Intents.default()
bot = commands.Bot(command_prefix='!', intents=intents, proxy=PROXY)
# Proksi akan digunakan untuk semua permintaan bot ini
bot.run('YOUR_BOT_TOKEN')
Keuntungan: Stabilitas maksimum, risiko minimal pemblokiran berdasarkan IP, pengaturan yang mudah.
Kekurangan: Jika IP diblokir, Anda harus mengganti proksi secara manual dan membuat ulang sesi bot.
2. Rotasi Berdasarkan Waktu
Kapan digunakan: Bot untuk pengiriman, bot dengan aktivitas sedang (10-50 tindakan per jam), pemindaian data dengan frekuensi rendah.
Logika: IP berubah setiap 5-15 menit berdasarkan timer, terlepas dari jumlah permintaan. Ini meniru pengguna yang terhubung kembali ke internet (misalnya, internet seluler dengan IP dinamis).
Interval yang direkomendasikan:
- Aktivitas rendah (5-10 tindakan/jam): rotasi setiap 10-15 menit
- Aktivitas sedang (20-40 tindakan/jam): rotasi setiap 5-7 menit
- Aktivitas tinggi (50+ tindakan/jam): rotasi setiap 2-3 menit + rotasi tambahan saat batasan laju
# JavaScript (discord.js) - rotasi berdasarkan waktu
const { Client, GatewayIntentBits } = require('discord.js');
const HttpsProxyAgent = require('https-proxy-agent');
const proxies = [
'http://user1:pass1@ip1:port',
'http://user2:pass2@ip2:port',
'http://user3:pass3@ip3:port',
];
let currentProxyIndex = 0;
function getProxyAgent() {
const proxy = proxies[currentProxyIndex];
currentProxyIndex = (currentProxyIndex + 1) % proxies.length;
return new HttpsProxyAgent(proxy);
}
const client = new Client({
intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages],
rest: { agent: getProxyAgent() }
});
// Rotasi setiap 5 menit
setInterval(() => {
console.log('Mengganti proksi...');
client.rest.setAgent(getProxyAgent());
}, 5 * 60 * 1000);
client.login('YOUR_BOT_TOKEN');
3. Rotasi Berdasarkan Jumlah Permintaan
Kapan digunakan: Pemindaian massal, pengambilan anggota server, undangan otomatis.
Logika: IP berubah setelah N permintaan dilakukan (misalnya, setiap 20-50 permintaan). Ini memungkinkan distribusi beban yang merata dan tidak melampaui batasan yang tidak terlihat dari Discord pada jumlah tindakan dari satu IP.
Nilai N yang direkomendasikan:
- Pemindaian anggota: 30-50 permintaan per IP (untuk menghindari deteksi pola pemindaian)
- Pengiriman DM: 10-15 pesan per IP (Discord sangat ketat terhadap DM massal)
- Pembuatan undangan: 20-30 undangan per IP
4. Rotasi Adaptif (Saat Terjadi Kesalahan)
Kapan digunakan: Bot yang sangat penting, bekerja dengan akun bernilai tinggi, menghindari pemblokiran ketat.
Logika: IP berubah secara otomatis saat menerima kesalahan 429 (batas laju), 403 (dilarang), atau timeout. Sistem mengingat IP "buruk" dan sementara mengecualikannya dari rotasi.
# Python - rotasi adaptif dengan daftar hitam
import time
from collections import defaultdict
class AdaptiveProxyRotator:
def __init__(self, proxies):
self.proxies = proxies
self.current = 0
self.error_count = defaultdict(int)
self.blacklist_until = {} # {proxy: timestamp}
def get_proxy(self):
now = time.time()
# Memfilter proksi dalam daftar hitam
available = [
p for p in self.proxies
if p not in self.blacklist_until or self.blacklist_until[p] < now
]
if not available:
# Jika semua dalam daftar hitam, reset dan tunggu
print("Semua proksi dalam daftar hitam, menunggu 60 detik...")
time.sleep(60)
self.blacklist_until.clear()
available = self.proxies
proxy = available[self.current % len(available)]
self.current += 1
return proxy
def report_error(self, proxy, error_type):
self.error_count[proxy] += 1
# Pemblokiran sementara saat kesalahan berulang
if self.error_count[proxy] >= 3:
blacklist_duration = 300 # 5 menit
self.blacklist_until[proxy] = time.time() + blacklist_duration
print(f"Proksi {proxy} dalam daftar hitam selama {blacklist_duration} detik")
self.error_count[proxy] = 0 # Reset penghitung
def report_success(self, proxy):
# Permintaan yang berhasil - reset penghitung kesalahan
if proxy in self.error_count:
self.error_count[proxy] = max(0, self.error_count[proxy] - 1)
Pendekatan Gabungan (direkomendasikan): Gunakan rotasi dasar berdasarkan waktu (setiap 5-10 menit) + rotasi adaptif saat terjadi kesalahan. Ini memberikan stabilitas dan respons cepat terhadap masalah.
Pengaturan Proksi di Perpustakaan Populer: discord.py dan discord.js
Mari kita lihat pengaturan proksi langkah demi langkah di dua perpustakaan paling populer untuk membuat bot Discord. Contoh-contoh ini cocok untuk sebagian besar tugas dan mudah disesuaikan dengan kebutuhan Anda.
Discord.py (Python)
Discord.py menggunakan aiohttp untuk permintaan HTTP. Proksi diatur melalui parameter proxy saat membuat klien atau melalui pengaturan sesi HTTP langsung.
Langkah 1: Instalasi Dependensi
pip install discord.py aiohttp aiohttp-socks
# aiohttp-socks diperlukan untuk proksi SOCKS5, untuk HTTP/HTTPS tidak wajib
Langkah 2: Pengaturan Dasar dengan Satu Proksi
import discord
from discord.ext import commands
# Format proksi: protocol://username:password@ip:port
PROXY = 'http://user:pass@192.168.1.100:8080'
intents = discord.Intents.default()
intents.message_content = True # Untuk membaca pesan
bot = commands.Bot(
command_prefix='!',
intents=intents,
proxy=PROXY # Proksi untuk semua permintaan HTTP
)
@bot.event
async def on_ready():
print(f'Bot {bot.user} terhubung melalui proksi!')
@bot.command()
async def ping(ctx):
await ctx.send(f'Pong! Latensi: {round(bot.latency * 1000)}ms')
bot.run('YOUR_BOT_TOKEN')
Langkah 3: Pengaturan dengan Rotasi Proksi
import discord
from discord.ext import commands, tasks
import aiohttp
import random
PROXIES = [
'http://user1:pass1@ip1:port',
'http://user2:pass2@ip2:port',
'http://user3:pass3@ip3:port',
]
class ProxyBot(commands.Bot):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.current_proxy = random.choice(PROXIES)
self.proxy_rotation.start()
@tasks.loop(minutes=5) # Rotasi setiap 5 menit
async def proxy_rotation(self):
old_proxy = self.current_proxy
self.current_proxy = random.choice([p for p in PROXIES if p != old_proxy])
# Membuat ulang sesi HTTP dengan proksi baru
await self.http.close()
connector = aiohttp.TCPConnector(limit=0)
self.http.connector = connector
self.http.__session = aiohttp.ClientSession(connector=connector)
print(f'Proksi diubah: {old_proxy} -> {self.current_proxy}')
async def close(self):
self.proxy_rotation.cancel()
await super().close()
intents = discord.Intents.default()
bot = ProxyBot(command_prefix='!', intents=intents)
bot.run('YOUR_BOT_TOKEN')
Discord.js (Node.js)
Discord.js tidak memiliki dukungan proksi bawaan, jadi digunakan pustaka https-proxy-agent atau socks-proxy-agent.
Langkah 1: Instalasi Dependensi
npm install discord.js https-proxy-agent
# Untuk SOCKS5: npm install socks-proxy-agent
Langkah 2: Pengaturan Dasar
const { Client, GatewayIntentBits } = require('discord.js');
const { HttpsProxyAgent } = require('https-proxy-agent');
const PROXY = 'http://user:pass@192.168.1.100:8080';
const agent = new HttpsProxyAgent(PROXY);
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent
],
rest: { agent: agent } // Proksi untuk permintaan REST API
});
client.on('ready', () => {
console.log(`Bot ${client.user.tag} terhubung melalui proksi!`);
});
client.on('messageCreate', async (message) => {
if (message.content === '!ping') {
await message.reply(`Pong! Latensi WebSocket: ${client.ws.ping}ms`);
}
});
client.login('YOUR_BOT_TOKEN');
Langkah 3: Rotasi Proksi
const { Client, GatewayIntentBits } = require('discord.js');
const { HttpsProxyAgent } = require('https-proxy-agent');
const PROXIES = [
'http://user1:pass1@ip1:port',
'http://user2:pass2@ip2:port',
'http://user3:pass3@ip3:port',
];
let currentProxyIndex = 0;
function getNextProxy() {
const proxy = PROXIES[currentProxyIndex];
currentProxyIndex = (currentProxyIndex + 1) % PROXIES.length;
return new HttpsProxyAgent(proxy);
}
const client = new Client({
intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages],
rest: { agent: getNextProxy() }
});
// Rotasi setiap 10 menit
setInterval(() => {
const newAgent = getNextProxy();
client.rest.setAgent(newAgent);
console.log('Proksi diubah');
}, 10 * 60 * 1000);
client.on('ready', () => {
console.log(`Bot ${client.user.tag} dijalankan`);
});
client.login('YOUR_BOT_TOKEN');
Penting: Koneksi WebSocket (untuk menerima peristiwa secara real-time) tidak selalu mendukung proksi. Jika Anda mengalami masalah dengan koneksi melalui WebSocket, gunakan hanya proksi HTTP untuk permintaan REST API, dan biarkan WebSocket tanpa proksi. Untuk kasus kritis, pertimbangkan menggunakan VPN sebagai pengganti proksi untuk koneksi WebSocket.
Kesalahan Umum dan Cara Menghindarinya
Bahkan dengan proksi yang diatur dengan benar, Anda dapat mendapatkan pemblokiran jika melakukan kesalahan umum. Mari kita bahas kesalahan paling kritis dan cara penyelesaiannya.
Kesalahan 1: Menggunakan Satu Proksi untuk Semua Bot
Masalah: Anda menjalankan 5-10 bot melalui satu alamat IP. Discord melihat aktivitas simultan beberapa akun dari satu IP dan memblokir semua akun + IP itu sendiri.
Solusi: Aturan "satu bot — satu IP unik" untuk operasi yang stabil. Jika Anda memiliki 10 bot, gunakan setidaknya 10 proksi yang berbeda. Untuk proyek kritis, tambahkan cadangan 50-100% (15-20 proksi untuk 10 bot) untuk rotasi.
Kesalahan 2: Rotasi IP Terlalu Cepat
Masalah: Anda mengganti IP setiap 30-60 detik, berpikir bahwa ini akan melindungi dari pemblokiran. Sebenarnya, Discord menganggap pergantian IP yang sering sebagai aktivitas mencurigakan — pengguna biasa tidak terhubung kembali ke internet setiap menit.
Solusi: Interval rotasi minimum — 3-5 menit. Optimal — 5-15 menit tergantung pada intensitas permintaan. Pengecualian — rotasi adaptif saat menerima batasan laju (429).
Kesalahan 3: Mengabaikan Geolokasi Proksi
Masalah: Bot Anda "tinggal" di server di AS, tetapi menggunakan proksi dari Rusia, Cina, atau India. Discord melihat ketidaksesuaian antara lokasi server yang dinyatakan dan alamat IP, yang meningkatkan kecurigaan.
Solusi: Gunakan proksi dari negara/wilayah yang sama dengan server Discord Anda atau audiens target. Untuk proyek internasional, pilih proksi dari AS atau Eropa — mereka memiliki reputasi yang lebih baik di Discord.
Kesalahan 4: Tidak Menangani Kesalahan
Masalah: Bot menerima HTTP 429 (batas laju) dan terus mengirim permintaan, memperburuk situasi. Discord meningkatkan waktu pemblokiran dengan setiap percobaan.
Solusi: Selalu tangani kode kesalahan:
- 429 (Terlalu Banyak Permintaan): Baca header Retry-After dan tunggu waktu yang ditentukan + 1-3 detik. Ganti proksi.
- 403 (Dilarang): IP atau token diblokir. Ganti proksi, periksa kevalidan token.
- 401 (Tidak Terautentikasi): Token bot tidak valid. Periksa token di Discord Developer Portal.
- 502/504 (Kesalahan Gateway): Masalah dengan proksi atau API Discord. Tunggu 10-30 detik, ganti proksi.
Kesalahan 5: Menggunakan Proksi Publik atau Murah
Masalah: Proksi gratis atau murah ($0.5-1 per IP) sering kali sudah diblokir oleh Discord, karena telah digunakan oleh ribuan bot dan spammer lainnya.
Solusi: Investasikan dalam proksi residensial berkualitas dari penyedia yang terpercaya. Periksa reputasi IP sebelum digunakan (layanan seperti AbuseIPDB, IPQualityScore). Satu proksi berkualitas seharga $5-10 lebih baik daripada 10 yang diblokir seharga $1.
Kesalahan 6: User-Agent yang Sama untuk Semua Bot
Masalah: Semua bot Anda menggunakan User-Agent standar dari perpustakaan (misalnya, "DiscordBot (discord.py 2.0)"). Discord dengan mudah mengelompokkan koneksi semacam itu dan menghitung otomatisasi massal.
Solusi: Variasikan User-Agent antara bot. Gunakan nilai yang realistis:
# Python - User-Agent kustom
import discord
class CustomBot(discord.Client):
async def request(self, *args, **kwargs):
# Mengganti User-Agent
if 'headers' not in kwargs:
kwargs['headers'] = {}
kwargs['headers']['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Discord/1.0.9015'
return await super().request(*args, **kwargs)
Pemantauan Kinerja Bot dan Penanganan Kesalahan
Pemantauan yang tepat memungkinkan Anda mendeteksi masalah sebelum menyebabkan pemblokiran massal. Mari kita bahas metrik kunci dan alat untuk melacak kinerja bot Discord melalui proksi.
Metrik untuk Dilacak
| Metrik | Apa yang Dilacak | Nilai Kritis |
|---|---|---|
| Frekuensi Kesalahan 429 | Jumlah kesalahan batasan laju per jam | >10 per jam — tinjau strategi permintaan |
| Frekuensi Kesalahan 403 | Pemblokiran IP atau token | >3 per hari — proksi terkompromi |
| Latensi | Waktu respons proksi + API Discord | >1000ms — proksi lambat, ganti |
| Tingkat Keberhasilan Permintaan | Persentase permintaan yang berhasil (HTTP 200-299) | <85% — masalah dengan proksi atau logika bot |
| Waktu Kerja Proksi | Seberapa lama proksi digunakan tanpa masalah | <24 jam — mungkin IP telah diblokir |
Contoh Sistem Logging
# Python - logging canggih dengan metrik
import logging
import time
from collections import defaultdict
import json
class BotMonitor:
def __init__(self):
self.metrics = {
'requests_total': 0,
'requests_success': 0,
'errors_429': 0,
'errors_403': 0,
'errors_other': 0,
'proxy_switches': 0,
'avg_latency': []
}
self.proxy_stats = defaultdict(lambda: {
'requests': 0,
'errors': 0,
'last_error': None
})
# Pengaturan logger
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('bot_monitor.log'),
logging.StreamHandler()
]
)
self.logger = logging.getLogger('BotMonitor')
def log_request(self, proxy, status_code, latency):
self.metrics['requests_total'] += 1
self.metrics['avg_latency'].append(latency)
self.proxy_stats[proxy]['requests'] += 1
if 200 <= status_code < 300:
self.metrics['requests_success'] += 1
elif status_code == 429:
self.metrics['errors_429'] += 1
self.proxy_stats[proxy]['errors'] += 1
self.logger.warning(f'Batas laju pada proksi {proxy}')
elif status_code == 403:
self.metrics['errors_403'] += 1
self.proxy_stats[proxy]['errors'] += 1
self.proxy_stats[proxy]['last_error'] = time.time()
self.logger.error(f'Proksi {proxy} diblokir (403)')
else:
self.metrics['errors_other'] += 1
self.logger.error(f'Kesalahan {status_code} pada proksi {proxy}')
def log_proxy_switch(self, old_proxy, new_proxy):
self.metrics['proxy_switches'] += 1
self.logger.info(f'Mengganti proksi: {old_proxy} -> {new_proxy}')
def get_report(self):
total = self.metrics['requests_total']
if total == 0:
return "Tidak ada data"
success_rate = (self.metrics['requests_success'] / total) * 100
avg_latency = sum(self.metrics['avg_latency']) / len(self.metrics['avg_latency'])
report = f"""
=== LAPORAN PEMANTAUAN BOT ===
Total permintaan: {total}
Berhasil: {self.metrics['requests_success']} ({success_rate:.1f}%)
Kesalahan 429 (batas laju): {self.metrics['errors_429']}
Kesalahan 403 (pemblokiran): {self.metrics['errors_403']}
Kesalahan lainnya: {self.metrics['errors_other']}
Rata-rata latensi: {avg_latency:.0f}ms
Penggantian proksi: {self.metrics['proxy_switches']}
=== STATISTIK PROKSI ===
"""
for proxy, stats in self.proxy_stats.items():
error_rate = (stats['errors'] / stats['requests'] * 100) if stats['requests'] > 0 else 0
report += f"{proxy}: {stats['requests']} permintaan, {stats['errors']} kesalahan ({error_rate:.1f}%)\n"
return report
Dengan mengikuti panduan ini dan menghindari kesalahan umum, Anda dapat menjalankan bot Discord dengan lebih efektif dan mengurangi risiko pemblokiran. Selamat mencoba!