Discord kämpft aktiv gegen Automatisierung und Bots, indem es fortschrittliche Erkennungssysteme einsetzt: Analyse von IP-Adressen, Verhaltensmustern und Rate Limits. Wenn Sie Bots für Moderation, Einladungen oder Automatisierung von Aktionen auf Servern betreiben, werden Sie ohne richtig konfigurierte Proxys bereits in den ersten Stunden mit Sperren konfrontiert. In diesem Leitfaden werden wir untersuchen, welche Proxys für Discord geeignet sind, wie man die IP-Rotation einrichtet und die Schutzmechanismen der Plattform umgeht.
Warum Discord Bots blockiert und wie der Schutz funktioniert
Discord verwendet ein mehrschichtiges Schutzsystem gegen Automatisierung, das mehrere Parameter gleichzeitig analysiert. Die Plattform überprüft nicht nur die Anzahl der Anfragen von einer IP — sie erstellt ein Verhaltensprofil jeder Verbindung und vergleicht es mit den Mustern normaler Benutzer.
Die Hauptmechanismen zur Erkennung von Bots in Discord sind:
- Rate Limits (Anfragefrequenzlimits) — Discord setzt strenge Beschränkungen für die Anzahl der Aktionen pro Zeiteinheit. Zum Beispiel nicht mehr als 5 Nachrichten in 5 Sekunden von einem Konto, nicht mehr als 50 API-Anfragen pro Minute. Überschreitungen der Limits führen zu einer temporären Sperre (HTTP 429).
- Analyse von IP-Adressen — Wenn von einer IP mehrere Bots aktiv sind oder verdächtige Aktivitäten (schneller Wechsel von Konten, massenhafte Aktionen) beobachtet werden, kann Discord die gesamte IP-Adresse für mehrere Stunden oder Tage sperren.
- Fingerprinting von Verbindungen — Die Plattform analysiert technische Parameter: User-Agent, Anfrageheader, Bibliotheksversion, Antwortzeit. Wenn die Parameter nicht mit einem normalen Discord-Client übereinstimmen, wird das Konto als verdächtig markiert.
- Verhaltensanalyse — Discord verfolgt Verhaltensmuster: zu schnelle Reaktionen, ideale Intervalle zwischen Nachrichten, fehlende Zufälligkeit in den Aktionen. Bots, die nach einem strengen Algorithmus arbeiten, werden schneller erkannt.
Typische Sperrszenarien ohne Proxys:
- Start von 3-5 Bots von einer Heim-IP — Sperre der IP innerhalb von 2-6 Stunden nach Arbeitsbeginn
- Massenversand von Einladungen zu einem Server — Sperre des Kontos und der IP bereits nach 10-15 versendeten Einladungen
- Automatische Moderation (Löschen von Nachrichten, Zuweisung von Rollen) — Sperre bei Überschreitung von 100 Aktionen pro Stunde von einer IP
- Parsing von Servermitgliedern — Entdeckung und Sperre nach dem Scannen von 200-300 Profilen
Proxys lösen diese Probleme, indem sie Anfragen zwischen verschiedenen IP-Adressen verteilen und die Illusion normaler Benutzer aus verschiedenen Standorten erzeugen. Es ist jedoch wichtig, den richtigen Proxytyp auszuwählen und die Rotation richtig einzurichten — eine falsche Konfiguration kann zu noch schnelleren Sperren führen.
Welche Proxytypen für Discord Bots geeignet sind
Die Wahl des Proxytyps hängt von Ihren Aufgaben ab: Anzahl der Bots, Anfragefrequenz, Budget und erforderliches Maß an Anonymität. Lassen Sie uns drei Haupttypen von Proxys und deren Anwendung für Discord betrachten.
| Proxytyp | Vorteile | Nachteile | Geeignet für |
|---|---|---|---|
| Rechenzentrums-Proxys | Hohe Geschwindigkeit (Ping 10-50 ms), niedriger Preis ($1-3 pro IP/Monat), Stabilität | Discord erkennt IPs von Rechenzentren leicht, hohes Risiko einer Sperre bei massenhaften Aktionen | Tests, einfache Automatisierung (1-2 Bots), Aufgaben ohne massenhafte Anfragen |
| Residential Proxys | Echte IPs von Heimnutzern, minimales Risiko einer Sperre, großer Pool von Adressen (Millionen IPs) | Durchschnittliche Geschwindigkeit (Ping 100-300 ms), höherer Preis ($5-15 pro GB Traffic), Instabilität einiger IPs | Massenversand, Parsing von Servern, Arbeiten mit 5+ Bots, langfristige Projekte |
| Mobile Proxys | IPs von Mobilfunkanbietern (4G/5G), maximales Vertrauen von Discord, dynamischer IP-Wechsel | Hoher Preis ($50-150 pro IP/Monat), kleinerer Pool von Adressen, mögliche Verbindungsabbrüche | Kritisch wichtige Konten, Umgehung strenger Sperren, Arbeiten mit hochpreisigen Konten |
Empfehlungen zur Auswahl für verschiedene Aufgaben:
Moderation und Serververwaltung (1-3 Bots): Residential Proxys mit festen IPs. Ein Bot — eine IP, ohne Rotation. Dies schafft ein stabiles Verbindungsprofil, das Discord als normalen Benutzer-Administrator wahrnimmt.
Massenversand und Einladungen (10+ Bots): Residential Proxys mit Rotation alle 5-10 Minuten. Verteilen Sie die Last: nicht mehr als 20 Aktionen pro Stunde von einer IP. Verwenden Sie einen Pool von 50+ IP-Adressen für 10 Bots.
Parsing von Mitgliedern und Servern: Residential Proxys mit schneller Rotation (alle 1-3 Minuten) oder mobile Proxys. Parsing ist eine der riskantesten Aktivitäten, Discord erkennt leicht die Scanning-Muster. Verwenden Sie zufällige Verzögerungen zwischen Anfragen (30-120 Sekunden).
Tests und Entwicklung: Rechenzentrums-Proxys sind ausreichend für die Fehlersuche. Aber vor dem Produktionsstart sollten Sie unbedingt auf Residential Proxys umschalten — das Verhalten von Discord kann sich stark zwischen verschiedenen IP-Typen unterscheiden.
Ein wichtiger Punkt: Discord ist besonders streng gegenüber IP-Adressen aus bestimmten Ländern und Regionen. IPs aus Russland, China, Vietnam, Indien unterliegen strengeren Prüfungen aufgrund der hohen Aktivität von Spammern. Wenn Ihre Zielgruppe in den USA oder Europa ist, verwenden Sie Proxys aus diesen Regionen — das reduziert die Wahrscheinlichkeit von Sperren um 40-60%.
Wie man Discord Rate Limits über Proxys umgeht
Rate Limits in Discord sind Beschränkungen für die Anzahl der API-Anfragen pro Zeiteinheit. Sie sind in zwei Typen unterteilt: globale (für die gesamte Anwendung) und per-route (für bestimmte Endpunkte). Proxys helfen, die Last zwischen verschiedenen IPs zu verteilen, aber das bedeutet nicht, dass man die Limits ignorieren kann — Discord verfolgt die Aktivität auf Token-Ebene des Bots.
Wichtige Rate Limits der Discord API:
- Nachrichten senden: 5 Nachrichten in 5 Sekunden in einen Kanal, 50 Nachrichten in 10 Sekunden global für den Bot
- Kanäle erstellen/löschen: 50 Anfragen in 10 Minuten
- Ändern von Rollen für Mitglieder: 10 Anfragen in 10 Sekunden
- Liste der Mitglieder abrufen: 1 Anfrage pro Sekunde (das strengste Limit)
- DMs (Direktnachrichten) senden: 5 DMs in 5 Sekunden, Sperre bei massenhaften Einladungen an unbekannte Benutzer
Wenn Sie das Limit überschreiten, gibt Discord HTTP 429 (Too Many Requests) mit dem Header Retry-After zurück, der die Wartezeit in Sekunden angibt. Die richtige Verarbeitung dieser Antwort ist entscheidend.
Strategie zur Umgehung von Rate Limits mit Proxys:
# Beispiel in Python (discord.py) mit Proxy-Rotation bei Rate Limit
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):
# Nicht funktionierende Proxys überspringen
available = [p for p in self.proxies if p not in self.failed_proxies]
if not available:
self.failed_proxies.clear() # Zurücksetzen nach einem vollständigen Zyklus
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)
# Initialisierung
proxy_rotator = ProxyRotator([
'http://user1:pass1@192.168.1.1:8080',
'http://user2:pass2@192.168.1.2:8080',
# ... fügen Sie 10-20 Proxys für stabilen Betrieb hinzu
])
intents = discord.Intents.default()
bot = commands.Bot(command_prefix='!', intents=intents)
async def send_with_retry(channel, message, max_retries=3):
"""Nachricht senden mit automatischer Behandlung von Rate Limits"""
for attempt in range(max_retries):
try:
# Bei jedem Versuch einen neuen Proxy erhalten
proxy = proxy_rotator.get_next_proxy()
# Discord.py verwendet aiohttp intern, Proxy einstellen
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: # Rate Limit
retry_after = e.retry_after if hasattr(e, 'retry_after') else 5
print(f"Rate Limit! Warte {retry_after} Sek., Proxy wechseln...")
# Proxy vorübergehend als nicht verfügbar markieren
proxy_rotator.mark_failed(proxy)
# Zufälligkeit zur Verzögerung hinzufügen
await asyncio.sleep(retry_after + random.uniform(1, 3))
else:
print(f"Fehler beim Senden: {e}")
await asyncio.sleep(2)
return False
@bot.event
async def on_ready():
print(f'Bot gestartet: {bot.user}')
# Beispielverwendung
@bot.command()
async def massenversand(ctx):
channels = ctx.guild.text_channels[:5] # Erste 5 Kanäle
for channel in channels:
success = await send_with_retry(channel, "Testnachricht")
if success:
print(f"Gesendet an {channel.name}")
# Zufällige Verzögerung zwischen den Kanälen
await asyncio.sleep(random.uniform(3, 7))
Schlüsselprinzipien zur Umgehung von Rate Limits:
- HTTP 429 immer behandeln: Ignorieren Sie nicht den Retry-After-Header. Discord erhöht die Sperrzeit bei wiederholten Verstößen (von 5 Sekunden auf 60 und mehr).
- Zufälligkeit hinzufügen: Verzögerungen zwischen Anfragen sollten zufällig sein (z. B. 2-5 Sekunden anstelle von festen 3 Sekunden). Dies imitiert das Verhalten eines Menschen.
- Last verteilen: Wenn Sie 10 Bots und 20 Proxys haben, weisen Sie jedem Bot 2 Proxys zur Rotation zu. Verwenden Sie nicht einen Proxy für alle Bots.
- Qualität der Proxys überwachen: Einige IPs können bereits von Discord blockiert sein. Schließen Sie automatisch Proxys aus, die ständig 403 oder 429 erhalten.
IP-Rotationsstrategien für verschiedene Aufgaben
Die Rotation von Proxys ist nicht einfach ein zufälliger Wechsel der IP alle N Minuten. Die richtige Strategie hängt von der Art der Bot-Aktivität und den Anforderungen von Discord an die Stabilität der Verbindung ab. Lassen Sie uns vier Hauptansätze betrachten.
1. Feste IP (ohne Rotation)
Wann verwenden: Moderationsbots, Bots zur Serververwaltung, Musikbots, Bots mit ständigem Aufenthalt auf dem Server.
Logik: Ein Bot = eine IP-Adresse für die gesamte Laufzeit (Wochen, Monate). Discord nimmt eine solche Verbindung als normalen Benutzer-Administrator wahr, der immer von einem Ort aus einloggt.
Einrichtung:
# Python (discord.py) - fester Proxy
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)
# Der Proxy wird für alle Anfragen dieses Bots verwendet
bot.run('YOUR_BOT_TOKEN')
Vorteile: Maximale Stabilität, minimales Risiko einer IP-Sperre, einfache Einrichtung.
Nachteile: Wenn die IP gesperrt wird, müssen Sie den Proxy manuell wechseln und die Bot-Sitzung neu erstellen.
2. Zeitbasierte Rotation
Wann verwenden: Bots für Einladungen, Bots mit moderater Aktivität (10-50 Aktionen pro Stunde), Datenparsing mit niedriger Frequenz.
Logik: Die IP wechselt alle 5-15 Minuten nach Timer, unabhängig von der Anzahl der Anfragen. Dies imitiert einen Benutzer, der sich neu mit dem Internet verbindet (z. B. mobiles Internet mit dynamischer IP).
Empfohlene Intervalle:
- Niedrige Aktivität (5-10 Aktionen/Stunde): Rotation alle 10-15 Minuten
- Mittlere Aktivität (20-40 Aktionen/Stunde): Rotation alle 5-7 Minuten
- Hohe Aktivität (50+ Aktionen/Stunde): Rotation alle 2-3 Minuten + zusätzliche Rotation bei Rate Limit
# JavaScript (discord.js) - zeitbasierte Rotation
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 alle 5 Minuten
setInterval(() => {
console.log('Proxy wechseln...');
client.rest.setAgent(getProxyAgent());
}, 5 * 60 * 1000);
client.login('YOUR_BOT_TOKEN');
3. Rotation nach Anzahl der Anfragen
Wann verwenden: Massenparsing, Scraping von Servermitgliedern, automatische Einladungen.
Logik: Die IP wechselt nach N ausgeführten Anfragen (z. B. alle 20-50 Anfragen). Dies ermöglicht eine gleichmäßige Verteilung der Last und verhindert, dass die unsichtbaren Limits von Discord für die Anzahl der Aktionen von einer IP überschritten werden.
Empfohlene Werte für N:
- Parsing von Mitgliedern: 30-50 Anfragen pro IP (um das Erkennen des Scanning-Musters zu vermeiden)
- DMs senden: 10-15 Nachrichten pro IP (Discord ist besonders streng bei massenhaften DMs)
- Einladungen erstellen: 20-30 Einladungen pro IP
4. Adaptive Rotation (bei Fehlern)
Wann verwenden: Kritisch wichtige Bots, Arbeiten mit hochpreisigen Konten, Umgehung strenger Sperren.
Logik: Die IP wechselt automatisch bei Erhalt von Fehlern 429 (Rate Limit), 403 (verboten) oder Timeouts. Das System merkt sich "schlechte" IPs und schließt sie vorübergehend von der Rotation aus.
# Python - adaptive Rotation mit 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()
# Proxys in der Blacklist filtern
available = [
p for p in self.proxies
if p not in self.blacklist_until or self.blacklist_until[p] < now
]
if not available:
# Wenn alle in der Blacklist sind, zurücksetzen und warten
print("Alle Proxys in der Blacklist, warte 60 Sek...")
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
# Temporäre Sperre bei mehrfachen Fehlern
if self.error_count[proxy] >= 3:
blacklist_duration = 300 # 5 Minuten
self.blacklist_until[proxy] = time.time() + blacklist_duration
print(f"Proxy {proxy} in der Blacklist für {blacklist_duration} Sek")
self.error_count[proxy] = 0 # Zähler zurücksetzen
def report_success(self, proxy):
# Erfolgreiche Anfrage - Zähler für Fehler zurücksetzen
if proxy in self.error_count:
self.error_count[proxy] = max(0, self.error_count[proxy] - 1)
Kombinierter Ansatz (empfohlen): Verwenden Sie die grundlegende zeitbasierte Rotation (alle 5-10 Minuten) + adaptive Rotation bei Fehlern. Dies gewährleistet Stabilität und schnelle Reaktion auf Probleme.
Einrichtung von Proxys in beliebten Bibliotheken: discord.py und discord.js
Lassen Sie uns die schrittweise Einrichtung von Proxys in den beiden beliebtesten Bibliotheken für die Erstellung von Discord Bots betrachten. Diese Beispiele eignen sich für die meisten Aufgaben und lassen sich leicht an Ihre Bedürfnisse anpassen.
Discord.py (Python)
Discord.py verwendet aiohttp für HTTP-Anfragen. Proxys werden über den Parameter proxy bei der Erstellung des Clients oder durch direkte Einstellung der HTTP-Sitzung konfiguriert.
Schritt 1: Abhängigkeiten installieren
pip install discord.py aiohttp aiohttp-socks
# aiohttp-socks ist für SOCKS5-Proxys erforderlich, für HTTP/HTTPS nicht zwingend notwendig
Schritt 2: Grundlegende Einrichtung mit einem Proxy
import discord
from discord.ext import commands
# Proxy-Format: protocol://username:password@ip:port
PROXY = 'http://user:pass@192.168.1.100:8080'
intents = discord.Intents.default()
intents.message_content = True # Für das Lesen von Nachrichten
bot = commands.Bot(
command_prefix='!',
intents=intents,
proxy=PROXY # Proxy für alle HTTP-Anfragen
)
@bot.event
async def on_ready():
print(f'Bot {bot.user} verbunden über Proxy!')
@bot.command()
async def ping(ctx):
await ctx.send(f'Pong! Verzögerung: {round(bot.latency * 1000)}ms')
bot.run('YOUR_BOT_TOKEN')
Schritt 3: Einrichtung mit Proxy-Rotation
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 alle 5 Minuten
async def proxy_rotation(self):
old_proxy = self.current_proxy
self.current_proxy = random.choice([p for p in PROXIES if p != old_proxy])
# Neue HTTP-Sitzung mit neuem Proxy erstellen
await self.http.close()
connector = aiohttp.TCPConnector(limit=0)
self.http.connector = connector
self.http.__session = aiohttp.ClientSession(connector=connector)
print(f'Proxy gewechselt: {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 hat keine eingebaute Unterstützung für Proxys, daher wird die Bibliothek https-proxy-agent oder socks-proxy-agent verwendet.
Schritt 1: Abhängigkeiten installieren
npm install discord.js https-proxy-agent
# Für SOCKS5: npm install socks-proxy-agent
Schritt 2: Grundlegende Einrichtung
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 für REST API-Anfragen
});
client.on('ready', () => {
console.log(`Bot ${client.user.tag} verbunden über Proxy!`);
});
client.on('messageCreate', async (message) => {
if (message.content === '!ping') {
await message.reply(`Pong! WebSocket-Verzögerung: ${client.ws.ping}ms`);
}
});
client.login('YOUR_BOT_TOKEN');
Schritt 3: Proxy-Rotation
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 alle 10 Minuten
setInterval(() => {
const newAgent = getNextProxy();
client.rest.setAgent(newAgent);
console.log('Proxy gewechselt');
}, 10 * 60 * 1000);
client.on('ready', () => {
console.log(`Bot ${client.user.tag} gestartet`);
});
client.login('YOUR_BOT_TOKEN');
Wichtig: WebSocket-Verbindungen (für den Empfang von Echtzeitereignissen) unterstützen nicht immer Proxys. Wenn Sie Probleme mit der Verbindung über WebSocket haben, verwenden Sie nur HTTP-Proxys für REST API-Anfragen und lassen Sie WebSocket ohne Proxy. Für kritische Fälle ziehen Sie in Betracht, VPNs anstelle von Proxys für WebSocket-Verbindungen zu verwenden.
Typische Fehler und wie man sie vermeidet
Selbst mit richtig konfigurierten Proxys kann es zu Sperren kommen, wenn häufige Fehler gemacht werden. Lassen Sie uns die kritischsten von ihnen und ihre Lösungen betrachten.
Fehler 1: Verwendung eines Proxys für alle Bots
Problem: Sie betreiben 5-10 Bots über eine IP-Adresse. Discord sieht die gleichzeitige Aktivität mehrerer Konten von einer IP und sperrt alle Konten + die IP selbst.
Lösung: Regel "ein Bot — eine einzigartige IP" für stabilen Betrieb. Wenn Sie 10 Bots haben, verwenden Sie mindestens 10 verschiedene Proxys. Für kritische Projekte fügen Sie 50-100% Reserve hinzu (15-20 Proxys für 10 Bots) für die Rotation.
Fehler 2: Zu schnelle IP-Rotation
Problem: Sie wechseln die IP alle 30-60 Sekunden, in der Annahme, dass dies vor einer Sperre schützt. Tatsächlich sieht Discord häufige IP-Wechsel als verdächtige Aktivität — ein normaler Benutzer verbindet sich nicht jede Minute neu mit dem Internet.
Lösung: Minimaler Rotationsintervall — 3-5 Minuten. Optimal — 5-15 Minuten, abhängig von der Intensität der Anfragen. Ausnahme — adaptive Rotation bei Erhalt von Rate Limit (429).
Fehler 3: Ignorieren der Geolokalisierung der Proxys
Problem: Ihr Bot "lebt" auf einem Server in den USA, verwendet aber Proxys aus Russland, China oder Indien. Discord sieht die Diskrepanz zwischen dem angegebenen Standort des Servers und der IP-Adresse, was die Verdächtigkeit erhöht.
Lösung: Verwenden Sie Proxys aus demselben Land/Region, in der sich Ihr Discord-Server oder Ihre Zielgruppe befindet. Für internationale Projekte wählen Sie Proxys aus den USA oder Europa — sie haben einen besseren Ruf bei Discord.
Fehler 4: Fehlende Fehlerbehandlung
Problem: Der Bot erhält HTTP 429 (Rate Limit) und sendet weiterhin Anfragen, was die Situation verschärft. Discord erhöht die Sperrzeit mit jedem Versuch.
Lösung: Behandeln Sie immer Fehlercodes:
- 429 (Too Many Requests): Lesen Sie den Retry-After-Header und warten Sie die angegebene Zeit + 1-3 Sekunden. Wechseln Sie den Proxy.
- 403 (Forbidden): IP oder Token ist gesperrt. Wechseln Sie den Proxy, überprüfen Sie die Gültigkeit des Tokens.
- 401 (Unauthorized): Ungültiger Bot-Token. Überprüfen Sie den Token im Discord Developer Portal.
- 502/504 (Gateway-Fehler): Probleme mit dem Proxy oder der Discord API. Warten Sie 10-30 Sekunden, wechseln Sie den Proxy.
Fehler 5: Verwendung öffentlicher oder billiger Proxys
Problem: Kostenlose oder billige Proxys ($0.5-1 pro IP) sind oft bereits von Discord blockiert, da sie von Tausenden anderer Bots und Spammer verwendet wurden.
Lösung: Investieren Sie in qualitativ hochwertige Residential Proxys von zuverlässigen Anbietern. Überprüfen Sie die Reputation der IPs vor der Verwendung (Dienste wie AbuseIPDB, IPQualityScore). Ein qualitativ hochwertiger Proxy für $5-10 ist besser als 10 blockierte für $1.
Fehler 6: Gleicher User-Agent für alle Bots
Problem: Alle Ihre Bots verwenden den Standard-User-Agent der Bibliothek (z. B. "DiscordBot (discord.py 2.0)"). Discord gruppiert solche Verbindungen leicht und erkennt massive Automatisierung.
Lösung: Variieren Sie den User-Agent zwischen den Bots. Verwenden Sie realistische Werte:
# Python - benutzerdefinierter User-Agent
import discord
class CustomBot(discord.Client):
async def request(self, *args, **kwargs):
# User-Agent überschreiben
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)
Überwachung der Bot-Aktivitäten und Fehlerbehandlung
Eine ordnungsgemäße Überwachung ermöglicht es, Probleme zu erkennen, bevor sie zu massiven Sperren führen. Lassen Sie uns die wichtigsten Metriken und Tools zur Überwachung der Discord Bot-Aktivitäten über Proxys betrachten.
Metriken zur Überwachung
| Metrik | Was zu überwachen | Kritische Werte |
|---|---|---|
| Häufigkeit von Fehlern 429 | Anzahl der Rate Limit-Fehler pro Stunde | >10 pro Stunde — überprüfen Sie die Anfrage-Strategie |
| Häufigkeit von Fehlern 403 | Sperrungen von IPs oder Tokens | >3 pro Tag — Proxy kompromittiert |
| Verzögerung (latency) | Antwortzeit des Proxys + Discord API | >1000ms — langsamer Proxy, ersetzen |
| Erfolgsquote der Anfragen | Prozentsatz erfolgreicher Anfragen (HTTP 200-299) | <85% — Probleme mit dem Proxy oder der Logik des Bots |
| Betriebszeit des Proxys | Wie lange der Proxy ohne Probleme verwendet wird | <24 Stunden — möglicherweise IP in Sperre |
Beispiel eines Logging-Systems
# Python - fortgeschrittenes Logging mit Metriken
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
})
# Logger einrichten
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'Rate Limit auf 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} blockiert (403)')
else:
self.metrics['errors_other'] += 1
self.logger.error(f'Fehler {status_code} auf Proxy {proxy}')
def log_proxy_switch(self, old_proxy, new_proxy):
self.metrics['proxy_switches'] += 1
self.logger.info(f'Proxy gewechselt: {old_proxy} -> {new_proxy}')
def get_report(self):
total = self.metrics['requests_total']
if total == 0:
return "Keine Daten"
success_rate = (self.metrics['requests_success'] / total) * 100
avg_latency = sum(self.metrics['avg_latency']) / len(self.metrics['avg_latency'])
report = f"""
=== BOT ÜBERWACHUNGSBERICHT ===
Gesamtanfragen: {total}
Erfolgreiche: {self.metrics['requests_success']} ({success_rate:.1f}%)
Fehler 429 (Rate Limit): {self.metrics['errors_429']}
Fehler 403 (Blockierung): {self.metrics['errors_403']}
Andere Fehler: {self.metrics['errors_other']}
Durchschnittliche Verzögerung: {avg_latency:.0f}ms
Proxywechsel: {self.metrics['proxy_switches']}
=== STATISTIK ZU PROXYS ===
"""
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']} Anfragen, {stats['errors']} Fehler ({error_rate:.1f}%)\n"
return report
Die Überwachung der Bot-Aktivitäten und die proaktive Fehlerbehandlung sind entscheidend, um die Integrität und Funktionalität Ihrer Bots zu gewährleisten. Mit den richtigen Proxys und Strategien können Sie die Risiken minimieren und die Leistung maximieren.