Skip to content

Universal FIshing bot, using clever WinAPI techniques to avoid detection.

License

Notifications You must be signed in to change notification settings

stdNullPtr/Phishy

Repository files navigation

Phishy

Latest Release Downloads License

⚠️ USE AT YOUR OWN RISK ⚠️

An advanced out-of-process fishing automation tool for World of Warcraft using Windows API hooks

Features Β· How It Works Β· Getting Started Β· Configuration

Report Bug Β· Request Feature Β· Original C++ PoC

⚠️ Disclaimer

This tool is for educational purposes only. Using automation tools may violate the Terms of Service of World of Warcraft and could result in account suspension or ban. The authors are not responsible for any consequences of using this software.

πŸ“– Table of Contents

✨ Features

  • Out-of-process operation - Uses Windows API hooks without injecting into the game
  • Universal compatibility - Works with any WoW version (Classic, TBC, WotLK, Retail)
  • Audio-based detection - Detects fish by monitoring Windows master volume
  • Cursor change detection - Identifies bobber location via cursor icon changes
  • Automatic lure application - Supports up to two different lures with configurable timers
  • Wintergrasp support - Automatically logs out during Wintergrasp battles (WotLK)
  • State machine architecture - Predictable and debuggable behavior
  • Configuration validation - Clear error messages for misconfigured settings
  • Resource efficient - Minimal CPU usage with optimized polling

πŸ”§ How It Works

Phishy uses a clever combination of Windows APIs to automate fishing without reading or modifying game memory:

  1. The Eyes πŸ‘οΈ - Monitors cursor icon changes (EVENT_OBJECT_NAMECHANGE) to detect when hovering over the fishing bobber
  2. The Ears πŸ‘‚ - Listens for volume spikes in Windows master audio to detect fish splashing
  3. The Brain 🧠 - State machine that coordinates the fishing process
  4. The Hands βœ‹ - Simulates mouse clicks and keyboard inputs to catch fish

State Machine Flow

Start β†’ Apply Lure (optional) β†’ Cast Line β†’ Find Bobber β†’ Wait for Fish β†’ Catch Fish β†’ Repeat
                                                                    ↓
                                                          Logout (Wintergrasp) β†’ Wait β†’ Login

πŸ’» Requirements

  • Operating System: Windows 10/11 (Windows-specific APIs)
  • .NET Runtime: .NET 9.0 Desktop Runtime
  • Development (if building from source):
    • Visual Studio 2022 with .NET Desktop workload
    • .NET 9.0 SDK

πŸš€ Getting Started

Installation

  1. Download the appropriate version for your system:

    • For most users: Download the latest Windows 64-bit version from the Releases page
    • For 32-bit systems: Download the Windows x86 version from the Releases page

    Not sure which version to choose? If you're running Windows 10/11, choose the 64-bit version.

  2. Extract the ZIP file to a folder of your choice

  3. Run guess.exe (intentionally generic name)

  4. On first run, a configuration.yaml file will be created and opened in Notepad

  5. Configure the settings according to your WoW setup (see Configuration)

  6. Run guess.exe again to start fishing

Building from Source

  1. Clone the repository:

    git clone https://github.com/stdNullPtr/Phishy.git
    cd Phishy
  2. Open Phishy.sln in Visual Studio 2022

  3. Build the solution (Ctrl+Shift+B) in Release mode

  4. Find the executable at: Phishy\bin\Release\net9.0-windows\guess.exe

Alternatively, using the command line:

dotnet build -c Release

βš™οΈ Configuration

The bot uses a YAML configuration file (configuration.yaml) with the following options:

# Window Configuration
game-window-name: World of Warcraft  # Must match your WoW window title exactly

# Keybinds (use lowercase letters)
keyboard-key-start-fishing: 1        # Key bound to fishing ability
keyboard-key-apply-lure: 2          # Key bound to first lure (optional)
keyboard-key-apply-second-lure: 3   # Key bound to second lure (optional)
keyboard-key-logout: l              # Key bound to /logout macro (for Wintergrasp)

# Lure Settings
lure-buff-duration-minutes: 10      # Duration of first lure buff
second-lure-buff-duration-minutes: 5 # Duration of second lure buff (optional)

# Fishing Settings
fishing-channel-duration-seconds: 21 # How long to wait for a fish (default: 21)

# Audio Settings
setup-sound: true                   # Auto-configure Windows volume settings

# Wintergrasp Settings (WotLK only)
wait-for-wintergrasp: false         # Enable Wintergrasp logout/login cycle

Configuration Tips

  • Window Name: Must match exactly (case-sensitive). Common values:

    • World of Warcraft (Retail/Classic)
    • World of Warcraft Classic
    • Custom names if you've renamed your window
  • Keybinds: Use single lowercase letters or numbers that match your in-game keybinds

  • Lure Duration: Set slightly lower than actual buff duration to ensure reapplication

  • Channel Duration: Default is 21 seconds, increase if you have fishing skill bonuses

πŸ“‹ Usage

Initial Setup

  1. In-game preparation:

    • Bind your fishing ability to key 1 (or configure differently)
    • Bind your lure(s) to keys 2 and 3 (optional)
    • Create a /logout macro and bind it (for Wintergrasp feature)
    • Position yourself at a fishing spot
    • Zoom in completely (first-person view works best)
    • Set game sound to ~80%, disable ambient sounds
  2. Windows preparation:

    • The bot will automatically set Windows volume to maximum and mute it
    • Ensure no other applications are making sounds
  3. Running the bot:

    • Start guess.exe
    • Focus the WoW window
    • The bot will begin fishing automatically
    • Press DELETE key to stop

Best Practices

  • Test manual fishing first to ensure bobber lands near screen center
  • Fish in quiet areas to avoid sound interference
  • Keep the WoW window in focus and don't minimize it
  • Don't move the mouse while the bot is running

πŸ” Troubleshooting

Common Issues

"Failed retrieving window handle"

  • Ensure the window name in config matches exactly
  • WoW must be running before starting the bot

Bot doesn't detect bobber

  • Zoom in completely
  • Ensure bobber lands near screen center
  • Try adjusting camera angle
  • Check that cursor changes to "interact" icon over bobber

Bot doesn't catch fish

  • Increase game sound volume
  • Disable all ambient sounds
  • Ensure Windows volume is not muted by other apps
  • Fish in quieter areas

Configuration validation errors

  • Check the error message for specific issues
  • Ensure all required fields are filled
  • Verify keybinds are single characters

Debug Mode

Run from Visual Studio in Debug mode to see detailed logging output.

πŸ—οΈ Architecture

The project follows SOLID principles with recent architectural improvements:

Core Components

  • State Machine (FishingStateMachine.cs) - Manages fishing states and transitions
  • Hooks - Windows API hooks for input/output:
    • WinEventHook - Cursor change detection
    • MouseHook - Mouse input monitoring
    • KeyboardHook - Keyboard input monitoring
  • Services - Business logic implementations:
    • AudioDetector - Sound detection
    • WindowManager - Window operations
    • InputSimulator - Input simulation
    • ConsoleLogger - Logging
  • Utils - Low-level Windows API wrappers
  • Interfaces - Contracts for dependency injection

Recent Improvements

  • Thread-safe operations with proper locking
  • Comprehensive error handling with Win32 error codes
  • Resource disposal for COM objects
  • Configuration validation
  • Reduced CPU usage by 80%
  • Clean architecture with interfaces

🀝 Contributing

Contributions are welcome! Please follow these steps:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'feat: add amazing feature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Please ensure your code follows the existing patterns and includes appropriate error handling.

πŸ“œ License

This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0) - see the LICENSE file for details.

What this means:

  • βœ… Free to use, modify, and distribute
  • βœ… Commercial use is allowed
  • βœ… All derivatives MUST be open source
  • βœ… Network use requires source disclosure
  • ⚠️ Strong copyleft - changes must use AGPL-3.0

The AGPL ensures that all modifications and derivatives remain open source, even when used as a network service. If you modify this code and provide it as a service, you must share your source code.

πŸ™ Acknowledgments

  • Original C++ proof-of-concept: wow-fishbot
  • Windows API documentation and community
  • NAudio library for audio processing

Made with ❀️ by stdNullPtr

About

Universal FIshing bot, using clever WinAPI techniques to avoid detection.

Topics

Resources

License

Stars

Watchers

Forks

Contributors 2

  •  
  •  

Languages