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)
- AI 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.
What's the current status of this addon? Has a new maintainer been found?
In reply to Rerox:
Please refer to https://www.wowinterface.com/downloads/info10783-Prat3.0.html until the Curseforge packager is sorted out.
Is the latest version 3.9.1-6-20501 from github
or 3.9.2a from wowinterface?
In reply to Fred7:
That's my build on github.
From a quick check the package on wowinterface is essentially my package with the exception of the name popup/alert fix and the chatframe copy paste frame fix, no idea why those were left out.
If someone is not using those features, they're practically identical.
In reply to MrFIXlT:
so yours is the latest version for tbc?
i see the "official" github also has a 2.9.3 5 days ago, but doesnt list tbc.
In reply to MrFIXlT:
All your changes should be in there since the merge pull request from July.
Would you be so kind to point were the changes weren't applied properly?
In reply to humfras:
I agree but I downloaded the package hosted on wowinterface and run a diff and 2 files have somehow been skipped.
In reply to MrFIXlT:
The only file different from your 3.9.1-6-20501 release should be the additional check in modules/Timestamps.lua
EDIT: There are wrong files in the 3.9.2a release for retail but are correct in the 3.9.2 files for classic and classic_era
Fix incoming
In reply to humfras:
so where is the newest version available for tbc?
In reply to Fred7:
The most current version can be found at https://www.wowinterface.com/downloads/info10783-Prat3.0.html
All versions of Prat work with any client but if you want a version with the correct toc number, use https://www.wowinterface.com/downloads/getfile.php?id=10783&aid=119923
In reply to humfras:
Thank you for this new version. Seems to fix the superlong timestamp lua error I've had. :)
Can someone please help me? It was pointed out to me that the MAIN FILE posted here is out of date and needs to be updated. I'm not sure if this is some kind of distro build or if it's simply a zip file of the repo. Is anyone familiar enough with this to give me some guidance?
I really don't know anything about Prat or LUA. Sorry I'm so bad at this but Jon didn't really talk to me much about his addons :(
In reply to lucifercatnip:
I'm currently unable to upload updates because there is a problem at Curse's end (or my permissions atleast).
The required updates are quite simple and already available at the github repo.
In reply to humfras:
Just wanted to post this here in case anyone is following along. We can't seem to figure out how to upload files. I don't have the option in my menu, which is strange. We're investigating and may need to reach out to Curseforge for support on this.
In reply to lucifercatnip:
The presence of a .pkgmeta file in the repository indicates that Sylvanaar was most likely using the simple webhook automatic packaging curseforge offers configured as described here.
As the owner/manager of the project you would be able to verify that's the case by visiting your github settings page and also the project settings page on curseforge to verify it's actually pointing to the correct github repo (and not for example the original Sylvanaar one) and is setup with the correct api token etc.
In reply to MrFIXlT:
THANK YOU! This is very helpful. I'll start poking around and see what I can do.
Hey LuciferCatnip and others.
Does any of you know why I keep getting this error on login? I've had this for months (on retail), and it doesn't seem to actually break anything.
I tested today with turning off or moving each of the mentioned addons to the desktop, and the lua error still appear in bugsack (the error below are copied from the BugGrabber file because BugSack cuts it off after "GetJu"). I also tested by downloading the latest two releases, version 3.9.1 had a similar error from another addon, while 3.9.0 didn't produce errors. The only common denominator that I can spot between those different errors are Datastore.
["message"] = "Interface\\AddOns\\Prat-3.0-3.9.1-1-g6978fc8\\modules\\Timestamps.lua:646: attempt to index local 'entry' (a nil value)",
["time"] = "2021/02/14 18:30:57",
["locals"] = "self = <table> {\n SetDefaultModuleLibraries = <function> defined @Interface\\AddOns\\DataStore\\libs\\AceAddon-3.0\\AceAddon-3.0.lua:367\n Enable = <function> defined @Interface\\AddOns\\DataStore\\libs\\AceAddon-3.0\\AceAddon-3.0.lua:294\n NewModule = <function> defined @Interface\\AddOns\\DataStore\\libs\\AceAddon-3.0\\AceAddon-3.0.lua:235\n EnableModule = <function> defined @Interface\\AddOns\\DataStore\\libs\\AceAddon-3.0\\AceAddon-3.0.lua:332\n modules = <table> {\n }\n GetModule = <function> defined @Interface\\AddOns\\DataStore\\libs\\AceAddon-3.0\\AceAddon-3.0.lua:210\n IterateEmbeds = <function> defined @Interface\\AddOns\\DataStore\\libs\\AceAddon-3.0\\AceAddon-3.0.lua:442\n SecureHookScript = <function> defined @Interface\\AddOns\\ArcHUD3\\Libs\\AceHook-3.0\\AceHook-3.0.lua:410\n defaultModuleLibraries = <table> {\n }\n GetTime = <function> defined @Interface\\AddOns\\ArcHUD3\\Libs\\AceHook-3.0\\AceHook-3.0.lua:100\n pluginopts = <table> {\n }\n Prat_FramesRemoved = <function> defined @Interface\\AddOns\\Prat-3.0\\modules\\Timestamps.lua:634\n RawHookScript = <function> defined @Interface\\AddOns\\ArcHUD3\\Libs\\AceHook-3.0\\AceHook-3.0.lua:395\n GetName = <function> defined @Interface\\AddOns\\DataStore\\libs\\AceAddon-3.0\\AceAddon-3.0.lua:279\n name = \"Prat_Timestamps\"\n IsEnabled = <function> defined @Interface\\AddOns\\DataStore\\libs\\AceAddon-3.0\\AceAddon-3.0.lua:451\n orderedModules = <table> {\n }\n AddMessage = <function> defined @Interface\\AddOns\\Prat-3.0\\modules\\Timestamps.lua:643\n DisableModule = <function> defined @Interface\\AddOns\\DataStore\\libs\\AceAddon-3.0\\AceAddon-3.0.lua:350\n HookScript = <function> defined @Interface\\AddOns\\ArcHUD3\\Libs\\AceHook-3.0\\AceHook-3.0.lua:366\n SetDefaultModulePrototype = <function> defined @Interface\\AddOns\\DataStore\\libs\\AceAddon-3.0\\AceAddon-3.0.lua:409\n baseName = \"Prat-3.0\"\n IsHooked = <function> defined @Interface\\AddOns\\ArcHUD3\\Libs\\AceHook-3.0\\AceHook-3.0.lua:493\n InsertTimeStamp = <function> defined @Interface\\AddOns\\Prat-3.0\\modules\\Timestamps.lua:668\n PlainTimestampNotAllowed = <function> defined @Interface\\AddOns\\Prat-3.0\\modules\\Timestamps.lua:664\n IsModule = <function> defined @Interface\\AddOns\\DataStore\\libs\\AceAddon-3.0\\AceAddon-3.0.lua:217\n db = <table> {\n }\n SetDefaultModuleState = <function> defined @Interface\\AddOns\\DataStore\\libs\\AceAddon-3.0\\AceAddon-3.0.lua:387\n Prat_FramesUpdated = <function> defined @Interface\\AddOns\\Prat-3.0\\modules\\Timestamps.lua:628\n GetDescription = <function> defined @Interface\\AddOns\\Prat-3.0\\modules\\Timestamps.lua:624\n SetEnabledState = <function> defined @Interface\\AddOns\\DataStore\\libs\\AceAddon-3.0\\AceAddon-3.0.lua:424\n Hook = <function> defined @Interface\\AddOns\\ArcHUD3\\Libs\\AceHook-3.0\\AceHook-3.0.lua:274\n enabledState = true\n OnModuleDisable = <function> defined @Interface\\AddOns\\Prat-3.0\\modules\\Timestamps.lua:616\n OnModuleEnable = <function> defined @Interface\\AddOns\\Prat-3.0\\modules\\Timestamps.lua:606\n PL = <table> {\n }\n hooks = <table> {\n }\n IsTimestampPlain = <function> defined @Interface\\AddOns\\Prat-3.0\\modules\\Timestamps.lua:652\n SecureHook = <function> defined @Interface\\AddOns\\ArcHUD3\\Libs\\AceHook-3.0\\AceHook-3.0.lua:336\n IterateModules = <function> defined @Interface\\AddOns\\DataStore\\libs\\AceAddon-3.0\\AceAddon-3.0.lua:437\n UnhookAll = <function> defined @Interface\\AddOns\\ArcHUD3\\Libs\\AceHook-3.0\\AceHook-3.0.lua:477\n RawHook = <function> defined @Interface\\AddOns\\ArcHUD3\\Libs\\AceHook-3.0\\AceHook-3.0.lua:313\n Unhook = <function> defined @Interface\\AddOns\\ArcHUD3\\Libs\\AceHook-3.0\\AceHook-3.0.lua:418\n moduleName = \"Timestamps\"\n defaultModuleState = true\n Disable = <function> defined @Interface\\AddOns\\DataStore\\libs\\AceAddon-3.0\\AceAddon-3.0.lua:314\n}\nframe = ChatFrame1 {\n SetJustifyV = <function> defined =[C]:-1\n RefreshIfNecessary = <function> defined =[C]:-1\n OnPostShow = <function> defined =[C]:-1\n CalculateLineAlphaValueFromTimestamp = <function> defined =[C]:-1\n isLayoutDirty = true\n isDisplayDirty = false\n GetFading = <function> defined =[C]:-1\n IsTextCopyable = <function> defined =[C]:-1\n shouldFadeAfterInactivity = true\n SetIndentedWordWrap = <function> defined =[C]:-1\n GetJu",
["stack"] = "[string \"@Interface\\AddOns\\Prat-3.0-3.9.1-1-g6978fc8\\modules\\Timestamps.lua\"]:646: in function <Interface\\AddOns\\Prat-3.0\\modules\\Timestamps.lua:643>\n[string \"=(tail call)\"]: ?\n[string \"=[C]\"]: in function `AddMessage'\n[string \"@Interface\\AddOns\\AutoRepair\\AutoRepair.lua\"]:70: in function `arStatus'\n[string \"@Interface\\AddOns\\AutoRepair\\AutoRepair.lua\"]:57: in function <Interface\\AddOns\\AutoRepair\\AutoRepair.lua:22>",
["session"] = 37595,
["counter"] = 278,
}, -- [306]
LUA error mentioning this addon:
PS. I know error reporting of wow is terrible and this addon may not be to blame.
Message: Interface\AddOns\Prat-3.0\services\patterns.lua:234: invalid capture index
Time: Sun Aug 15 18:41:57 2021
Count: 13
Stack: Interface\AddOns\Prat-3.0\services\patterns.lua:234: invalid capture index
[string "@Interface\AddOns\PersoLootRoll\Core\Addon.lua"]:591: in function <Interface\AddOns\PersoLootRoll\Core\Addon.lua:590>
[string "=[C]"]: ?
[string "=[C]"]: in function `gsub'
[string "@Interface\AddOns\Prat-3.0\services\patterns.lua"]:234: in function `ReplaceMatches'
[string "@Interface\AddOns\Prat-3.0\addon\addon.lua"]:702: in function <Interface\AddOns\Prat-3.0\addon\addon.lua:613>
[string "=(tail call)"]: ?
[string "@Interface\FrameXML\ChatFrame.lua"]:3104: in function <Interface\FrameXML\ChatFrame.lua:3093>
[string "=(tail call)"]: ?
[string "*:OnEvent"]:1: in function <[string "*:OnEvent"]:1>
Locals: msg = "Interface\AddOns\Prat-3.0\services\patterns.lua:234: invalid capture index"
lvl = nil
origHandler = <function> defined @Interface\AddOns\TradeSkillMaster\LibTSM\Service\ErrorHandler.lua:717
self = <table> {
Unit = <table> {
}
modules = <table> {
}
CancelTimer = <function> defined @Interface\AddOns\ArkInventory\Externals\Ace3\AceTimer\AceTimer-3.0.lua:147
Help = <function> defined @Interface\AddOns\PersoLootRoll\Core\Addon.lua:292
ABBR = "PLR"
UnregisterComm = <function> defined @Interface\AddOns\TradeSkillMaster\External\EmbeddedLibs\CallbackHandler-1.0\CallbackHandler-1.0.lua:153
CHAT_MSG_WHISPER = <function> defined @Interface\AddOns\PersoLootRoll\Core\Events.lua:324
TimerIsRunning = <function> defined @Interface\AddOns\PersoLootRoll\Core\Addon.lua:674
lastLocked = <table> {
}
EVENT_VOTE = <function> defined @Interface\AddOns\PersoLootRoll\Core\Events.lua:683
errorPrev = 445.357000
OnActiveChanged = <function> defined @Interface\AddOns\PersoLootRoll\Core\Addon.lua:368
SetDefaultModulePrototype = <function> defined @Interface\AddOns\ArkInventory\Externals\Ace3\AceAddon\AceAddon-3.0.lua:409
state = 1
EVENT_ROLL_STATUS = <function> defined @Interface\AddOns\PersoLootRoll\Core\Events.lua:644
CHANNEL_ALPHA = "alpha"
IsEnabled = <function> defined @Interface\AddOns\ArkInventory\Externals\Ace3\AceAddon\AceAddon-3.0.lua:451
ScheduleTimer = <function> defined @Interface\AddOns\ArkInventory\Externals\Ace3\AceTimer\AceTimer-3.0.lua:94
IsTracking = <function> defined @Interface\AddOns\PersoLootRoll\Core\Addon.lua:362
versionNoticeShown = false
errors = 0
RegisterMessage = <function> defined @Interface\AddOns\TradeSkillMaster\External\EmbeddedLibs\CallbackHandler-1.0\CallbackHandler-1.0.lua:90
UnregisterMessage = <function> defined @Interface\AddOns\TradeSkillMaster\External\EmbeddedLibs\CallbackHandler-1.0\CallbackHandler-1.0.lua:153
ECHO_LEVELS = <table> {
}
EVENT_BID = <function> defined @Interface\AddOns\PersoLootRoll\Core\Events.lua:657
hooks = <table> {
}
CheckState = <function> defined @Interface\AddOns\PersoLootRoll\Core\Addon.lua:307
SendCommMessage = <function> defined @Interface\AddOns\TradeSkillMaster\External\EmbeddedLibs\AceComm-3.0\AceComm-3.0.lua:87
RegisterErrorHandler = <function> defined @Interface\AddOns\PersoLootRoll\Core\Addon.lua:583
EnableChatLinksHook = <function> defined @Interface\AddOns\PersoLootRoll\Core\Hooks.lua:272
LogExport = <function> defined @Interface\AddOns\PersoLootRoll\Core\Addon.lua:562
UnregisterAllComm = <function> defined @Interface\AddOns\TradeSkillMaster\External\EmbeddedLibs\CallbackHandler-1.0\CallbackHandler-1.0.lua:174
SetEnabledState = <function> defined @Interface\AddOns\ArkInventory\Externals\Ace3\AceAddon\AceAddon-3.0.lua:424
Hook = <function> defined @Interface\AddOns\ArkInventory\Externals\Ace3\AceHook\AceHook-3.0.lua:274
PLH = <table> {
}
EVENT_BID_WHISPER = <function> defined @Interface\AddOns\PersoLootRoll\Core\Events.lua:672
OnEnable = <function> defined @Interface\AddOns\PersoLootRoll\Core\Addon.lua:102
ToggleDebug = <function> defined @Interface\AddOns\PersoLootRoll\Core\Addon.lua:132
PATTERN_BONUS_LOOT = ".+ rec
In reply to epigramx:
Do you know enough about Lua to try to fix this? If not I can try to ask around. I think we might need at least 2 maintainers on this because I don't want to put any pressure on anyone.
THANK YOU
Everyone, thank you for your patience. Sylvanaar was my coworker and my friend. I don't play WoW but I am a gamer, so when I saw the impact his work had on the WoW community after his passing I knew i had to do something. Please continue to be patient as I learn my way around here. My intention is to find a maintainer or even a small group of people to manage Sylvanaar's work. I've created a GitHub organization, and forked his WoW repos over there. Please let me know if you'd like to be a part of this.
Eventually I'd like to hand this off to new ownership, but I need to be sure that I'm not handing it off to just anyone. I know Wow Instant Messenger is very likely to end up back with mysticalOS thanks to the outreach of the community recommending him. However Prat is going to be a bit more of a challenge, as it was pretty much exclusively owned and maintained by Sylvanaar. I owe it to him to be protective of his work, so in the meantime I'm going to be as involved as I can in approving PRs and interacting with contributors until I figure out the best course of action.