From bdb71a80b722d7d58a6de0a9bb624c9283485a61 Mon Sep 17 00:00:00 2001 From: timriker Date: Sun, 1 Jan 2006 23:02:50 +0000 Subject: [PATCH] OnJoin - tensai, fixes by TimRiker git-svn-id: https://svn.code.sf.net/p/infobot/code/trunk/blootbot@1242 c11ca15a-4712-0410-83d8-924469b57eb5 --- files/sample/blootbot.chan | 6 ++-- setup/onjoin.sql | 5 +++ src/CommandStubs.pl | 1 + src/DynaConfig.pl | 5 +++ src/IRC/IrcHooks.pl | 3 ++ src/Modules/OnJoin.pl | 70 ++++++++++++++++++++++++++++++++++++++ src/dbi.pl | 2 +- src/modules.pl | 2 +- 8 files changed, 89 insertions(+), 5 deletions(-) create mode 100644 setup/onjoin.sql create mode 100644 src/Modules/OnJoin.pl diff --git a/files/sample/blootbot.chan b/files/sample/blootbot.chan index 6390b94..01af304 100644 --- a/files/sample/blootbot.chan +++ b/files/sample/blootbot.chan @@ -1,9 +1,8 @@ -#v1: blootbot -- blootbot -- written Fri Aug 12 22:01:53 2005 +#v1: blootbot -- blootbot -- written Sun Jan 1 22:59:37 2006 #botpark +RootWarn - _time_added 1108710504 - autojoin + +autojoin #debian-bots +News @@ -31,6 +30,7 @@ _default +HTTPDtype +Kernel +Math + +OnJoin +Plug +Quote +Rss diff --git a/setup/onjoin.sql b/setup/onjoin.sql new file mode 100644 index 0000000..001924e --- /dev/null +++ b/setup/onjoin.sql @@ -0,0 +1,5 @@ +CREATE TABLE onjoin ( + nick VARCHAR(20) NOT NULL, + channel VARCHAR(16) NOT NULL, + message VARCHAR(255) NOT NULL +); diff --git a/src/CommandStubs.pl b/src/CommandStubs.pl index 43df9ac..e2aa6b8 100644 --- a/src/CommandStubs.pl +++ b/src/CommandStubs.pl @@ -887,6 +887,7 @@ sub nullski { &addCmdHook('quote', ('CODEREF' => 'Quote::Quote', 'Forker' => 1, 'Identifier' => 'Quote', 'Help' => 'quote', 'Cmdstats' => 'Quote') ); &addCmdHook('reverse', ('CODEREF' => 'reverse::reverse', 'Identifier' => 'reverse', 'Cmdstats' => 'reverse', 'Forker' => 1, 'Module' => 'reverse') ); &addCmdHook('RootWarn', ('CODEREF' => 'CmdrootWarn', 'Identifier' => 'RootWarn', 'Module' => 'RootWarn') ); +&addCmdHook('OnJoin', ('CODEREF' => 'Cmdonjoin', 'Identifier' => 'OnJoin', 'Module' => 'OnJoin') ); &addCmdHook('Rss', ('CODEREF' => 'Rss::Rss', 'Identifier' => 'Rss', 'Cmdstats' => 'Rss', 'Forker' => 1, 'Help' => 'rss') ); &addCmdHook('sched(stats|info)', ('CODEREF' => 'scheduleList', ) ); &addCmdHook('scramble', ('CODEREF' => 'scramble::scramble', 'Identifier' => 'scramble', 'Cmdstats' => 'scramble', 'Forker' => 1, 'Module' => 'scramble') ); diff --git a/src/DynaConfig.pl b/src/DynaConfig.pl index 4e5153f..e1cf464 100644 --- a/src/DynaConfig.pl +++ b/src/DynaConfig.pl @@ -821,6 +821,11 @@ sub rehashConfVars { &loadMyModule('RootWarn'); delete $cache{confvars}{$_}; } + + if (/^onjoin$/i and $i) { + &loadMyModule('OnJoin'); + delete $cache{confvars}{$_}; + } } &DEBUG("end of rehashConfVars"); diff --git a/src/IRC/IrcHooks.pl b/src/IRC/IrcHooks.pl index dac4238..542ba63 100644 --- a/src/IRC/IrcHooks.pl +++ b/src/IRC/IrcHooks.pl @@ -584,6 +584,9 @@ sub on_join { $user =~ /^~?r(oo|ew|00)t$/i ); + ### emit a message based on who just joined + &onjoin($who,$user,$host,$chan) if (&IsChanConf('OnJoin')); + ### NEWS: if (&IsChanConf('News') && &IsChanConf('newsKeepRead')) { if (!&loadMyModule('News')) { # just in case. diff --git a/src/Modules/OnJoin.pl b/src/Modules/OnJoin.pl new file mode 100644 index 0000000..53b5082 --- /dev/null +++ b/src/Modules/OnJoin.pl @@ -0,0 +1,70 @@ +# +# OnJoin.pl: emit a message when a user enters the channel +# Author: tensai +# Version: v0.1 +# Created: 20051222 +# Updated: 20051230 + +use strict; + +use vars qw(%channels %param); +use vars qw($dbh $who $chan); + +sub onjoin { + my ($nick, $user, $host, $chan) = @_; + my $n = lc $nick; + my $message = &sqlSelect('onjoin', 'message', { nick => $n, channel => $chan } ) || 0; + + # print the message, if there was one + if ($message){ + &status("OnJoin: $nick arrived"); + &msg($chan, $message); + } + + return; +} + +# set and get messages +sub Cmdonjoin { + my $msg = shift; + $msg =~ m/(.*?)( (.*))/; + my $nick = $1; + $msg = $3; + + # if msg not set, show what the message would be + if (!$msg){ + $nick = $who if (!$nick); + $msg = &sqlSelect('onjoin', 'message', { nick => $nick, channel => $chan } ) || ''; + if ($msg){ + &performReply($msg); + } + return; + } + + # get params + my $strict = &getChanConf('onjoinStrict'); + my $ops = &getChanConf('onjoinOpsOnly'); + + # only allow changes by ops + if ($ops){ + if (!$channels{$chan}{o}{$who}){ + &performReply("sorry, you're not an operator"); + return; + } + } + # only allow people to change their own message (superceded by OpsOnly) + elsif ($strict){ + # regardless of strict mode, ops can always change + if (!$channels{$chan}{o}{$who} and $nick ne $who){ + &performReply("I can't alter a message for another user (strict mode)"); + return; + } + } + + &sqlDelete('onjoin', { nick => $nick, channel => $chan}); + &sqlInsert('onjoin', { nick => $nick, channel => $chan, message => $msg}); + &performReply("ok"); + return; +} + +1; diff --git a/src/dbi.pl b/src/dbi.pl index 99d115e..bee8063 100644 --- a/src/dbi.pl +++ b/src/dbi.pl @@ -639,7 +639,7 @@ sub checkTables { # create database not needed for SQLite } - foreach ( qw(botmail connections factoids rootwarn seen stats) ) { + foreach ( qw(botmail connections factoids rootwarn seen stats onjoin) ) { if (exists $db{$_}) { $cache{has_table}{$_} = 1; next; diff --git a/src/modules.pl b/src/modules.pl index af03265..961b90b 100644 --- a/src/modules.pl +++ b/src/modules.pl @@ -24,7 +24,7 @@ if ($@) { my @myModulesLoadNow; my @myModulesReloadNot; BEGIN { - @myModulesLoadNow = ('Topic', 'Uptime', 'News', 'RootWarn', 'DumpVars2', 'botmail'); + @myModulesLoadNow = ('Topic', 'Uptime', 'News', 'RootWarn', 'DumpVars2', 'botmail', 'OnJoin'); @myModulesReloadNot = ('IRC/Irc.pl','IRC/Schedulers.pl'); } -- 2.39.2