{"id":35161609,"url":"https://github.com/gigabyteblender/discordmessagedumper","last_synced_at":"2026-04-20T21:35:30.501Z","repository":{"id":267697369,"uuid":"902081736","full_name":"GigabyteBlender/DiscordMessageDumper","owner":"GigabyteBlender","description":"An application made using Python which helps you generate a list of discord message IDs, which you can then use to request the deletion of all those messages from discord support.","archived":false,"fork":false,"pushed_at":"2025-11-21T23:35:40.000Z","size":134,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-31T05:44:00.129Z","etag":null,"topics":["discord","discord-api","discord-token","programming","python3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GigabyteBlender.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-12-11T21:46:23.000Z","updated_at":"2025-11-21T23:35:43.000Z","dependencies_parsed_at":"2024-12-31T00:22:53.451Z","dependency_job_id":"a2e09074-8bb2-469d-8250-0c7a59b16bdc","html_url":"https://github.com/GigabyteBlender/DiscordMessageDumper","commit_stats":null,"previous_names":["zestyascq/discord-channel-and-messages-get","gigabyteblender/discordmessagedeletehelper","gigabyteblender/discord-channel-and-messages-get"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/GigabyteBlender/DiscordMessageDumper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GigabyteBlender%2FDiscordMessageDumper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GigabyteBlender%2FDiscordMessageDumper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GigabyteBlender%2FDiscordMessageDumper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GigabyteBlender%2FDiscordMessageDumper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GigabyteBlender","download_url":"https://codeload.github.com/GigabyteBlender/DiscordMessageDumper/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GigabyteBlender%2FDiscordMessageDumper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32067616,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T21:26:33.338Z","status":"ssl_error","status_checked_at":"2026-04-20T21:26:22.081Z","response_time":94,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["discord","discord-api","discord-token","programming","python3"],"created_at":"2025-12-28T18:15:54.967Z","updated_at":"2026-04-20T21:35:30.495Z","avatar_url":"https://github.com/GigabyteBlender.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Discord Message Delete Helper\n\nDiscord Message Delete Helper is a modern Python application with a Qt6-based GUI designed to assist users in generating a list of Discord message IDs and automatically sending deletion requests to Discord Support. The application features secure authentication, automated email generation, and a polished user interface.\n\n## Why was this made?\n\nDiscord's approach to message deletion has been a source of frustration for many users. The platform currently does not provide an official method for bulk deleting messages, which has led to the development of this tool.\n\n### Reasons Behind This Decision\n\n- **Preserving Context:** Discord claims that retaining messages is necessary to maintain context in conversations, especially for collaborative projects or communities that rely on historical information.\n- **Technical Limitations:** Mass deletion of messages can put a significant strain on Discord's database, which led to the removal of bulk deletion features in the past.\n- **Privacy and Security Concerns:** Discord's privacy policy prevents them from reviewing message content without cause, which complicates the process of verifying requests for mass deletion.\n- **Compliance with Regulations:** Discord must balance user requests with legal requirements like GDPR's Right to Erasure, which has led to changes in how they handle deletion requests.\n\n### Discord's Measures\n\nTo address these issues while still providing some level of control to users, Discord has implemented the following measures:\n- Allowing users to request their data package and submit message IDs for deletion.\n- Deleting messages on both sides in private DMs but retaining placeholders in server or group chats.\n- Gradually adapting their approach to GDPR compliance has affected how deletion requests are processed.\n\nThese measures, however, are often seen as inadequate by users who desire more control over their message history. The lack of an official bulk deletion feature has led to the creation of unofficial tools.\n\nIn response to this demand, some users have developed methods to generate lists of message IDs from the data provided by Discord, which can then be submitted for deletion. This approach aims to provide users with more control over their message history.\n\n## Features\n\n- **Modern Qt6 Interface:** Clean, intuitive GUI with sidebar navigation and card-based layouts\n- **Discord OAuth2 Authentication:** Securely connect to your Discord account with visual status indicators\n- **Message ID List Generation:** Compile a comprehensive list of message IDs from Discord data exports\n- **Real-time Progress Tracking:** Visual progress bars and status updates during message processing\n- **Automated Email Generation:** Generate formatted deletion request emails with user information\n- **SMTP Email Sending:** Send deletion requests directly to Discord Support with attachments\n- **Email Provider Presets:** Pre-configured settings for Gmail, Outlook, Yahoo, and custom SMTP servers\n- **Secure Configuration:** Encrypted storage of sensitive data (passwords, tokens) using industry-standard encryption\n- **Customizable Processing:** \n  - Select specific message directories\n  - Exclude specific channel IDs\n  - Configure default directories and preferences\n- **Error Resilience:** Graceful handling of corrupted files with detailed error logging\n\n## Prerequisites\n\n- Python 3.8 or higher\n- Discord Developer Account (for OAuth2 credentials)\n- Email account with SMTP access (Gmail, Outlook, Yahoo, or custom SMTP server)\n\n## Installation\n\n### 1. Clone the Repository\n\n```bash\ngit clone https://github.com/yourusername/discord-message-helper.git\ncd discord-message-helper\n```\n\n### 2. Install Dependencies\n\n```bash\npip install -r requirements.txt\n```\n\nRequired packages:\n- `PySide6` - Qt6 GUI framework\n- `requests` - HTTP requests for Discord API\n- `cryptography` - Encryption for sensitive data\n- `python-dotenv` - Environment variable management\n- `hypothesis` - Property-based testing (development)\n- `pytest` - Unit testing framework (development)\n\n### 3. Discord Application Configuration\n\n1. Visit [Discord Developer Portal](https://discord.com/developers/applications/)\n2. Create a new application\n3. Navigate to the **OAuth2** section\n4. Add `http://localhost:8000/callback` to your **Redirect URIs**\n5. Copy your **Client ID** and **Client Secret**\n\n### 4. Environment Configuration\n\nCreate a `.env` file in the project root (copy from `.env.example`):\n\n```bash\ncp .env.example .env\n```\n\nEdit the `.env` file with your Discord credentials:\n\n```bash\n# Discord OAuth Configuration\nDISCORD_CLIENT_ID=your_client_id_here\nDISCORD_CLIENT_SECRET=your_client_secret_here\nDISCORD_REDIRECT_URI=http://localhost:8000/callback\nDISCORD_SCOPE=identify email\n```\n\n**Important:** Never commit your `.env` file to version control. It contains sensitive credentials.\n\n## Usage\n\n### Running the Application\n\n```bash\npython src/main.py\n```\n\nOr use the provided run script:\n\n```bash\npython run_app.py\n```\n\n### Step-by-Step Guide\n\n#### 1. Discord Authentication\n\n1. Click the **🔐 Auth** tab in the sidebar\n2. Click **Connect to Discord**\n3. Your browser will open to Discord's authorization page\n4. Click **Authorize** to grant the application access\n5. The application will display your username, email, and user ID\n6. Your authentication is saved securely for future sessions\n\n#### 2. Process Messages\n\n1. Click the **📁 Messages** tab in the sidebar\n2. **Select Messages Directory:**\n   - Click **Browse** next to \"Messages Directory\"\n   - Navigate to your Discord data export's `messages` folder\n   - The application will validate the directory structure\n3. **Select Save Directory:**\n   - Click **Browse** next to \"Save Directory\"\n   - Choose where to save the message ID list\n4. **Exclude Channels (Optional):**\n   - Enter channel IDs to exclude, separated by commas\n   - Example: `123456789012345678, 987654321098765432`\n5. Click **Process Messages**\n6. Watch the progress bar as channels are scanned\n7. When complete, a `messages.txt` file will be saved to your chosen directory\n\n#### 3. Configure Email (First Time)\n\n1. Click the **✉️ Email** tab in the sidebar\n2. Expand the **SMTP Configuration** section\n3. **Select Email Provider:**\n   - Choose from **Gmail**, **Outlook**, **Yahoo**, or **Custom**\n   - Server and port are pre-filled for common providers\n4. **Enter Email Credentials:**\n   - Email address\n   - Password (stored encrypted)\n   \n   **Note for Gmail users:** You must use an [App Password](https://support.google.com/accounts/answer/185833), not your regular password.\n5. Click **Test Connection** to verify settings\n6. Your configuration is saved securely for future use\n\n#### 4. Send Deletion Request Email\n\n1. Review the email preview showing:\n   - Your Discord username and user ID\n   - Total messages and channels to be deleted\n2. Ensure the message ID list file is attached\n3. Click **Send Email**\n4. Confirm the action in the dialog\n5. Wait for confirmation that the email was sent successfully\n\n#### 5. Settings and Preferences\n\n1. Click the **⚙️ Settings** tab in the sidebar\n2. Configure:\n   - Default directories for messages and saves\n   - Email provider presets\n   - Application preferences\n3. Use **Clear Data** to reset authentication and configuration (with confirmation)\n\n## Email Configuration Guide\n\n### Gmail Setup\n\n1. **Enable 2-Factor Authentication** on your Google account\n2. **Generate an App Password:**\n   - Go to [Google Account Security](https://myaccount.google.com/security)\n   - Select \"2-Step Verification\"\n   - Scroll to \"App passwords\"\n   - Generate a new app password for \"Mail\"\n3. **In the Application:**\n   - Provider: Gmail\n   - Email: your.email@gmail.com\n   - Password: Use the 16-character app password (no spaces)\n   - Server: smtp.gmail.com (pre-filled)\n   - Port: 587 (pre-filled)\n\n### Outlook/Hotmail Setup\n\n1. **In the Application:**\n   - Provider: Outlook\n   - Email: your.email@outlook.com (or @hotmail.com)\n   - Password: Your regular Outlook password\n   - Server: smtp-mail.outlook.com (pre-filled)\n   - Port: 587 (pre-filled)\n\n**Note:** If you have 2FA enabled, you may need to generate an app password.\n\n### Yahoo Setup\n\n1. **Generate an App Password:**\n   - Go to [Yahoo Account Security](https://login.yahoo.com/account/security)\n   - Enable 2-Step Verification if not already enabled\n   - Generate an app password\n2. **In the Application:**\n   - Provider: Yahoo\n   - Email: your.email@yahoo.com\n   - Password: Use the app password\n   - Server: smtp.mail.yahoo.com (pre-filled)\n   - Port: 587 (pre-filled)\n\n### Custom SMTP Server\n\nFor other email providers:\n1. Find your provider's SMTP settings (usually in their help documentation)\n2. Select \"Custom\" as the provider\n3. Enter the SMTP server address and port\n4. Enter your email and password\n5. Enable TLS if required (usually yes for port 587)\n\n## Troubleshooting\n\n### Authentication Issues\n\n**Problem:** \"OAuth flow failed\" or \"Could not connect to Discord\"\n- **Solution:** \n  - Verify your `.env` file has correct `DISCORD_CLIENT_ID` and `DISCORD_CLIENT_SECRET`\n  - Ensure `http://localhost:8000/callback` is added to your Discord app's Redirect URIs\n  - Check that no other application is using port 8000\n  - Try disconnecting and reconnecting\n\n**Problem:** \"User not authenticated\" when trying to process messages\n- **Solution:** \n  - Click the Auth tab and connect to Discord first\n  - If already connected, try logging out and back in\n\n### Message Processing Issues\n\n**Problem:** \"Invalid directory\" error\n- **Solution:** \n  - Ensure you're selecting the `messages` folder from your Discord data export\n  - The folder should contain subdirectories with channel IDs\n  - Each channel folder should have a `messages.json` file\n\n**Problem:** \"No messages found\" or very few messages\n- **Solution:** \n  - Verify you've downloaded your complete Discord data package\n  - Check that you're not excluding channels unintentionally\n  - Some channels may be empty or have no messages from you\n\n**Problem:** Processing stops or freezes\n- **Solution:** \n  - Check the `logs/app.log` file for detailed error messages\n  - Some JSON files may be corrupted - the app will skip them and continue\n  - Try processing a smaller subset of channels first\n\n### Email Issues\n\n**Problem:** \"SMTP authentication failed\"\n- **Solution:** \n  - **Gmail:** Use an App Password, not your regular password\n  - **Outlook/Yahoo:** Enable app passwords if 2FA is enabled\n  - Verify your email and password are correct\n  - Use the \"Test Connection\" button to diagnose issues\n\n**Problem:** \"Connection timeout\" or \"Could not connect to SMTP server\"\n- **Solution:** \n  - Check your internet connection\n  - Verify the SMTP server address and port\n  - Some networks block SMTP ports - try a different network\n  - Check if your email provider requires specific security settings\n\n**Problem:** \"Attachment too large\"\n- **Solution:** \n  - Discord Support typically accepts attachments up to 25MB\n  - If your message list is larger, consider splitting it into multiple requests\n  - Compress the file before attaching\n\n### Configuration Issues\n\n**Problem:** \"Could not load configuration\" on startup\n- **Solution:** \n  - Ensure `.env` file exists in the project root\n  - Check that `.env` file has all required variables\n  - Verify file permissions allow reading\n  - Try copying from `.env.example` and filling in your values\n\n**Problem:** Settings not saving\n- **Solution:** \n  - Check file permissions in the project directory\n  - Ensure `config.json` is not read-only\n  - Check `logs/app.log` for permission errors\n\n### General Issues\n\n**Problem:** Application won't start\n- **Solution:** \n  - Verify Python 3.8+ is installed: `python --version`\n  - Reinstall dependencies: `pip install -r requirements.txt`\n  - Check for error messages in the terminal\n  - Try running with: `python -u src/main.py` for unbuffered output\n\n**Problem:** \"Module not found\" errors\n- **Solution:** \n  - Ensure you're in the project root directory\n  - Reinstall dependencies: `pip install -r requirements.txt`\n  - Check that you're using the correct Python environment\n\n**Problem:** UI looks broken or has rendering issues\n- **Solution:** \n  - Update PySide6: `pip install --upgrade PySide6`\n  - Try a different Qt style (modify in Settings)\n  - Check graphics drivers are up to date\n\n### Getting Help\n\nIf you encounter issues not covered here:\n\n1. **Check the logs:** Look in `logs/app.log` for detailed error messages\n2. **Search existing issues:** Check the GitHub issues page\n3. **Create a new issue:** Include:\n   - Operating system and Python version\n   - Error messages from logs\n   - Steps to reproduce the problem\n   - Screenshots if relevant (redact sensitive information)\n\n## Project Structure\n\n```\ndiscord-message-helper/\n├── src/\n│   ├── main.py                    # Application entry point\n│   ├── models/                    # Data models\n│   │   ├── user.py\n│   │   ├── message_data.py\n│   │   └── config.py\n│   ├── services/                  # Business logic\n│   │   ├── auth_service.py\n│   │   ├── message_service.py\n│   │   ├── email_service.py\n│   │   └── config_service.py\n│   ├── ui/                        # User interface\n│   │   ├── main_window.py\n│   │   ├── widgets/\n│   │   └── styles/\n│   └── utils/                     # Utilities\n│       ├── crypto.py\n│       ├── validators.py\n│       └── migration.py\n├── tests/                         # Test suite\n├── logs/                          # Application logs\n├── .env                           # Environment variables (not in git)\n├── .env.example                   # Environment template\n├── config.json                    # User configuration (encrypted)\n├── requirements.txt               # Python dependencies\n└── README.md\n```\n\n## Security and Privacy\n\n- **Encrypted Storage:** Email passwords and OAuth tokens are encrypted using Fernet symmetric encryption\n- **Local Processing:** All message processing happens locally on your machine\n- **No Data Collection:** The application does not send your data anywhere except to Discord (for auth) and your email server\n- **Secure Logging:** Sensitive information (passwords, tokens) is automatically redacted from log files\n- **Environment Variables:** Secrets are stored in `.env` file which is excluded from version control\n\n## Migration from Old Version\n\nIf you're upgrading from the old version (using `gui.py`, `server.py`, `config.py`):\n\n1. **Backup your data:**\n   ```bash\n   cp data.txt data.txt.backup\n   cp config.py config.py.backup\n   ```\n\n2. **Run the migration:**\n   - The application will automatically detect old configuration files\n   - On first run, it will migrate `config.py` to `.env`\n   - User data from `data.txt` will be migrated to encrypted `config.json`\n   - Backups are created automatically\n\n3. **Verify migration:**\n   - Check that `.env` file was created with your Discord credentials\n   - Verify you can authenticate successfully\n   - Old files will be renamed with `.backup` extension\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n### Development Setup\n\n1. Clone the repository\n2. Install development dependencies: `pip install -r requirements.txt`\n3. Run tests: `pytest tests/`\n4. Run property-based tests: `pytest tests/ -k property`\n\n### Code Style\n\n- Follow PEP 8 guidelines\n- Use type hints for function signatures\n- Write docstrings for public methods\n- Add tests for new features\n\n## License\n\nThis project is licensed under the MIT License - see the LICENSE file for details.\n\n## Acknowledgments\n\n- Built with [PySide6](https://www.qt.io/qt-for-python) for the modern Qt6 interface\n- Uses [Hypothesis](https://hypothesis.readthedocs.io/) for property-based testing\n- Encryption provided by [cryptography](https://cryptography.io/)\n\n## Disclaimer\n\nThis tool is provided as-is for educational purposes. Use at your own risk. Always ensure you comply with Discord's Terms of Service and applicable laws when requesting data deletion.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgigabyteblender%2Fdiscordmessagedumper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgigabyteblender%2Fdiscordmessagedumper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgigabyteblender%2Fdiscordmessagedumper/lists"}