Discord combatte attivamente l'automazione e i bot, utilizzando sistemi di rilevamento avanzati: analisi degli indirizzi IP, modelli di comportamento e limiti di frequenza. Se stai avviando bot per moderazione, invii o automazione di azioni sui server, senza proxy configurati correttamente ti troverai ad affrontare blocchi già nelle prime ore di attività. In questa guida esamineremo quali proxy sono adatti per Discord, come configurare la rotazione IP e come bypassare i meccanismi di protezione della piattaforma.
Perché Discord blocca i bot e come funziona la protezione
Discord utilizza un sistema di protezione multilivello contro l'automazione, che analizza più parametri contemporaneamente. La piattaforma non controlla semplicemente il numero di richieste da un singolo IP: costruisce un profilo di comportamento per ogni connessione e lo confronta con i modelli degli utenti normali.
I principali meccanismi di rilevamento dei bot in Discord:
- Limiti di frequenza — Discord impone severe restrizioni sul numero di azioni in un dato intervallo di tempo. Ad esempio, non più di 5 messaggi in 5 secondi da un singolo account, non più di 50 richieste all'API al minuto. Superare i limiti porta a un blocco temporaneo (HTTP 429).
- Analisi degli indirizzi IP — se da un singolo IP operano più bot o si osserva un'attività sospetta (cambi rapidi di account, azioni di massa), Discord può bloccare l'intero indirizzo IP per diverse ore o giorni.
- Fingerprinting delle connessioni — la piattaforma analizza i parametri tecnici: User-Agent, intestazioni delle richieste, versione della libreria, tempo di risposta. Se i parametri non corrispondono a quelli di un normale client Discord, l'account viene contrassegnato come sospetto.
- Analisi comportamentale — Discord monitora i modelli di azione: reazioni troppo rapide, intervalli ideali tra i messaggi, assenza di casualità nelle azioni. I bot che operano secondo un algoritmo rigido vengono identificati più rapidamente.
Scenari tipici di blocco senza proxy:
- Avvio di 3-5 bot da un singolo IP domestico — blocco dell'IP per 2-6 ore dopo l'inizio dell'attività
- Invio massiccio di inviti al server — ban dell'account e dell'IP già dopo 10-15 inviti inviati
- Moderazione automatica (rimozione di messaggi, assegnazione di ruoli) — blocco al superamento di 100 azioni all'ora da un singolo IP
- Parsing dei membri dei server — rilevamento e ban dopo la scansione di 200-300 profili
I proxy risolvono questi problemi, distribuendo le richieste tra diversi indirizzi IP e creando l'apparenza di utenti normali provenienti da diverse località. Ma è importante scegliere correttamente il tipo di proxy e configurare la rotazione: una configurazione errata può portare a ban ancora più rapidi.
Quali tipi di proxy sono adatti per i bot Discord
La scelta del tipo di proxy dipende dalle tue esigenze: numero di bot, frequenza delle richieste, budget e livello di anonimato richiesto. Esaminiamo tre tipi principali di proxy e il loro utilizzo per Discord.
| Tipo di proxy | Vantaggi | Svantaggi | Adatto per |
|---|---|---|---|
| Proxy di data center | Alta velocità (ping 10-50 ms), basso costo ($1-3 per IP/mese), stabilità | Discord riconosce facilmente gli IP dei data center, alto rischio di blocco durante azioni di massa | Test, automazione leggera (1-2 bot), attività senza richieste di massa |
| Proxy residenziali | IP reali di utenti domestici, rischio minimo di blocco, grande pool di indirizzi (milioni di IP) | Velocità media (ping 100-300 ms), costo più elevato ($5-15 per GB di traffico), instabilità di alcuni IP | Invii massicci, parsing dei server, lavoro con 5+ bot, progetti a lungo termine |
| Proxy mobili | IP di operatori mobili (4G/5G), massimo affidamento da parte di Discord, cambio dinamico di IP | Costo elevato ($50-150 per IP/mese), pool di indirizzi più ridotto, possibili interruzioni di connessione | Account critici, bypass di blocchi severi, lavoro con account di alto valore |
Raccomandazioni per la scelta per diverse attività:
Moderazione e gestione del server (1-3 bot): Proxy residenziali con IP fissi. Un bot = un IP, senza rotazione. Questo crea un profilo di connessione stabile, che Discord percepisce come un normale utente amministratore.
Invii massicci e inviti (10+ bot): Proxy residenziali con rotazione ogni 5-10 minuti. Distribuisci il carico: non più di 20 azioni all'ora da un singolo IP. Utilizza un pool di 50+ indirizzi IP per 10 bot.
Parsing di membri e server: Proxy residenziali con rotazione rapida (ogni 1-3 minuti) o proxy mobili. Il parsing è una delle attività più rischiose, Discord calcola facilmente i modelli di scansione. Utilizza ritardi casuali tra le richieste (30-120 secondi).
Test e sviluppo: I proxy di data center sono sufficienti per il debug delle funzionalità. Ma prima di passare alla produzione, assicurati di passare ai proxy residenziali: il comportamento di Discord può variare notevolmente per diversi tipi di IP.
Un punto importante: Discord è particolarmente severo nei confronti degli indirizzi IP provenienti da determinati paesi e regioni. Gli IP dalla Russia, Cina, Vietnam, India sono soggetti a controlli più severi a causa dell'alta attività degli spammer. Se il tuo pubblico di riferimento si trova negli Stati Uniti o in Europa, utilizza proxy da queste regioni: questo ridurrà la probabilità di blocchi del 40-60%.
Come bypassare i limiti di frequenza di Discord tramite proxy
I limiti di frequenza in Discord sono restrizioni sul numero di richieste all'API in un dato intervallo di tempo. Ci sono due tipi: globali (per l'intera applicazione) e per percorso (per endpoint specifici). I proxy aiutano a distribuire il carico tra diversi IP, ma ciò non significa che si possano ignorare i limiti: Discord monitora l'attività a livello di token del bot.
Principali limiti di frequenza dell'API di Discord:
- Invio di messaggi: 5 messaggi in 5 secondi in un canale, 50 messaggi in 10 secondi globalmente per il bot
- Creazione/rimozione di canali: 50 richieste in 10 minuti
- Modifica dei ruoli dei membri: 10 richieste in 10 secondi
- Ottenimento dell'elenco dei membri: 1 richiesta al secondo (il limite più severo)
- Invio di DM (messaggi diretti): 5 DM in 5 secondi, blocco per invii massicci a utenti sconosciuti
Quando superi il limite, Discord restituisce HTTP 429 (Troppe richieste) con l'intestazione Retry-After, che indica il tempo di attesa in secondi. La corretta gestione di questa risposta è fondamentale.
Strategia per bypassare i limiti di frequenza con i proxy:
# Esempio in Python (discord.py) con rotazione dei proxy in caso di limite di frequenza
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):
# Saltiamo i proxy non funzionanti
available = [p for p in self.proxies if p not in self.failed_proxies]
if not available:
self.failed_proxies.clear() # Reset dopo un ciclo completo
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)
# Inizializzazione
proxy_rotator = ProxyRotator([
'http://user1:pass1@192.168.1.1:8080',
'http://user2:pass2@192.168.1.2:8080',
# ... aggiungi 10-20 proxy per un funzionamento stabile
])
intents = discord.Intents.default()
bot = commands.Bot(command_prefix='!', intents=intents)
async def send_with_retry(channel, message, max_retries=3):
"""Invio di un messaggio con gestione automatica dei limiti di frequenza"""
for attempt in range(max_retries):
try:
# Otteniamo un nuovo proxy ad ogni tentativo
proxy = proxy_rotator.get_next_proxy()
# Discord.py utilizza aiohttp internamente, configuriamo il proxy
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: # Limite di frequenza
retry_after = e.retry_after if hasattr(e, 'retry_after') else 5
print(f"Limite di frequenza! Aspettiamo {retry_after} sec, cambio proxy...")
# Contrassegniamo il proxy come temporaneamente non disponibile
proxy_rotator.mark_failed(proxy)
# Aggiungiamo casualità al ritardo
await asyncio.sleep(retry_after + random.uniform(1, 3))
else:
print(f"Errore di invio: {e}")
await asyncio.sleep(2)
return False
@bot.event
async def on_ready():
print(f'Bot avviato: {bot.user}')
# Esempio di utilizzo
@bot.command()
async def invio_massivo(ctx):
channels = ctx.guild.text_channels[:5] # Prime 5 canali
for channel in channels:
success = await send_with_retry(channel, "Messaggio di test")
if success:
print(f"Inviato in {channel.name}")
# Ritardo casuale tra i canali
await asyncio.sleep(random.uniform(3, 7))
Principi chiave per bypassare i limiti di frequenza:
- Gestisci sempre l'HTTP 429: Non ignorare l'intestazione Retry-After. Discord aumenta il tempo di blocco in caso di violazioni ripetute (da 5 secondi a 60 e oltre).
- Aggiungi casualità: I ritardi tra le richieste devono essere casuali (ad esempio, 2-5 secondi invece di fissi 3 secondi). Questo imita il comportamento umano.
- Distribuisci il carico: Se hai 10 bot e 20 proxy, assegna a ciascun bot 2 proxy per la rotazione. Non utilizzare un proxy per tutti i bot.
- Monitora la qualità dei proxy: Alcuni IP potrebbero essere già bloccati da Discord. Escludi automaticamente i proxy che ricevono costantemente 403 o 429.
Strategie di rotazione IP per diverse attività
La rotazione dei proxy non è solo un cambio casuale di IP ogni N minuti. La strategia corretta dipende dal tipo di attività del bot e dai requisiti di Discord per la stabilità della connessione. Esaminiamo quattro approcci principali.
1. IP fisso (senza rotazione)
Quando utilizzare: Bot di moderazione, bot per la gestione del server, bot musicali, bot con presenza costante nel server.
Logica: Un bot = un indirizzo IP per tutta la durata dell'attività (settimane, mesi). Discord percepisce tale connessione come un normale utente amministratore, che accede sempre da un unico luogo.
Configurazione:
# Python (discord.py) - proxy fisso
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)
# Il proxy sarà utilizzato per tutte le richieste di questo bot
bot.run('YOUR_BOT_TOKEN')
Vantaggi: Massima stabilità, rischio minimo di blocco per IP, configurazione semplice.
Svantaggi: Se l'IP viene bloccato, sarà necessario cambiare manualmente il proxy e ricreare la sessione del bot.
2. Rotazione temporale
Quando utilizzare: Bot per invii, bot con attività moderata (10-50 azioni all'ora), parsing di dati con bassa frequenza.
Logica: L'IP cambia ogni 5-15 minuti in base a un timer, indipendentemente dal numero di richieste. Questo imita un utente che si riconnette a Internet (ad esempio, internet mobile con IP dinamico).
Intervalli raccomandati:
- Bassa attività (5-10 azioni/ora): rotazione ogni 10-15 minuti
- Attività media (20-40 azioni/ora): rotazione ogni 5-7 minuti
- Alta attività (50+ azioni/ora): rotazione ogni 2-3 minuti + rotazione aggiuntiva in caso di limite di frequenza
# JavaScript (discord.js) - rotazione temporale
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() }
});
// Rotazione ogni 5 minuti
setInterval(() => {
console.log('Cambio proxy...');
client.rest.setAgent(getProxyAgent());
}, 5 * 60 * 1000);
client.login('YOUR_BOT_TOKEN');
3. Rotazione in base al numero di richieste
Quando utilizzare: Parsing massivo, scraping dei membri dei server, inviti automatici.
Logica: L'IP cambia dopo N richieste eseguite (ad esempio, ogni 20-50 richieste). Questo consente di distribuire uniformemente il carico e di non superare i limiti invisibili di Discord sul numero di azioni da un singolo IP.
Valori raccomandati per N:
- Parsing dei membri: 30-50 richieste per IP (per evitare di rilevare il modello di scansione)
- Invio di DM: 10-15 messaggi per IP (Discord è particolarmente severo nei confronti dei DM massivi)
- Creazione di inviti: 20-30 inviti per IP
4. Rotazione adattiva (in caso di errori)
Quando utilizzare: Bot critici, lavoro con account di alto valore, bypass di blocchi severi.
Logica: L'IP cambia automaticamente quando si ricevono errori 429 (limite di frequenza), 403 (vietato) o timeout. Il sistema memorizza gli IP "cattivi" e li esclude temporaneamente dalla rotazione.
# Python - rotazione adattiva con blacklist
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()
# Filtriamo i proxy nella blacklist
available = [
p for p in self.proxies
if p not in self.blacklist_until or self.blacklist_until[p] < now
]
if not available:
# Se tutti sono nella blacklist, resettiamo e aspettiamo
print("Tutti i proxy sono nella blacklist, attesa di 60 sec...")
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
# Blocco temporaneo in caso di errori ripetuti
if self.error_count[proxy] >= 3:
blacklist_duration = 300 # 5 minuti
self.blacklist_until[proxy] = time.time() + blacklist_duration
print(f"Proxy {proxy} nella blacklist per {blacklist_duration} sec")
self.error_count[proxy] = 0 # Reset del contatore
def report_success(self, proxy):
# Richiesta riuscita - reset del contatore degli errori
if proxy in self.error_count:
self.error_count[proxy] = max(0, self.error_count[proxy] - 1)
Approccio combinato (raccomandato): Utilizza la rotazione di base temporale (ogni 5-10 minuti) + rotazione adattiva in caso di errori. Questo garantisce stabilità e una rapida reazione ai problemi.
Configurazione dei proxy nelle librerie più popolari: discord.py e discord.js
Esaminiamo la configurazione passo passo dei proxy nelle due librerie più popolari per la creazione di bot Discord. Questi esempi sono adatti per la maggior parte delle attività e possono essere facilmente adattati alle tue esigenze.
Discord.py (Python)
Discord.py utilizza aiohttp per le richieste HTTP. I proxy vengono configurati tramite il parametro proxy durante la creazione del client o tramite la configurazione diretta della sessione HTTP.
Passo 1: Installazione delle dipendenze
pip install discord.py aiohttp aiohttp-socks
# aiohttp-socks è necessario per i proxy SOCKS5, per HTTP/HTTPS non è obbligatorio
Passo 2: Configurazione di base con un proxy
import discord
from discord.ext import commands
# Formato del proxy: protocollo://username:password@ip:port
PROXY = 'http://user:pass@192.168.1.100:8080'
intents = discord.Intents.default()
intents.message_content = True # Per leggere i messaggi
bot = commands.Bot(
command_prefix='!',
intents=intents,
proxy=PROXY # Proxy per tutte le richieste HTTP
)
@bot.event
async def on_ready():
print(f'Bot {bot.user} connesso tramite proxy!')
@bot.command()
async def ping(ctx):
await ctx.send(f'Pong! Ritardo: {round(bot.latency * 1000)}ms')
bot.run('YOUR_BOT_TOKEN')
Passo 3: Configurazione con rotazione dei proxy
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) # Rotazione ogni 5 minuti
async def proxy_rotation(self):
old_proxy = self.current_proxy
self.current_proxy = random.choice([p for p in PROXIES if p != old_proxy])
# Ricreiamo la sessione HTTP con il nuovo proxy
await self.http.close()
connector = aiohttp.TCPConnector(limit=0)
self.http.connector = connector
self.http.__session = aiohttp.ClientSession(connector=connector)
print(f'Proxy cambiato: {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 non ha supporto integrato per i proxy, quindi si utilizza la libreria https-proxy-agent o socks-proxy-agent.
Passo 1: Installazione delle dipendenze
npm install discord.js https-proxy-agent
# Per SOCKS5: npm install socks-proxy-agent
Passo 2: Configurazione di base
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 } // Proxy per le richieste REST API
});
client.on('ready', () => {
console.log(`Bot ${client.user.tag} connesso tramite proxy!`);
});
client.on('messageCreate', async (message) => {
if (message.content === '!ping') {
await message.reply(`Pong! Ritardo WebSocket: ${client.ws.ping}ms`);
}
});
client.login('YOUR_BOT_TOKEN');
Passo 3: Rotazione dei proxy
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() }
});
// Rotazione ogni 10 minuti
setInterval(() => {
const newAgent = getNextProxy();
client.rest.setAgent(newAgent);
console.log('Proxy cambiato');
}, 10 * 60 * 1000);
client.on('ready', () => {
console.log(`Bot ${client.user.tag} avviato`);
});
client.login('YOUR_BOT_TOKEN');
Importante: La connessione WebSocket (per ricevere eventi in tempo reale) non supporta sempre i proxy. Se hai problemi di connessione tramite WebSocket, utilizza solo proxy HTTP per le richieste REST API, mentre lascia il WebSocket senza proxy. Per casi critici, considera l'uso di una VPN invece dei proxy per la connessione WebSocket.
Errori comuni e come evitarli
Anche con proxy configurati correttamente, è possibile subire un ban se si commettono errori comuni. Esaminiamo i più critici e i modi per risolverli.
Errore 1: Utilizzo di un solo proxy per tutti i bot
Problema: Stai avviando 5-10 bot tramite un singolo indirizzo IP. Discord vede l'attività simultanea di più account da un singolo IP e blocca tutti gli account + l'IP stesso.
Soluzione: Regola "un bot = un IP unico" per un funzionamento stabile. Se hai 10 bot, utilizza almeno 10 proxy diversi. Per progetti critici, aggiungi un 50-100% di riserva (15-20 proxy per 10 bot) per la rotazione.
Errore 2: Rotazione IP troppo rapida
Problema: Cambi IP ogni 30-60 secondi, pensando che questo proteggerà dai blocchi. In realtà, Discord percepisce il cambio frequente di IP come un'attività sospetta: un utente normale non si riconnette a Internet ogni minuto.
Soluzione: Intervallo minimo di rotazione — 3-5 minuti. Ottimale — 5-15 minuti a seconda dell'intensità delle richieste. Eccezione — rotazione adattiva in caso di ricezione di limite di frequenza (429).
Errore 3: Ignorare la geolocalizzazione dei proxy
Problema: Il tuo bot "vive" su un server negli Stati Uniti, ma utilizza proxy dalla Russia, Cina o India. Discord vede la discrepanza tra la posizione dichiarata del server e l'indirizzo IP, aumentando la sospettosità.
Soluzione: Utilizza proxy dello stesso paese/regione in cui si trova il tuo server Discord o il tuo pubblico di riferimento. Per progetti internazionali, scegli proxy dagli Stati Uniti o dall'Europa: hanno una reputazione migliore presso Discord.
Errore 4: Assenza di gestione degli errori
Problema: Il bot riceve HTTP 429 (limite di frequenza) e continua a inviare richieste, aggravando la situazione. Discord aumenta il tempo di blocco ad ogni tentativo.
Soluzione: Gestisci sempre i codici di errore:
- 429 (Troppe richieste): Leggi l'intestazione Retry-After e aspetta il tempo indicato + 1-3 secondi. Cambia proxy.
- 403 (Vietato): IP o token bloccato. Cambia proxy, verifica la validità del token.
- 401 (Non autorizzato): Token del bot non valido. Controlla il token nel Discord Developer Portal.
- 502/504 (Errori di gateway): Problemi con il proxy o l'API di Discord. Aspetta 10-30 secondi, cambia proxy.
Errore 5: Utilizzo di proxy pubblici o economici
Problema: Proxy gratuiti o economici ($0.5-1 per IP) sono spesso già bloccati da Discord, poiché sono stati utilizzati da migliaia di altri bot e spammer.
Soluzione: Investi in proxy residenziali di qualità da fornitori affidabili. Controlla la reputazione degli IP prima di utilizzarli (servizi come AbuseIPDB, IPQualityScore). Un proxy di qualità a $5-10 è meglio di 10 bloccati a $1.
Errore 6: Stesso User-Agent per tutti i bot
Problema: Tutti i tuoi bot utilizzano lo standard User-Agent della libreria (ad esempio, "DiscordBot (discord.py 2.0)"). Discord raggruppa facilmente tali connessioni e rileva l'automazione di massa.
Soluzione: Varia l'User-Agent tra i bot. Utilizza valori realistici:
# Python - User-Agent personalizzato
import discord
class CustomBot(discord.Client):
async def request(self, *args, **kwargs):
# Sovrascriviamo l'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)
Monitoraggio del funzionamento dei bot e gestione degli errori
Un monitoraggio corretto consente di rilevare problemi prima che portino a blocchi di massa. Esaminiamo le metriche chiave e gli strumenti per monitorare il funzionamento dei bot Discord tramite proxy.
Metriche da monitorare
| Metrica | Cosa monitorare | Valori critici |
|---|---|---|
| Frequenza degli errori 429 | Numero di errori di limite di frequenza all'ora | >10 all'ora — rivedi la strategia delle richieste |
| Frequenza degli errori 403 | Blocco di IP o token | >3 al giorno — proxy compromesso |
| Ritardo (latency) | Tempo di risposta del proxy + API di Discord | >1000ms — proxy lento, sostituisci |
| Successo delle richieste | Percentuale di richieste riuscite (HTTP 200-299) | <85% — problemi con il proxy o logica del bot |
| Tempo di utilizzo del proxy | Quanto a lungo il proxy è stato utilizzato senza problemi | <24 ore — potrebbe essere che l'IP sia stato bloccato |
Esempio di sistema di logging
# Python - logging avanzato con metriche
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
})
# Configurazione del 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'Limite di frequenza sul proxy {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'Proxy {proxy} bloccato (403)')
else:
self.metrics['errors_other'] += 1
self.logger.error(f'Errore {status_code} sul proxy {proxy}')
def log_proxy_switch(self, old_proxy, new_proxy):
self.metrics['proxy_switches'] += 1
self.logger.info(f'Cambiamento proxy: {old_proxy} -> {new_proxy}')
def get_report(self):
total = self.metrics['requests_total']
if total == 0:
return "Nessun dato"
success_rate = (self.metrics['requests_success'] / total) * 100
avg_latency = sum(self.metrics['avg_latency']) / len(self.metrics['avg_latency'])
report = f"""
=== REPORT DI MONITORAGGIO DEL BOT ===
Richieste totali: {total}
Riuscite: {self.metrics['requests_success']} ({success_rate:.1f}%)
Errori 429 (limite di frequenza): {self.metrics['errors_429']}
Errori 403 (blocco): {self.metrics['errors_403']}
Altri errori: {self.metrics['errors_other']}
Ritardo medio: {avg_latency:.0f}ms
Cambi di proxy: {self.metrics['proxy_switches']}
=== STATISTICHE PER PROXY ===
"""
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']} richieste, {stats['errors']} errori ({error_rate:.1f}%)\n"
return report
Questo è un esempio di come monitorare e gestire il funzionamento dei bot Discord utilizzando proxy. Assicurati di implementare un sistema di logging per rilevare e risolvere rapidamente eventuali problemi.
Conclusione
Utilizzare proxy per bot Discord è fondamentale per evitare blocchi e garantire un funzionamento fluido. Scegliere il tipo giusto di proxy, configurare correttamente la rotazione e monitorare l'attività sono passi essenziali per il successo delle tue automazioni. Seguendo le linee guida e le raccomandazioni fornite in questa guida, sarai in grado di ottimizzare le tue operazioni su Discord e ridurre al minimo i rischi di ban.