hide default greeting & ignore join on joinflood-check if user rejoined the channel...
authorpk910 <philipp@zoelle1.de>
Mon, 31 Oct 2011 23:24:31 +0000 (00:24 +0100)
committerpk910 <philipp@zoelle1.de>
Mon, 31 Oct 2011 23:24:31 +0000 (00:24 +0100)
src/IRCParser.c
src/UserNode.h
src/event_neonserv_join.c
src/event_neonspam_join.c

index 3b92d2840f6cbffa15f9e8ada2bdf6220910baec..c8d61d2917a4fcb5a5db601f74d78860bc40f337 100644 (file)
@@ -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;
 }
index 7bc752ca8c9540083fccaa0b4d3b23c1448c391f..ef1332c76975ea231efc649189d485a48fde4a77 100644 (file)
@@ -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
 
index 1a7493f544a30d4e041cc89f0845400fc5e1ef27..c2a8634099453800ca2cd197aeac6a416369b5e9 100644 (file)
 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)) {
index ce29783c215db4ca4a1cc308407e1889ac0f1cfc..ed7fa5d876c68049f45eabe3a2346e7ca43eb0ba 100644 (file)
@@ -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);