From 757fab79b51eb4995382d8e8dbfd5485738c0628 Mon Sep 17 00:00:00 2001 From: pk910 Date: Fri, 12 Aug 2011 03:15:04 +0200 Subject: [PATCH] implemented the new events --- IRCEvents.c | 2 +- IRCEvents.h | 4 ++-- IRCParser.c | 48 ++++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 45 insertions(+), 9 deletions(-) diff --git a/IRCEvents.c b/IRCEvents.c index 010bb7a..4fe336d 100644 --- a/IRCEvents.c +++ b/IRCEvents.c @@ -56,7 +56,7 @@ int event_privctcp(struct UserNode *user, struct ChanNode *chan, char *command, return 1; } -int event_invite(struct UserNode *user, struct ChanUser *target, char *channel) { +int event_invite(struct UserNode *user, char *channel) { return 1; } diff --git a/IRCEvents.h b/IRCEvents.h index ce560ed..8933b58 100644 --- a/IRCEvents.h +++ b/IRCEvents.h @@ -13,14 +13,14 @@ int event_part(struct ChanUser *chanuser, char *reason); int event_quit(struct UserNode *user, char *reason); int event_kick(struct UserNode *user, struct ChanUser *target, char *reason); int event_topic(struct UserNode *user, struct ChanNode *chan, const char *new_topic); -int event_mode(struct UserNode *user, struct ChanNode *chan, char *modes, char **argv, int argc); +int event_mode(struct UserNode *user, struct ChanNode *chan, char *modes, char **argv, int argc); /* TODO */ int event_chanmsg(struct UserNode *user, struct ChanNode *chan, char *message); int event_privmsg(struct UserNode *user, struct UserNode *target, char *message); int event_channotice(struct UserNode *user, struct ChanNode *chan, char *message); int event_privnotice(struct UserNode *user, struct UserNode *target, char *message); int event_chanctcp(struct UserNode *user, struct ChanNode *chan, char *command, char *text); int event_privctcp(struct UserNode *user, struct ChanNode *chan, char *command, char *text); -int event_invite(struct UserNode *user, struct ChanUser *target, char *channel); +int event_invite(struct UserNode *user, char *channel); int event_raw(struct ClientSocket *client, char *from, char *cmd, char **argv, int argc); #endif \ No newline at end of file diff --git a/IRCParser.c b/IRCParser.c index 6e663e6..ac2cb60 100644 --- a/IRCParser.c +++ b/IRCParser.c @@ -78,8 +78,10 @@ static void parse_raw(struct ClientSocket *client, char *from, char *cmd, char * break; } } - if(!ret) { - //fprintf(stderr,"PARSE ERROR: %s", cmd); commented out right now - we're still developing and this is very spammy + if(!irc_cmd) { + event_raw(client, from, cmd, argv, argc); + } else if(!ret) { + fprintf(stderr,"PARSE ERROR: %s", cmd); } } @@ -224,12 +226,38 @@ static IRC_CMD(raw_privmsg) { } if(argv[0][0] == '#') { //Channel message struct ChanNode *chan = getChanByName(argv[0]); - if(chan && chan->chanbot == client->user) - event_chanmsg(user, chan, argv[1]); + if(chan && chan->chanbot == client->user) { + if(argv[1][0] == '\001') { + char *cmd = &argv[1][1]; + char *text = strstr(cmd, " "); + if(text) { + *text = '\0'; + text++; + if(strlen(text) && text[strlen(text)-1] == '\001') + text[strlen(text)-1] = '\0'; + } else if(strlen(cmd) && cmd[strlen(cmd)-1] == '\001') + cmd[strlen(cmd)-1] = '\0'; + event_chanctcp(user, chan, cmd, text); + } else + event_chanmsg(user, chan, argv[1]); + } } else { struct UserNode *target = getUserByNick(argv[0]); - if(target) - event_privmsg(user, target, argv[1]); + if(target) { + if(argv[1][0] == '\001') { + char *cmd = &argv[1][1]; + char *text = strstr(cmd, " "); + if(text) { + *text = '\0'; + text++; + if(strlen(text) && text[strlen(text)-1] == '\001') + text[strlen(text)-1] = '\0'; + } else if(strlen(cmd) && cmd[strlen(cmd)-1] == '\001') + cmd[strlen(cmd)-1] = '\0'; + event_privctcp(user, chan, cmd, text); + } else + event_privmsg(user, target, argv[1]); + } } return 1; } @@ -277,9 +305,17 @@ static IRC_CMD(raw_315) { return 1; } +static IRC_CMD(raw_invite) { + if(from == NULL || argc < 2) return 0; + struct UserNode *user = getUserByMask(from); + event_invite(user, argv[1]); + return 1; +} + void parser_init() { //all the raws we receive... register_irc_function("001", raw_001); + register_irc_function("INVITE", raw_invite); register_irc_function("NOTICE", raw_notice); register_irc_function("TOPIC", raw_topic); register_irc_function("KICK", raw_kick); -- 2.20.1