Retour au blog

Proxies pour les bots Discord : comment configurer l'automatisation sans bans ni limites de taux

Guide complet pour configurer un proxy pour les bots Discord : choix du type de proxy, configuration de la rotation des IP, contournement des limites de taux et protection contre les bans lors de l'automatisation.

📅20 janvier 2026
```html

Discord lutte activement contre l'automatisation et les bots en utilisant des systèmes de détection avancés : analyse des adresses IP, des modèles de comportement et des limites de taux. Si vous lancez des bots pour la modération, l'envoi de messages ou l'automatisation des actions sur les serveurs, sans proxies correctement configurés, vous serez confronté à des blocages dès les premières heures de fonctionnement. Dans ce guide, nous examinerons quels proxies conviennent à Discord, comment configurer la rotation IP et contourner les mécanismes de protection de la plateforme.

Pourquoi Discord bloque les bots et comment fonctionne la protection

Discord utilise un système de protection à plusieurs niveaux contre l'automatisation, qui analyse plusieurs paramètres simultanément. La plateforme ne se contente pas de vérifier le nombre de requêtes provenant d'une seule IP — elle construit un profil de comportement pour chaque connexion et le compare à des modèles d'utilisateurs normaux.

Les principaux mécanismes de détection des bots sur Discord :

  • Limites de taux — Discord impose des restrictions strictes sur le nombre d'actions par unité de temps. Par exemple, pas plus de 5 messages en 5 secondes depuis un seul compte, pas plus de 50 requêtes à l'API par minute. Le dépassement des limites entraîne un blocage temporaire (HTTP 429).
  • Analyse des adresses IP — si plusieurs bots fonctionnent depuis une seule IP ou si une activité suspecte est observée (changement rapide de comptes, actions massives), Discord peut bloquer toute l'adresse IP pendant plusieurs heures ou jours.
  • Fingerprinting des connexions — la plateforme analyse les paramètres techniques : User-Agent, en-têtes de requêtes, version de la bibliothèque, temps de réponse. Si les paramètres ne correspondent pas à un client Discord normal, le compte est marqué comme suspect.
  • Analyse comportementale — Discord suit les modèles d'actions : réactions trop rapides, intervalles idéaux entre les messages, absence de hasard dans les actions. Les bots fonctionnant selon un algorithme rigide sont détectés plus rapidement.

Scénarios typiques de blocage sans proxy :

  • Lancement de 3 à 5 bots depuis une seule IP domestique — blocage de l'IP pendant 2 à 6 heures après le début du fonctionnement
  • Envoi massif d'invitations sur le serveur — ban du compte et de l'IP après seulement 10 à 15 invitations envoyées
  • Modération automatique (suppression de messages, attribution de rôles) — blocage après plus de 100 actions par heure depuis une seule IP
  • Analyse des membres des serveurs — détection et ban après avoir scanné 200 à 300 profils

Les proxies résolvent ces problèmes en répartissant les requêtes entre différentes adresses IP et en créant l'apparence d'utilisateurs normaux provenant de différentes localisations. Mais il est important de choisir le bon type de proxy et de configurer la rotation — une mauvaise configuration peut entraîner des bans encore plus rapides.

Quels types de proxies conviennent aux bots Discord

Le choix du type de proxy dépend de vos tâches : nombre de bots, fréquence des requêtes, budget et niveau d'anonymat requis. Examinons trois types principaux de proxies et leur utilisation pour Discord.

Type de proxy Avantages Inconvénients Convient pour
Proxies de centre de données Haute vitesse (ping 10-50 ms), faible coût ($1-3 par IP/mois), stabilité Discord reconnaît facilement les IP des centres de données, risque élevé de blocage lors d'actions massives Tests, automatisation légère (1-2 bots), tâches sans requêtes massives
Proxies résidentiels IP réelles d'utilisateurs domestiques, risque minimal de blocage, grand pool d'adresses (millions d'IP) Vitesse moyenne (ping 100-300 ms), coût plus élevé ($5-15 par Go de trafic), instabilité de certaines IP Envois massifs, analyse des serveurs, travail avec 5+ bots, projets à long terme
Proxies mobiles IP des opérateurs mobiles (4G/5G), confiance maximale de Discord, changement dynamique d'IP Coût élevé ($50-150 par IP/mois), pool d'adresses plus petit, possibles interruptions de connexion Comptes critiques, contournement des blocages stricts, travail avec des comptes de grande valeur

Recommandations de choix pour différentes tâches :

Modération et gestion de serveur (1-3 bots) : Proxies résidentiels avec IP fixes. Un bot — une IP, sans rotation. Cela crée un profil de connexion stable que Discord perçoit comme un utilisateur normal administrateur.

Envois massifs et invitations (10+ bots) : Proxies résidentiels avec rotation toutes les 5-10 minutes. Répartissez la charge : pas plus de 20 actions par heure depuis une seule IP. Utilisez un pool de 50+ adresses IP pour 10 bots.

Analyse des membres et des serveurs : Proxies résidentiels avec rotation rapide (toutes les 1-3 minutes) ou proxies mobiles. L'analyse est l'une des activités les plus risquées, Discord peut facilement détecter les modèles de scan. Utilisez des délais aléatoires entre les requêtes (30-120 secondes).

Tests et développement : Les proxies de centre de données suffisent pour déboguer les fonctionnalités. Mais avant de passer en production, assurez-vous de passer aux proxies résidentiels — le comportement de Discord peut varier considérablement selon les types d'IP.

Un point important : Discord est particulièrement strict avec les adresses IP de certains pays et régions. Les IP de Russie, de Chine, du Vietnam et d'Inde subissent des contrôles plus stricts en raison de l'activité élevée des spammeurs. Si votre public cible se trouve aux États-Unis ou en Europe, utilisez des proxies de ces régions — cela réduira la probabilité de blocages de 40 à 60 %.

Comment contourner les limites de taux de Discord via des proxies

Les limites de taux sur Discord sont des restrictions sur le nombre de requêtes à l'API par unité de temps. Elles se déclinent en deux types : globales (pour l'ensemble de l'application) et par route (pour des points de terminaison spécifiques). Les proxies aident à répartir la charge entre différentes IP, mais cela ne signifie pas que l'on peut ignorer les limites — Discord suit l'activité au niveau du token du bot.

Principales limites de taux de l'API Discord :

  • Envoi de messages : 5 messages en 5 secondes dans un seul canal, 50 messages en 10 secondes globalement pour le bot
  • Création/suppression de canaux : 50 requêtes en 10 minutes
  • Modification des rôles des membres : 10 requêtes en 10 secondes
  • Obtention de la liste des membres : 1 requête par seconde (la limite la plus stricte)
  • Envoi de DM (messages privés) : 5 DM en 5 secondes, blocage pour envois massifs à des utilisateurs inconnus

Lorsque vous dépassez la limite, Discord renvoie un HTTP 429 (Trop de requêtes) avec un en-tête Retry-After, indiquant le temps d'attente en secondes. Un traitement correct de cette réponse est crucial.

Stratégie de contournement des limites de taux avec des proxies :

# Exemple en Python (discord.py) avec rotation de proxy lors de la limite de taux

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):
        # Ignorer les proxies non fonctionnels
        available = [p for p in self.proxies if p not in self.failed_proxies]
        if not available:
            self.failed_proxies.clear()  # Réinitialiser après un cycle complet
            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)

# Initialisation
proxy_rotator = ProxyRotator([
    'http://user1:pass1@192.168.1.1:8080',
    'http://user2:pass2@192.168.1.2:8080',
    # ... ajoutez 10-20 proxies pour un fonctionnement stable
])

intents = discord.Intents.default()
bot = commands.Bot(command_prefix='!', intents=intents)

async def send_with_retry(channel, message, max_retries=3):
    """Envoi d'un message avec gestion automatique des limites de taux"""
    for attempt in range(max_retries):
        try:
            # Obtenez un nouveau proxy à chaque tentative
            proxy = proxy_rotator.get_next_proxy()
            
            # Discord.py utilise aiohttp en interne, configurons le 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 taux
                retry_after = e.retry_after if hasattr(e, 'retry_after') else 5
                print(f"Limite de taux ! Attente de {retry_after} sec, changement de proxy...")
                
                # Marquer le proxy comme temporairement indisponible
                proxy_rotator.mark_failed(proxy)
                
                # Ajouter un aléa à la durée d'attente
                await asyncio.sleep(retry_after + random.uniform(1, 3))
            else:
                print(f"Erreur d'envoi : {e}")
                await asyncio.sleep(2)
    
    return False

@bot.event
async def on_ready():
    print(f'Bot lancé : {bot.user}')

# Exemple d'utilisation
@bot.command()
async def envoi_massif(ctx):
    channels = ctx.guild.text_channels[:5]  # Les 5 premiers canaux
    
    for channel in channels:
        success = await send_with_retry(channel, "Message test")
        if success:
            print(f"Envoyé dans {channel.name}")
        
        # Délai aléatoire entre les canaux
        await asyncio.sleep(random.uniform(3, 7))
    

Principes clés pour contourner les limites de taux :

  • Traitez toujours le HTTP 429 : N'ignorez pas l'en-tête Retry-After. Discord augmente le temps de blocage en cas de violations répétées (de 5 secondes à 60 et plus).
  • Ajoutez de l'aléatoire : Les délais entre les requêtes doivent être aléatoires (par exemple, 2-5 secondes au lieu de 3 secondes fixes). Cela imite le comportement humain.
  • Répartissez la charge : Si vous avez 10 bots et 20 proxies, attribuez à chaque bot 2 proxies pour la rotation. N'utilisez pas un seul proxy pour tous les bots.
  • Surveillez la qualité des proxies : Certaines IP peuvent déjà être bloquées par Discord. Excluez automatiquement les proxies qui reçoivent constamment 403 ou 429.

Stratégies de rotation IP pour différentes tâches

La rotation des proxies n'est pas simplement un changement aléatoire d'IP toutes les N minutes. La bonne stratégie dépend du type d'activité du bot et des exigences de Discord en matière de stabilité de connexion. Examinons quatre approches principales.

1. IP fixe (sans rotation)

Quand utiliser : Bots de modération, bots de gestion de serveur, bots musicaux, bots avec présence constante sur le serveur.

Logique : Un bot = une adresse IP pendant toute la durée de fonctionnement (semaines, mois). Discord perçoit cette connexion comme celle d'un utilisateur normal administrateur, qui se connecte toujours depuis le même endroit.

Configuration :

# Python (discord.py) - proxy fixe
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)

# Le proxy sera utilisé pour toutes les requêtes de ce bot
bot.run('YOUR_BOT_TOKEN')
    

Avantages : Stabilité maximale, risque minimal de blocage par IP, configuration simple.

Inconvénients : Si l'IP est bloquée, il faudra changer le proxy manuellement et recréer la session du bot.

2. Rotation par temps

Quand utiliser : Bots pour envois, bots avec activité modérée (10-50 actions par heure), analyse de données à faible fréquence.

Logique : L'IP change toutes les 5-15 minutes selon un minuteur, indépendamment du nombre de requêtes. Cela imite un utilisateur qui se reconnecte à Internet (par exemple, Internet mobile avec IP dynamique).

Intervalles recommandés :

  • Activité faible (5-10 actions/heure) : rotation toutes les 10-15 minutes
  • Activité moyenne (20-40 actions/heure) : rotation toutes les 5-7 minutes
  • Activité élevée (50+ actions/heure) : rotation toutes les 2-3 minutes + rotation supplémentaire lors de la limite de taux
# JavaScript (discord.js) - rotation par temps
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() }
});

// Rotation toutes les 5 minutes
setInterval(() => {
    console.log('Changement de proxy...');
    client.rest.setAgent(getProxyAgent());
}, 5 * 60 * 1000);

client.login('YOUR_BOT_TOKEN');
    

3. Rotation par nombre de requêtes

Quand utiliser : Analyse massive, scraping des membres des serveurs, invitations automatiques.

Logique : L'IP change après N requêtes exécutées (par exemple, toutes les 20-50 requêtes). Cela permet de répartir uniformément la charge et de ne pas dépasser les limites invisibles de Discord sur le nombre d'actions depuis une seule IP.

Valeurs recommandées pour N :

  • Analyse des membres : 30-50 requêtes par IP (pour éviter la détection du modèle de scan)
  • Envoi de DM : 10-15 messages par IP (Discord est particulièrement strict sur les DM massifs)
  • Création d'invitations : 20-30 invitations par IP

4. Rotation adaptative (en cas d'erreurs)

Quand utiliser : Bots critiques, travail avec des comptes de grande valeur, contournement des blocages stricts.

Logique : L'IP change automatiquement lors de la réception d'erreurs 429 (limite de taux), 403 (interdit), ou de timeouts. Le système mémorise les IP "mauvaises" et les exclut temporairement de la rotation.

# Python - rotation adaptative avec 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()
        
        # Filtrer les proxies dans la blacklist
        available = [
            p for p in self.proxies 
            if p not in self.blacklist_until or self.blacklist_until[p] < now
        ]
        
        if not available:
            # Si tout est dans la blacklist, réinitialiser et attendre
            print("Tous les proxies sont dans la blacklist, attente de 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
        
        # Blocage temporaire lors de multiples erreurs
        if self.error_count[proxy] >= 3:
            blacklist_duration = 300  # 5 minutes
            self.blacklist_until[proxy] = time.time() + blacklist_duration
            print(f"Proxy {proxy} dans la blacklist pendant {blacklist_duration} sec")
            self.error_count[proxy] = 0  # Réinitialiser le compteur
    
    def report_success(self, proxy):
        # Requête réussie - réinitialiser le compteur d'erreurs
        if proxy in self.error_count:
            self.error_count[proxy] = max(0, self.error_count[proxy] - 1)
    

Approche combinée (recommandée) : Utilisez une rotation de base par temps (toutes les 5-10 minutes) + une rotation adaptative en cas d'erreurs. Cela assure la stabilité et une réaction rapide aux problèmes.

Configuration des proxies dans les bibliothèques populaires : discord.py et discord.js

Examinons la configuration étape par étape des proxies dans les deux bibliothèques les plus populaires pour créer des bots Discord. Ces exemples conviennent à la plupart des tâches et s'adaptent facilement à vos besoins.

Discord.py (Python)

Discord.py utilise aiohttp pour les requêtes HTTP. Les proxies se configurent via le paramètre proxy lors de la création du client ou via la configuration directe de la session HTTP.

Étape 1 : Installation des dépendances

pip install discord.py aiohttp aiohttp-socks
# aiohttp-socks est nécessaire pour les proxies SOCKS5, pour HTTP/HTTPS il n'est pas obligatoire
    

Étape 2 : Configuration de base avec un proxy

import discord
from discord.ext import commands

# Format du proxy : protocol://username:password@ip:port
PROXY = 'http://user:pass@192.168.1.100:8080'

intents = discord.Intents.default()
intents.message_content = True  # Pour lire les messages

bot = commands.Bot(
    command_prefix='!',
    intents=intents,
    proxy=PROXY  # Proxy pour toutes les requêtes HTTP
)

@bot.event
async def on_ready():
    print(f'Bot {bot.user} connecté via proxy !')

@bot.command()
async def ping(ctx):
    await ctx.send(f'Pong ! Latence : {round(bot.latency * 1000)}ms')

bot.run('YOUR_BOT_TOKEN')
    

Étape 3 : Configuration avec rotation 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)  # Rotation toutes les 5 minutes
    async def proxy_rotation(self):
        old_proxy = self.current_proxy
        self.current_proxy = random.choice([p for p in PROXIES if p != old_proxy])
        
        # Recréer la session HTTP avec le nouveau proxy
        await self.http.close()
        connector = aiohttp.TCPConnector(limit=0)
        self.http.connector = connector
        self.http.__session = aiohttp.ClientSession(connector=connector)
        
        print(f'Proxy changé : {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 n'a pas de support intégré pour les proxies, donc on utilise la bibliothèque https-proxy-agent ou socks-proxy-agent.

Étape 1 : Installation des dépendances

npm install discord.js https-proxy-agent
# Pour SOCKS5 : npm install socks-proxy-agent
    

Étape 2 : Configuration de 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 pour les requêtes de l'API REST
});

client.on('ready', () => {
    console.log(`Bot ${client.user.tag} connecté via proxy !`);
});

client.on('messageCreate', async (message) => {
    if (message.content === '!ping') {
        await message.reply(`Pong ! Latence WebSocket : ${client.ws.ping}ms`);
    }
});

client.login('YOUR_BOT_TOKEN');
    

Étape 3 : Rotation des 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() }
});

// Rotation toutes les 10 minutes
setInterval(() => {
    const newAgent = getNextProxy();
    client.rest.setAgent(newAgent);
    console.log('Proxy changé');
}, 10 * 60 * 1000);

client.on('ready', () => {
    console.log(`Bot ${client.user.tag} lancé`);
});

client.login('YOUR_BOT_TOKEN');
    

Important : La connexion WebSocket (pour recevoir des événements en temps réel) ne prend pas toujours en charge les proxies. Si vous rencontrez des problèmes de connexion via WebSocket, utilisez uniquement des proxies HTTP pour les requêtes de l'API REST, et laissez WebSocket sans proxy. Pour des cas critiques, envisagez d'utiliser un VPN au lieu de proxies pour la connexion WebSocket.

Erreurs courantes et comment les éviter

Même avec des proxies correctement configurés, vous pouvez être banni si vous commettez des erreurs courantes. Examinons les plus critiques et les solutions.

Erreur 1 : Utilisation d'un seul proxy pour tous les bots

Problème : Vous lancez 5-10 bots via une seule adresse IP. Discord voit l'activité simultanée de plusieurs comptes depuis une seule IP et bloque tous les comptes + l'IP elle-même.

Solution : Règle "un bot — une IP unique" pour un fonctionnement stable. Si vous avez 10 bots, utilisez au moins 10 proxies différents. Pour des projets critiques, ajoutez 50-100 % de réserve (15-20 proxies pour 10 bots) pour la rotation.

Erreur 2 : Rotation IP trop rapide

Problème : Vous changez d'IP toutes les 30-60 secondes, pensant que cela protégera contre le blocage. En réalité, Discord perçoit un changement fréquent d'IP comme une activité suspecte — un utilisateur normal ne se reconnecte pas à Internet chaque minute.

Solution : L'intervalle minimum de rotation est de 3-5 minutes. Optimal — 5-15 minutes selon l'intensité des requêtes. Exception — rotation adaptative lors de la réception de limites de taux (429).

Erreur 3 : Ignorer la géolocalisation des proxies

Problème : Votre bot "vit" sur un serveur aux États-Unis, mais utilise un proxy de Russie, de Chine ou d'Inde. Discord voit une incohérence entre la localisation déclarée du serveur et l'adresse IP, ce qui augmente la suspicion.

Solution : Utilisez des proxies du même pays/région que votre serveur Discord ou votre public cible. Pour des projets internationaux, choisissez des proxies des États-Unis ou d'Europe — ils ont une meilleure réputation auprès de Discord.

Erreur 4 : Absence de gestion des erreurs

Problème : Le bot reçoit un HTTP 429 (limite de taux) et continue d'envoyer des requêtes, aggravant la situation. Discord augmente le temps de blocage à chaque tentative.

Solution : Traitez toujours les codes d'erreur :

  • 429 (Trop de requêtes) : Lisez l'en-tête Retry-After et attendez le temps indiqué + 1-3 secondes. Changez de proxy.
  • 403 (Interdit) : IP ou token bloqué. Changez de proxy, vérifiez la validité du token.
  • 401 (Non autorisé) : Token de bot invalide. Vérifiez le token dans le Discord Developer Portal.
  • 502/504 (Erreurs de passerelle) : Problèmes avec le proxy ou l'API Discord. Attendez 10-30 secondes, changez de proxy.

Erreur 5 : Utilisation de proxies publics ou bon marché

Problème : Les proxies gratuits ou bon marché ($0.5-1 par IP) sont souvent déjà bloqués par Discord, car des milliers d'autres bots et spammeurs les ont utilisés.

Solution : Investissez dans des proxies résidentiels de qualité auprès de fournisseurs fiables. Vérifiez la réputation des IP avant utilisation (services tels que AbuseIPDB, IPQualityScore). Un bon proxy à $5-10 vaut mieux que 10 bloqués à $1.

Erreur 6 : User-Agent identique pour tous les bots

Problème : Tous vos bots utilisent le User-Agent standard de la bibliothèque (par exemple, "DiscordBot (discord.py 2.0)"). Discord regroupe facilement ces connexions et détecte l'automatisation massive.

Solution : Variez le User-Agent entre les bots. Utilisez des valeurs réalistes :

# Python - User-Agent personnalisé
import discord

class CustomBot(discord.Client):
    async def request(self, *args, **kwargs):
        # Redéfinir le 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)
    

Surveillance du fonctionnement des bots et gestion des erreurs

Une bonne surveillance permet de détecter les problèmes avant qu'ils ne conduisent à des bans massifs. Examinons les métriques clés et les outils pour suivre le fonctionnement des bots Discord via des proxies.

Métriques à suivre

Métrique Ce qu'il faut suivre Valeurs critiques
Fréquence des erreurs 429 Nombre d'erreurs de limite de taux par heure >10 par heure — réévaluez votre stratégie de requêtes
Fréquence des erreurs 403 Blocages d'IP ou de tokens >3 par jour — proxy compromis
Latence Temps de réponse du proxy + API Discord >1000ms — proxy lent, remplacez-le
Taux de réussite des requêtes Pourcentage de requêtes réussies (HTTP 200-299) <85% — problèmes avec le proxy ou la logique du bot
Temps de fonctionnement du proxy Combien de temps le proxy est utilisé sans problème <24 heures — l'IP a peut-être été bloquée

Exemple de système de journalisation

# Python - journalisation avancée avec métriques
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
        })
        
        # Configuration du 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 taux sur le 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} bloqué (403)')
        else:
            self.metrics['errors_other'] += 1
            self.logger.error(f'Erreur {status_code} sur le proxy {proxy}')
    
    def log_proxy_switch(self, old_proxy, new_proxy):
        self.metrics['proxy_switches'] += 1
        self.logger.info(f'Changement de proxy : {old_proxy} -> {new_proxy}')
    
    def get_report(self):
        total = self.metrics['requests_total']
        if total == 0:
            return "Pas de données"
        
        success_rate = (self.metrics['requests_success'] / total) * 100
        avg_latency = sum(self.metrics['avg_latency']) / len(self.metrics['avg_latency'])
        
        report = f"""
=== RAPPORT DE SURVEILLANCE DU BOT ===
Total des requêtes : {total}
Réussies : {self.metrics['requests_success']} ({success_rate:.1f}%)
Erreurs 429 (limite de taux) : {self.metrics['errors_429']}
Erreurs 403 (blocage) : {self.metrics['errors_403']}
Autres erreurs : {self.metrics['errors_other']}
Latence moyenne : {avg_latency:.0f}ms
Changements de proxy : {self.metrics['proxy_switches']}

=== STATISTIQUES PAR 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']} requêtes, {stats['errors']} erreurs ({error_rate:.1f}%)\n"
        return report
    

Conclusion : La mise en place de proxies pour les bots Discord est essentielle pour éviter les blocages et garantir un fonctionnement fluide. En suivant les recommandations et en surveillant attentivement les performances, vous pouvez maximiser l'efficacité de vos bots tout en minimisant les risques.

```