Age | Commit message (Collapse) | Author |
|
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.
|
|
|
|
|
|
|
|
|
|
|
|
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.
|
|
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.)
|
|
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.
|
|
Sometimes it is necessary to wait for identification to be confirmed
before certain channels may be joined. In this case the option
irc.join_after_identify can be set to true, and the bot will wait for
nickserv to confirm the identification before joining any channels.
This solution is actually a rather ugly hack, but I can't think of a
better way to approach the problem without rewriting the whole
framework.
|
|
|
|
|
|
When a server has IDENTIFY-MSG, we would expect identification in any
PRIVMSG or NOTICE, even on those generated from the bot. This caused
lots of spurious warnings, and would lead to mislogging when a
bot-generated message started with + or -.
Fix this by only handling IDENTIFY-MSG on server-generated messages.
|
|
instead of setting it
|
|
|
|
from template
|
|
Rather than stripping colors all around and keeping other format codes,
we only strip initial and final formatting before parsing the message.
We store the original, unstripped message in #logmessage() and a
fully stripped copy of the message in #plainmessage()
This means that most plugins will now have full formatting of arguments
preserved, while stupid IRC usage of formatting whole lines will not
interfere with bot usage. Plugins that need a fully stripped version of
the message can still access it.
|
|
|
|
|
|
|
|
If the bot fails to load (e.g. because of missing dependency) the user
might miss the last error messages because the logger thread wouldn't
reach completion. Ensure its closure in an END block.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Some scripts (from the scripts plugin) can trigger the logging functions
(debug, warning, info etc) in a $SAFE context: this causes the logger to
fail. Catch SecurityError in raw_log() to prevent these valid scripts from
failing.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
When logging messages, it is appropriate to remove color and identification prefixes (in networks that support it), but not the address prefix.
Solve this by saving a copy of the message without the address prefix(es) removed, and use it in irclog*() methods.
|
|
|