All pastes #508800 Raw Edit

Ploximeth

public text v1 · immutable
·published 2007-05-25 04:35 UTC
rendered paste body
#!/usr/bin/perl
use Violet;

violet_Init(); # Call this at the very start of all your programs.
$DEBUG = 1;

fork() and exit();

# Initialize levels & such
violet_AddLevel("-1", "Banned");
violet_AddLevel("0" , "Normal");
violet_AddLevel("5" , "Moderator");
violet_AddLevel("10", "Junior Admin");
violet_AddLevel("15", "Admin");
violet_AddLevel("20", "Owner");

# Initialize command handling
violet_SetCmdString("~"); # the command string is ~
violet_SetRawHandler("251",    \&initial_join);
violet_SetCmdHandler("say",    \&cmd_say,    0);
violet_SetCmdHandler("uptime", \&cmd_uptime, -1);
violet_SetCmdHandler("raw",    \&cmd_raw,    20);
violet_SetCmdHandler("down",   \&cmd_down,   -1);
violet_SetCmdHandler("up",     \&cmd_up,     -1);
violet_SetCmdHandler("die",    \&cmd_die,    20);
violet_SetCmdHandler("hopserver", \&cmd_hopserver, 20);
violet_SetCmdHandler("reload",    \&cmd_reload,    20);
violet_SetCmdHandler("msg",       \&cmd_msg,       20);
violet_SetCmdHandler("whoami",    \&cmd_whoami,    -1);
violet_SetCmdHandler("topic",     \&cmd_topic,     10);
violet_SetCmdHandler("kickban",   \&cmd_kban,      15);
violet_SetCmdHandler("mpd",       \&cmd_mpdnp,     -1);

# Connect
# my $sock = violet_Connect("xxxx", 6667, "VioletX", "Violet", "Violet", "Violet"); # Cluenet local
my $sock = violet_Connect("xxxx", 6667, "Violet", "Violet", "Violet", "Violet"); # IRCWire Orbis (Phase's server)

#FIXME: password/identification
violet_AddUser("PlasmaFox", 20);
violet_AddUser("aegis",     20);
violet_AddUser("Leos",      15);
violet_AddUser("rxvt",      15);
violet_AddUser("Edgeman",   15);

while (1) {
        my $leftover = violet_Parse($sock);
        exit(1) if ($leftover == VIOLET_READ_BAD_SOCK);
}

sub cmd_say {
        my $socket = shift;
        my $chan   = shift;
        my $data   = shift;
        violet_MsgChan($socket, $chan, $data);
}

sub cmd_uptime {
        my $socket = shift;
        my $chan   = shift;
        violet_MsgChan($socket, $chan, "System: ".violet_GetUptime($socket, VIOLET_UPTIME_SYSTEM));
        violet_MsgChan($socket, $chan, "Core:   ".violet_GetUptime($socket, VIOLET_UPTIME_CORE));
        violet_MsgChan($socket, $chan, "Server: ".violet_GetUptime($socket, "other"));
}

sub cmd_raw {
        my $socket = shift;
        my $chan   = shift;
        my $data   = shift;
        violet_Raw($socket, $data);
}

sub cmd_die {
        my $socket = shift;
        my $chan   = shift;
        my $data   = shift || "tengo un gato in mis pantalones";
        violet_Quit($socket, $data);
}

sub cmd_topic {
	my $socket = shift;
	my $chan   = shift;
	my $data   = shift;
	my $cmd    = shift;
	my $nick   = shift;
	violet_SetTopic($socket, $chan, $data." ($nick)");
}

sub initial_join {
        my $socket = shift;
        violet_JoinChans($socket, "#linux,#coders");
        violet_Raw($socket, "PRIVMSG NickServ :identify REMOVED");
}

sub cmd_down {
	my $socket = shift;
	my $chan   = shift;
	my $data   = shift;
	my $cmd    = shift;
	my $nick   = shift;
	violet_Mode($socket, $chan, "-qaoh+v ".(($nick." ") x 5));
}

sub cmd_up {
	my $socket = shift;
	my $chan   = shift;
	my $data   = shift;
	my $cmd    = shift;
	my $nick   = shift;
	violet_KickBan($socket, $chan, $nick, "Banned!")        if (violet_GetUserLevel($nick) == -1);
	violet_Mode($socket, $chan, "+v ".(($nick." ") x1))     if (violet_GetUserLevel($nick) == 0 || !defined(violet_GetUserLevel($nick)));
	violet_Mode($socket, $chan, "+hv ".(($nick." ") x2))    if (violet_GetUserLevel($nick) == 5);
	violet_Mode($socket, $chan, "+ohv ".(($nick." ") x3))   if (violet_GetUserLevel($nick) == 10);
	violet_Mode($socket, $chan, "+aohv ".(($nick." ") x4))  if (violet_GetUserLevel($nick) == 15);
	violet_Mode($socket, $chan, "+qaohv ".(($nick." ") x5)) if (violet_GetUserLevel($nick) == 20);
			
}

sub cmd_hopserver {
	my $socket = shift;
	my $chan   = shift;
	my $data   = shift;
	my $cmd    = shift;
	my $nick   = shift;
	$sock = violet_Connect($data, 6667, "Violet", "Violet", "Violet", "Violet"); 
	violet_Quit($socket, "hopping to $data");
}

sub cmd_whoami {
	my $socket = shift;
	my $chan   = shift;
	my $data   = shift;
	my $cmd    = shift;
	my $nick   = shift;
	violet_MsgChan($socket, $chan, "you are $nick, level ".violet_GetUserLevel($nick)." :p");
}	

sub cmd_reload {
	my $socket = shift;
	my $chan   = shift;
	my $data   = shift;
	my $cmd    = shift;
	my $nick   = shift;
	violet_Quit($socket, "reloading (thanks to $nick D:<)");
	print `./update.sh`;
	exec("perl $0");
}

sub cmd_kban {
	my $socket = shift;
	my $chan   = shift;
	my $data   = shift;
	my $cmd    = shift;
	my $nick   = shift;
	violet_KickBan($socket, $chan, (split(/\s/, $data))[0], substr($data, length((split(/\s/, $data))[0])+1, 8192));
}

sub cmd_msg { 
	my $socket = shift;
	my $chan   = shift;
	my $data   = shift;
	my $cmd    = shift;
	my $nick   = shift;
	my $cchan  = (split(/\s/, $data))[0];
	my $msg    = substr($data, length($cchan)+1, 8192);
	violet_MsgChan($socket, $cchan, $msg);
}

sub cmd_mpdnp {
	my $socket = shift;
	my $chan   = shift;
	my $data   = shift;
	my $cmd    = shift;
	my $nick   = shift;
	my $server = (split(/\s/, $data))[0] || "plasma.irc.su";
	my $port   = (split(/\s/, $data))[1] || "6600";
	violet_MsgChan($socket, $chan, "[$data] ".`~/mpdnp.sh $server $port`);
}