From 332da4b53ca0a46d21664593dcc1bacddc9b8f22 Mon Sep 17 00:00:00 2001 From: pk910 Date: Tue, 1 Nov 2011 00:24:31 +0100 Subject: [PATCH] hide default greeting & ignore join on joinflood-check if user rejoined the channel because of a host change --- src/IRCParser.c | 11 ++++++++--- src/UserNode.h | 1 + src/event_neonserv_join.c | 12 +++++++----- src/event_neonspam_join.c | 1 + 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/IRCParser.c b/src/IRCParser.c index 3b92d28..c8d61d2 100644 --- a/src/IRCParser.c +++ b/src/IRCParser.c @@ -154,16 +154,16 @@ static IRC_CMD(raw_join) { 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) @@ -184,8 +184,13 @@ static IRC_CMD(raw_join) { 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; } diff --git a/src/UserNode.h b/src/UserNode.h index 7bc752c..ef1332c 100644 --- a/src/UserNode.h +++ b/src/UserNode.h @@ -29,6 +29,7 @@ #define USERFLAG_GOD_MODE 0x0100 #define USERFLAG_HAS_USERID 0x0200 +#define USERFLAG_WAS_REGISTRING 0x20000000 /* only set for event_join if the quit reason was Registered */ #define USERFLAG_SCRIPTFLAG1 0x40000000 #define USERFLAG_SCRIPTFLAG2 0x80000000 diff --git a/src/event_neonserv_join.c b/src/event_neonserv_join.c index 1a7493f..c2a8634 100644 --- a/src/event_neonserv_join.c +++ b/src/event_neonserv_join.c @@ -18,10 +18,11 @@ 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) { @@ -56,20 +57,21 @@ 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; @@ -135,7 +137,7 @@ static void neonserv_event_join_async1(struct ClientSocket *client, struct ChanU 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)) { diff --git a/src/event_neonspam_join.c b/src/event_neonspam_join.c index ce29783..ed7fa5d 100644 --- a/src/event_neonspam_join.c +++ b/src/event_neonspam_join.c @@ -27,6 +27,7 @@ struct neonspam_event_join_cache { }; static void neonspam_event_join(struct ChanUser *chanuser) { + if(chanuser->user->flags & USERFLAG_WAS_REGISTRING) return; struct ClientSocket *client = getChannelBot(chanuser->chan, BOTID); if(!client) return; //we can't "see" this event loadNeonSpamSettings(chanuser->chan); -- 2.20.1