user = addUserMask(from);
}
struct UserNode *registering, *last_registering = NULL, *next_registering;
- int noEvent = 0;
+ int noEvent = 0, wasRegistering = 0;
for(registering = registering_users; registering; registering = next_registering) {
next_registering = registering->next;
if(!strcmp(registering->nick, user->nick)) {
noEvent = event_registered(registering, user);
+ wasRegistering = 1;
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)
putsock(client, "MODE %s +b", chan->name);
} else if(!isUserOnChan(user, chan) && (chan->flags & CHANFLAG_RECEIVED_USERLIST)) {
struct ChanUser *chanuser = addChanUser(chan, user);
- if(!noEvent)
+ if(!noEvent) {
+ if(wasRegistering)
+ user->flags |= USERFLAG_WAS_REGISTRING;
event_join(chanuser);
+ if(wasRegistering)
+ user->flags &= ~USERFLAG_WAS_REGISTRING;
+ }
}
return 1;
}
struct neonserv_event_join_cache {
struct ClientSocket *client;
struct ChanUser *chanuser;
+ int was_registering;
};
static USERAUTH_CALLBACK(neonserv_event_join_nick_lookup);
-static void neonserv_event_join_async1(struct ClientSocket *client, struct ChanUser *chanuser);
+static void neonserv_event_join_async1(struct ClientSocket *client, struct ChanUser *chanuser, int was_registering);
static TIMEQ_CALLBACK(neonserv_event_join_dynlimit);
static void neonserv_event_join(struct ChanUser *chanuser) {
}
cache->client = client;
cache->chanuser = chanuser;
+ cache->was_registering = (user->flags & USERFLAG_WAS_REGISTRING);
get_userauth(user, neonserv_event_join_nick_lookup, cache);
} else
- neonserv_event_join_async1(client, chanuser);
+ neonserv_event_join_async1(client, chanuser, (user->flags & USERFLAG_WAS_REGISTRING));
}
static USERAUTH_CALLBACK(neonserv_event_join_nick_lookup) {
struct neonserv_event_join_cache *cache = data;
if(user) {
- neonserv_event_join_async1(cache->client, cache->chanuser);
+ neonserv_event_join_async1(cache->client, cache->chanuser, cache->was_registering);
}
free(cache);
}
-static void neonserv_event_join_async1(struct ClientSocket *client, struct ChanUser *chanuser) {
+static void neonserv_event_join_async1(struct ClientSocket *client, struct ChanUser *chanuser, int was_registering) {
struct ClientSocket *textclient = ((client->flags & SOCKET_FLAG_PREFERRED) ? client : get_prefered_bot(client->botid));
struct ChanNode *chan = chanuser->chan;
struct UserNode *user = chanuser->user;
if(a)
b = a+2;
} while(a);
- if(greetingPos)
+ if(greetingPos && (!was_registering || *row[2]))
reply(textclient, user, "[%s] %s", chan->name, greeting);
//USER RIGHTS
if(!(userflags & DB_CHANUSER_NOAUTOOP)) {