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