]> jfr.im git - irc/evilnet/x3.git/blobdiff - src/chanserv.c
small revert
[irc/evilnet/x3.git] / src / chanserv.c
index 8c773de3201b179d58274bc47a8e946c444ae215..a7bd7bf8827843f47e1e14416eb606ea2806e44b 100644 (file)
@@ -2843,37 +2843,37 @@ static CHANSERV_FUNC(cmd_levels)
     tbl.contents[++ii] = calloc(tbl.width, sizeof(tbl.contents[0][0]));
     tbl.contents[ii][0] = strdup(user_level_name_from_level(UL_OWNER));
     tbl.contents[ii][1] = msnprintf(4, "%d", UL_OWNER);
-    tbl.contents[ii][2] = msnprintf(1, "");
+    tbl.contents[ii][2] = msnprintf(2, " ");
     tbl.contents[ii][3] = msnprintf(1, "");
 
     tbl.contents[++ii] = calloc(tbl.width, sizeof(tbl.contents[0][0]));
     tbl.contents[ii][0] = strdup(user_level_name_from_level(UL_COOWNER));
     tbl.contents[ii][1] = msnprintf(4, "%d", UL_COOWNER);
-    tbl.contents[ii][2] = msnprintf(1, "-");
+    tbl.contents[ii][2] = msnprintf(2, "-");
     tbl.contents[ii][3] = msnprintf(4, "%d", UL_OWNER-1);
 
     tbl.contents[++ii] = calloc(tbl.width, sizeof(tbl.contents[0][0]));
     tbl.contents[ii][0] = strdup(user_level_name_from_level(UL_MANAGER));
     tbl.contents[ii][1] = msnprintf(4, "%d", UL_MANAGER);
-    tbl.contents[ii][2] = msnprintf(1, "-");
+    tbl.contents[ii][2] = msnprintf(2, "-");
     tbl.contents[ii][3] = msnprintf(4, "%d", UL_COOWNER-1);
 
     tbl.contents[++ii] = calloc(tbl.width, sizeof(tbl.contents[0][0]));
     tbl.contents[ii][0] = strdup(user_level_name_from_level(UL_OP));
     tbl.contents[ii][1] = msnprintf(4, "%d", UL_OP);
-    tbl.contents[ii][2] = msnprintf(1, "-");
+    tbl.contents[ii][2] = msnprintf(2, "-");
     tbl.contents[ii][3] = msnprintf(4, "%d", UL_MANAGER-1);
 
     tbl.contents[++ii] = calloc(tbl.width, sizeof(tbl.contents[0][0]));
     tbl.contents[ii][0] = strdup(user_level_name_from_level(UL_HALFOP));
     tbl.contents[ii][1] = msnprintf(4, "%d", UL_HALFOP);
-    tbl.contents[ii][2] = msnprintf(1, "-");
+    tbl.contents[ii][2] = msnprintf(2, "-");
     tbl.contents[ii][3] = msnprintf(4, "%d", UL_OP-1);
 
     tbl.contents[++ii] = calloc(tbl.width, sizeof(tbl.contents[0][0]));
     tbl.contents[ii][0] = strdup(user_level_name_from_level(UL_PEON));
     tbl.contents[ii][1] = msnprintf(4, "%d", UL_PEON);
-    tbl.contents[ii][2] = msnprintf(1, "-");
+    tbl.contents[ii][2] = msnprintf(2, "-");
     tbl.contents[ii][3] = msnprintf(4, "%d", UL_HALFOP-1);
 
     table_send(cmd->parent->bot, user->nick, 0, NULL, tbl);
@@ -7098,6 +7098,64 @@ handle_new_channel(struct chanNode *channel)
         SetChannelTopic(channel, chanserv, chanserv, channel->channel_info->topic, 1);
 }
 
+int
+check_bans(struct userNode *user, const char *channel)
+{
+    struct chanNode *chan;
+    struct mod_chanmode change;
+    struct chanData *cData;
+    struct banData *bData;
+
+    if (!(chan = GetChannel(channel)))
+        return 0;
+
+    if(!(cData = chan->channel_info))
+        return 0;
+
+    mod_chanmode_init(&change);
+    change.argc = 1;
+
+    if(chan->banlist.used < MAXBANS)
+    {
+        /* Not joining through a ban. */
+        for(bData = cData->bans;
+            bData && !user_matches_glob(user, bData->mask, MATCH_USENICK);
+            bData = bData->next);
+
+        if(bData)
+        {
+            char kick_reason[MAXLEN];
+            sprintf(kick_reason, "(%s) %s", bData->owner, bData->reason);
+
+            bData->triggered = now;
+            if(bData != cData->bans)
+            {
+                /* Shuffle the ban to the head of the list. */
+                if(bData->next)
+                    bData->next->prev = bData->prev;
+                if(bData->prev)
+                    bData->prev->next = bData->next;
+
+                bData->prev = NULL;
+                bData->next = cData->bans;
+
+                if(cData->bans)
+                    cData->bans->prev = bData;
+                
+                cData->bans = bData;
+            }
+
+            change.args[0].mode = MODE_BAN;
+            change.args[0].u.hostmask = bData->mask;
+            mod_chanmode_announce(chanserv, chan, &change);
+            KickChannelUser(user, chan, chanserv, kick_reason);
+            return 1;
+        }
+    }
+    return 0;
+}
+
+
 /* Welcome to my worst nightmare. Warning: Read (or modify)
    the code below at your own risk. */
 static int
@@ -7156,7 +7214,6 @@ handle_join(struct modeNode *mNode)
     }
 
 
-
     mod_chanmode_init(&change);
     change.argc = 1;