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