X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fmodules%2FNeonServ.mod%2Fevent_neonserv_join.c;h=ea0ce3fc729ce6620f85c6209bdf28a6d8668a75;hb=c8e7ce1c57afaebf3996a6712c45f4c89c34ba44;hp=77d5de7519a200df297dbe939b3b691b405e8c03;hpb=706e48b1e666054030c491d864f740071e390038;p=NeonServV5.git diff --git a/src/modules/NeonServ.mod/event_neonserv_join.c b/src/modules/NeonServ.mod/event_neonserv_join.c index 77d5de7..ea0ce3f 100644 --- a/src/modules/NeonServ.mod/event_neonserv_join.c +++ b/src/modules/NeonServ.mod/event_neonserv_join.c @@ -1,4 +1,4 @@ -/* event_neonserv_join.c - NeonServ v5.3 +/* event_neonserv_join.c - NeonServ v5.4 * Copyright (C) 2011-2012 Philipp Kreil (pk910) * * This program is free software: you can redistribute it and/or modify @@ -18,11 +18,10 @@ 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, int was_registering); +static void neonserv_event_join_async1(struct ClientSocket *client, struct ChanUser *chanuser); static TIMEQ_CALLBACK(neonserv_event_join_dynlimit); static void neonserv_event_join(struct ChanUser *chanuser) { @@ -31,6 +30,7 @@ static void neonserv_event_join(struct ChanUser *chanuser) { if(!client) return; //we can't "see" this event if(chanuser->user == client->user) { requestOp(client->user, chanuser->chan); + module_neonbackup_recover_chan(chanuser->chan); return; } if(chanuser->user->flags & USERFLAG_ISBOT) return; @@ -58,21 +58,19 @@ 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); + get_userauth(user, module_id, neonserv_event_join_nick_lookup, cache); } else - neonserv_event_join_async1(client, chanuser, (user->flags & USERFLAG_WAS_REGISTRING)); + neonserv_event_join_async1(client, chanuser); } 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, cache->was_registering); - } + if(user) + neonserv_event_join_async1(cache->client, cache->chanuser); free(cache); } -static void neonserv_event_join_async1(struct ClientSocket *client, struct ChanUser *chanuser, int was_registering) { +static void neonserv_event_join_async1(struct ClientSocket *client, struct ChanUser *chanuser) { struct ClientSocket *textclient = ((client->flags & SOCKET_FLAG_PREFERRED) ? client : get_prefered_bot(client->botid)); struct ChanNode *chan = chanuser->chan; struct UserNode *user = chanuser->user; @@ -139,7 +137,7 @@ static void neonserv_event_join_async1(struct ClientSocket *client, struct ChanU if(a) b = a+2; } while(a); - if(greetingPos && (!was_registering || *row[2])) + if(greetingPos && *row[2]) reply(textclient, user, "[%s] %s", chan->name, greeting); //USER RIGHTS if(!(userflags & DB_CHANUSER_NOAUTOOP)) { @@ -173,7 +171,7 @@ static void neonserv_event_join_async1(struct ClientSocket *client, struct ChanU sprintf(nameBuf, "dynlimit_%s", chan->name); if(!timeq_name_exists(nameBuf)) { //neonserv_event_join_dynlimit - timeq_add_name(nameBuf, 30, neonserv_event_join_dynlimit, strdup(chan->name)); + timeq_add_name(nameBuf, 30, module_id, neonserv_event_join_dynlimit, strdup(chan->name)); } } //AUTOINVITE @@ -237,6 +235,7 @@ static TIMEQ_CALLBACK(neonserv_event_join_dynlimit) { char *chanName = data; struct ChanNode *chan = getChanByName(chanName); free(chanName); + if(!chan) return; struct ClientSocket *client = getBotForChannel(chan); if(!client) return; loadChannelSettings(chan);