Fengqing Liu 65d7821d3e Clean up client code and remove unused ReloadRequest exception
Removed unnecessary wrapper methods in the Twitch client and the unused
ReloadRequest exception to simplify the codebase.

Client cleanup (src/core/client.py):
- Removed unnecessary wrapper methods that just delegated to services:
  - _watch_sleep() - direct call to service
  - _watch_loop() - task created directly from service method
  - _maintenance_task() - unused wrapper removed
  - process_drops() - websocket callback uses service method directly
  - process_notifications() - websocket callback uses service method directly
  - process_stream_state() - websocket callback uses service method directly
  - process_stream_update() - websocket callback uses service method directly
  - get_priority() - direct call to service
  - _viewers_key() - direct call to static method
- Changed websocket topic callbacks to use service methods directly
- Removed ReloadRequest handling from run() method
- Net reduction: ~50 lines of unnecessary delegation code

Exception removal (src/exceptions.py):
- Removed unused ReloadRequest exception class
- This exception was never actually raised in the codebase

Task wrapper update (src/utils/async_helpers.py):
- Removed ReloadRequest from exception handling
- Updated docstrings to reflect this change

Benefits:
- Simpler code: Less indirection through unnecessary wrappers
- More direct: Websocket callbacks use service methods directly
- Cleaner: Removed unused exception class
- Easier to follow: Less jumping between wrapper and actual implementation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-25 14:00:49 +11:00
2025-10-24 21:57:11 +11:00
2025-10-19 18:28:05 +11:00
2025-10-19 22:39:31 +11:00
2024-01-30 17:16:29 +01:00
2025-10-20 20:07:32 +11:00
2025-10-20 20:07:32 +11:00

🌟 Twitch Drops Miner (TDM)

🎮 Automate Twitch Drop Farming — Effortlessly, Headlessly, and Bandwidth-Free

Stars Release Docker Pulls License Python

A modern, AI-assisted fork of DevilXD/TwitchDropsMiner — rebuilt for reliability, simplicity, and automation.
Twitch Drops Miner lets you automatically farm Twitch drops without ever opening a stream.
No more tab juggling, channel switching, or missing rewards — just set it, forget it, and collect.


Features

  • 🚀 Streamless Mining — Earn drops without streaming video (save bandwidth)
  • 🔍 Automatic Campaign Discovery — Detects new drop events automatically
  • ⚙️ Auto Channel Switching — Always mines the best available stream
  • 💾 Persistent Login — OAuth login saved via cookies
  • 🕹️ Simple Web UI — Manage everything from your browser
  • 🧩 Docker-Ready — One command to deploy anywhere

🐳 Using Pre-Built Image

docker pull rangermix/twitch-drops-miner:latest
docker run -d -p 8080:8080 -v $(pwd)/data:/app/data rangermix/twitch-drops-miner:latest

📦 Using Docker Compose

services:
  twitch-drops-miner:
    image: rangermix/twitch-drops-miner:latest
    ports:
      - "8080:8080"
    volumes:
      - ./data:/app/data
    restart: unless-stopped

🧑‍💻 From Source (for Developers)

# Python 3.10+
pip install -e .
python main.py

Visit 👉 http://localhost:8080


🌈 Using the Web App

  1. Open http://localhost:8080
  2. Login with your Twitch account (OAuth device flow)
  3. The miner auto-fetches available campaigns
  4. Select games you want to farm → click Reload
  5. TDM starts mining drops automatically 🎉

📝 Tip:
Make sure your Twitch account is linked to your game accounts →
👉 https://www.twitch.tv/drops/campaigns


⚠️ Notes & Warnings

⚠️ Avoid Watching on the Same Account
Watching Twitch manually while the miner runs can cause progress desync.
Use a different account if you want to watch live streams while mining.

💡 Requirements
Python 3.10+
Docker optional but recommended
Persistent data stored in /data


🖼️ Screenshot

screenshot

A clean, modern web UI lets you control everything from your browser.


💖 Support the Project

If TwitchDropsMiner saves you time or bandwidth, please consider supporting continued development:

Buy Me a Coffee

Star this repo → it really helps visibility!
💬 Open an issue or submit a PR if you want to contribute.

You can also support the original author @DevilXD:
👉 buymeacoffee.com/DevilXD or Patreon.


🎯 Project Goals

Goal Description
🎯 Focus Twitch Drops automation
🧩 Ease of Use Simple web UI
🛡️ Reliability Designed for continuous operation
⚙️ Efficiency Minimal API calls, Twitch-friendly
🐳 Deployment Docker-first, headless operation

🙏 Acknowledgments

This project is a fork of the brilliant TwitchDropsMiner by @DevilXD.
Huge thanks to DevilXD and all contributors who built the foundation.

For detailed translation and contribution credits, see Acknowledgments below.


🧾 Disclaimer

⚙️ This fork is heavily maintained and developed using AI-assisted coding (Claude Code).
While stable, the codebase reflects “vibe coding” patterns — always review changes before deployment.
Use responsibly.


🧑‍💻 Original Project Credits

@guihkx - For the CI script, CI maintenance, and everything related to Linux builds.
@kWAYTV - For the implementation of the dark mode theme.

@Bamboozul - For the entirety of the Arabic (العربية) translation.
@Suz1e - For the entirety of the Chinese (简体中文) translation and revisions.
@wwj010 - For the Chinese (简体中文) translation corrections and revisions.
@zhangminghao1989 - For the Chinese (简体中文) translation corrections and revisions.
@Ricky103403 - For the entirety of the Traditional Chinese (繁體中文) translation.
@LusTerCsI - For the Traditional Chinese (繁體中文) translation corrections and revisions.
@nwvh - For the entirety of the Czech (Čeština) translation.
@Kjerne - For the entirety of the Danish (Dansk) translation.
@roobini-gamer - For the entirety of the French (Français) translation.
@Calvineries - For the French (Français) translation revisions.
@ThisIsCyreX - For the entirety of the German (Deutsch) translation.
@Eriza-Z - For the entirety of the Indonesian translation.
@casungo - For the entirety of the Italian (Italiano) translation.
@ShimadaNanaki - For the entirety of the Japanese (日本語) translation.
@Patriot99 - For the Polish (Polski) translation and revisions (co-authored with @DevilXD).
@zarigata - For the entirety of the Portuguese (Português) translation.
@Sergo1217 - For the entirety of the Russian (Русский) translation.
@kilroy98 - For the Russian (Русский) translation corrections and revisions.
@Shofuu - For the entirety of the Spanish (Español) translation and revisions.
@alikdb - For the entirety of the Turkish (Türkçe) translation.
@Nollasko - For the entirety of the Ukrainian (Українська) translation and revisions.
@kilroy98 - For the Ukrainian (Українська) translation corrections and revisions.

Languages
Python 69.1%
JavaScript 20%
CSS 6.6%
HTML 3.9%
Dockerfile 0.4%