Loading menu...

Rick Homan profile picture

Rick Homan

IT Operations Specialist | Problem Solver | Tech Enthusiast

Discord Repost Detector Bot

Overview

This Python-based Discord bot is designed to tackle the common issue of repetitive media posts within server channels. It intelligently detects and manages reposted images, GIFs, and video clips, helping maintain channel clarity.

Utilizing perceptual hashing (pHash), the bot identifies visually similar media, making it resilient to minor edits, format changes, or compression differences often seen in reposts. After a one-time setup by an administrator to designate an alert channel, the bot automatically flags duplicates, notifies the designated channel, and removes the repost.

Key Features

  • Visual Similarity Detection: Employs perceptual hashing (pHash) via ImageHash & Pillow for robust detection of image/GIF reposts, even with slight modifications.
  • Video Frame Analysis: Checks keyframes (start, middle, end) of videos using OpenCV to identify duplicate video content.
  • Mandatory Admin Setup: Ensures controlled activation via a one-time `!setalertchannel` command in the desired notification channel.
  • Centralized Alerts: Redirects all repost notifications ("shame messages") to the configured channel, keeping primary channels clean.
  • Automatic Repost Handling: Deletes the detected repost message and alerts the designated channel with details (original poster, link to original message).
  • Persistent Memory: Stores media hashes per-server in an SQLite database for efficient lookup.
  • Configurable: Sensitivity, file size limits, bot prefix, and logging are adjustable via an `.env` file.

How It Works (Simplified)

The bot follows these core steps:

  • Listens for messages containing supported media (images, GIFs, videos).
  • Downloads the media content for analysis.
  • Calculates perceptual hash(es) for the media (pHash for images/GIF frames).
  • Queries the database for visually similar hashes previously posted within that server.
  • If a similar hash is found & alert channel is configured: Sends an alert to the designated channel and deletes the repost message.
  • If no similar hash found OR alert channel not set: Stores the new hash in the database (or prompts for setup if a repost is detected before the alert channel is configured).

Technology Stack

  • Language: Python 3.8+
  • Discord Library: nextcord
  • Image Processing: Pillow, ImageHash (pHash)
  • Video Processing: OpenCV (requires FFmpeg system dependency)
  • Database: SQLite
  • Configuration: python-dotenv
  • Dependencies: numpy, aiohttp

Status & Source Code

This project demonstrates practical application of image/video processing and Discord bot development. Setup involves managing dependencies and Discord API configuration.

The full source code, detailed setup instructions, and contribution guidelines are available on GitHub.

License: MIT

View on GitHub

Discord Repost Detector Bot

Übersicht

Dieser Python-basierte Discord-Bot wurde entwickelt, um das häufige Problem wiederholter Medien-Posts in Server-Kanälen zu lösen. Er erkennt und verwaltet intelligent wiederveröffentlichte Bilder, GIFs und Videoclips und trägt so zur Übersichtlichkeit der Kanäle bei.

Durch die Verwendung von perzeptuellem Hashing (pHash) identifiziert der Bot visuell ähnliche Medien, was ihn widerstandsfähig gegen geringfügige Bearbeitungen, Formatänderungen oder Kompressionsunterschiede macht, die oft bei Reposts auftreten. Nach einer einmaligen Einrichtung durch einen Administrator zur Festlegung eines Benachrichtigungskanals markiert der Bot automatisch Duplikate, benachrichtigt den festgelegten Kanal und entfernt den Repost.

Hauptmerkmale

  • Visuelle Ähnlichkeitserkennung: Verwendet perzeptuelles Hashing (pHash) über ImageHash & Pillow zur robusten Erkennung von Bild-/GIF-Reposts, auch bei leichten Modifikationen.
  • Video-Frame-Analyse: Überprüft Schlüsselbilder (Anfang, Mitte, Ende) von Videos mit OpenCV, um doppelte Videoinhalte zu identifizieren.
  • Obligatorische Admin-Einrichtung: Gewährleistet eine kontrollierte Aktivierung über einen einmaligen `!setalertchannel`-Befehl im gewünschten Benachrichtigungskanal.
  • Zentralisierte Benachrichtigungen: Leitet alle Repost-Benachrichtigungen ("Shame Messages") an den konfigurierten Kanal weiter und hält primäre Kanäle sauber.
  • Automatische Repost-Behandlung: Löscht die erkannte Repost-Nachricht und benachrichtigt den festgelegten Kanal mit Details (ursprünglicher Poster, Link zur Originalnachricht).
  • Persistenter Speicher: Speichert Medien-Hashes pro Server in einer SQLite-Datenbank für effiziente Suche.
  • Konfigurierbar: Empfindlichkeit, Dateigrößenbeschränkungen, Bot-Präfix und Logging sind über eine `.env`-Datei anpassbar.

Funktionsweise (Vereinfacht)

Der Bot folgt diesen Kernschritten:

  • Lauscht auf Nachrichten, die unterstützte Medien (Bilder, GIFs, Videos) enthalten.
  • Lädt den Medieninhalt zur Analyse herunter.
  • Berechnet perzeptuelle(n) Hash(es) für das Medium (pHash für Bilder/GIF-Frames).
  • Frägt die Datenbank nach visuell ähnlichen Hashes ab, die zuvor auf diesem Server gepostet wurden.
  • Wenn ein ähnlicher Hash gefunden wird & Benachrichtigungskanal konfiguriert ist: Sendet eine Benachrichtigung an den festgelegten Kanal und löscht die Repost-Nachricht.
  • Wenn kein ähnlicher Hash gefunden wird ODER Benachrichtigungskanal nicht eingerichtet ist: Speichert den neuen Hash in der Datenbank (oder fordert zur Einrichtung auf, wenn ein Repost vor der Konfiguration des Benachrichtigungskanals erkannt wird).

Technologie-Stack

  • Sprache: Python 3.8+
  • Discord-Bibliothek: nextcord
  • Bildverarbeitung: Pillow, ImageHash (pHash)
  • Videoverarbeitung: OpenCV (benötigt FFmpeg-Systemabhängigkeit)
  • Datenbank: SQLite
  • Konfiguration: python-dotenv
  • Abhängigkeiten: numpy, aiohttp

Status & Quellcode

Dieses Projekt demonstriert die praktische Anwendung von Bild-/Videoverarbeitung und Discord-Bot-Entwicklung. Die Einrichtung umfasst die Verwaltung von Abhängigkeiten und die Konfiguration der Discord-API.

Der vollständige Quellcode, detaillierte Einrichtungsanweisungen und Richtlinien für Beiträge sind auf GitHub verfügbar.

Lizenz: MIT

Auf GitHub ansehen