= Changelog = This is a record of all changes made to zomg since the original release. I find it interesting to view my own development patterns, you might as well. This file will be included with the subversion repository as well. == Version 0.8.3 – October 25th 2010 == * Dropping the "Defiance" name from the code and docs. People recognize the bot as "zomg". * Moved zomg to my own server (freeing up some resources on the SG server for RB3) * Set up a persistent ZNC connection for zomg * Ideally you won't even notice when I reconnect the bot for updates and fixes == Version 0.8.2 – August 11th 2010 == * Added !weather * Added GeoIP support to !weather * Added !locate * Added .addword * Added .delword * Added .loadwords * Added several new custom commands to demo new functionality * For example, !8ball and !fight * Bot now leaves 'empty' channels and waits for a notice from ChanServ that a person has joined before coming back. * A channel containing only the bot and ChanServ is considered 'empty' * Using !alias and .alias will now allow you to put*!*@ in front of a hostmask, just for convenience. * Converted documentation to Wiki format and moved to new location * Extended the functionality of Custom Commands considerably * Added $pick[arg1,arg2,arg3,...,argN] (Does not support spaces in the args yet) * Changed $rint to $rand * Added $rand[min,max] (Integer values only) * Added $uc[text] and $lc[text] (Do not support spaces yet) * Extended the functionality of Custom Variables considerably * Variables can now be added on the fly by an oper with the addword command * All [ ] variables are fully nestable, including with existing optional args that have defaults enclosed in [ ] * Variables can be enclosed in { } if ambiguous. For example, * $balls will look for a word category "balls" * ${ball}s will look for a word category "ball" and add the "s" to the end of whatever $ball it chooses. * Optimized startup time * Fixed bug where bot would not respond to custom commands if addressed by name * Fixed several command parsing bugs * Restored !wotd hint option for regular users * Moved zomg's code into a subversion repository * Made svn repository publicly accessible * svn co svn://vsterminus.homelinux.org/zomg * Secured code to load sensitive data from elsewhere == Version 0.8.1 – December 2nd 2009 == * Moved help page to static.socialgamer.net * Updated help command to reflect this * Updated help page formatting and style * Bot no longer auto-rejoins when kicked by ChanServ * Fixed !stfu length when a time was not specified * !nowplaying now uses the Last.FM API instead of screen scraping * Smaller output (1 line instead of 3) * API doesn't give me the player information (yet). Sorry. * Added more functionality to !lastfm * You can now customize your !nowplaying output * Syntax is different now, please read the entry for it * !alias now accepts and removes*!*@ prefix on hostnames. == Version 0.8.0 – October 28th 2009 == * Big update, long time * With school, working on the new SocialGamer beta site, and other commitments it can be hard to find time to develop zomg further * Changed the database serialization (storage) system * Previously used the XML::Dumper perl module to convert all of my hash tables, important variables and other data into a convenient XML file that could be read on startup to restore information. * XML::Dumper is Extremeley inefficient, and was causing me to use several hundred MB of RAM at run time! o_O * Switched to YAML::XS (A perl module written in C) I can serialize the database into a single human-readable string of data and store that in a file * RAM usage is now 1/10th of what it was previously * I can still reduce this further with optimizations to save/load and cleaning old/invalid/unnecessary data in other areas. * Added !fml * May add an option to select a specific entry or grab the latest entry if there is interest * Added !wtf * Uses the system `wtf` command, which contains definitions for common acronyms (Like 'LOL' and 'wtf') as well as man page entries for most apps * The wtf database is not really that extensive, and a response of 'Nothing Appropriate' means 'I don't know' * Modified the now playing (!mp3) command to use Last.FM * Renamed the !mp3 command to !nowplaying * Added a hard-coded alias, !mp3 which redirects to the new command. Usage doesn't change. * Command spans 1-3 lines of output, and so can only be used every 20 or so seconds to reduce spam. * Added !lastfm | none * Fixed a couple regex matches (Thanks Thierry for breaking it and Grinnz for solving it) * Added !drums * Wrote a search function into this command, so if you can't spell it will try to help. * Added the ability to use the $ variables from custom commands in all commands (With the exception of $1,2,3 etc because that's just silly) * Added some new variables for use (They work in any command, not just customs!) * $noun, $verb, $pronoun, $adverb, $preposition, $adjective, $clothing * Fixed default parameter parsing * Added new words to the word of the day file == Version 0.7.4 – September 1st 2009 == * Added uptime to restart message * Added a 10 second ban to channel protections by default * Breaks sf ban currently, will be removing that. * Added ++ or -- triggers for awarding wins to users * Added +=, -=,*= and /= as well * eg. toymachine++ is equivalent to .award toymachine 1 * and toymachine+=5 is equivalent to .award toymachine 5 * A word of the day system to award users with wins * The word is selected at random, but can be set by an oper * When the word is guessed, a new word is chosen (At random) * A word un-guessed for 24 hours will expire next time anyone uses !wordoftheday * Might update this to use a timer system in the future * Tripping the spamfilter also removes 1 win now. * Commands via PM can now be done without a trigger * eg. /msg zomg time * Custom Commands now support required parameters * Variables defined with $ are optional, where as variables defined with & will be required. If a required parameter is left undefined, the command will error and ask for more input. * !listcmd now displays the access level required to use the command * Fixed glitch in !wins when looking up offline users * Added !slogan * Added $rword, $rnick, and $rint variables to custom commands * Added defaults-system to optional args in custom commands * Added !bantime to allow channel admins to adjust the default ban length in their channel * Fixed arg swapping in custom commands * Fixed .enable to support command aliases * Made the word of the day game configurable per channel * By default, disabled. Can be enabled with !wordoftheday on * Removed the word-of-the-day hint, too spammy * Time input for bans, kickbans and stfu now support a more human-readable format (ex, 5h15m10s) * Bot no longer freaks out if words.txt doesn't exist * Database is now loaded before connecting to the server * The DB is getting so big that it was causing the bot to time out and lose connection * Considering splitting this file up into a few smaller files, or maybe truncating data == Version 0.7.3 – July 29th 2009 == * Fixed bug in timed kickbans using regex matches * Fixed !uptime's parsing of CPU uptime when there is only 1 user * !mass now supports custom commands * Re-wrote the todo list to use a hash instead of an array * Index values will be unique to each item added. They will continue to increase, instead of the list squishing down when something is removed. * Added greet type 'public' to greet users publicly in the channel * oper .alias will send via PM if more than 15 results are found in a lookup * Fixed bot's own nick recognition if the server changes its name * added !top3 wins * Improved sorting code in !top3 * Added !top3 peaks * Reduced resolution of time tracking since peak was set * Added !top3 customs * Added 'who is banned' (Thanks SoccerThierry) == Version 0.7.2 – July 15th 2009 == * Added !uptime * User definitions are now displayed with !whois as well * Variables in custom commands that are left undefined will be hidden from output * Added $server, $unixtime and $localtime to the custom command variable list * Fixed a bug when adding custom commands using a command alias * “Who/What is defined” now sends via PM * !alias shows the user's hostmask as well * Fixed custom commands with 'Service' access level * Fixed !cmdlist when applied to a global custom command * Prevented saving during DB loading, hopefully to stop accidental DB corruption * Modified the error message when a user tries to kick an admin to include the username * Added !time global custom command (Access required: None) * Added 'who banned ' to go along with 'who kicked ' * Modified the way 'who kicked ' is stored and displayed * Better tracking of the $server variable * Added .restart for opers == Version 0.7.1 – May 11th 2009 == * Started tracking how many messages each user sends (April 30) * Used for top3 command * Added !top3 * Added !text * Updated !stfu, !ban, and !kickban to allow users to specify a duration (in minutes) * Improved Auto-Save to create a backup of the db every hour * Database got corrupted on May 5, most recent manual backup was April 22 * Various grammatical, aesthetic changes * Bug fixes to * Nick Filter * Stfu * kick/kickban * Specifically regex matches no longer match against the bot's nick, regardless. * Top3 commands works properly now == Version 0.7.0 – April 29th 2009 == * Added Custom Commands! * Big help file entry for these..... * In any channel, Voiced users can use !cclist to view existing custom commands in that channel * Voiced users can also use !ccinfo to see info on any existing custom command * Added Global Custom Commands * Same as regular custom commands, but apply to all channels * It is possible, using customs and global customs, to give regular users access to oper-only commands, or certain parts (eg pre-defined args) of an oper-only command. * In any channel, voiced users can use !gclist to see all existing global customs * voiced users can also use !gcinfo to see info on a global custom command. * Added !greet * !cmdlist now supports custom commands as well * This obsoletes the global !ccinfo custom command, which I will be removing * Nickfilter now ignores self * aka you cannot make the bot ban itself using a nick filter * Added !wins * For users to check wins * Added .award * For opers to hand out wins * Added !floodban (About time) * Added additional syntax to !autobans * This supports banning repeat offenders automatically in your channel * By default, anyone who trips your spamfilter, or any of the autobans 3 times in 5 minutes will receive a 30 minute ban. This is configurable, but always enabled. * Fixed a small glitch with spamban where looking for excess repeat chars was not done properly * Some updates to .stats * Addition of .stats customs (For custom command stats) * Syntax modification == Version 0.6.9 – April 19th 2009 == * Added repeat support to timers * Syntax change, please note it * Timers command now assumes channel if not specified * Kick and Kickban now support Regex matching! * Works for opers and regular users too * Case insensitive by default * Added .amsg * Send a message to all channels the bot is currently in * Not particularly useful I suppose, but it's something. * Added .enable and .disable * Opers can disable commands now * Only applies to regular user commands (.disable enable would be stupid) * Added oper version of .stfu * Check for oper removed * Auto-devoices, dehalfops and deops the person in question * Added !me * Same as /me, but makes the bot use it * Added handler for actions * Previously, the bot did not see actions (/me) at all == Version 0.6.8 – April 14th 2009 == * Improved mode parser * Still doesn't handle -qaohv well though * Improvements to timer system * See: Total overhaul * Improved timer accuracy from 10s to 1s * Added !nickfilter * Added hourly auto-save * Found out that Net::IRC doesn't parse extbans properly * Added a workaround for this in my mode parser * Added .timers * No args: list existing timers * add * del * # (Display info for a specific timer) * Timers are now saved between sessions * Modified the way timers are parsed * Now stores the nick that created the timer * All Private Messages sent to zomg are now forwarded to vsTerminus == Version 0.6.7 – April 1st 2009 == * Added .whisperback * Added !mp3 * Fixed Modelock * Added some extra protection against XML db corruption * Added !spamfilter * Added .kickban for opers * Added a mode parser * No longer need to /who the channel on mode changes! * Help file updates * Moved to an HTML format * Hosted on my machine instead of omploader == Version 0.6.6 – March 2nd 2009 == * Added .addchan * Added !announce * Very different from announce in the old zomg * Added logging * One file per channel * Command log * Kick log * Added an option to !who * !who * Fixed to-do list saving. * Added !autobans * Added !capsban * Added !spamban * Added !repeatban * Fixed some warnings in on_text and parseCommand subs * Improved command handling and multi-command handling == Version 0.6.5 – February 27th 2009 == * Modified topic template * Fixed topic tracking for topics set by other users * Added command aliases, definable by opers * .addcmd * .delcmd * .listcmd * Removed the 'did you mean' responses, they were just annoying and cropping up too often * Added more options to .stats * .stats users|kicks|text|peak|defs == Version 0.6.4 – February 23rd 2009 == * Added comical 'did you mean' on invalid commands * Added protection to !stfu to stop it from accepting empty args * Upgraded the multi-command parsing to be more intuitive * If a command in the string does not exist, it will be treated as the arg for the most recent successful command, allowing any command to take multiple args (essentially). * eg. !stfu Xyzzy; Scissors, Pie * 'who is defined' now lists users for opers. * Topic text is now filtered when stored to prevent XML errors. * Added .todo * Added .done * Fixed another glitch with nick changes * Bot will no longer attempt to parse blank commands during multi-parsing * Fixed problem with 'who/what is defined' not splitting lists into multiple messages * Added option 'list' for the oper join command. * Added !peak * Also added oper .peak * Added peak info to .stats * Stats by default uses a compressed, one-message format * Optionally, user can pass 'v' or 'verbose' to get the full, multi-line version with additional info. * Fixed regex for special 'who is' and 'what is' commands * Added oper .help which allows sending to other users (also massable) * Fixed a check in the mass command == Version 0.6.3 – February 11th 2009 == * Added !kickcount * Added !kickme * Added two new hashes * %kicks # Stores info on all kicks seen * %mykicks # Stores info on kicks by the bot * Fixed tracking of hostmasks on nick changes * Added more info to stats * Fixed glitch in the mass command where it wasn't checking the opers hash * Reset the kick counter in favor of having accurate kick data == Version 0.6.2 – February 11th 2009 == * Removed !addban * Added a %hosts hash to keep the hosts for users seperate from the user objects * This makes it easier to track whether a user is online or offline * Adjusted !whois output to reflect offline users * Added .stats * Adjusted on_quit and on_part events * Changed !help to send a NOTICE instead of a PM == Version 0.6.1 – February 10th 2009 == * Added .say * Added !cycle * Added !rr * Added !nn * Added !censor * Added !mute * Added !strip * Added support to catch SIG{TERM} and SIG{INT} and save before exiting == Version 0.6.0 – February 10th 2009 (Initial Release) == * Why start at 0.6.0? *For those who remember the original zomg project, it was written in mIRC script and as it grew it became increasingly troublesome to work with. * It was at version 0.5.x when I dropped it and moved to zomg in Perl, so I just bumped the version up to 0.6.0 and kept going.