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