X-Git-Url: https://jfr.im/git/irc/evilnet/x3.git/blobdiff_plain/c9bf23febfe7c108b9da7dd1937b586eace40812..537128ea365c31c2a11778c476d51a6f4402df78:/src/chanserv.c diff --git a/src/chanserv.c b/src/chanserv.c index 8c773de..a7bd7bf 100644 --- a/src/chanserv.c +++ b/src/chanserv.c @@ -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;