From b44cd33c658a3e0b79a45722ff6cc6fa584cfcd5 Mon Sep 17 00:00:00 2001 From: Elijah Perrault Date: Wed, 9 Feb 2011 15:28:10 -0700 Subject: [PATCH] Added hook on_connect and moved on connect stuff to Core::IRC. --- doc/CHANGELOG | 1 + src/Core/IRC.pm | 49 ++++++++++++++++++++++++++++++++++++++++++++++- src/Parser/IRC.pm | 31 ++++-------------------------- 3 files changed, 53 insertions(+), 28 deletions(-) diff --git a/doc/CHANGELOG b/doc/CHANGELOG index 8a8669b..5c6febc 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -3,6 +3,7 @@ Auto IRC Bot 3.0: Change Log 3.0 Indev ================================================================== + * Added on_connect hook, triggered after we receive 001. * Updated hooks to use hashrefs. * Moved CTCP VERSION reply to Core::IRC. * Renamed Core::IRC to Core::Cmd. diff --git a/src/Core/IRC.pm b/src/Core/IRC.pm index 3a3a6db..356d64b 100644 --- a/src/Core/IRC.pm +++ b/src/Core/IRC.pm @@ -7,7 +7,7 @@ package Core::IRC; use strict; use warnings; use English qw(-no_match_vars); -use API::Std qw(hook_add); +use API::Std qw(hook_add conf_get); use API::IRC qw(notice usrc); our $VERSION = 3.000000; @@ -41,5 +41,52 @@ hook_add("on_quit", "quit_update_chanusers", sub { return 1; }); +# Modes on connect. +hook_add("on_connect", "on_connect_modes", sub { + my ($svr) = @_; + + if (conf_get("server:$svr:modes")) { + my $connmodes = (conf_get("server:$svr:modes"))[0][0]; + API::IRC::umode($svr, $connmodes); + } + + return 1; +}); + +# Plaintext auth. +hook_add("on_connect", "plaintext_auth", sub { + my ($svr) = @_; + + if (conf_get("server:$svr:idstr")) { + my $idstr = (conf_get("server:$svr:idstr"))[0][0]; + Auto::socksnd($svr, $idstr); + } + + return 1; +}); + +# Auto join. +hook_add("on_connect", "autojoin", sub { + my ($svr) = @_; + + # Get the auto-join from the config. + my @cajoin = @{ (conf_get("server:$svr:ajoin"))[0] }; + + # Join the channels. + if (!defined $cajoin[1]) { + # For single-line ajoins. + my @sajoin = split(',', $cajoin[0]); + + API::IRC::cjoin($svr, $_) foreach (@sajoin); + } + else { + # For multi-line ajoins. + API::IRC::cjoin($svr, $_) foreach (@cajoin); + } + + return 1; +}); + + 1; # vim: set ai sw=4 ts=4: diff --git a/src/Parser/IRC.pm b/src/Parser/IRC.pm index 88475eb..784aedb 100644 --- a/src/Parser/IRC.pm +++ b/src/Parser/IRC.pm @@ -38,6 +38,7 @@ our %RAWC = ( our (%got_001, %botnick, %botchans, %csprefix, %chanusers, %chanmodes); # Events. +API::Std::event_add("on_connect"); API::Std::event_add("on_rcjoin"); API::Std::event_add("on_ucjoin"); API::Std::event_add("on_kick"); @@ -97,34 +98,10 @@ sub num001 $botnick{$svr}{nick} = $botnick{$svr}{newnick}; delete $botnick{$svr}{newnick}; } - - # Modes on connect. - unless (!conf_get("server:$svr:modes")) { - my $connmodes = (conf_get("server:$svr:modes"))[0][0]; - API::IRC::umode($svr, $connmodes); - } - - # Identify string. - unless (!conf_get("server:$svr:idstr")) { - my $idstr = (conf_get("server:$svr:idstr"))[0][0]; - Auto::socksnd($svr, $idstr); - } - - # Get the auto-join from the config. - my @cajoin = @{ (conf_get("server:$svr:ajoin"))[0] }; - - # Join the channels. - if (!defined $cajoin[1]) { - # For single-line ajoins. - my @sajoin = split(',', $cajoin[0]); + + # Trigger on_connect. + API::Std::event_run("on_connect", $svr); - API::IRC::cjoin($svr, $_) foreach (@sajoin); - } - else { - # For multi-line ajoins. - API::IRC::cjoin($svr, $_) foreach (@cajoin); - } - return 1; }