# TOG Tools — Lightweight Utility Toolkit for WoW Classic

TOG Tools is a small collection of quality-of-life utilities that don't need a full addon of their own. Each tool lives in its own tab inside a single tidy window — open with `/togt`. New tools will be added over time.

## Features

### Name Prefix

Automatically adds a nickname in front of your chat messages so guildmates know who is talking, even when your character name doesn't match the name everyone knows you by. Useful for shared accounts, alts, or anyone who goes by a different name in their community.

- Set any nickname you like — it will be inserted at the start of your message before it is sent
- Fully configurable format: choose between (Name):, [Name], Name —, or any pattern you want using a simple format string
- Live preview updates as you type so you always see exactly what your messages will look like
- Enable per channel: Say, Guild, Officer, Party, Raid, Instance / Battleground, or a specific custom channel by name
- Option to skip messages that start with ! so addon commands like `!keys` or `!roll` are never prefixed
- Option to suppress the prefix automatically on characters where your nickname already matches your character's name
- Works on all supported WoW versions — Classic Era, TBC, Wrath, Cataclysm, Mists, and Retail

### Mailbox Stale Watcher

Track when mail is about to expire across every alt on your account, so a stack of Black Lotus or a hard-earned BoE never gets auto-deleted because you forgot to visit the mailbox in time.

- Captures a snapshot of every alt's mailbox each time that character opens a mailbox — no need to log into each alt to check.
- One-line chat alert when you log in if any alt has mail close to expiration. Threshold is configurable (default 2 days, adjustable 1–7).
- Tab lists every alt with expiring mail, showing each mail's sender, subject, and time remaining so you know exactly which character to switch to.
- Shows how recent each alt's snapshot is — snapshots more than a week old are flagged so you know to refresh them by visiting the mailbox.
- Account-wide: data is shared across all your alts on every realm.
- Read-only — this tab tells you what's about to expire, but does not open, reply, or delete mail. You handle that in-game like normal.

### Logs

Persistent history of mail, trades, guild events, guild bank transactions, and whispers — a single tab with sub-tabs for each log type. Everything you send and receive is captured automatically so you can answer “who mailed me that Black Lotus last week?” or “what did that one player whisper me about the AH listing?” weeks after the fact.

- Mail Log — every mail received and sent: sender / recipient, subject, items, money. Multi-item Take-All mails merge into one entry so a 12-item mail doesn't produce 12 rows.
- Trade Log — every completed player-to-player trade: both sides of items and money, plus a dedicated column for enchants applied via the trade window's enchant slot. Arena and battleground trades are skipped to avoid noise.
- Guild Log — snapshots your guild's event history (joins, leaves, kicks, promotes, demotes, invites) and keeps entries beyond the in-game ~100-event cap. Per-guild buckets so alts in different guilds keep independent histories.
- Guild Bank Log — snapshots every guild bank transaction (deposits, withdrawals, moves between tabs, repairs, money in / out) the moment you open the guild bank, and keeps entries beyond the short rolling window the game itself retains. Per-guild buckets, item links you can shift-click into chat, and built-in support for syncing entries with other tools down the road. Guild banks were added in TBC, so this sub-tab is empty on Classic Era for now — a planned integration with a future companion tool will fill that in.
- Whisper Log — every whisper sent or received, both in-game and Battle.net. Search the message body or the partner name with substring filters, scope by character / direction / date range, or narrow to just GM whispers or just Battle.net. Each row tags Battle.net whispers and Blizzard GM whispers in the Other column so they stand out at a glance.
- Per-sub-tab filters: filter by character / alt, date range, and event type or direction. Click any column header to sort.
- Date range presets — Last 24 hours / 7 days / 30 days / All — plus a Custom day picker that expands an inline calendar grid so you can jump to any specific date.
- Account-wide: every alt's activity lands in the same store; switch the Character filter to scope to one alt.
- Old entries past the retention threshold (default 90 days) are pruned automatically.
- Each log type can be turned on or off independently in the addon settings.

### Gratz

Auto-congratulate guildmates and partymates when something gratz-worthy happens. Create named profiles — each one names a trigger type, criteria, destination channels, and a message template — then turn the ones you want firing on.

- Trigger: Achievement — Retail only. Fires when a guildmate (or anyone visible) earns an achievement. Filter by minimum point value so you only celebrate the big ones.
- Trigger: Level up (party) — Fires when a party member levels up inside a configurable min/max level band. Works on every WoW version.
- Trigger: Level up (guild) — Fires when a guildmate levels up. Optional “only every Nth level” filter for milestone-only gratzing (e.g. 10 / 20 / 30 / ...).
- Template placeholders — `[player]`, `[achievement]`, `[link]`, `[points]`, `[category]`, `[level]`. Mix and match.
- Channels per profile — Guild, Officer, Party, Raid, Say, Yell, Instance. Channels you're not connected to are silently skipped.
- Cooldown per profile — prevents the same gratz firing twice when an event accidentally duplicates (e.g. across a loading screen). Default 5 minutes.
- Skip-self is automatic — the engine never congratulates you on your own events.
- Combat-safe — messages composed during combat queue and flush automatically when combat ends.

### Addon Load Monitor

A diagnostic tab that shows every installed addon at a glance — how much memory it uses, whether it loaded successfully, and how long it took to load during the loading screen. Helpful for spotting heavy or slow addons, missing dependencies, or addons that failed to load.

- One row per installed addon: name, memory used, load time, and status
- Sort by any column — click the header. Status sorts failures first so you spot problems immediately
- Status badges: Loaded, On Demand, Disabled, Missing, Dep Missing, Wrong Version, Corrupt TOC, Outdated
- Summary bar shows total addons, how many loaded / failed / disabled, total memory used, and the overall loading-screen duration
- Accurate sub-millisecond load times for every addon when the !TOGT companion is installed (a tiny no-UI helper that loads first and records the timing — auto-installed via CurseForge)
- Window resizes gracefully — columns compact and text truncates instead of wrapping

## Slash Commands

- `/togt` — open the main window
- `/togt np` — jump straight to the Name Prefix settings tab
- `/togt al` — jump straight to the Addon Load Monitor tab
- `/togt mail` — jump straight to the Mailbox Stale Watcher tab
- `/togt gratz` — open the Gratz tab (also `/togt gz`)
- `/togt logs` — open the Logs tab (last viewed sub-tab)
- `/togt logs mail` — jump straight to Logs > Mail (also `/togt ml`)
- `/togt logs trade` — jump straight to Logs > Trade
- `/togt logs guild` — jump straight to Logs > Guild
- `/togt logs guildbank` — jump straight to Logs > Guild Bank (also `/togt gb`)
- `/togt logs whispers` — jump straight to Logs > Whispers (also `/togt wl`)
- `/togt settings` — open the addon settings panel
- `/togt vc` — check addon versions across the guild (Classic only)

## Requirements

- Ace3 (AceAddon-3.0, AceDB-3.0, AceGUI-3.0, AceConsole-3.0) — auto-installed by CurseForge
- !TOGT companion — tiny helper that records full addon load timing (auto-installed by CurseForge)
- WoW Classic Era, TBC, Wrath, Cataclysm, Mists of Pandaria, or Retail — all versions supported

## Support

If you have any questions, bug reports, or feature requests, please feel free to reach out on Discord!

## Recent Updates

v0.6.1 (2026-05-30) — Whisper Log fix (Classic)

- Fixed a Lua error on Classic when right-clicking a name in the Whispers log and choosing Whisper — it now opens a whisper correctly. (Retail was unaffected.)

v0.6.0 (2026-05-29) — Developer Tools: Item Database

- New: a Developer Tools switch in the addon settings (off by default). When enabled it reveals an Item DB tab — a tool aimed at addon developers that builds a searchable local catalog of the game's items, so you can look any item up by name and grab its link. Most players won't need it; leave Developer Tools off and nothing changes. Everything else in TOG Tools is exactly as before.

v0.5.4 (2026-05-28) — Whisper Log: clickable partner names

- In the Whispers log, the other person's name is now clickable — left-click to open a whisper to them, right-click for the standard name menu (whisper, invite, inspect, ignore, report), exactly like clicking a name in chat. Battle.net partners stay as plain text for now.

v0.5.3 (2026-05-27) — Whisper Log

- New: Whispers sub-tab under Logs. Every whisper you send or receive — in-game and Battle.net — is logged automatically with the partner's name, the message body, the timestamp, and the character you were on at the time. Search the body for a phrase, search the partner name for a substring, scope by direction (Received / Sent), by type (In-game / Battle.net), by date range, or narrow to just Blizzard GM whispers. Each row tags Battle.net whispers and GM whispers in the Other column so they jump out. Capture can be turned on or off independently in the addon settings; clearing the saved history lives in Settings > Clear Data > Clear Whisper Log.
- New slash command: `/togt logs whispers` jumps straight to the new sub-tab (also `/togt wl`).

v0.5.2 (2026-05-26) — TSM coexistence, Mail Log accuracy, Bank Tab filter

- Fixed Mail Log capturing nothing when TradeSkillMaster was installed. TSM rewrites the in-game mail-take functions for its own accounting, and our capture got knocked off the chain by that — auction returns, sales, and personal mail all silently vanished from the log while TSM was loaded. The Mail Log now detects TSM at mail-open and runs a parallel observation path that watches what disappears from your inbox each time you take something. With TSM disabled the log works exactly as before; with TSM enabled it now captures every mail you take.
- Fixed consecutive mails from the same sender collapsing into one Mail Log row — e.g. taking five expired Auction House returns in a row produced one entry instead of five. The addon now uses the per-mail expiration timestamp and first item link to distinguish individual mails, so each take gets its own row even when sender and subject pattern are similar.
- New: Bank Tab filter on the Guild Bank Log sub-tab. A new dropdown in the filter row narrows the table to a specific bank tab — Tab 1 through Tab 7, or the money log. Moves between tabs surface under either tab's filter so a Tab 2 → Tab 5 move appears whether you pick Tab 2 or Tab 5. Defaults to All tabs.
- The four per-log Clear data buttons (Mail / Trade / Guild / Guild Bank) moved from each sub-tab's filter row into a new Clear Data tab in the addon settings, using the game's standard confirm popup. The capture engines and the saved entries themselves are unchanged — only the button location moved.
- Fixed tooltip text rendering doubled or misplaced in the Settings panel. Hovering an option in the Modules section sometimes showed the description text written twice on top of itself, or pushed it far away from the option. Both cases were caused by leftover hover handlers from previously-opened addon windows leaking into the Settings panel; the addon now cleans up those handlers properly so option tooltips render once and right next to the option.
- Native item tooltips and corpse / unit / target tooltips around the game no longer get re-positioned by the addon. A previous fix for the Settings tooltips accidentally affected every tooltip in the UI; the smart-positioning is now scoped to the addon's own Settings page only.