Skip to main content

Discord Message Dredger

A quick and simple library to dredge through the Discord export package from the Request A Copy of Your Data option on Discord, since the internal file structure and just looking through it by hand is a bit of a pain.

Installation

python3 -m pip install discord-export-dredger

Usage

usage: dredger.py [-h] [-dm USERNAME] [-c CHANNEL SERVER] [-gc GROUP_CHAT] [-sl SAVE_LOCATION] package

positional arguments:
  package               the name or path path from current directory to the Discord data export package to fetch messages from

options:
  -h, --help            show this help message and exit
  -dm, --direct-message USERNAME
                        fetch your DM messages with the provided user in the package. Must use their true Discord username, not their display name.
  -c, --channel CHANNEL SERVER
                        fetch your messages in the specified channel from the specified server.
  -gc, --group-chat GROUP_CHAT
                        fetch your messages in a specified group chat
  -sl, --save-location SAVE_LOCATION
                        location to extract the files to. Current working directory if none provided

Python Library

class DiscordMessagesExport:
    """
    A representation and extactor for the saved messages in a Discord Request Your Own Data export package.
    """
    def __init__(self, data_package : str):
        """
        Create a new DiscordMessagesExport object with input Discord export package from the Discord Request Your Own Data function.
        
        :param self: this object
        :param data_package: str path to the Discord data export package
        :type data_package: str
        """

    def fetch_chat_with_name(self, name : str, save_path : str = "") -> str:
        """
        Fetch and extrat the chat with input name from the archive package and save it to save_path, 
        or the current working directory if none provided, and return the path to the message.json as a str
        
        :param self: this object
        :param name: name of chat to fetch
        :type name: str
        :param save_path: path to extract the chat to, or the current working directory if none provided
        :type save_path: str
        :return: string path to the messages.json file of the extracted chat
        :rtype: str
        """

    def fetch_channel_json_for_chat_with_name(self, name : str, save_path : str = "") -> str:
        """
        Fetch and extrat the chat and channel.json for the chat with input name from the archive package and save it to save_path, 
        or the current working directory if none provided, and return the path to the message.json as a str
        channel.json comes in format {"id": "1374964094884515882", "type": "DM", "recipients": ["231295438253195264", "793684523774509077"]}
        
        :param self: this object
        :param name: name of chat to fetch channel.json for
        :type name: str
        :param save_path: path to extract the chat and channel.json to, or the current working directory if none provided
        :type save_path: str
        :return: string path to the channel.json file of the extracted chat
        :rtype: str
        """

    def get_Direct_Message(self, recipient_username : str, save_path : str = "") -> str:
        """
        Extract and return the path to the messages.json file of the Direct Message chat with the user with recipient_username.
        
        :param self: this object
        :param recipient_username: username of the other side of the direct message chat
        :type recipient_username: str
        :param save_path: path to extract the chat to, or the current working directory if none provided
        :type save_path: str
        :return: string path to the messages.json file of the extracted chat
        :rtype: str
        """

    def get_Channel(self, channel_name : str, server_name : str, save_path : str = "") -> str:
        """
        Extract and return the path to the messages.json file of the input channel chat in input server.
        
        :param self: this object
        :param channel_name: name of the channel in the server to fetch the message.json of
        :type channel_name: str
        :param server_name: the server that the input channel is in
        :type server_name: str
        :param save_path: path to extract the chat to, or the current working directory if none provided
        :type save_path: str
        :return: string path to the messages.json file of the extracted chat
        :rtype: str
        """

    def get_Group_Chat(self, group_chat_name : str, save_path : str = "") -> str:
        """
        Extract and return the path to the messages.json file of the group chat with input name.
        
        :param self: this object
        :param group_chat_name: name of group chat to fetch the message.json of
        :type group_chat_name: str
        :param save_path: path to extract the chat to, or the current working directory if none provided
        :type save_path: str
        :return: string path to the messages.json file of the extracted chat
        :rtype: str
        """

    @staticmethod
    def fetch_channel_info_from_chat_path(chat_path : str) -> str:
        """
        Given the path to a message.json, fetch the channel.json associated with it.
        channel.json comes in format {"id": "1374964094884515882", "type": "DM", "recipients": ["231295438253195264", "793684523774509077"]}
        
        :param chat_path: path to message.json
        :type chat_path: str
        :return: str path to channel.json for the message.json
        :rtype: str
        """
        return str(pathlib.Path(chat_path).parent / "channel.json")

Note

If this was useful for you, let me know with a Star, Watch, or comment in Discussions on Github. It's just nice to know that someone out there got use out of my code since there's really no way to tell otherwise.

Changelog

V 1.0.0

  • Initial Release

V 1.1.0

  • Added ability to fetch the channel.json via either path to message.json or via name of chat

Metadata

Release files for discord-export-dredger 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for discord-export-dredger 1.1.0
File Size Uploaded Provenance
discord_export_dredger-1.1.0.tar.gz 4.7 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for discord-export-dredger 1.1.0
File Interpreter ABI Platform
discord_export_dredger-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 10.7 kB

Release files / discord_export_dredger-1.1.0.tar.gz

Download URL discord_export_dredger-1.1.0.tar.gz
Size 4.7 kB
Tags Source
SHA-256 checksum
How to use checksums
3660c177f385055914d441f8e3310bf7adf64abe5c5f6e19ec9847803a9c78a7
BLAKE2b-256 checksum
How to use checksums
f5a808d64e610eb8b9bc3d0ceb01c241c7913409e4e59b802af839510c68fc30
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / discord_export_dredger-1.1.0-py3-none-any.whl

Download URL discord_export_dredger-1.1.0-py3-none-any.whl
Size 6.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1a6b3fffe03ace1dbc15e20f4f1997fcac3e9d00be307a49f575f03211e4b9df
BLAKE2b-256 checksum
How to use checksums
3727956415c57b7f32d64f336d6b347fd22650ffb74b0d930b89c063b3b2404b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for discord-export-dredger 1.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page