From e071cd1b8b9272c64261ea334f2fcd06316e15ac Mon Sep 17 00:00:00 2001 From: Elijah Perrault Date: Fri, 4 Feb 2011 13:52:41 -0700 Subject: [PATCH] Added core command RESTART. --- bin/auto | 1 + doc/CHANGELOG | 1 + src/Core/IRC.pm | 41 +++++++++++++++++++++++++++++++++++++++-- 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/bin/auto b/bin/auto index 5d8f9e2..dcc751f 100755 --- a/bin/auto +++ b/bin/auto @@ -297,6 +297,7 @@ API::Std::cmd_add("MODLOAD", 1, \%Core::IRC::SHELP_MODLOAD, \%Core::IRC::FHELP_M API::Std::cmd_add("MODUNLOAD", 1, \%Core::IRC::SHELP_MODUNLOAD, \%Core::IRC::FHELP_MODUNLOAD, \&Core::IRC::cmd_modunload); API::Std::cmd_add("MODRELOAD", 1, \%Core::IRC::SHELP_MODRELOAD, \%Core::IRC::FHELP_MODRELOAD, \&Core::IRC::cmd_modreload); API::Std::cmd_add("SHUTDOWN", 2, \%Core::IRC::SHELP_SHUTDOWN, \%Core::IRC::FHELP_SHUTDOWN, \&Core::IRC::cmd_shutdown); +API::Std::cmd_add("RESTART", 2, \%Core::IRC::SHELP_RESTART, \%Core::IRC::FHELP_RESTART, \&Core::IRC::cmd_restart); # Infinite while loop. while (1) { diff --git a/doc/CHANGELOG b/doc/CHANGELOG index 4b66222..b85988d 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -3,6 +3,7 @@ Auto IRC Bot 3.0: Change Log 3.0 Indev ================================================================== + * Added core command RESTART. * Added config option server:autorejoin for rejoining on kick. * Added event on_kick. * Parse KICK. diff --git a/src/Core/IRC.pm b/src/Core/IRC.pm index 33ddfb9..9db4fa0 100644 --- a/src/Core/IRC.pm +++ b/src/Core/IRC.pm @@ -190,9 +190,7 @@ sub cmd_shutdown dbug "Got SHUTDOWN from ".$data{nick}."!".$data{user}."@".$data{host}."/".$data{svr}."! Shutting down. . ."; alog "Got SHUTDOWN from ".$data{nick}."!".$data{user}."@".$data{host}."/".$data{svr}."! Shutting down. . ."; quit($_, "SHUTDOWN from ".$data{nick}."/".$data{svr}) foreach (keys %Auto::SOCKET); - sleep 1; DB::flush(); - sleep 1; system("rm $Auto::Bin/auto.pid"); exit; @@ -200,5 +198,44 @@ sub cmd_shutdown return 1; } +# Help hashes for RESTART. Spanish, French and German needed. +our %SHELP_RESTART = ( + 'en' => 'Restart Auto.', +); +our %FHELP_RESTART = ( + 'en' => 'This will send out restart notifications, quit all networks, flush the database, start a new Auto process, then exit the program.', +); +# RESTART callback. +sub cmd_restart +{ + my (%data) = @_; + + # Check for the appropriate privilege. + if (!has_priv(match_user(%data), "cmd.restart")) { + notice($data{svr}, $data{nick}, trans("Permission denied")."."); + return 0; + } + + # Goodbye world! + notice($data{svr}, $data{nick}, "Restarting."); + dbug "Got RESTART from ".$data{nick}."!".$data{user}."@".$data{host}."/".$data{svr}."! Restarting. . ."; + alog "Got RESTART from ".$data{nick}."!".$data{user}."@".$data{host}."/".$data{svr}."! Restarting. . ."; + quit($_, "RESTART from ".$data{nick}."/".$data{svr}) foreach (keys %Auto::SOCKET); + DB::flush(); + system("rm $Auto::Bin/auto.pid") if -e "$Auto::Bin/auto.pid"; + + # Time to come back from the dead! + if ($Auto::DEBUG) { + system("$Auto::Bin/auto -d"); + } + else { + system("$Auto::Bin/auto"); + } + exit; + + # To appease PerlCritic. + return 1; +} + 1;