X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=IRCParser.c;h=8662f6d8399e3907f60ef1c9713cbc5a5e438d42;hb=795115bf680185ae01043bd1222b78bfed8c1d87;hp=4ed222335036a1d20a87d6b8db5ea5e4cc283359;hpb=82cc985aa56edbd59843d937251ad27851bb3d52;p=NeonServV5.git diff --git a/IRCParser.c b/IRCParser.c index 4ed2223..8662f6d 100644 --- a/IRCParser.c +++ b/IRCParser.c @@ -8,6 +8,8 @@ #include "WHOHandler.h" #include "lang.h" #include "DBHelper.h" +#include "BanNode.h" +#include "ModeNode.h" struct irc_cmd *irc_commands = NULL; @@ -84,7 +86,7 @@ static void parse_raw(struct ClientSocket *client, char *from, char *cmd, char * if(!irc_cmd) { event_raw(client, from, cmd, argv, argc); } else if(!ret) { - fprintf(stderr,"PARSE ERROR: %s", cmd); + fprintf(stderr,"PARSE ERROR: %s\n", cmd); } } @@ -114,7 +116,7 @@ static IRC_CMD(raw_join) { struct ChanUser *chanuser = addChanUser(chan, user); //it must be a bot get_userlist(chan, got_channel_userlist, chanuser); putsock(client, "MODE %s", chan->name); - putsock(client, "MODE +b %s", chan->name); + putsock(client, "MODE %s +b", chan->name); } else if(!isUserOnChan(user, chan) && (chan->flags & CHANFLAG_RECEIVED_USERLIST)) { struct ChanUser *chanuser = addChanUser(chan, user); event_join(chanuser); @@ -123,7 +125,7 @@ static IRC_CMD(raw_join) { } static IRC_CMD(raw_part) { - if(from == NULL || argc < 2) return 0; + if(from == NULL || argc < 1) return 0; struct UserNode *user = getUserByMask(from); if(user == NULL) return 0; struct ChanNode *chan = getChanByName(argv[0]); @@ -131,7 +133,7 @@ static IRC_CMD(raw_part) { if(isUserOnChan(user, chan) && (chan->flags & CHANFLAG_RECEIVED_USERLIST)) { struct ChanUser *chanuser = getChanUser(user, chan); delChanUser(chanuser, 0); //we need to free the chanuser manually! - event_part(chanuser, argv[1]); + event_part(chanuser, (argc > 1 ? argv[1] : NULL)); free(chanuser); if(chan->chanbot == user) { //check if theres another bot in the channel - otherwise free it @@ -146,11 +148,11 @@ static IRC_CMD(raw_part) { } static IRC_CMD(raw_quit) { - if(from == NULL || argc < 2) return 0; + if(from == NULL || argc < 1) return 0; struct UserNode *user = getUserByMask(from); if(user == NULL) return 0; delUser(user, 0); //a little bit crazy, but we want to delete the user on the channel's userlists - but not the users channel list - event_quit(user, argv[1]); + event_quit(user, argv[0]); if(user->flags & USERFLAG_ISBOT) { //check if there are other bots in the users channel - otherwise free them struct ChanUser *chanuser, *next; @@ -312,14 +314,18 @@ static IRC_CMD(raw_324) { //MODE LIST if(from == NULL || argc < 3) return 0; struct ChanNode *chan = getChanByName(argv[1]); if(chan == NULL) return 0; - parseModes(chan, argv[2], argv+3, argc-3); + parseModes(chan->modes, argv[2], argv+3, argc-3); return 1; } static IRC_CMD(raw_invite) { if(from == NULL || argc < 2) return 0; struct UserNode *user = getUserByMask(from); - event_invite(user, argv[1]); + if(user == NULL) { + user = createTempUser(from); + user->flags |= USERFLAG_ISTMPUSER; + } + event_invite(client, user, argv[1]); return 1; } @@ -336,7 +342,7 @@ static IRC_CMD(raw_mode) { if(!chan) return 0; if(chan->chanbot != client->user) return 1; event_mode(user, chan, argv[1], argv+2, argc-2); - parseModes(chan, argv[1], argv+2, argc-2); + parseModes(chan->modes, argv[1], argv+2, argc-2); } else { //UserMode } @@ -352,6 +358,7 @@ static IRC_CMD(raw_367) { removeChannelBan(ban); } addChannelBan(chan, argv[2]); + return 1; } void init_parser() {