Prat 3.0
In loving memory of Jon Akthar (Sylvanaar)
Hello WoW community, I'm LuciferCatnip, Sylvanaar was my coworker and my mentor. It goes without saying that Jon was an amazingly talented individual. He always seemed to know everything… but he once said to me "It's not about knowing the answers, it's about asking the right questions", he always challenged me to ask me the right questions until I would arrive at the answer on my own terms. Jon was also a champion of the open source movement, and so with special thanks to Gil from Curseforge as well as Sylvanaar's family, there's no better way to honor Sylvanaar's legacy than to keep his project going strong in the community.
If you'd like to help maintain Prat, please reach out to MysticalOS or LuciferCatnip directly. Thank you so much.
About
Prat-3.0 is a chat enhancement addon for World of Warcraft.
It is made up of 30+ smaller "modules" which each provide additional functionality, and can be enabled or disabled individually.
In game, type /prat for a menu. Or use the icon on one of the many data broker hosts.
Prat has just about every feature you can think of, and then some. Really. When I get some more time, I'll try and put together a full list (Even I have lost count)
(Thanks to Dreamsight for this partial list)
- Sync your chat settings across your account (Beta)
- Machine learning powered spam filter (Beta)
- Change arrows, buttons, mouse scroll for chat scroll, scroll speed
- you can add player color per channel, color per level, color per class
- timestamps (styled)
- Whether to show timestamp (what format the timestamp should be in)
- Whether to show players level
- You can select the option for channel "stickys" (last channel you used you auto use when hitting enter, that sort of thing – or last thing someone said)
- Change the looks of the chat's editbox - as well as where it appears (you can even undock it and move it to where you'd like it to be)
- Chat fading, fading delay
- You can change the font to a list of fonts, add an outline to it, monochrome it (if you don’t mind messing with files a bit you could probably even add other fonts to that list)
- Change the chat frame/chat box appearance
- Keep chat history between game sessions
- Set channel abbreviations
- Set brackets and color(or something instead of brackets)round player/lvl
- Alt invite option (press keyboard “alt” button and click on the player’s name to auto inv them)
- Raid icon
- Invite links - click them to invite the person
- URL copying
- Full chat copying + copy button
- Click timestamp to copy line
- Configurable alerts when your name or other word is mentioned
- Enables tell target /tt which whispers your target
- Alias options - make macros into short commands
- See names of players Alt characters
- Change chat sounds (incoming and outgoing as well as per channel)
- Achievements info and grats
- Full chat search and search box
- Customizable filters for advanced users
- Show item icon next to item links and player class icon next to player names
- Icon-only options for newcomers chat
- Optional flashing or font color change for chat tabs when a new message comes in.
You can enable/disable all Prat modules - don't have to have the ones you don't use running
While trying to reduce resource utilization, it is also important to note that some people prefer the features, and don't care that an addon uses 500k more.

-
View User Profile
-
Send Message
Posted Mar 20, 2026Class colors not working ONLY for Blizzard friend whispers?
Does anyone know why class colors aren't showing up for Battle.net whispers? I have the option enabled in settings, and it works fine for guild and instance chat, but my Blizzard friends' names just look like they're offline. Is this a known bug or am I missing a setting?
-
View User Profile
-
Send Message
Posted Mar 20, 2026In reply to user_bfjjzwhfx6snynhy: There's a fix in the latest alpha for this. I'll be doing a release soon with it shipped :)
-
View User Profile
-
Send Message
Posted Mar 19, 2026When using arrow up the call last message sent during a fight (channel raid or /ar), giving an error blocked action interface reserved by blizzard
-
View User Profile
-
Send Message
Posted Mar 18, 2026Broken. Shift-clicking to link anything in chat (item, names, whatever) causes error.
-
View User Profile
-
Send Message
Posted Mar 18, 2026Keep getting a taint from Prat3
4x Prat-3.0/modules/CopyChat.lua:691: attempt to perform boolean test on a secret boolean value (tainted by 'Prat-3.0')
[Prat-3.0/modules/CopyChat.lua]:691: in function 'linkfunc'
[Prat-3.0/services/links.lua]:55: in function <Prat-3.0/services/links.lua:45>
[tail call]: ?
[tail call]: ?
[Blizzard_UIPanels_Game/Mainline/ItemRef.lua]:383: in function 'ItemRefSetHyperlink'
[Blizzard_UIPanels_Game/Mainline/ItemRef.lua]:25: in function <...eBlizzard_UIPanels_Game/Mainline/ItemRef.lua:6>
[C]: ?
[C]: ?
[C]: ?
[C]: in function 'SetItemRef'
[Blizzard_ChatFrameBase/Shared/ChatFrame.lua]:23: in function <...eBlizzard_ChatFrameBase/Shared/ChatFrame.lua:19>
Locals:
self = <table> {
buttons = <table> {
}
hooks = <table> {
}
modules = <table> {
}
defaultModuleLibraries = <table> {
}
baseName = "Prat-3.0"
name = "Prat_CopyChat"
orderedModules = <table> {
}
lines = <table> {
}
db = <table> {
}
enabledState = true
PL = <table> {
}
timestamps = <table> {
}
moduleName = "CopyChat"
defaultModuleState = true
}
_ = "pratcopy"
frame = ChatFrame1 {
shouldFadeAfterInactivity = true
hasActiveChanges = false
isScrollingMessageFrame = true
systemPositionDirty = false
buttonFrame = ChatFrame1ButtonFrame {
}
snappedFrames = <table> {
}
alternativeDefaultLanguage = "Common"
hasOwnFontObject = true
oldAlpha = 0.447059
channelList = <table> {
}
FontStringContainer = Frame {
}
messageTypeList = <table> {
}
fontObject = table: 000001FD9F409380 {
}
systemNameString = "Chat Frame"
EditModeResizeButton = Button {
}
settingsDialogAnchor = <table> {
}
clickAnywhereButton = ChatFrame1ClickAnywhereButton {
}
isLayoutDirty = false
systemInfo = <table> {
}
fadeDurationSecs = 3
buttonSide = "left"
ResizeButton = ChatFrame1ResizeButton {
}
overrideFadeTimestamp = 12481.040000
EMEanchorTo = UIParent {
}
settingDisplayInfoMap = <table> {
}
fontStringPool = <table> {
}
EMEanchorPoint = "BOTTOMLEFT"
EMESystemID = 57
mouseOutTime = 0
hasBeenFaded = true
isInitialized = 1
historyBuffer = <table> {
}
defaultLanguage = "Common"
dirtySettings = <table> {
}
allowScroll = true
isUninteractable = false
name = "General"
checkedGMOTD = true
isDocked = 1
ScrollToBottomButton = Button {
}
isDisplayDirty = false
downKeys = <table> {
}
savedSystemInfo = <table> {
}
onDisplayRefreshedCallbacks = <table> {
}
visibleLines = <table> {
}
oldestFadingLineTimestamp = 18757.173000
textIsCopyable = false
editBox = ChatFrame1EditBox {
}
scrollOffset = 0
timeVisibleSecs = 120
mouseInTime = 0
zoneChannelList = <table> {
}
insertMode = 2
Background = ChatFrame1Background {
}
Selection = Frame {
}
ScrollBar = Frame {
}
allowAtGlues = true
system = 8
settingMap = <table> {
}
isStaticDocked = true
isLocked = true
}
(for state) = <table> {
1 = FontString {
}
2 = FontString {
}
3 = FontString {
}
4 = FontString {
}
5 = FontString {
}
6 = FontString {
}
7 = FontString {
}
8 = FontString {
}
9 = FontString {
}
10 = FontString {
}
11 = FontString {
}
12 = FontString {
}
13 = FontString {
}
}
(for control) = 1
_ = 1
visibleLine = FontString {
messageInfo = <table> {
}
}
(*temporary) = <no value>
(*temporary) = FontString {
messageInfo = <table> {
}
}
(*temporary) = <no value>
(*temporary) = nil
(*temporary) = nil
(*temporary) = nil
(*temporary) = "attempt to perform boolean test on a secret boolean value (tainted by 'Prat-3.0')"
-
View User Profile
-
Send Message
Posted Mar 20, 2026In reply to H8FaTe: Should be fixed in the latest alpha.
-
View User Profile
-
Send Message
Posted Mar 18, 2026Smart group doesnt work anymore. TBC anniversary
1x bad argument #2 to '?' (Usage: C_ChatInfo.SendChatMessage(params))
[Blizzard_ChatFrameBase/Shared/ChatFrameEditBox.lua]:275: in function <...s/Blizzard_ChatFrameBase/Shared/ChatFrameEditBox.lua:251>
[C]: in function 'SendText'
[Blizzard_ChatFrameBase/Shared/ChatFrameEditBox.lua]:370: in function <...s/Blizzard_ChatFrameBase/Shared/ChatFrameEditBox.lua:366>
Locals:
self = ChatFrame1EditBox {
history_index = 0
autoCompleteParams = <table> {
}
headerSuffix = ChatFrame1EditBoxHeaderSuffix {
}
text = "/smart"
hookedByAceTab3 = true
history_lines = <table> {
}
setText = 0
prompt = ChatFrame1EditBoxPrompt {
-
View User Profile
-
Send Message
Posted Mar 17, 202626x attempt to perform string conversion on a secret string value (tainted by 'Prat-3.0')
[Blizzard_ChatFrameBase/Mainline/FloatingChatFrame.lua]:2393: in function <...lizzard_ChatFrameBase/Mainline/FloatingChatFrame.lua:2392>
[Blizzard_ChatFrameBase/Mainline/FloatingChatFrame.lua]:2437: in function 'FCFManager_ShouldSuppressMessage'
[Prat-3.0/services/chatsections.lua]:304: in function 'SplitChatMessage'
[Prat-3.0/addon/addon.lua]:571: in function <Prat-3.0/addon/addon.lua:539>
[tail call]: ?
[Blizzard_ChatFrameBase/Shared/ChatFrame.lua]:14: in function 'OnEvent'
[Blizzard_ChatFrameBase/Mainline/FloatingChatFrame.lua]:127: in function <...lizzard_ChatFrameBase/Mainline/FloatingChatFrame.lua:126>
Locals:
chatType = "BN_WHISPER"
chatTarget = <no value>
(*temporary) = "bn_whisper"
(*temporary) = ";;"
-
View User Profile
-
Send Message
Posted Mar 17, 2026In reply to IgnaUY: This happens when a new friend logs in battle.net
-
View User Profile
-
Send Message
Posted Mar 20, 2026In reply to IgnaUY: Should be fixed in the latest alpha.
-
View User Profile
-
Send Message
Posted Mar 17, 2026Latest versions the copy frame doesnt show anything. Older version from february still works.
-
View User Profile
-
Send Message
Posted Mar 16, 2026Some messages are getting double timestamp.
https://i.imgur.com/ZBAPME8.jpeg
-
View User Profile
-
Send Message
Posted Mar 15, 2026Got this right as I logged in. There is no other LUA code for the error.
https://imgur.com/a/VUhbhnb
-
View User Profile
-
Send Message
Posted Mar 14, 2026Hello again, thank you for your work on the Alias module! It appears however to be not processing aliases at all at the moment. I am on the latest alpha version.
-
View User Profile
-
Send Message
Posted Mar 13, 2026Hello! Great addon! If you are able to implement, I have a minor feature request:
Please add an option in the "History" module's Scrollback Options to show or not show the days/hours/minutes/seconds and the =====End of Scrollback ======== text break that appears in chat.
Thank you!
-
View User Profile
-
Send Message
Posted Mar 13, 2026Even if I move the chat window to a different location, it returns to its original position after reconnecting.
The chat window position is properly fixed when using the original version, but this situation has persisted since the TBC version.
-
View User Profile
-
Send Message
Posted Mar 12, 2026IDK if this is the result of the class color icons breaking in chat but that is also an issue im having if not. But this popped up in my bugsack. Im on the latest version.
1x ...rfacePrat-3.0/modules/ChannelColorMemory.lua:283: attempt to compare local 'NoticeType' (a secret string value tainted by 'Prat-3.0')
[Prat-3.0/modules/ChannelColorMemory.lua]:283: in function '?'
[Ace3/CallbackHandler-1.0/CallbackHandler-1.0.lua]:109: in function <...Ons/Ace3/CallbackHandler-1.0/CallbackHandler-1.0.lua:109>
[C]: ?
[Ace3/CallbackHandler-1.0/CallbackHandler-1.0.lua]:19: in function <...Ons/Ace3/CallbackHandler-1.0/CallbackHandler-1.0.lua:15>
[Ace3/CallbackHandler-1.0/CallbackHandler-1.0.lua]:54: in function 'Fire'
[Ace3/AceEvent-3.0/AceEvent-3.0.lua]:120: in function <Ace3/AceEvent-3.0/AceEvent-3.0.lua:119>
Locals:
self = <table> {
modules = <table> {
}
defaultModuleLibraries = <table> {
}
name = "Prat_ChannelColorMemory"
orderedModules = <table> {
}
zoneChanIdx = <table> {
}
baseName = "Prat-3.0"
db = <table> {
}
enabledState = true
PL = <table> {
}
defaultModuleState = true
moduleName = "ChannelColorMemory"
}
_ = "CHAT_MSG_CHANNEL_NOTICE"
NoticeType = <no value>
_ = <no value>
_ = ""
_ = "1. General - Eversong Woods"
_ = <no value>
_ = ""
ServChanID = 1
number = 1
cname = "General"
(*temporary) = <table> {
42 = "Services"
2 = "Trade"
36 = "ChromieTime"
34 = "ShadowlandsPTRDiscussion"
35 = "MidnightTestDiscussion"
1 = "General"
33 = "ShadowlandsBetaDiscussion"
22 = "LocalDefense"
32 = "NewcomerChat"
}
(*temporary) = "1"
(*temporary) = "1"
(*temporary) = "1"
(*temporary) = nil
(*temporary) = nil
(*temporary) = "attempt to compare local 'NoticeType' (a secret string value tainted by 'Prat-3.0')"
-
View User Profile
-
Send Message
Posted Mar 13, 2026In reply to sicariusgaming87: Fixed in latest alpha :)
-
View User Profile
-
Send Message
Posted Mar 12, 2026Hi ! In bnet whispers the class color for playernames and character level display aren't working, the player name is always grey instead of being class colored and the character level doesn't appear at all. It's working fine in "standard" whispers, the issue only appears for bnet whispers. (and my setting is set on class color for realid and use character name)
Any idea why that could be ? I'm confused :)
Thanks !
-
View User Profile
-
Send Message
Posted Mar 12, 2026In reply to Silmachoute: Were you in an encounter/instance at the time?