IRC Chat Autoresponder

July 11, 2004, updated August 6, 2004
This plugin is very old and i'd be surprised if it works with what is now called pidgin.

This is a plugin for gaim. This simply responds to things people say in an IRC chat room so I don't have to be nice and type things like "hello" and "bye."

#!/usr/bin/perl -w
#
# AutoHello 0.0.1 by digitalpeer
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License 2 as published by
# the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License (http://www.gnu.org/copyleft/gpl.html)
# for more details.
#
# If you have no access to read the license, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Any suggestions are welcome.  There is sometimes a bot in #gaim on
# irc.openprojects.net running this code, but with more triggers, if
# you want to see it.
 
 
# I swear some people in #gaim use a damn script to say hi.
# So, here's my attempt to make one that's pretty "realistic."
# Of course, the brains are modeled after LSchiere AI.
 
# this is the max wait seconds when responding to a buddy joining the room
# a random second is picked somewhere in this
#WARNING: the min is 3 seconds, so if you put 1 here you'll get 3 or 4 seconds
$maxwait = 60;
 
# every time i respond, i go into sleep mode for this many seconds before I can talk again
# use this so you don't annoy those #gaim folks (i wouldn't go below 10)
$sleeptime = 10;
 
# what to respond with when bot is said
@iamnotabot = ("I AM NOT A BOT!, i don't think", "i have feelings too you know", "leave me alone", "there, i just wrote you down in my I don't like you book");
 
# greeting responses
@greetresponse = ("hello", "hi", "hey", "wahoo! it's", "howdy", "what's up", "what have you been up to");
 
# here are the responses used for saying goodbye
@ungreetresponse = ("goodbye", "later", "bye", "see you later", "see ya");
 
# this is the response that is used on "welcome back"
@wbresponse = ("wb", "welcome back", "back so soon", "in or out", "we missed you");
 
#here's a first in first out queue to use for welcome back
$lastusertoleave = "nobody";
 
# flag to keepp track of sleep mode
$allowspeak = 0;
$forcenospeak = "";
 
$queue_what = "";
$queue_where = "";
$queue_gc = "";
$queue_who = "";
 
# got a chat message, so lets decipher it
sub autohello_chat_recv
{
	if ($allowspeak)
	{
		$gc = $_[0];
		$where = $_[1];
		$who = $_[2];
		$what = $_[3];
 
		$me = GAIM::get_info(3, $gc);
		if ($who eq $me)
		{
			return 0;
		}
		elsif ($what =~ "GAIM " || $what =~ "gAIM" || $what =~ "gAim" || $what =~ "GAim" || $what =~ "gaIM")
		{
			$allowspeak = 0;
			#$answer = $ungreetresponse[rand @ungreetresponse];
			$queue_what = $who.": it is prefered that you use 'gaim' or 'Gaim' as the spelling";
			$queue_where = $where;
			$queue_gc = $gc;
			$queue_who = $who;
			$minsleep = rand(10);
			GAIM::add_timeout_handler($minsleep, "autohello_dospeak");
			GAIM::add_timeout_handler($minsleep + $sleeptime, "autohello_enable_speak");
		}
		elsif ($what =~ "FAQ" || $what =~ "faq")
		{
			$allowspeak = 0;
			#$answer = $ungreetresponse[rand @ungreetresponse];
			$queue_what = "yes, the gaim FAQ can be found at http://gaim.sf.net/faq.php";
			$queue_where = $where;
			$queue_gc = $gc;
			$queue_who = $who;
			$minsleep = rand(10);
			GAIM::add_timeout_handler($minsleep, "autohello_dospeak");
			GAIM::add_timeout_handler($minsleep + $sleeptime, "autohello_enable_speak");
		}
		elsif ($what =~ "digitalpeer" && ($what =~ "script" || $what =~ "bot"))
		{
			$allowspeak = 0;
			#$answer = $ungreetresponse[rand @ungreetresponse];
			$queue_what = $iamnotabot[rand @iamnotabot];
			$queue_where = $where;
			$queue_gc = $gc;
			$queue_who = $who;
			GAIM::add_timeout_handler(2, "autohello_dospeak");
			GAIM::add_timeout_handler(20 + $sleeptime, "autohello_enable_speak");
 
		}
		elsif ($what =~ "digitalpeer" && ($what =~ "shutup" || $what =~ "quiet"|| $what =~ "stop"))
		{
			$allowspeak = 0;
			#$answer = $ungreetresponse[rand @ungreetresponse];
			$queue_what = "/me now walks and talks with a limp thanks to you";
			$queue_where = $where;
			$queue_gc = $gc;
			$queue_who = $who;
			GAIM::add_timeout_handler(2, "autohello_dospeak");
			GAIM::add_timeout_handler(10 + $sleeptime, "autohello_enable_speak");
 
		}
		elsif ($what =~ "gaim" && ($what =~ "doesn't" || $what =~ "work"))
		{
			$allowspeak = 0;
			#$answer = $ungreetresponse[rand @ungreetresponse];
			$queue_what = "if your having a problem with gaim, FAQ can be found at http://gaim.sf.net/faq.php";
			$queue_where = $where;
			$queue_gc = $gc;
			$queue_who = $who;
			GAIM::add_timeout_handler(5, "autohello_dospeak");
			GAIM::add_timeout_handler(10 + $sleeptime, "autohello_enable_speak");
 
		}
		elsif (($what =~ "MSN" || $what =~ "msn") && ($what =~ "work" || $what =~ "suck"))
		{
			$allowspeak = 0;
			#$answer = $ungreetresponse[rand @ungreetresponse];
			$queue_what = "You shouldn't use MSN.  MSN is evil.  Besides: it sux0rz.  If your friends use MSN, make them change.  If they won't change, get new friends.";
			$queue_where = $where;
			$queue_gc = $gc;
			$queue_who = "";
			GAIM::add_timeout_handler(5, "autohello_dospeak");
			GAIM::add_timeout_handler(10 + $sleeptime, "autohello_enable_speak");
 
		}
 
	}
}
 
 
sub autohello_chat_buddy_leave
{
	$gc = $_[0];
	$where = $_[1];
	$who = $_[2];
	$me = GAIM::get_info(3, $gc);
 
	#make sure this isn't me
	if ($who eq $me)
	{
		return 0;
	}
	if ($queue_who =~ $who)
	{
		$forcenospeak = "1";
	}
	$lastusertoleave = $who;
}
 
#a buddy has entered the room
sub autohello_chat_buddy_join
{
	if ($allowspeak)
	{
		$gc = $_[0];
		$where = $_[1];
		$who = $_[2];
		$me = GAIM::get_info(3, $gc);
 
		#make sure this isn't me
		if ($who eq $me)
		{
			return 0;
		}
 
		if ($lastusertoleave =~ $who)
		{
			$allowspeak = 0;
			$answer = $wbresponse[rand @wbresponse];
			$queue_what = $answer." ".$who;
			$queue_where = $where;
			$queue_gc = $gc;
			$queue_who = $who;
			$minsleep = rand($maxwait);
			GAIM::add_timeout_handler($minsleep, "autohello_dospeak");
			GAIM::add_timeout_handler($minsleep + $sleeptime, "autohello_enable_speak");
		}
		else
		{
			$allowspeak = 0;
			$answer = $greetresponse[rand @greetresponse];
			$queue_what = $answer." ".$who;
			$queue_where = $where;
			$queue_gc = $gc;
			$queue_who = $who;
			$minsleep = rand($maxwait);
			GAIM::add_timeout_handler($minsleep, "autohello_dospeak");
			GAIM::add_timeout_handler($minsleep + $sleeptime, "autohello_enable_speak");
		}
	}
}
 
# this is the renabler to come back from sleep mode
sub autohello_enable_speak
{
	$allowspeak = 1;
}
 
sub autohello_dospeak
{
	if (!$forcenospeak)
	{
		GAIM::print_to_chat($queue_gc, $queue_where, $queue_what);
	}
	$forcenospeak="";
}
 
# i have joined a chat, don't say hi to every freaking person, so wait
sub autohello_chat_join
{
	if ($allowspeak)
	{
		$allowspeak = 0;
		GAIM::add_timeout_handler(10, "autohello_enable_speak");
	}
}
 
#this is called when the plugin is unloaded
sub autohello_goodbye
{
	#GAIM::print("Unloading AutoHello", "Autohello is unloading.");
}
 
GAIM::register("AutoHello", "0.0.1", "autohello_goodbye", "");
GAIM::add_event_handler("event_chat_recv", "autohello_chat_recv");
GAIM::add_event_handler("event_chat_buddy_join", "autohello_chat_buddy_join");
GAIM::add_event_handler("event_chat_join", "autohello_chat_join");
GAIM::add_event_handler("event_chat_buddy_leave", "autohello_chat_buddy_leave");
GAIM::add_timeout_handler(10, "autohello_enable_speak",0);

Related Posts