A fishing bot for World of Warcraft: Forever, successor to the 2019 wow-fishing-bot, now with many improvements, so you can now fish forever. It watches the game window for the built-in interact icon over your bobber, listens to the game's own splash sound for the bite, and presses your Interact key.
Note
🎉 Announcement This was my very first Python project but, surprisingly, my most popular repo on GitHub. When I originally released this for WoW Classic, I had no idea it would get this much attention. I left this project unmaintained for 7 years, but I felt it was time for a return when I saw WoW Forever coming. I have come back to make many major improvements to the bot and its accessibility. The original bot was only suited for programmers, but now, I've designed it to be accessible to anyone by releasing GUI executables. Enjoy but understand the risk you're taking!
Caution
Blizzard uses Warden, an anti-cheat program running alonside World of Warcraft. Warden is known to scan for open window titles or process names. They can discover this project and ban "wowfish*". Thus, it is recommended that you clone, rename the window title and process, and run the python, itself.
Grab the file for your OS from the latest release:
| OS | file |
|---|---|
| Windows 10/11 (x86_64) | wowfish-<version>-windows-x86_64.exe |
| macOS (Apple Silicon) | wowfish-<version>-macos-arm64 |
| Linux (x86_64) | wowfish-<version>-linux-x86_64 |
The executables are not code-signed, so the first launch needs one extra step:
- Windows: SmartScreen shows "Windows protected your PC". Click More info, then Run anyway.
- macOS: Gatekeeper blocks it. Run
xattr -d com.apple.quarantine wowfish-*in Terminal once, andchmod +x wowfish-*if needed. Intel Macs: use the developer install below. - Linux:
chmod +x wowfish-*.
Verify downloads against SHA256SUMS.txt from the same release.
Clone and run in place:
git clone https://github.com/rsamf/wow-fishing-forever
cd wow-fishing-forever
uv sync --group dev
uv run wowfish doctor
Mac users need to install a virtual loopback device such as BlackHole, route the game's audio through it, and pick it on the Setup tab (this sets audio.capture = "device").
Caution
Use at your own risk. Automating gameplay violates Blizzard's terms of service and can get your account banned. This project exists for educational purposes only.
In the game:
- Options > Gameplay > Controls: enable Auto Loot.
- Options > Keybindings > Targeting: bind Interact With Target. wowfish assumes
f. - Put Fishing on an action bar key. wowfish assumes
1. - Type
/console SoftTargetIconGameObject 1once. This shows the gold gear icon over your bobber whenever it is close enough to interact with. - Options > Sound: set Ambience and Music to 0 and keep Sound Effects up.
Note to Linux users: The first synthetic key press opens a "Remote Desktop" dialog. Switch on Allow Remote Interaction and click Share. Until you do, key presses are silently dropped.
Note to Windows users: You may need to run the program in admin mode.
Stand at the water and run the GUI:
wowfish gui # or double-click wowfish-gui
Or run it from terminal:
wowfish doctor # checks the compatibility with this machine
wowfish config # creates the config file; edit cast_key / interact_key
wowfish run # measures the icon on its first cast; Ctrl-C stops
While the bot is running, keep the water in view and the game client in focus.
| command | what it does |
|---|---|
wowfish gui |
The setup and fishing window |
wowfish run [--minutes N] [--record-audio WAV] |
Fish from the terminal until Ctrl-C or the session limit; optionally save everything heard |
wowfish doctor |
Check OS, display, OpenCV, audio devices, game window, input, calibration, config |
wowfish calibrate SHOT.png [--save] |
Measure the interact icon's on-screen size from a screenshot |
wowfish watch --live |
Show what the matcher sees: phase, score, position, milliseconds per frame |
wowfish watch --from DIR |
Same, over saved frames; --save-frames writes annotated thumbnails |
wowfish listen [--list] [--device D] [--record WAV] |
Meter the game's audio (or loopback device D), print bites as they are heard |
wowfish verify-bite WAV [--save] |
Score a recording against every splash clip and pick the bite |
wowfish config |
Create the config file if needed and print the resolved settings |
wowfish config --path |
Print only the config file location |
wowfish --version |
Print the version |
Add --verbose before any command for debug logging. doctor prints the log file path.
This bot looks at pixels and listens to sound, and it presses the keys to cast and loot. It does not read memory, inject code, inject network traffic, or rely on an addon.
- Cast: It casts using your specified cast key. Each key press is simulated with a
key_hold_mstimer. - Detect bobber: WoW draws a gold gear sprite over the bobber when it is in interact range. If you do not see the gold gear sprite above the bobber, that means the bobber is out of range for the interact key to work, so the bot will recast. The bot will scan for the sprite using template matching from OpenCV, and it matches it against the game window with a masked, mean-subtracted template match. If it doesn't find it, it will recast until it does.
- Detect bite: WoW plays one of its splash clips when a fish bites. The bot fingerprints the first 0.8 seconds of each as a log-mel spectrogram with the gain removed. If there's a match, the bot will simulate the interact key, and auto-loot should pick up your fish. After all that, the bot recasts.
MIT. See LICENSE.
