# Key Features of Azeroth Auction Assassin: Complete Guide to WoW Market Sniping

> Master WoW market sniping with Azeroth Auction Assassin. Discover key features of this open-source sniper that monitors live market data and alerts you to profitable deals.

- Repository: [FF14 Advanced Market Search/azerothauctionassassin](https://github.com/ff14-advanced-market-search/azerothauctionassassin)
- Tags: how-to-guide
- Published: 2026-03-01

---

**Azeroth Auction Assassin is a high-performance, open-source auction house sniper for World of Warcraft that monitors live market data across all connected realms and instantly notifies users of profitable deals via Discord alerts.**

Azeroth Auction Assassin (AAA) enables traders to automate market surveillance across retail and Classic versions of World of Warcraft. The application architecture separates data acquisition, business logic, and presentation layers to provide a fast, configurable scanning experience. Understanding the key features of Azeroth Auction Assassin allows users to leverage its dual-interface design and advanced filtering capabilities for maximum gold-making efficiency.

## Cross-Realm and Cross-Region Scanning

AAA queries **all connected realms** for selected regions—EU, NA, EU Classic, NA Classic, and Season of Discovery (SoD) Classic—through a single request mechanism. The application utilizes region-specific JSON mappings stored in `AzerothAuctionAssassinData/` (such as [`eu-wow-connected-realm-ids.json`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/eu-wow-connected-realm-ids.json)) to resolve realm connections without manual configuration.

The Qt interface implements dynamic realm loading through [`utils/realm_data.py`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/utils/realm_data.py). When users select a region from the dropdown (`self.realm_region`), the application automatically populates the available realm list by referencing the static dictionaries defined in the realm data utility. This implementation ensures comprehensive market coverage across disparate auction house clusters without requiring individual realm queries.

## Real-Time Discord Alert System

The sniping functionality centers on immediate notification delivery. As soon as Blizzard updates auction data (approximately once per hour), the **Saddlebag Exchange** API pushes fresh pricing information. AAA fetches this data through [`utils/api_requests.py`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/utils/api_requests.py), applies user-defined discount thresholds (defaulting to 10%), and dispatches formatted Discord embeds via configurable webhook URLs (`self.discord_webhook_input`).

The core alert logic resides in [`mega_alerts.py`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/mega_alerts.py), imported as `from mega_alerts import Alerts` within the main application. When users activate monitoring by pressing **Start Alerts** (`self.start_button`), the `Item_And_Pet_Statistics` QThread executes continuous polling cycles, comparing live market data against saved wishlists and triggering webhook dispatches immediately upon threshold matches.

## Advanced Item and Pet Configuration

User preferences persist as JSON files within `AzerothAuctionAssassinData/`, specifically [`desired_items.json`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/desired_items.json) and [`desired_pets.json`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/desired_pets.json). These files map item IDs to maximum buyout prices in copper, enabling precise cost control.

The interface provides comprehensive list management through dedicated handlers:
- **Add/Update**: Modify individual entries with price validation
- **Import**: Bulk load external datasets
- **Erase**: Clear categories while preserving file structure  
- **Convert to PBS**: Export data to Point-Blank Sniper compatible format

This PBS compatibility allows seamless migration of existing sniper configurations from other tools, ensuring continuity for veteran traders transitioning to AAA.

## Item-Level (ilvl) and Bonus Targeting

Beyond basic price matching, AAA supports sophisticated gear filtering through the `make_ilvl_page` interface (lines L68-L78 in [`AzerothAuctionAssassin.py`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/AzerothAuctionAssassin.py)). Users can configure rules targeting specific item-level ranges while filtering for desirable bonus attributes including sockets, speed, leech, and avoidance.

The system accepts comma-separated **bonus ID lists** (e.g., `6652,10844`) to identify gear with specific augmentations. For advanced users, **Post-Midnight ilvl** calculations adjust effective item levels based on seasonal scaling factors, ensuring accurate valuation of time-gated equipment upgrades.

## Dual Interface Options: Qt5 Desktop and Electron

AAA provides two distinct frontend implementations catering to different runtime preferences.

**Native Qt5 Application ([`AzerothAuctionAssassin.py`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/AzerothAuctionAssassin.py))**:
- Full-featured desktop interface utilizing PyQt5
- Stacked page navigation with scrollable widget containers
- Native Windows app-ID registration for taskbar integration
- Direct filesystem access for immediate JSON configuration updates

**Electron Frontend (`node-ui/`)**:
- Lightweight Node.js wrapper requiring runtime ≥18
- Cross-platform compatibility including macOS (`npm run build:mac`) and Windows (`npm run build:win`)
- Identical configuration panels rendering through Chromium
- Reduced memory footprint compared to Python Qt runtime

The Electron implementation interacts with the same JSON configuration files stored in `AzerothAuctionAssassinData/`, ensuring settings synchronization between interface modes.

## Logging and Crash Recovery

Operational reliability is maintained through comprehensive logging infrastructure. The `StreamToFile` class (lines L63-L88) redirects all `stdout` and `stderr` streams to timestamped log files located at [`AzerothAuctionAssassinData/logs/aaa_log_YYYYMMDD_HHMMSS.txt`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/AzerothAuctionAssassinData/logs/aaa_log_YYYYMMDD_HHMMSS.txt).

Uncaught exceptions are captured by the `handle_exception` method and written to these logs with full stack traces, facilitating debugging without exposing sensitive data in the UI. This implementation ensures that scanning interruptions are documented for post-mortem analysis while maintaining application stability.

## Authentication and Security Architecture

Market data access requires a **Saddlebag Auction Assassin Token** generated through the Saddlebag Discord bot. Optional Blizzard OAuth credentials (client ID and secret) are supported for future API expansions, with input fields available in the Settings page.

Security is maintained through local-only credential storage. Authentication tokens reside exclusively in user-managed JSON configuration files within `AzerothAuctionAssassinData/`, never hard-coded in source or transmitted to third parties beyond the official Saddlebag Exchange endpoints defined in [`utils/api_requests.py`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/utils/api_requests.py).

## Configuration and Usage Examples

### Running the Python Application

```bash
pip install -r requirements.txt

python AzerothAuctionAssassin.py

```

Place configuration files in `AzerothAuctionAssassinData/` before launching:
- [`desired_items.json`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/desired_items.json) — Item ID to price mappings
- [`desired_pets.json`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/desired_pets.json) — Pet species ID configurations
- Discord webhook URL set via UI or direct JSON editing

Click **Start Alerts** to begin monitoring across configured regions.

### Item Configuration Format

[`AzerothAuctionAssassinData/desired_items.json`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/AzerothAuctionAssassinData/desired_items.json):

```json
{
  "12345": 250000,
  "67890": 1200000
}

```

Values represent maximum buyout prices in copper (100 copper = 1 silver, 10,000 copper = 1 gold).

### Launching the Electron Interface

```bash
cd node-ui
npm install
npm start

```

The Electron window loads the same configuration panels as the Qt version, persisting changes to the shared JSON files.

### Testing Discord Integration

```python
import requests

webhook_url = "https://discord.com/api/webhooks/YOUR_WEBHOOK_URL"
payload = {
    "embeds": [{
        "title": "AAA Test Alert",
        "description": "Item 12345 – 250k gold – EU-Realm 'Stormrage'",
        "color": 0x00ff00
    }]
}
requests.post(webhook_url, json=payload)

```

Replace `webhook_url` with the value configured in the Settings page to verify connectivity before live scanning.

## Summary

- **Multi-region support**: Scan all connected realms across EU, NA, and Classic variants using static realm mappings from [`utils/realm_data.py`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/utils/realm_data.py).
- **Instant notifications**: Receive Discord alerts via webhooks when items match price thresholds, powered by the [`mega_alerts.py`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/mega_alerts.py) engine.
- **Flexible targeting**: Configure items, pets, item-level ranges, and bonus IDs through JSON files with PBS import/export compatibility.
- **Dual interfaces**: Choose between the feature-rich Qt5 desktop application ([`AzerothAuctionAssassin.py`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/AzerothAuctionAssassin.py)) or the lightweight Electron wrapper (`node-ui/`).
- **Robust logging**: All operations are logged to timestamped files via `StreamToFile` for debugging and audit trails.
- **Secure authentication**: Saddlebag tokens stored locally in `AzerothAuctionAssassinData/` with optional Blizzard OAuth support.

## Frequently Asked Questions

### How does Azeroth Auction Assassin deliver alerts in real time?

The application polls the Saddlebag Exchange API—which aggregates Blizzard's hourly auction house updates—and processes results through the `Item_And_Pet_Statistics` QThread. When matches are found against [`desired_items.json`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/desired_items.json) or [`desired_pets.json`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/desired_pets.json), the [`mega_alerts.py`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/mega_alerts.py) module immediately dispatches formatted embeds to the Discord webhook URL configured in `self.discord_webhook_input`, typically delivering notifications within seconds of data availability.

### What are the differences between the Qt5 and Electron interfaces?

The Qt5 interface ([`AzerothAuctionAssassin.py`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/AzerothAuctionAssassin.py)) provides native desktop integration with PyQt5 widgets and direct filesystem access, ideal for Windows users wanting a traditional application experience. The Electron interface ([`node-ui/main.js`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/node-ui/main.js) and [`node-ui/renderer.js`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/node-ui/renderer.js)) offers a web-based frontend using Node.js, supporting cross-platform builds for macOS and Windows with reduced resource overhead. Both interfaces read from and write to the same `AzerothAuctionAssassinData/` JSON files, ensuring configuration portability.

### How do I configure item-level (ilvl) targeting for specific gear attributes?

Navigate to the ilvl configuration page generated by `make_ilvl_page` (lines L68-L78), where you can define minimum item levels, maximum buyout prices, and comma-separated bonus IDs (such as `6652` for sockets). The system supports Post-Midnight ilvl calculations for seasonal gear scaling and can filter for tertiary stats including speed, leech, and avoidance through the bonus ID system.

### Where are my authentication tokens stored?

Authentication credentials—including the required Saddlebag Auction Assassin Token and optional Blizzard OAuth details—are stored exclusively in local JSON files within the `AzerothAuctionAssassinData/` directory. The application does not transmit these tokens to unauthorized endpoints; they are used solely to authenticate requests against the Saddlebag Exchange API endpoints defined in [`utils/api_requests.py`](https://github.com/ff14-advanced-market-search/azerothauctionassassin/blob/main/utils/api_requests.py).