O Discord está ativamente combatendo a automação e bots, utilizando sistemas avançados de detecção: análise de endereços IP, padrões de comportamento e limites de taxa. Se você está executando bots para moderação, envio de mensagens ou automação de ações em servidores, sem proxies configurados corretamente, você enfrentará bloqueios já nas primeiras horas de operação. Neste guia, vamos discutir quais proxies são adequados para o Discord, como configurar a rotação de IP e contornar os mecanismos de proteção da plataforma.
Por que o Discord bloqueia bots e como funciona a proteção
O Discord utiliza um sistema de proteção em múltiplas camadas contra automação, que analisa vários parâmetros simultaneamente. A plataforma não apenas verifica a quantidade de solicitações de um único IP — ela constrói um perfil de comportamento de cada conexão e o compara com padrões de usuários normais.
Os principais mecanismos de detecção de bots no Discord:
- Limites de Taxa — O Discord estabelece restrições rigorosas sobre a quantidade de ações em um determinado período de tempo. Por exemplo, não mais do que 5 mensagens a cada 5 segundos de uma única conta, não mais do que 50 solicitações à API por minuto. O excesso dos limites resulta em bloqueio temporário (HTTP 429).
- Análise de Endereços IP — se vários bots estão operando de um único IP ou se há atividade suspeita (mudança rápida de contas, ações em massa), o Discord pode bloquear todo o endereço IP por várias horas ou dias.
- Fingerprinting de Conexões — a plataforma analisa parâmetros técnicos: User-Agent, cabeçalhos de solicitações, versão da biblioteca, tempo de resposta. Se os parâmetros não correspondem ao cliente normal do Discord, a conta é marcada como suspeita.
- Análise Comportamental — o Discord monitora padrões de ações: reações muito rápidas, intervalos ideais entre mensagens, ausência de aleatoriedade nas ações. Bots que operam com um algoritmo rígido são identificados mais rapidamente.
Cenários típicos de bloqueio sem proxies:
- Executar 3-5 bots de um único IP doméstico — bloqueio do IP em 2-6 horas após o início da operação
- Envio em massa de convites para o servidor — banimento da conta e do IP após 10-15 convites enviados
- Moderação automática (remoção de mensagens, atribuição de funções) — bloqueio ao exceder 100 ações por hora de um único IP
- Parsing de membros de servidores — detecção e banimento após escanear 200-300 perfis
Proxies resolvem esses problemas, distribuindo solicitações entre diferentes endereços IP e criando a aparência de usuários normais de diferentes locais. Mas é importante escolher o tipo de proxy corretamente e configurar a rotação — uma configuração inadequada pode levar a bans ainda mais rápidos.
Quais tipos de proxies são adequados para bots do Discord
A escolha do tipo de proxy depende das suas tarefas: número de bots, frequência de solicitações, orçamento e nível de anonimato necessário. Vamos considerar três tipos principais de proxies e suas aplicações para o Discord.
| Tipo de Proxy | Vantagens | Desvantagens | Adequado para |
|---|---|---|---|
| Proxies de Data Center | Alta velocidade (ping 10-50 ms), baixo custo ($1-3 por IP/mês), estabilidade | O Discord reconhece facilmente IPs de data centers, alto risco de bloqueio em ações em massa | Testes, automação leve (1-2 bots), tarefas sem solicitações em massa |
| Proxies Residenciais | IPs reais de usuários domésticos, risco mínimo de bloqueio, grande pool de endereços (milhões de IPs) | Velocidade média (ping 100-300 ms), custo mais alto ($5-15 por GB de tráfego), instabilidade de alguns IPs | Envios em massa, parsing de servidores, trabalho com 5+ bots, projetos de longo prazo |
| Proxies Móveis | IPs de operadoras móveis (4G/5G), máxima confiança do Discord, troca dinâmica de IP | Custo elevado ($50-150 por IP/mês), pool de endereços menor, possíveis quedas de conexão | Contas críticas, contorno de bloqueios severos, trabalho com contas de alto valor |
Recomendações para escolha para diferentes tarefas:
Moderação e gerenciamento de servidor (1-3 bots): Proxies residenciais com IPs fixos. Um bot — um IP, sem rotação. Isso cria um perfil de conexão estável que o Discord percebe como um usuário administrador normal.
Envios em massa e convites (10+ bots): Proxies residenciais com rotação a cada 5-10 minutos. Distribua a carga: não mais do que 20 ações por hora de um único IP. Use um pool de 50+ endereços IP para 10 bots.
Parsing de membros e servidores: Proxies residenciais com rotação rápida (a cada 1-3 minutos) ou proxies móveis. O parsing é uma das atividades mais arriscadas, o Discord facilmente detecta padrões de escaneamento. Use atrasos aleatórios entre solicitações (30-120 segundos).
Testes e desenvolvimento: Proxies de data center são suficientes para depurar funcionalidades. Mas antes de lançar em produção, certifique-se de mudar para proxies residenciais — o comportamento do Discord pode variar significativamente para diferentes tipos de IP.
Um ponto importante: o Discord é especialmente rigoroso com endereços IP de certos países e regiões. IPs da Rússia, China, Vietnã e Índia estão sujeitos a verificações mais rigorosas devido à alta atividade de spammers. Se seu público-alvo está nos EUA ou na Europa, use proxies dessas regiões — isso reduzirá a probabilidade de bloqueios em 40-60%.
Como contornar os limites de taxa do Discord através de proxies
Limites de taxa no Discord são restrições sobre a quantidade de solicitações à API em um determinado período de tempo. Eles vêm em dois tipos: globais (para todo o aplicativo) e por rota (para endpoints específicos). Proxies ajudam a distribuir a carga entre diferentes IPs, mas isso não significa que você pode ignorar os limites — o Discord monitora a atividade no nível do token do bot.
Principais limites de taxa da API do Discord:
- Envio de mensagens: 5 mensagens a cada 5 segundos em um canal, 50 mensagens a cada 10 segundos globalmente para o bot
- Criação/remoção de canais: 50 solicitações a cada 10 minutos
- Alteração de funções de membros: 10 solicitações a cada 10 segundos
- Obtenção da lista de membros: 1 solicitação por segundo (o limite mais rigoroso)
- Envio de DM (mensagens diretas): 5 DMs a cada 5 segundos, bloqueio por envios em massa para usuários desconhecidos
Quando você excede o limite, o Discord retorna HTTP 429 (Too Many Requests) com o cabeçalho Retry-After, indicando o tempo de espera em segundos. O tratamento correto dessa resposta é crítico.
Estratégia para contornar limites de taxa com proxies:
# Exemplo em Python (discord.py) com rotação de proxies ao atingir limite de taxa
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):
# Ignorar proxies não funcionais
available = [p for p in self.proxies if p not in self.failed_proxies]
if not available:
self.failed_proxies.clear() # Reset após um 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)
# Inicialização
proxy_rotator = ProxyRotator([
'http://user1:pass1@192.168.1.1:8080',
'http://user2:pass2@192.168.1.2:8080',
# ... adicione 10-20 proxies para operação estável
])
intents = discord.Intents.default()
bot = commands.Bot(command_prefix='!', intents=intents)
async def send_with_retry(channel, message, max_retries=3):
"""Envio de mensagem com tratamento automático de limites de taxa"""
for attempt in range(max_retries):
try:
# Obtenha um novo proxy a cada tentativa
proxy = proxy_rotator.get_next_proxy()
# Discord.py usa aiohttp internamente, configuramos o 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 de taxa
retry_after = e.retry_after if hasattr(e, 'retry_after') else 5
print(f"Limite de taxa! Aguardando {retry_after} seg, mudando proxy...")
# Marque o proxy como temporariamente indisponível
proxy_rotator.mark_failed(proxy)
# Adicione aleatoriedade ao atraso
await asyncio.sleep(retry_after + random.uniform(1, 3))
else:
print(f"Erro ao enviar: {e}")
await asyncio.sleep(2)
return False
@bot.event
async def on_ready():
print(f'Bot iniciado: {bot.user}')
# Exemplo de uso
@bot.command()
async def envio_em_massa(ctx):
channels = ctx.guild.text_channels[:5] # Primeiros 5 canais
for channel in channels:
success = await send_with_retry(channel, "Mensagem de teste")
if success:
print(f"Enviado para {channel.name}")
# Atraso aleatório entre canais
await asyncio.sleep(random.uniform(3, 7))
Princípios-chave para contornar limites de taxa:
- Sempre trate HTTP 429: Não ignore o cabeçalho Retry-After. O Discord aumenta o tempo de bloqueio em caso de violações repetidas (de 5 segundos para 60 ou mais).
- Adicione aleatoriedade: Atrasos entre solicitações devem ser aleatórios (por exemplo, 2-5 segundos em vez de 3 segundos fixos). Isso imita o comportamento humano.
- Distribua a carga: Se você tem 10 bots e 20 proxies, atribua a cada bot 2 proxies para rotação. Não use um único proxy para todos os bots.
- Monitore a qualidade dos proxies: Alguns IPs podem já estar bloqueados pelo Discord. Exclua automaticamente proxies que constantemente recebem 403 ou 429.
Estratégias de rotação de IP para diferentes tarefas
A rotação de proxies não é apenas uma troca aleatória de IP a cada N minutos. A estratégia correta depende do tipo de atividade do bot e dos requisitos do Discord para a estabilidade da conexão. Vamos considerar quatro abordagens principais.
1. IP Fixo (sem rotação)
Quando usar: Bots de moderação, bots de gerenciamento de servidor, bots de música, bots com presença constante no servidor.
Lógica: Um bot = um endereço IP durante todo o período de operação (semanas, meses). O Discord percebe essa conexão como um usuário administrador normal, que sempre se conecta de um único local.
Configuração:
# Python (discord.py) - proxy fixo
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)
# O proxy será usado para todas as solicitações deste bot
bot.run('YOUR_BOT_TOKEN')
Vantagens: Máxima estabilidade, risco mínimo de bloqueio por IP, configuração simples.
Desvantagens: Se o IP for bloqueado, será necessário trocar o proxy manualmente e recriar a sessão do bot.
2. Rotação por Tempo
Quando usar: Bots para envios, bots com atividade moderada (10-50 ações por hora), parsing de dados com baixa frequência.
Lógica: O IP muda a cada 5-15 minutos por um timer, independentemente da quantidade de solicitações. Isso imita um usuário que se reconecta à internet (por exemplo, internet móvel com IP dinâmico).
Intervalos recomendados:
- Baixa atividade (5-10 ações/hora): rotação a cada 10-15 minutos
- Atividade média (20-40 ações/hora): rotação a cada 5-7 minutos
- Alta atividade (50+ ações/hora): rotação a cada 2-3 minutos + rotação adicional ao atingir limite de taxa
# JavaScript (discord.js) - rotação por tempo
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() }
});
// Rotação a cada 5 minutos
setInterval(() => {
console.log('Mudança de proxy...');
client.rest.setAgent(getProxyAgent());
}, 5 * 60 * 1000);
client.login('YOUR_BOT_TOKEN');
3. Rotação por Número de Solicitações
Quando usar: Parsing em massa, scraping de membros de servidores, convites automáticos.
Lógica: O IP muda após N solicitações realizadas (por exemplo, a cada 20-50 solicitações). Isso permite distribuir a carga uniformemente e não exceder os limites invisíveis do Discord sobre a quantidade de ações de um único IP.
Valores recomendados para N:
- Parsing de membros: 30-50 solicitações por IP (para evitar a detecção do padrão de escaneamento)
- Envio de DM: 10-15 mensagens por IP (o Discord é especialmente rigoroso com DMs em massa)
- Criação de convites: 20-30 convites por IP
4. Rotação Adaptativa (em caso de erros)
Quando usar: Bots críticos, trabalho com contas de alto valor, contorno de bloqueios severos.
Lógica: O IP muda automaticamente ao receber erros 429 (limite de taxa), 403 (proibido) ou timeouts. O sistema memoriza IPs "ruins" e os exclui temporariamente da rotação.
# Python - rotação adaptativa com 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()
# Filtrar proxies na 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 todos estão na blacklist, reset e espera
print("Todos os proxies estão na blacklist, aguardando 60 seg...")
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
# Bloqueio temporário em caso de múltiplos erros
if self.error_count[proxy] >= 3:
blacklist_duration = 300 # 5 minutos
self.blacklist_until[proxy] = time.time() + blacklist_duration
print(f"Proxy {proxy} na blacklist por {blacklist_duration} seg")
self.error_count[proxy] = 0 # Reset do contador
def report_success(self, proxy):
# Solicitação bem-sucedida - reset do contador de erros
if proxy in self.error_count:
self.error_count[proxy] = max(0, self.error_count[proxy] - 1)
Abordagem combinada (recomendada): Use a rotação básica por tempo (a cada 5-10 minutos) + rotação adaptativa em caso de erros. Isso garante estabilidade e rápida resposta a problemas.
Configuração de proxies em bibliotecas populares: discord.py e discord.js
Vamos considerar a configuração passo a passo de proxies em duas das bibliotecas mais populares para criar bots do Discord. Esses exemplos são adequados para a maioria das tarefas e podem ser facilmente adaptados às suas necessidades.
Discord.py (Python)
O Discord.py utiliza aiohttp para solicitações HTTP. Proxies são configurados através do parâmetro proxy ao criar o cliente ou através da configuração direta da sessão HTTP.
Passo 1: Instalação de dependências
pip install discord.py aiohttp aiohttp-socks
# aiohttp-socks é necessário para proxies SOCKS5, para HTTP/HTTPS não é obrigatório
Passo 2: Configuração básica com um proxy
import discord
from discord.ext import commands
# Formato do proxy: protocol://username:password@ip:port
PROXY = 'http://user:pass@192.168.1.100:8080'
intents = discord.Intents.default()
intents.message_content = True # Para leitura de mensagens
bot = commands.Bot(
command_prefix='!',
intents=intents,
proxy=PROXY # Proxy para todas as solicitações HTTP
)
@bot.event
async def on_ready():
print(f'Bot {bot.user} conectado através do proxy!')
@bot.command()
async def ping(ctx):
await ctx.send(f'Pong! Latência: {round(bot.latency * 1000)}ms')
bot.run('YOUR_BOT_TOKEN')
Passo 3: Configuração com rotação de proxies
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) # Rotação a cada 5 minutos
async def proxy_rotation(self):
old_proxy = self.current_proxy
self.current_proxy = random.choice([p for p in PROXIES if p != old_proxy])
# Recria a sessão HTTP com o novo proxy
await self.http.close()
connector = aiohttp.TCPConnector(limit=0)
self.http.connector = connector
self.http.__session = aiohttp.ClientSession(connector=connector)
print(f'Proxy alterado: {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)
O Discord.js não tem suporte embutido para proxies, então usamos a biblioteca https-proxy-agent ou socks-proxy-agent.
Passo 1: Instalação de dependências
npm install discord.js https-proxy-agent
# Para SOCKS5: npm install socks-proxy-agent
Passo 2: Configuração básica
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 para solicitações da API REST
});
client.on('ready', () => {
console.log(`Bot ${client.user.tag} conectado através do proxy!`);
});
client.on('messageCreate', async (message) => {
if (message.content === '!ping') {
await message.reply(`Pong! Latência do WebSocket: ${client.ws.ping}ms`);
}
});
client.login('YOUR_BOT_TOKEN');
Passo 3: Rotação de proxies
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() }
});
// Rotação a cada 10 minutos
setInterval(() => {
const newAgent = getNextProxy();
client.rest.setAgent(newAgent);
console.log('Proxy alterado');
}, 10 * 60 * 1000);
client.on('ready', () => {
console.log(`Bot ${client.user.tag} iniciado`);
});
client.login('YOUR_BOT_TOKEN');
Importante: A conexão WebSocket (para receber eventos em tempo real) nem sempre suporta proxies. Se você tiver problemas de conexão através do WebSocket, use apenas proxies HTTP para solicitações da API REST, e mantenha o WebSocket sem proxy. Para casos críticos, considere usar VPN em vez de proxies para a conexão WebSocket.
Erros comuns e como evitá-los
Mesmo com proxies configurados corretamente, você pode ser banido se cometer erros comuns. Vamos discutir os mais críticos e como resolvê-los.
Erro 1: Uso de um único proxy para todos os bots
Problema: Você está executando 5-10 bots através de um único endereço IP. O Discord vê a atividade simultânea de várias contas de um único IP e bloqueia todas as contas + o próprio IP.
Solução: A regra "um bot — um IP único" para operação estável. Se você tem 10 bots, use pelo menos 10 proxies diferentes. Para projetos críticos, adicione 50-100% de reserva (15-20 proxies para 10 bots) para rotação.
Erro 2: Rotação de IP muito rápida
Problema: Você muda o IP a cada 30-60 segundos, pensando que isso protegerá contra bloqueios. Na verdade, o Discord percebe a troca frequente de IP como atividade suspeita — um usuário normal não se reconecta à internet a cada minuto.
Solução: O intervalo mínimo de rotação deve ser de 3-5 minutos. O ideal é de 5-15 minutos, dependendo da intensidade das solicitações. A exceção é a rotação adaptativa ao receber limite de taxa (429).
Erro 3: Ignorar a geolocalização dos proxies
Problema: Seu bot "vive" em um servidor nos EUA, mas usa proxies da Rússia, China ou Índia. O Discord vê a discrepância entre a localização declarada do servidor e o endereço IP, aumentando a suspeita.
Solução: Use proxies do mesmo país/região onde está seu servidor Discord ou seu público-alvo. Para projetos internacionais, escolha proxies dos EUA ou Europa — eles têm melhor reputação no Discord.
Erro 4: Falta de tratamento de erros
Problema: O bot recebe HTTP 429 (limite de taxa) e continua enviando solicitações, agravando a situação. O Discord aumenta o tempo de bloqueio a cada tentativa.
Solução: Sempre trate os códigos de erro:
- 429 (Too Many Requests): Leia o cabeçalho Retry-After e aguarde o tempo indicado + 1-3 segundos. Mude o proxy.
- 403 (Forbidden): IP ou token bloqueado. Mude o proxy, verifique a validade do token.
- 401 (Unauthorized): Token do bot inválido. Verifique o token no Discord Developer Portal.
- 502/504 (Gateway errors): Problemas com o proxy ou API do Discord. Aguarde 10-30 segundos, mude o proxy.
Erro 5: Uso de proxies públicos ou baratos
Problema: Proxies gratuitos ou baratos ($0.5-1 por IP) frequentemente já estão bloqueados pelo Discord, pois foram usados por milhares de outros bots e spammers.
Solução: Invista em proxies residenciais de qualidade de provedores confiáveis. Verifique a reputação do IP antes de usar (serviços como AbuseIPDB, IPQualityScore). Um proxy de qualidade a $5-10 é melhor do que 10 bloqueados a $1.
Erro 6: User-Agent idêntico para todos os bots
Problema: Todos os seus bots usam o User-Agent padrão da biblioteca (por exemplo, "DiscordBot (discord.py 2.0)"). O Discord agrupa facilmente essas conexões e detecta automação em massa.
Solução: Varie o User-Agent entre os bots. Use valores realistas:
# Python - User-Agent personalizado
import discord
class CustomBot(discord.Client):
async def request(self, *args, **kwargs):
# Sobrescreve o 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)
Monitoramento do funcionamento dos bots e tratamento de erros
O monitoramento adequado permite detectar problemas antes que eles levem a bans em massa. Vamos considerar as principais métricas e ferramentas para rastrear o funcionamento dos bots do Discord através de proxies.
Métricas para rastreamento
| Métrica | O que rastrear | Valores críticos |
|---|---|---|
| Frequência de erros 429 | Número de erros de limite de taxa por hora | >10 por hora — revise a estratégia de solicitações |
| Frequência de erros 403 | Bloqueios de IP ou tokens | >3 por dia — proxy comprometido |
| Latência | Tempo de resposta do proxy + API do Discord | >1000ms — proxy lento, substitua |
| Taxa de sucesso das solicitações | Porcentagem de solicitações bem-sucedidas (HTTP 200-299) | <85% — problemas com proxy ou lógica do bot |
| Tempo de atividade do proxy | Quanto tempo o proxy é usado sem problemas | <24 horas — possível bloqueio do IP |
Exemplo de sistema de logging
# Python - logging avançado com métricas
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
})
# Configuração do 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 de taxa no 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} bloqueado (403)')
else:
self.metrics['errors_other'] += 1
self.logger.error(f'Erro {status_code} no proxy {proxy}')
def log_proxy_switch(self, old_proxy, new_proxy):
self.metrics['proxy_switches'] += 1
self.logger.info(f'Mudança de proxy: {old_proxy} -> {new_proxy}')
def get_report(self):
total = self.metrics['requests_total']
if total == 0:
return "Sem dados"
success_rate = (self.metrics['requests_success'] / total) * 100
avg_latency = sum(self.metrics['avg_latency']) / len(self.metrics['avg_latency'])
report = f"""
=== RELATÓRIO DE MONITORAMENTO DO BOT ===
Total de solicitações: {total}
Bem-sucedidas: {self.metrics['requests_success']} ({success_rate:.1f}%)
Erros 429 (limite de taxa): {self.metrics['errors_429']}
Erros 403 (bloqueio): {self.metrics['errors_403']}
Outros erros: {self.metrics['errors_other']}
Latência média: {avg_latency:.0f}ms
Mudanças de proxy: {self.metrics['proxy_switches']}
=== ESTATÍSTICAS POR 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']} solicitações, {stats['errors']} erros ({error_rate:.1f}%)\n"
return report
Conclusão: O uso de proxies para bots do Discord é uma prática essencial para evitar bloqueios e garantir a operação contínua. Ao seguir as diretrizes e estratégias apresentadas neste guia, você pode aumentar significativamente a eficácia de seus bots e minimizar o risco de detecções indesejadas.