Linking of message accounts is now significantly less likely to produce
false-positives.
Previously, any hostmasks with matching nick!*@* would be strongly linked
together. This led to falsely-linking accounts, either inadvertently or
intentionally.
For example, Bob might also be known as Bob_ and Bobby,
but primarily uses Bob as his main nick. Somebody else might join with
Bobby and end up being linked to Bob. Now both Bob and the new Bobby are
linked together as the same person, but likely with different *!user@host.
Now if the new Bobby ever gets banned, then Bob will also end up being
banned for evading Bobby's ban.
This was a sore spot in the previous linking implementation.
This new implementation has several adjustments to more intelligently link
accounts only when they're proven beyond a reasonable doubt to be the same
person (e.g. by matching nickserv accounts, etc).
Consequently, rather than aggressively linking accounts and catching more
ban-evaders at the risk of potentially falsely-linking accounts and falsely
detecting innocent people as ban-evaders, this new implementation will instead
link accounts more reliably at the risk of potential ban-evaders not yet being
linked together and thus being able to evade a ban.
This is a more preferable and reasonable risk. Active channel ops should be
able to catch any obnoxious ban-evaders that slip through this net.
Extremely minor rearrangement of interpreter logic so that `!commands` are
parsed before `command, botnick`. Totally not a bug at all. Pay no attention.
Now, by default, uses concise timestamp relative durations; e.g. "2d5h ago"
instead of "2 days and 5 hours ago".
Now, by default, shows only nick instead of full hostmask for each entry.
Now accepts optional arguments -t and -h to control the above behavior.
If -t is specified, then it shows a full timedate instead of a relative duration;
e.g., "Sun Dec 13 14:26:56 PST 2015" instead of "2d5h ago".
If -h is specified, then it shows the full hostmask for each entry instead of
just the nick.
Sometimes people might join the channel uncloaked and get join-flood banned
with their uncloaked hostmask, and then later attempt to join the channel while
cloaked but the network will prevent them from joining since it checks their IP
address against the banlist in addition to their cloak.
Attempts to use unbanme while cloaked will look for a ban matching the cloak
instead of the IP address and will not find their uncloaked join-flood ban.
To fix this, we now traverse all known aliases/hostmasks for an individual
requesting a join-flood unban and remove any and all bans matching any of the
hostmasks linked to this individual.
Adlib list variables can now accept trailing modifier keywords prefixed with
a colon. These can be chained together to combine their effects.
:uc - uppercases the expansion
:lc - lowercases the expansion
:ucfirst - uppercases the first letter in the expansion
:title - lowercases the expansion and then uppercases the first letter
(effectively an alias for :lc:ucfirst)
Examples:
<pragma_> echo $colors:uc
<candide> RED
<pragma_> echo $colors:ucfirst
<candide> Blue
Add $event->{interpreted} field to events to notify other handlers
whether an event was successfully interpreted by the interpreter.
An $event->{interpreted} that is equal to or greater than 100 means the entire
message was consumed and handlers shouldn't do any further processing of it
that would generate any output to channels or users.
Otherwise, $event->{interpreted} is incremented by 1 for each referenced
command that was processed.
These are different from the loadable factoid modules. The factoid modules
are external executable shell commands that take stdin as arguments and print
to stdout as a return value. As such, they are not integrated into the bot
and cannot make use of the bot's internal subroutines.
These plugins are loaded internally and integrated into the bot such that they
can interface with the bot's internal subroutines and state.
All files in the Pluggable directory not beginning with an underscore will be
automatically loaded at bot start-up.
Plugins (including those starting with an underscore) can be manually loaded
or unloaded with the `plug` and `unplug` commands. Use `pluglist` to list
loaded plugins.
E.g.,
<pragma-> Userbob: You can learn more about candide by reading its !help page and checking out its !source
<candide> Userbob: To learn all about me, see http://www.iso-9899.info/wiki/Candide
<candide> Userbob: My guts can be browsed at https://github.com/pragma-/pbot
Only three triggers will be processed per message. (I should create a
registry entry to customize this.)
Messages that are addressed at a specific user that exists in the channel will
have that user's name prepended to the factoid output.
Factoid triggers that are referenced from within messages will not produce
error messages if the factoid is not found.
Factoids that have an $arg or $nick special variable will not be triggered as
a reference.
Factoids that have the `noembed` meta-data value set to a true value will not
be invoked as a reference.
Instead of only taking a hostmask argument, `unban` will now determine
if the argument is a nick, and if so it will then find all bans that
match various hostmasks used by that nick and unban them all.
factshow's and factfind's channel argument is now optional.
The commands will now automatically determine the channel a factoid lives in
if it is the only factoid of that name.
If there are multiple factoids existing in different channels then the commands
will display a disambiguation message and require an explicit channel argument
to choose a specific channel's factoid.
PBot will now use weak links if the ip address portion of a hostmask
hasn't been seen in the last 48 hours in order to prevent false-positive
linking of dynamic ip addresses.
Weak links are excluded from ban-evasion logic.
Weak links can be manually upgraded to strong links with the `akalink`
command if a human confirms they are the same person through the `aka -w`
command.
Individuals with matching nicks or matching nickserv accounts, etc, will
automatically be strongly linked, as usual.