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 Dec 13, 2025Since the update yesterday I have been receiving the error below at logon.
1x Prat-3.0-3.9.78/modules/ChannelSticky.lua:429: Usage: SecureHook([object], method, [handler]): Attempting to hook a non existing target
[tail call]: ?
[C]: ?
[Bartender4/libs/AceHook-3.0-9/AceHook-3.0.lua]:210: in function <...eBartender4/libs/AceHook-3.0/AceHook-3.0.lua:118>
[Bartender4/libs/AceHook-3.0-9/AceHook-3.0.lua]:340: in function 'SecureHook'
[Prat-3.0-3.9.78/modules/ChannelSticky.lua]:429: in function 'RegisterSmartGroup'
[Prat-3.0-3.9.78/modules/ChannelSticky.lua]:323: in function 'OnModuleEnable'
[Prat-3.0-3.9.78/addon/modules.lua]:187: in function <Prat-3.0/addon/modules.lua:176>
[C]: ?
[Atlas/Libs/AceAddon-3.0-13/AceAddon-3.0.lua]:66: in function <...faceAtlas/Libs/AceAddon-3.0/AceAddon-3.0.lua:61>
[Atlas/Libs/AceAddon-3.0-13/AceAddon-3.0.lua]:523: in function 'EnableAddon'
[Atlas/Libs/AceAddon-3.0-13/AceAddon-3.0.lua]:536: in function 'EnableAddon'
[Atlas/Libs/AceAddon-3.0-13/AceAddon-3.0.lua]:626: in function <...faceAtlas/Libs/AceAddon-3.0/AceAddon-3.0.lua:611>
Locals:
-
View User Profile
-
Send Message
Posted Dec 10, 2025Hello !
In the latest version when using Total RP 3: RP Name in Roll, the rand messages don't show up in chat if Prat is enabled.
Any idea how to fix this please ? :)
Thanks !
-
View User Profile
-
Send Message
Posted Dec 9, 2025Error since 11.2.7 when trying to use SmartGroup:
39x bad argument #2 to '?' (Usage: C_ChatInfo.SendChatMessage(params))
[Blizzard_ChatFrameBase/Shared/ChatFrameEditBox.lua]:275: in function 'SendText'
[Blizzard_ChatFrameBase/Shared/ChatFrameEditBox.lua]:370: in function <...s/Blizzard_ChatFrameBase/Shared/ChatFrameEditBox.lua:366>
Locals:
self = ChatFrame1EditBox {
hookedByAceTab3 = true
languageHeader = FontString {
}
focusLeft = ChatFrame1EditBoxFocusLeft {
}
focusRight = ChatFrame1EditBoxFocusRight {
}
chatFrame = ChatFrame1 {
}
languageID = 7
headerSuffix = ChatFrame1EditBoxHeaderSuffix {
}
text = "/smart"
history_lines = <table> {
}
autoCompleteParams = <table> {
}
tabCompleteTableIndex = 1
at3matches = <table> {
}
setText = 0
pratFrame = Frame {
}
addSpaceToAutoComplete = true
language = "Common"
lDrag = Frame {
}
rDrag = Frame {
}
at3curMatch = 0
NewcomerHint = ChatFrame1EditBoxNewcomerHint {
}
history_index = 0
prompt = ChatFrame1EditBoxPrompt {
}
header = ChatFrame1EditBoxHeader {
}
addHighlightedText = true
focusMid = ChatFrame1EditBoxFocusMid {
}
}
addHistory = 1
type = "SMARTGROUP"
text = "hi"
-
View User Profile
-
Send Message
Posted Dec 8, 2025Links seem broken so addons like MDT and Twitch Emotes v2 simply don't function.
-
View User Profile
-
Send Message
Posted Dec 8, 2025Hello,
In the latest version, the TRP3 module for emotes coloring doesn't seem to be working, it works fine with prat disabled.
Would be nice if anyone had a fix for that !
Thanks !
-
View User Profile
-
Send Message
Posted Dec 8, 2025I'm getting the following error on login:
1x ...izzard_ChatFrameBase/Mainline/ChatFrameOverrides.lua:447: attempt to call method 'UpdateDefaultChatTarget' (a nil value)
[Blizzard_ChatFrameBase/Mainline/ChatFrameOverrides.lua]:447: in function 'MessageEventHandler'
[Prat-3.0-3.9.76/addon/addon.lua]:703: in function <Prat-3.0/addon/addon.lua:624>
[tail call]: ?
[Blizzard_ChatFrameBase/Shared/ChatFrame.lua]:4: in function 'OnEvent'
[Blizzard_ChatFrameBase/Mainline/FloatingChatFrame.lua]:126: in function <...lizzard_ChatFrameBase/Mainline/FloatingChatFrame.lua:125>
Locals:
self = ChatFrame1 {
oldestFadingLineTimestamp = 1343371.213000
systemInfo = <table> {
}
fadeDurationSecs = 3
shouldFadeAfterInactivity = true
buttonSide = "left"
checkedGMOTD = true
textIsCopyable = false
overrideFadeTimestamp = 1343371.213000
dirtySettings = <table> {
}
hasActiveChanges = false
isScrollingMessageFrame = true
name = "General"
isUninteractable = false
buttonFrame = ChatFrame1ButtonFrame {
}
snappedFrames = <table> {
}
isDocked = 1
alternativeDefaultLanguage = "Common"
isInitialized = 1
hasOwnFontObject = true
allowScroll = true
oldAlpha = 0.156863
channelList = <table> {
}
FontStringContainer = Frame {
}
messageTypeList = <table> {
}
savedSystemInfo = <table> {
}
timeVisibleSecs = 120
fontObject = table: 000001AEE7192A30 {
}
systemNameString = "Chat Frame"
zoneChannelList = <table> {
}
EditModeResizeButton = Button {
}
onDisplayRefreshedCallbacks = <table> {
}
insertMode = 2
system = 8
Selection = Frame {
}
ScrollBar = Frame {
}
Background = ChatFrame1Background {
}
ScrollToBottomButton = Button {
}
downKeys = <table> {
}
defaultLanguage = "Common"
settingDisplayInfoMap = <table> {
}
ResizeButton = ChatFrame1ResizeButton {
}
clickAnywhereButton = ChatFrame1ClickAnywhereButton {
}
scrollOffset = 0
systemPositionDirty = false
settingMap = <table> {
}
settingsDialogAnchor = <table> {
}
visibleLines = <table> {
}
historyBuffer = <table> {
}
isStaticDocked = true
editBox = ChatFrame1EditBox {
}
isLocked = true
allowAtGlues = true
}
event = "CHAT_MSG_CHANNEL_NOTICE"
arg1 = "YOU_CHANGED"
arg2 = ""
arg3 = ""
arg4 = "4. Newcomer Chat"
arg5 = ""
arg6 = ""
arg7 = 32
arg8 = 4
arg9 = "Newcomer Chat"
arg10 = 0
arg11 = 1
arg12 = nil
arg13 = 0
arg14 = false
arg15 = false
arg16 = false
arg17 = false
type = "CHANNEL_NOTICE"
info = <table> {
colorNameByClass = false
r = 0.266667
id = 72
g = 1
flashTab = false
ignoreChatTypeProcessing = false
sticky = 1
flashTabOnGeneral = false
b = 0.576471
}
shouldDiscardMessage = false
coloredName = ""
channelLength = 16
infoType = "CHANNEL4"
chatGroup = "CHANNEL"
chatTarget = "4"
accessID = 1
typeID = 3
(*temporary) = nil
(*temporary) = ChatFrame1 {
oldestFadingLineTimestamp = 1343371.213000
systemInfo = <table> {
}
fadeDurationSecs = 3
shouldFadeAfterInactivity = true
buttonSide = "left"
checkedGMOTD = true
textIsCopyable = false
overrideFadeTimestamp = 1343371.213000
dirtySettings = <table> {
}
hasActiveChanges = false
isScrollingMessageFrame = true
name = "General"
isUninteractable = false
buttonFrame = ChatFrame1ButtonFrame {
}
snappedFrames = <table> {
}
isDocked = 1
alternativeDefaultLanguage = "Common"
isInitialized = 1
hasOwnFontObject = true
allowScroll = true
oldAlpha = 0.156863
channelList = <table> {
}
FontStringContainer = Frame {
}
messageTypeList = <table> {
}
savedSystemInfo = <table> {
}
timeVisibleSecs = 120
fontObject = table: 000001AEE7192A30 {
}
systemNameString = "Chat Frame"
zoneChannelList = <table> {
}
EditModeResizeButton = Button {
}
onDisplayRefreshedCallbacks = <table> {
}
insertMode = 2
system = 8
Selection = Frame {
}
ScrollBar = Frame {
}
Background = ChatFrame1Background {
}
ScrollToBottomButton = Button {
}
downKeys = <table> {
}
defaultLanguage = "Common"
settingDisplayInfoMap = <table> {
}
ResizeButton = ChatFrame1ResizeButton {
}
clickAnywhereButton = ChatFrame1ClickAnywhereButton {
}
scrollOffset = 0
systemPositionDirty = false
settingMap = <table> {
}
settingsDialogAnchor = <table> {
}
visibleLines = <table> {
}
historyBuffer = <table> {
}
isStaticDocked = true
editBox = ChatFrame1EditBox {
}
isLocked = true
allowAtGlues = true
}
(*temporary) = "attempt to call method 'UpdateDefaultChatTarget' (a nil value)"
-
View User Profile
-
Send Message
Posted Dec 7, 2025Suddenly prat acts weird with sound when you load character and enter the game . I cant even disable sound in module tab. How to fix?
-
View User Profile
-
Send Message
Posted Dec 7, 2025Current update blocks emotes from showing with twitchemotesv2 :3
-
View User Profile
-
Send Message
Posted Dec 8, 2025In reply to kaseyfullofjoy: Also blocks mdt routes.
-
View User Profile
-
Send Message
Posted Dec 6, 2025Is this addon still going to be active in Midnight?
-
View User Profile
-
Send Message
Posted Dec 9, 2025In reply to Mabon78:
It appears so, looking at Github.
-
View User Profile
-
Send Message
Posted Dec 6, 2025Latest version bug: MDT routes/links can no longer be imported (works fine on previous version).
-
View User Profile
-
Send Message
Posted Dec 7, 2025In reply to RexChan: Same bug here
-
View User Profile
-
Send Message
Posted Dec 6, 2025has anyone figured out how to hide the editbox since the update?
-
View User Profile
-
Send Message
Posted Dec 6, 2025In reply to xXxGUZxXx:
You can hide the border and background but that makes typing unhealthy for the eyes.
-
View User Profile
-
Send Message
Posted Dec 4, 2025Hello there, so ever since the latest patch and update from prat 3.0 I no longer see colored class names whenever I write to bnet friends and yes I have this option enabled. Any ideas on how to fix it?
-
View User Profile
-
Send Message
Posted Dec 3, 2025Version 3.9.75-1-g37515aa fixed my issue where I couldn't see my own messages.
Thanks!
#7489288, #7489337
-
View User Profile
-
Send Message
Posted Dec 3, 2025Hello,
If I an help with my LUA Error :
30x Prat-3.0-3.9.75/addon/addon.lua:767: attempt to index field 'CHAT_OPTIONS' (a nil value)
[Prat-3.0-3.9.75/addon/addon.lua]:767: in function <Prat-3.0/addon/addon.lua:624>
[tail call]: ?
[Blizzard_ChatFrameBase/Shared/ChatFrame.lua]:4: in function 'OnEvent'
[Blizzard_ChatFrameBase/Mainline/FloatingChatFrame.lua]:126: in function <...lizzard_ChatFrameBase/Mainline/FloatingChatFrame.lua:125>
Locals:
self = <table> {
modules = <table> {
}
defaultModuleLibraries = <table> {
}
baseName = "Prat-3.0"
name = "Prat"
orderedModules = <table> {
}
enabledState = true
hooks = <table> {
}
defaultModuleState = true
}
this = ChatFrame4 {
oldestFadingLineTimestamp = Infinite
tellTimer = 9507.556000
shouldFadeAfterInactivity = true
buttonSide = "left"
textIsCopyable = false
overrideFadeTimestamp = 0
isScrollingMessageFrame = true
isUninteractable = false
buttonFrame = ChatFrame4ButtonFrame {
}
isDocked = 1
alternativeDefaultLanguage = "Orc"
hasOwnFontObject = true
allowScroll = true
oldAlpha = 0.247059
channelList = <table> {
}
messageTypeList = <table> {
}
timeVisibleSecs = 120
defaultLanguage = "Orc"
isInitialized = 1
fontObject = table: 0000029E0200F0F0 {
}
scrollOffset = 0
name = "Whisper"
isLayoutDirty = true
isDisplayDirty = true
onDisplayRefreshedCallbacks = <table> {
}
visibleLines = <table> {
}
zoneChannelList = <table> {
}
fadeDurationSecs = 3
historyBuffer = <table> {
}
editBox = ChatFrame4EditBox {
}
ScrollToBottomButton = Button {
}
ResizeButton = ChatFrame4ResizeButton {
}
insertMode = 2
Background = ChatFrame4Background {
}
ScrollBar = Frame {
}
FontStringContainer = Frame {
}
clickAnywhereButton = ChatFrame4ClickAnywhereButton {
}
PratTextures = <table> {
}
isLocked = true
}
event = "CHAT_MSG_WHISPER"
PRE_ADDMESSAGE = "Prat_PreAddMessage"
POST_ADDMESSAGE = "Prat_PostAddMessage"
FRAME_MESSAGE = "Prat_FrameMessage"
POST_ADDMESSAGE_BLOCKED = "Prat_PostAddMessageBlocked"
arg1 = "+1 "
arg2 = "Belgio-Ysondre"
arg3 = ""
arg4 = ""
arg5 = "Belgio-Ysondre"
arg6 = ""
arg7 = 0
arg8 = 0
arg9 = ""
arg10 = 0
arg11 = 52
arg12 = "Player-1335-067DDE00"
arg13 = 0
arg14 = false
arg15 = false
message = <table> {
CC = ""
OUTPUT = "[From]|cffffffff[|r|Hplayer:Belgio-Ysondre:52:WHISPER:BELGIO-YSONDRE|h|cfffff468Belgio|r|h|cffffffff]|r: +1"
CHANNEL = ""
PLAYER = "|cfffff468Belgio|r"
TYPEPOSTFIX = ": "
Cc = ""
CHANNELNUM = ""
cC = ""
TYPEPREFIX = "[From]"
Pp = "|cffffffff]|r"
SERVER = ""
PATTERN_TIMES = <table> {
}
CAPTUREOUTPUT = false
sS = ""
Ss = ""
pP = "|cffffffff[|r"
ORG = <table> {
}
MESSAGE = "+1"
}
info = <table> {
colorNameByClass = false
r = 1
id = 8
g = 0.501961
flashTab = true
ignoreChatTypeProcessing = false
sticky = 1
flashTabOnGeneral = true
b = 1
}
process = 1
CMEResult = true
m = <table> {
CC = ""
OUTPUT = "[From]|cffffffff[|r|Hplayer:Belgio-Ysondre:52:WHISPER:BELGIO-YSONDRE|h|cfffff468Belgio|r|h|cffffffff]|r: +1"
CHANNEL = ""
PLAYER = "|cfffff468Belgio|r"
TYPEPOSTFIX = ": "
Cc = ""
CHANNELNUM = ""
cC = ""
TYPEPREFIX = "[From]"
Pp = "|cffffffff]|r"
SERVER = ""
PATTERN_TIMES = <table> {
}
CAPTUREOUTPUT = false
sS = ""
Ss = ""
pP = "|cffffffff[|r"
ORG = <table> {
}
MESSAGE = "+1"
}
proxy = Frame {
onDisplayRefreshedCallbacks = <table> {
}
oldestFadingLineTimestamp = Infinite
shouldFadeAfterInactivity = true
textIsCopyable = false
overrideFadeTimestamp = 0
isScrollingMessageFrame = true
visibleLines = <table> {
}
allowScroll = true
FontStringContainer = Frame {
}
timeVisibleSecs = 10
isDisplayDirty = false
fontObject = ScrollingMessageFrame {
}
insertMode = 2
fadeDurationSecs = 3
scrollOffset = 0
historyBuffer = <table> {
}
}
r = 1
g = 0.501961
b = 1
id = 8
isChatLineCensored = false
msg = "[From]|cffffffff[|r|Hplayer:Belgio-Ysondre:52:WHISPER:BELGIO-YSONDRE|h|cfffff468Belgio|r|h|cffffffff]|r: +1"
(*temporary) = nil
(*temporary) = ChatFrame4 {
oldestFadingLineTimestamp = Infinite
tellTimer = 9507.556000
shouldFadeAfterInactivity = true
buttonSide = "left"
textIsCopyable = false
overrideFadeTimestamp = 0
isScrollingMessageFrame = true
isUninteractable = false
buttonFrame = ChatFrame4ButtonFrame {
}
isDocked = 1
alternativeDefaultLanguage = "Orc"
hasOwnFontObject = true
allowScroll = true
oldAlpha = 0.247059
channelList = <table> {
}
messageTypeList = <table> {
}
timeVisibleSecs = 120
defaultLanguage = "Orc"
isInitialized = 1
fontObject = table: 0000029E0200F0F0 {
}
sc
-
View User Profile
-
Send Message
Posted Dec 3, 2025In reply to Heldwiin: The same error...
-
View User Profile
-
Send Message
Posted Dec 3, 2025Prat's 11.2.7 updates broke the functionality of addons like MiniLoot which work if I disable Prat.