# 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, and guild bank transactions — 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 “did anyone get kicked from the guild while I was away?” 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.
- 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 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.5.1 (2026-05-25) — Bug fix roll-up & TBC / Anniversary polish

- Fixed the Guild Bank Log not populating on TBC and Anniversary when you opened the guild bank. The bank-open trigger event differs from Retail, and the addon was waiting for the wrong one — transactions appeared only after a long wait. The log now populates within a few seconds of opening the bank.
- Fixed duplicated rows in the Guild Bank Log where the same transaction showed up twice — once with the player name attached and once without (the Player column blank). The game returns the same transaction inconsistently across queries; the addon now collapses duplicates and backfills the missing name from whichever copy had it.
- Fixed Clear data on the Guild Bank Log silently re-populating itself shortly after you clicked it. A scheduled background refresh from a previous bank visit was firing after the wipe and putting the data back. Clear now cancels any pending refresh so the wipe sticks.
- Fixed the guild bank Move column showing a missing-glyph box between the two tab numbers on TBC / Anniversary. The Unicode arrow we were using isn't in the default font on those clients; swapped to a plain ASCII `>` so the cell always renders.
- Fixed Guild Log Actor column rendering as a wall of em-dashes for joins / quits / leaves — the game's API doesn't return an officer for those self-events. The Actor cell now falls back to the player's own name so each row reads naturally.
- Fixed Guild Log entries with blank fields that crept into the saved data on previous versions. A one-shot cleanup pass on first load drops the bad rows and tightens validation so they can't re-enter.
- Fixed Gratz skipping cross-realm guildmate achievements — achievements from guildmates on other realms in your connected guild now fire the same as same-realm.
- Fixed the main window closing alongside the Settings panel — opening Settings correctly left the main window open, but dismissing Settings then closed both. The main window now stays put when you close Settings.
- Fixed the main window's gear / help icons tainting other addons. After closing the TOG Tools window via ESC or a slash command, the icons would leak into the next addon that opened a similar window — clicking what looked like that addon's gear would open TOG Tools' settings instead. The cleanup now runs on every close path.
- New: Rank column added between Player and Actor in the Guild Log. Shows the player's new rank after a promotion / demotion, their last rank before quitting or being kicked, and the guild's default rank on joins. Invites stay blank because the invitee may decline.
- New: Auto-fit columns on every log tab. Columns now size to fit the longest visible entry instead of staying at fixed widths with empty space inside — the table reflows when you change filters, sort, or load new data. Only the rightmost stretchy column truncates when the window is narrow; every other column always shows its full content.
- New: Item links in every log table are now interactive. Hover an item link in the Mail / Trade / Guild Bank Log tables to see the tooltip; shift-click to insert it into your open chat box. Previously the links rendered as colored bracketed text but didn't respond to mouse — they were just decoration.
- New diagnostic commands: `/togt gldump [N]` dumps the newest N Guild Log entries to chat verbatim, and `/togt gbdump [N]` does the same for the Guild Bank Log — useful when reporting bugs.
- Verbose debug output now includes a millisecond timestamp on every line so event bursts are easier to follow.

v0.5.0 (2026-05-24) — Gratz Module & Guild Bank Log

- New Gratz tab — profile-based auto-congratulations on guild / party events. Three trigger types in this release: Achievement (Retail), Level up (party), and Level up (guild). Build a named profile, pick a trigger and criteria (min points / level band / Nth-level milestones), tick the destination channels, write a message using template placeholders like `[player]` / `[achievement]` / `[link]` / `[guild]`, and save. See the Gratz section above for the full feature list.
- Skip-self is automatic and per-(profile, target, event) cooldowns prevent spam from duplicate events. Combat-safe send queue too — nothing sent during combat is lost.
- New Guild Bank Log sub-tab under Logs — snapshots every guild bank transaction the moment you open the guild bank and keeps the history far beyond the short rolling window the game itself retains. Filter by character, transaction type, and date range; sort any column. Built with future cross-tool syncing in mind so two players logging the same bank can later share / merge histories without duplicates.
- Fixed the main window closing alongside the Settings panel. Opening Settings via the gear icon, `/togt settings`, or the minimap right-click correctly left the main window open, but dismissing Settings then closed both. The main window now stays put when you close Settings.
- Fixed Gratz skipping cross-realm guildmate achievements. Same-realm guildmates were gratzed correctly, but cross-realm guildmates were silently filtered out. Their achievements now fire the same as same-realm.

v0.4.0 (2026-05-24) — Logs Nexus, per-module toggles, Retail compatibility

- New Logs tab with three sub-tabs — Mail, Trade, and Guild. Captures everything that comes in and out so you can search, sort, and filter mail history, trade history, and guild roster events long after the fact. See the Logs section above for details.
- New per-module on/off toggles in the addon settings. Don't want the Mailbox Stale Watcher? Turn it off — the tab disappears from the main window and its background engine stops. Re-enable any time without losing data.
- Two new icons in the main window's bottom-right strip: a help (i) icon that shows tab-specific help on hover, and a settings (gear) icon that opens the addon settings panel directly. Hover any column header in the data tables for column-specific tooltips too.
- Fixed TOG Tools not loading on the current Retail (Midnight 12.0.x) client — the supported game-version list now covers the current Retail patch range. Same fix shipped for the !TOGT companion in v0.1.1.
- Fixed the addon settings panel crashing on Retail when opened via the new gear icon (was passing a string category name to an API that now requires the numeric ID).

v0.3.5 (2026-05-23) — Name Prefix duplicate-on-recall fix

- Fixed Name Prefix doubling your nickname when ElvUI's Up-arrow chat history recalled a previously-sent message. Pressing Up → Enter to re-send a message now ships it once with a single prefix instead of (YourName): (YourName): hi.

v0.3.4 (2026-05-22) — TBC chat-typed logout fix

- Fixed /camp, /exit, and /logout being blocked when typed in chat on The Burning Crusade and Anniversary realms with Name Prefix active. The v0.3.3 attempt didn't fully clear the issue on those clients; the Name Prefix hook has been reworked to use a different chat input event that leaves Blizzard's logout chain completely untouched, so typing those commands in chat now logs you out as expected.