172 lines
7.8 KiB
Plaintext
172 lines
7.8 KiB
Plaintext
|
var sender, hostmask, msgtype, target, msgdata;
|
||
|
|
||
|
// Respond to server pings
|
||
|
if(string_pos("PING",currentMessage)==1) {
|
||
|
write_string(serverSocket,"PONG "+string_parse_single(currentMessage," ",2,true)+EOL);
|
||
|
socket_send(serverSocket);
|
||
|
}
|
||
|
|
||
|
|
||
|
// Check if currentMessage is from a user or Service
|
||
|
if(string_pos("!",string_parse_single(currentMessage," ",1,true))) {
|
||
|
sender = string_copy(currentMessage,2,string_pos("!",currentMessage)-2);
|
||
|
hostmask = string_copy(currentMessage,string_pos("!",currentMessage)+1,string_pos(" ",currentMessage)-string_pos("!",currentMessage)-1);
|
||
|
msgtype = string_parse_single(currentMessage," ",2,true);
|
||
|
target = string_parse_single(currentMessage," ",3,true);
|
||
|
|
||
|
if(string_count(" ",currentMessage)>2) {
|
||
|
msgdata = string_copy(currentMessage,string_pos(target+" ",currentMessage)+string_length(target)+1,string_length(currentMessage));
|
||
|
} else {
|
||
|
msgdata="";
|
||
|
}
|
||
|
|
||
|
// Cleanup
|
||
|
if(msgtype!="QUIT" && string_pos(":",target)==1){target=string_copy(target,2,string_length(target)-1)}
|
||
|
if((msgtype=="PART"||msgtype=="TOPIC"||msgtype=="INVITE"||msgtype=="NOTICE"||msgtype=="PRIVMSG") && msgdata!=""){msgdata=string_copy(msgdata,2,string_length(msgdata)-1)}
|
||
|
|
||
|
} else {
|
||
|
if(string_pos("NOTICE AUTH",currentMessage)==1) {
|
||
|
printMessage = currentMessage;
|
||
|
log_update(printMessage,chatWidth);
|
||
|
} else {
|
||
|
// Message not from user or Service, do not print
|
||
|
printMessage = "";
|
||
|
}
|
||
|
return "";
|
||
|
}
|
||
|
|
||
|
|
||
|
// Format the message for display
|
||
|
switch(msgtype) {
|
||
|
case "QUIT":
|
||
|
if(target==":"){printMessage="GLOBAL: "+timestamp()+"* Quits: "+sender+" ("+hostmask+")"};
|
||
|
if(target!=":"){printMessage="GLOBAL: "+timestamp()+"* Quits: "+sender+" ("+hostmask+") ("+string_copy(target,2,string_length(target)-1)+" "+msgdata+")"};
|
||
|
break;
|
||
|
case "JOIN":
|
||
|
if(sender==botnick){printMessage=target+": "+timestamp()+"* Now talking in "+target};
|
||
|
if(sender!=botnick){printMessage=target+": "+timestamp()+"* Joins: "+sender+" ("+hostmask+")"};
|
||
|
break;
|
||
|
case "PART":
|
||
|
if(msgdata==""){printMessage=target+": "+timestamp()+"* Parts: "+sender+" ("+hostmask+")"};
|
||
|
if(msgdata!=""){printMessage=target+": "+timestamp()+"* Parts: "+sender+" ("+hostmask+") ("+msgdata+")"};
|
||
|
break;
|
||
|
case "KICK":
|
||
|
if(string_parse_single(msgdata," ",1,true)!=botnick){
|
||
|
printMessage=target+": "+timestamp()+"* "+string_parse_single(msgdata," ",1,true)+" was kicked by "+sender+" ("+string_parse_single(msgdata,":",2,true)+")";
|
||
|
} else {
|
||
|
printMessage=target+": "+timestamp()+"* You were kicked from "+target+" by "+sender+" ("+string_parse_single(msgdata,":",2,true)+")";
|
||
|
join_channel(target);
|
||
|
}
|
||
|
break;
|
||
|
case "MODE":
|
||
|
printMessage=target+": "+timestamp()+"* "+sender+" sets mode: "+msgdata;
|
||
|
break;
|
||
|
case "TOPIC":
|
||
|
printMessage=target+": "+timestamp()+"* "+sender+" changes topic to '"+msgdata+"'";
|
||
|
break;
|
||
|
case "INVITE":
|
||
|
printMessage="GLOBAL: "+timestamp()+"* "+sender+" ("+hostmask+") invites you to join "+msgdata;
|
||
|
join_channel(msgdata);
|
||
|
break;
|
||
|
case "NICK":
|
||
|
printMessage="GLOBAL: "+timestamp()+"* "+sender+" is now known as "+target;
|
||
|
break;
|
||
|
case "NOTICE":
|
||
|
if(string_pos("#",target)!=1){printMessage="DIRECT ("+sender+"): "+timestamp()+"* NOTICE: -"+sender+"- "+msgdata};
|
||
|
if(string_pos("#",target)==1){printMessage=target+": "+timestamp()+"* NOTICE: -"+sender+"- "+msgdata};
|
||
|
break;
|
||
|
case "PRIVMSG":
|
||
|
if(string_pos("#",target)==1){ // If a channel
|
||
|
if(string_pos(chr(1),msgdata)==1){
|
||
|
if(string_pos(" ",msgdata)){
|
||
|
switch(string_parse_single(msgdata," ",1,true)){
|
||
|
case chr(1)+"ACTION":
|
||
|
printMessage=target+": "+timestamp()+"* "+sender+" "+string_copy(msgdata,string_pos(" ",msgdata)+1,string_length(msgdata));
|
||
|
break;
|
||
|
default:
|
||
|
printMessage=target+": "+timestamp()+"* CTCP: "+string_copy(msgdata,2,string_pos(" ",msgdata)-2)+" "+string_parse_single(msgdata," ",2,true);
|
||
|
break;
|
||
|
}
|
||
|
} else {
|
||
|
printMessage=target+": "+timestamp()+"* CTCP: "+string_copy(msgdata,2,string_length(msgdata)-2);
|
||
|
}
|
||
|
} else {
|
||
|
printMessage=target+": "+timestamp()+"<"+sender+"> "+msgdata;
|
||
|
}
|
||
|
} else { // If not a channel
|
||
|
target = sender;
|
||
|
if(string_pos(chr(1),msgdata)==1){
|
||
|
if(string_pos(" ",msgdata)){
|
||
|
switch(string_parse_single(msgdata," ",1,true)){
|
||
|
case chr(1)+"ACTION":
|
||
|
printMessage="DIRECT ("+sender+"): "+timestamp()+"* "+sender+" "+string_copy(msgdata,string_pos(" ",msgdata)+1,string_length(msgdata));
|
||
|
break;
|
||
|
default:
|
||
|
printMessage="DIRECT ("+sender+"): "+timestamp()+"* CTCP: "+string_copy(msgdata,2,string_pos(" ",msgdata)-2)+" "+string_parse_single(msgdata," ",2,true);
|
||
|
break;
|
||
|
}
|
||
|
} else {
|
||
|
printMessage="DIRECT ("+sender+"): "+timestamp()+"* CTCP: "+string_copy(msgdata,2,string_length(msgdata)-2);
|
||
|
}
|
||
|
} else {
|
||
|
printMessage="DIRECT ("+sender+"): "+timestamp()+"<"+sender+"> "+msgdata;
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
default: break;
|
||
|
}
|
||
|
|
||
|
|
||
|
// Add the incoming message to the display
|
||
|
if(printMessage!="") {
|
||
|
log_update(printMessage,chatWidth);
|
||
|
}
|
||
|
|
||
|
|
||
|
// CTCP Responses
|
||
|
if(msgtype=="PRIVMSG"){
|
||
|
if(string_pos(chr(1),msgdata)==1){
|
||
|
if(string_pos(" ",msgdata)){
|
||
|
if(string_parse_single(msgdata," ",1,true)==chr(1)+"PING"){send_ctcp("NOTICE",sender,"PING "+string_copy(msgdata,string_pos(" ",msgdata)+1,string_length(msgdata)-(string_pos(" ",msgdata)+1)));};
|
||
|
} else {
|
||
|
if(string_copy(msgdata,1,5)==chr(1)+"TIME"){
|
||
|
var date, weekday, month;
|
||
|
date = date_current_datetime();
|
||
|
switch(date_get_weekday(date)){
|
||
|
case 1: weekday="Sun"; break;
|
||
|
case 2: weekday="Mon"; break;
|
||
|
case 3: weekday="Tue"; break;
|
||
|
case 4: weekday="Wed"; break;
|
||
|
case 5: weekday="Thur"; break;
|
||
|
case 6: weekday="Fri"; break;
|
||
|
case 7: weekday="Sat"; break;
|
||
|
}
|
||
|
switch(date_get_month(date)){
|
||
|
case 1: month="Jan"; break;
|
||
|
case 2: month="Feb"; break;
|
||
|
case 3: month="Mar"; break;
|
||
|
case 4: month="Apr"; break;
|
||
|
case 5: month="May"; break;
|
||
|
case 6: month="Jun"; break;
|
||
|
case 7: month="July"; break;
|
||
|
case 8: month="Aug"; break;
|
||
|
case 9: month="Sep"; break;
|
||
|
case 10: month="Oct"; break;
|
||
|
case 11: month="Nov"; break;
|
||
|
case 12: month="Dec"; break;
|
||
|
}
|
||
|
send_ctcp("NOTICE",sender,"TIME "+weekday+" "+month+" "+string(date_get_day(date))+" "+string(date_get_hour(date))+":"+string(date_get_minute(date))+":"+string(date_get_second(date))+" "+string(date_get_year(date)));
|
||
|
}
|
||
|
if(string_copy(msgdata,1,8)==chr(1)+"VERSION"){send_ctcp("NOTICE",sender,"VERSION GimelBot v"+botversion+" by Ikewise");};
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
// Run main bot functions
|
||
|
bot_commands(sender, hostmask, msgtype, target, msgdata);
|
||
|
|
||
|
|
||
|
|