From: timriker <timriker@c11ca15a-4712-0410-83d8-924469b57eb5>
Date: Wed, 4 Jan 2006 18:37:43 +0000 (+0000)
Subject: onjoin .2
X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=42f0ecaf0836b3528cc465097555c2abf89cc0c2;p=infobot.git

onjoin .2


git-svn-id: https://svn.code.sf.net/p/infobot/code/trunk@1245 c11ca15a-4712-0410-83d8-924469b57eb5
---

diff --git a/blootbot/AUTHORS b/blootbot/AUTHORS
index af1ec79..5efe778 100644
--- a/blootbot/AUTHORS
+++ b/blootbot/AUTHORS
@@ -20,6 +20,9 @@ Infobot:
 	- Kevin A. Lenzo [oznoid] <lenzo@cs.cmu.edu>
 	- Patrick Cole [ltd] <???>
 
+OnJoin:
+	- Corey Edwards <tensai@zmonkey.org>
+
 Patches:
 	- ...
 
diff --git a/blootbot/files/blootbot.help b/blootbot/files/blootbot.help
index 7e782c7..54de654 100644
--- a/blootbot/files/blootbot.help
+++ b/blootbot/files/blootbot.help
@@ -319,7 +319,7 @@ nickometer: E: ## unknown_lamer
 nickometer: E: ## #botpark
 
 onjoin: D: get/set OnJoin message (needs chan option +OnJoin)
-onjoin: U: ## <nick> [message]
+onjoin: U: ## [chan] [-]<nick> [message]
 onjoin: E: ## blootbot Hey! It's another blootbot!
 
 ord: D: Convert ascii to decimal
diff --git a/blootbot/src/Modules/OnJoin.pl b/blootbot/src/Modules/OnJoin.pl
index 53b5082..68389b5 100644
--- a/blootbot/src/Modules/OnJoin.pl
+++ b/blootbot/src/Modules/OnJoin.pl
@@ -1,9 +1,9 @@
 #
 # OnJoin.pl: emit a message when a user enters the channel
-#    Author: tensai
-#   Version: v0.1
+#    Author: Corey Edwards <tensai@zmonkey.org>
+#   Version: v0.2
 #   Created: 20051222
-#   Updated: 20051230
+#   Updated: 20060102
 
 use strict;
 
@@ -12,12 +12,19 @@ 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;
+	$nick = lc $nick;
+
+	# look for a channel specific message
+	my $message = &sqlSelect('onjoin', 'message', { nick => $nick, channel => $chan } ) || 0;
+
+	# look for a default message
+	if (!$message){
+		$message = &sqlSelect('onjoin', 'message', { nick => $nick, channel => '_default' } ) || 0;
+	}
 
 	# print the message, if there was one
 	if ($message){
-		&status("OnJoin: $nick arrived");
+		&status("OnJoin: $nick arrived, printing message");
 		&msg($chan, $message);
 	}
 
@@ -26,25 +33,55 @@ sub onjoin {
 
 # set and get messages
 sub Cmdonjoin {
-	my $msg = shift;
-	$msg =~ m/(.*?)( (.*))/;
-	my $nick = $1;
-	$msg = $3;
+	$_ = shift;
+	m/(\S*)( (\S*)( (.*)|)|)/;
+	my $ch = $1;
+	my $nick = $3;
+	my $msg = $5;
+
+	# get options 
+	my $strict = &getChanConf('onjoinStrict');
+	my $ops = &getChanConf('onjoinOpsOnly');
+
+	# see if they specified a channel
+	if ($ch !~ m/^\#/ && $ch ne '_default'){
+		$msg = $nick;
+		$nick = $ch;
+		$ch = $chan;
+	}
+
+	$nick = lc $nick;
+
+	if ($nick =~ m/^-(.*)/){
+		$nick = $1;
+		if ($ops){
+			if (!$channels{$chan}{o}{$who}){
+				&performReply("sorry, you're not an operator");
+			}
+		}
+		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)");
+			}
+		}
+		else{
+			&sqlDelete('onjoin', { nick => $nick, channel => $ch });
+			&performReply('ok');
+		}
+		return;
+	}
 
 	# if msg not set, show what the message would be
 	if (!$msg){
 		$nick = $who if (!$nick);
-		$msg = &sqlSelect('onjoin', 'message', { nick => $nick, channel => $chan } ) || '';
+		$msg = &sqlSelect('onjoin', 'message', { nick => $nick, channel => $ch } ) || '';
 		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}){
@@ -61,8 +98,9 @@ sub Cmdonjoin {
 		}
 	}
 
-	&sqlDelete('onjoin', { nick => $nick, channel => $chan});
-	&sqlInsert('onjoin', { nick => $nick, channel => $chan, message => $msg});
+	# remove old one (if exists) and add new message
+	&sqlDelete('onjoin', { nick => $nick, channel => $ch });
+	&sqlInsert('onjoin', { nick => $nick, channel => $ch, message => $msg });
 	&performReply("ok");
 	return;
 }