GimelBot/src/Scripts/IRC Functions/interpret_message.gml

172 lines
7.8 KiB
Plaintext
Raw Normal View History

2021-10-16 18:00:39 -05:00
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);