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`);
}