The greatest bug I never fixed (2010)
blog.makandra.com
blog.makandra.com
It stops the drunk text-transform, and also doesn't have to worry about hiding the text from the channel you're trying to talk into.
Overall, Blizzard has been very good about adapting to what their addon community is trying to do. They add official support for hacks if they like what the addon does for the game, and deliberately break some if they don't like its effect.
Since it was becoming a real pain, I figured out that we could modify the existing functions from a new file instead of modifying the actual files[1]. I spend several weeks transforming all our code into "mods", essentially the first addons :) Once this migration was done and patches were no longer a pain point, Blizzard officially introduced the notion of addons.
Imagining a parallel universe where we stuck with a process in which installing a new "addon" involves applying a .patch to your base UI and hoping that it'll kinda-sorta work with the other patches you applied... terrifying, really...
There was no supported add-on mechanism; instead, a player-written framework called Decal hooked into the executable at runtime, and Decal exposed an API for plugin authors. I can't remember all the details, but I think did a mixture of intercepting function calls inside the client, injecting calls to client functions, parsing client memory to expose data to plugins, and either parsing the network stream directly to capture events or hooking into the client's packet parser.
Oh, and this wasn't a nice safe Lua or Ruby API. It was an unmanaged COM API, so you had all the headaches which come with dealing with reference counting, pointers, and all the rest.
Every month (and every interim patch), there would be a great whine and moan from the players until the memlocs file was updated, and all the plugins started working again. (Unless something more substantial in the client had changed, of course, requiring more work.)
It was a seriously impressive technical achievement by the people behind it. And looking back on it, rather scary...
This is one of those times where I have to wonder why so many companies feel it's such a bad idea to get technical with their users.
They would still see it as a problem with "the devs" and not a problem with the addon.
Communicating it clearly to addon developers, that may have helped I think. You know, use the com channels sparingly and for short, targeted messages only, because "lag".
From what I remember there was quite a bit of pride surrounding having the most used addon. And the ability to say "my raid addon doesn't cause lag like the old favourite" would have spurred on some devs to get even more creative with limited resources.
Speaking of RCE: Distribution of new FriendNet versions was such a pain that for a while we considered a P2P auto-update mechanism where FriendNet users with newer versions would whisper Lua code to users with older versions, who would then eval() it locally.
It seemed like a much better idea then than it does today...
Clearly, this is not a bug, but a feature.
"FriendnetStart: Hello, I am speaking normally and am not drunk," as the first message. If the application sees anything but that as the first message it should assume drunk and retry in an hour. Or implement a checksum at the end of every line.
I imagine he also had issues with the profanity filter as well. Some usernames may set it off if they have a string of characters in them like username "Breshith," which would set off the filter for the text "shit."
Character names will never contain punctuation, so expecting a possible terminating "...hic!" and ignoring it is fine.
Just send a checksum with the message.
Source: http://www.wowwiki.com/Patch_1.12 New API Functions Add-ons can send hidden chat messages to players in the party, raid or guild, using SendAddonMessage("prefix", "message", "PARTY"|"RAID"|"GUILD"|"BATTLEGROUND").
Receiver receives 'sho'
Receiver sends back 'sho'
Sender receives 'sho', compares it to the 'so' it thought it sent, and correctly deduces something went wrong in the communication.
Sender sends 's'
Receiver receives 'sh'
Receiver sends back 'sh'
Sender receives 'shh', compares it to the 's' it thought it sent, and correctly deduces something went wrong in the communication.
It is overzealous in that it would fail if the sender wasn't drunk but the receiver was.
I wrote a (likely very unsuccessful, as it's now disappeared from the internets) addon called DancingGnome, that allowed one to bind arbitrary input series to spells -- it was meant to bind dance pad moves to spells. Up-Up-Up for Fireball, Down-Up for Fireblast, those were (some of) my binds.
More successfully, though, I wrote Chatr, which popped up "IM" windows for private chats.
And another addon that allowed covert chats that looked like (to people with the addon) they were being said in public channels.
Ah, those were the times (for a given value of times).
I'm almost certain you could get yourself invites and hijack group leadership with it (the addon takes over those functions)
Not sure if this would have any value, but I'm sure someone enterprising could find a way to exploit others trust. That's not a new concept.
[0] (This of course assumes that the only lisped-up content is the usernames, not the whole syntax, which I think is an acceptable assumption given that it's fully out of date anyway)
If it sometimes removes characters, then perhaps so.