summaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)Author
2009-01-28ircbot: the reconnect must be protectedGiuseppe Bilotta
The reconnect() call in the main loop must be protected in the begin/rescue blocks. Most of the rescue blocks can be fall-through, because the begin/end is wrapped in a loop. The only exception is the ServerError block that issues a retry lest too_fast is reset to false even when it should be true.
2009-01-28* (httputils) get_response must refresh the cached object even if :cache => ↵dmitry kim
false
2009-01-27wordlist: strip UTF-8 BOM on loadGiuseppe Bilotta
Some editors put a BOM at the beginning of UTF-8 files, and it's not stripped by Ruby's String#strip, so we have to get rid of it ourselves.
2009-01-27wordlist: exist? methodGiuseppe Bilotta
The new Wordlist.exist? method can be used to check if a wordlist file exists. It will refuse to check upstream of the wordlist base directory
2009-01-27wordlist: Wordlist.list command and UIGiuseppe Bilotta
Introduce an elementary Wordlist.list() command that accepts an optional :pattern option to restrict the list to wordlists matching the given pattern. Also introduce a wordlist UI to list wordlists from IRC.
2009-01-27wordlist providerRaine Virta
2009-01-22+ (userdata) method delete_botdata(key)Simon Hafner
2009-01-22+ (reply) config option to force reply to querySimon Hafner
+ (reply) symbol to bypass the config option * (plugins) fixed url according to the patch The symbols are: :to => :public force the message to be replied in channel (if any) :to => :private force the message to be replied in private :to => :auto takes core.private_replies (default)
2009-01-22+ (reply) add new option to control nick prefixingSimon Hafner
Message#reply() now accepts a :reply option :nick => false don't prefix nick :nick => true prefix nick :nick => :auto take core.reply_with_nick (default)
2009-01-15ircbot: fix reconnect() waitingGiuseppe Bilotta
The refactored reconnect() method would only wait when the socket was connected at the time it got called. In case where the socket would have closed earlier (e.g. because of a network I/O error) it would reconnect directly, which would for example fail to prevent fast reconnections. Fix by fencing the wait code with a check for @last_rec (checked before the optional disconnect) rather than keeping it with the socket connect check, and always initializing @last_rec on socket connect. A side effect of this strategy is that reconnect() will only wait if the bot was previously connect, or if it got disconnected by anything but the disconnect() method. Callers of disconnect() should take care of waiting themselves if they plan to reconnect.
2009-01-15ircbot: SIGUSR1 forces a reconnectGiuseppe Bilotta
2009-01-15ircbot: refactor reconnection into its own methodGiuseppe Bilotta
2009-01-15auth: better clarify the allow/deny syntaxGiuseppe Bilotta
2009-01-08auth core botmodule: fix permission view without a specified userGiuseppe Bilotta
2009-01-08rfc2812: better handling of incomplete mode linesGiuseppe Bilotta
Sometimes the bot may receive incomplete or malformed mode lines. This can be seen for example by kicking repeatedly and at very short intervals the bot from a channel with +l set to some numbers (at least on freenode). We (don't) handle these malformed modelines by skipping them rather than crashing.
2009-01-07ircbot: handle 'Trying to reconnect too fast' server ERRORGiuseppe Bilotta
2009-01-07rfc2812: handle server ERRORGiuseppe Bilotta
2008-12-29* (timer) ignore blocked actions .next() :/dmitry kim
2008-12-29* (timer.rb) race condition on @actions.each() fixed (thanks, Mike`)dmitry kim
2008-12-16utils.rb: Utils.age_string to replace distance_of_time_in_wordsGiuseppe Bilotta
We define a new age_string function which is a cleaner version of distance_of_time_in_words. The latter gets removed as its only in-tree usage was from timeago (which is the UI version that should be used by plugins anyway). Utils.timeago gets a revamp too, exploiting the new age_string function.
2008-12-16utils.rb: fix Utils.timeago for explicit date outputGiuseppe Bilotta
2008-12-16utils.rb: fix Utils.distance_of_time_in_words for negative offsetsGiuseppe Bilotta
2008-12-12ircsocket: tunable IRC penaltyGiuseppe Bilotta
2008-12-12ircsocket: clean up opt parsingGiuseppe Bilotta
Irc::Socket initialization now always has opt as last parameter, so don't bother checking if it's a Hash.
2008-12-10* (httputil) provide an informative error message for non-http urlsdmitry kim
2008-11-21* (core/unicode) validate encoding.charsets with Iconvdmitry kim
2008-11-21* fix config validation diagnostics for ArrayValuedmitry kim
2008-11-03auth botmodule: auth_allow_deny() accepts an optional :auth_path parameterGiuseppe Bilotta
2008-10-17irclog: timestamp_format config optionGiuseppe Bilotta
2008-10-13httputil: don't raise on HTTPServer/ClientErrorGiuseppe Bilotta
2008-09-24IRC logging: only log nick/quits on the channels the bot is inGiuseppe Bilotta
2008-09-24ircbot.rb: fill was_on info when delegating sent QUITGiuseppe Bilotta
2008-09-24irc.rb: User#channels methodGiuseppe Bilotta
2008-09-05quiet exception listGiuseppe Bilotta
Keep a track of exceptions to a global 'quiet' command so that user can use !quiet and !talk in here to make the bot only talk in one channel without quiet-ing it by hand in each one of the other channels.
2008-09-05message.rb: fix the fix to message addressing logicGiuseppe Bilotta
This reverts commit b6bd9a24014ac9fbc822e9051f216f0506f24cd5 "message.rb: fix message addressing logic" since it actually breaks the validity for address? in a number of cases. Instead, add proper @address setting to NickMessage which is the only one getting it wrong presently.
2008-08-19IRC Socket: documentation cleanupGiuseppe Bilotta
2008-08-19IRC socket: minor flood_send logic fixesGiuseppe Bilotta
2008-08-19IRC socket: get rid of delay/burstGiuseppe Bilotta
The penalty system should be enough to prevent the bot from being disconnected because of excess flood, making the old sendq delay/burst code unnecessary. So get rid of the latter altogether. (If the penalty system as implemented ever happens to be insufficient as implemented, it should just get fixed rather than rely on the sendq delay/burst assistance.)
2008-08-13message.rb: fix message addressing logicGiuseppe Bilotta
IRC messages which are not PRIVMSG or NOTICE (i.e. not UserMessage) are 'addressed' to the bot when they originate from it. Rather than putting this logic in each one of them (and forgetting about it for some, e.g. NICK messages), put it in BasicUserMessage. Compensate by always setting @address in UserMessage to test against target instead.
2008-08-11rfc2812: always return the actual Channel or User when handledGiuseppe Bilotta
For consistency, all delegations now return the actual Channel object in data[:channel] and the actual User object in data[:nick].
2008-08-11rfc2812: handle ERR_NOSUCHNICK and ERR_NOSUCHCHANNELGiuseppe Bilotta
Delete the corresponding user/channel from the server list (if present), and notify the client about the error.
2008-08-11rfc2812: create channels and users for al commands when neededGiuseppe Bilotta
Always create a user or channel when we receive information about it. This makes server message parsing much more robust (no more crashes about NilClass not having user/channel methods) but has a few subtle implications about the server state: for example, channels may exist in the Server object even when the bot is not in the channel itself.
2008-08-10irclog core module: rename old logs when switching from dir to fileGiuseppe Bilotta
It may happen that a user changes from an irclog.filename_format where some components are files to a format where they are directories (e.g. from '%%{where}' to '%%{where}/%Y') or conversely. In this case, we rename the existing file/dir by appending '.old.atime' to it (atime is the actual file/dir access time).
2008-08-10irclog core module: skip, don't die when unable to open logfileGiuseppe Bilotta
2008-08-10+ handle WHOIS queriesGiuseppe Bilotta
The bot now exposes a whois(nick) method to make WHOIS queries to the server. The extended syntax whois(nick, server) is also supported, allowing another server to be queried (this is useful to retrieve info which is only available on nick's server, such as idle time and signon date). Most if not all RFC-compliant replies are handled, although some of the data received is currently ignored. Non-RFC extended replies such as nickserv identification status are not hanlded yet, since they are highly server-specific, both in numeric reply choice (e.g. 307 vs 320) and in reply message syntax and meaning. A new WhoisMessage is also introduced, for plugin delegation. The source is the originating server, the target is the user for which information was requested. A #whois() method is provided holding all retrieved information.
2008-08-10rfc2812.rb: support RPL_AWAY replyGiuseppe Bilotta
2008-08-09+ support channel URL and creation timeGiuseppe Bilotta
2008-08-09message.rb: correct @plainmessage and @message for CTCP messagesGiuseppe Bilotta
After CTCP parsing, @plainmessage was not defined correctly (as it still contained the CTCP command), and @plainmessage and @message were not being cleaned up correctly. This manifested itself e.g. with spurious \001ACTION and other strange unusual byte sequence popping up in markov-generated text. Fix by redefining @plainmessage and @message appropriately in CTCP handling.
2008-08-08irclog core module: double-percent the {where} in irclog.filename_formatGiuseppe Bilotta
strftime in Ruby versions before 1.8.7 gobbles % which are not part of a known format directives, so %{where} must be double-escaped into %%{where}.
2008-08-08plugins.rb: use IO.read instead of readlins+join gimmicksGiuseppe Bilotta