#include "ModeNode.h"
struct irc_cmd *irc_commands = NULL;
+static struct UserNode *registering_users = NULL;
static void parse_line(struct ClientSocket *client, char *line);
static void register_irc_function(char *command, irc_cmd_t *func);
if(user == NULL) {
user = addUserMask(from);
}
+ struct UserNode *registering, *last_registering = NULL;
+ int noEvent = 0;
+ for(registering = registering_users; registering; registering = registering->next) {
+ if(!strcmp(registering->nick, user->nick)) {
+ noEvent = event_registered(registering, user);
+ if(last_registering)
+ last_registering->next = registering->next;
+ else
+ registering_users = registering->next;
+ delUser(registering, 1);
+ } else if(time(0) - registering->created > 2) {
+ if(last_registering)
+ last_registering->next = registering->next;
+ else
+ registering_users = registering->next;
+ delUser(registering, 1);
+ } else
+ last_registering = registering;
+ }
if(chan == NULL) {
chan = addChannel(argv[0]);
//request member list
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);
+ if(!noEvent)
+ event_join(chanuser);
}
return 1;
}
}
}
}
- delUser(user, 1); //now we fully free the user
+ if(!stricmp(argv[0], "Registered") && !(user->flags & USERFLAG_ISBOT)) {
+ user->next = registering_users;
+ user->created = time(0);
+ registering_users = user;
+ } else
+ delUser(user, 1); //now we fully free the user
return 1;
}