vim: expandtab sw=2 ts=2 - add (optional) timeout for wait_for_hidden_host - ability for modules to register additional sockets to monitor - this is basically done but needs more testing on non-TCP and error conditions the module interface should probably be simplified too - also FDs so the bot can monitor a pipe - add a pipe which allows to input commands even when IRC connection is gone this might be difficult since there won't be a bot or user or chan object... - add optional message wrapping in the core (instead of just truncation) - implement timers in the core and/or modlib, by adjusting the select timeout whenever a timer is pending. call timers as part of the event loop. this has the potential to remove a LOT of the threading. - fix crash when joining a channel that is forwarded (or otherwise force-joined by the server) - fix urls: - disallow private addresses as much as possible - add a time limit if possible - add module with !join / !part / is there clevel management? etc - add SQL "migrations" support to core for modules and store module data in SQL instead of json's - better config... or better yet just move non-DB-related config into the database - needs a better format if its used for generic module data; particularly because /\s#/ starts a comment instead of naming a channel - needs to retain comments when config file is saved - a module for administering channel users (copy from admin_user) and adding/removing channels - modlib function for parsing option arguments (like !MODLOAD has now) - modlib 'onload' hook so modules can easily do stuff on loading (if this exists use it to replace _key() in steam.py) - modlib 'need_config' function to tell the modlib you refuse to start without a config value being specified - add new hook types - 'regexhook' for watching messages matching a regex (should this be supported in core or just by modlib translating into a numhook('PRIVMSG')?) - 'msghook' for watching all messages (like numhook('PRIVMSG') but you don't have to handle parsing) - add a way to specify a config value as a hook parameter without needing parent (i.e. delayed resolution) - weather module using accuweather API, forecasts - fix softdeps, if they're used through lib.mod() or parent.module() they break, need a `'mod' in modules` check somewhere - ctlmod.unload: track what modules are unloaded and return that info to caller - lookup User object by auth modules should be able to (attempt to) look up a User object by auth, that way if the user is online !clevel and !glevel can look up their existing object and adjust the permissions there - sockets module: wrapping should operate on byte-level not string-level sentences with unicode text get wrapped wrong ... but the wrapping point needs to be determined at the string-level ugh