From: Michael Poole Date: Wed, 14 Mar 2007 02:57:20 +0000 (-0400) Subject: Add "unreviewed" flag for channels. X-Git-Tag: v1.4.0-rc1~46 X-Git-Url: http://git.pk910.de/?p=srvx.git;a=commitdiff_plain;h=0c0e992ee4770323de139be7763ac3e6b76c6eca Add "unreviewed" flag for channels. src/chanserv.c (CHANNEL_DEFAULT_FLAGS): Include "unreviewed" flag. (CHANNEL_PRESERVED_FLAGS): New macro for flags not reset by !set defaults (msgtab): New entry for "CSMSG_SET_UNREVIEWED". (chanserv_search_create): Recognize "unreviewed" flag. (chan_opt_unreviewed): New function. (chan_opt_defaults): Preserve CHANNEL_PRESERVED_FLAGS. (cmd_set): Act like cmd_joiner with respect to updating argv. (init_chanserv): Register unreviewed option and its subcommands. src/chanserv.h (CHANNEL_UNREVIEWED): New flag. src/chanserv.help: Update documentation for SEARCH and SET. --- diff --git a/src/chanserv.c b/src/chanserv.c index 409056e..8bc2a61 100644 --- a/src/chanserv.c +++ b/src/chanserv.c @@ -115,7 +115,8 @@ #define KEY_EXPIRES "expires" #define KEY_TRIGGERED "triggered" -#define CHANNEL_DEFAULT_FLAGS (CHANNEL_OFFCHANNEL) +#define CHANNEL_DEFAULT_FLAGS (CHANNEL_OFFCHANNEL | CHANNEL_UNREVIEWED) +#define CHANNEL_PRESERVED_FLAGS (CHANNEL_UNREVIEWED) #define CHANNEL_DEFAULT_OPTIONS "lmoooanpcnat" /* Administrative messages */ @@ -274,6 +275,7 @@ static const struct message_entry msgtab[] = { { "CSMSG_SET_TOYS", "$bToys $b %d - %s" }, { "CSMSG_SET_CTCPREACTION", "$bCTCPReaction$b %d - %s" }, { "CSMSG_SET_TOPICREFRESH", "$bTopicRefresh$b %d - %s" }, + { "CSMSG_SET_UNREVIEWED", "$bUnreviewed $b %s" }, { "CSMSG_USET_NOAUTOOP", "$bNoAutoOp $b %s" }, { "CSMSG_USET_NOAUTOVOICE", "$bNoAutoVoice $b %s" }, { "CSMSG_USET_AUTOINVITE", "$bAutoInvite $b %s" }, @@ -5008,6 +5010,8 @@ chanserv_search_create(struct userNode *user, unsigned int argc, char *argv[]) search->flags |= CHANNEL_NODELETE; else if(!irccasecmp(argv[i], "suspended")) search->flags |= CHANNEL_SUSPENDED; + else if(!irccasecmp(argv[i], "unreviewed")) + search->flags |= CHANNEL_UNREVIEWED; else { send_message(user, chanserv, "CSMSG_INVALID_CFLAG", argv[i]); @@ -5407,6 +5411,60 @@ static MODCMD_FUNC(chan_opt_offchannel) return 1; } +static MODCMD_FUNC(chan_opt_unreviewed) +{ + struct chanData *cData = channel->channel_info; + int value = (cData->flags & CHANNEL_UNREVIEWED) ? 1 : 0; + + if(argc > 1) + { + int new_value; + + /* The two directions can have different ACLs. */ + if(enabled_string(argv[1])) + new_value = 1; + else if(disabled_string(argv[1])) + new_value = 0; + else + { + reply("MSG_INVALID_BINARY", argv[1]); + return 0; + } + + if (new_value != value) + { + struct svccmd *subcmd; + char subcmd_name[32]; + + snprintf(subcmd_name, sizeof(subcmd_name), "%s %s", argv[0], (new_value ? "on" : "off")); + subcmd = dict_find(cmd->parent->commands, subcmd_name, NULL); + if(!subcmd) + { + reply("MSG_COMMAND_DISABLED", subcmd_name); + return 0; + } + else if(!svccmd_can_invoke(user, cmd->parent->bot, subcmd, channel, SVCCMD_NOISY)) + return 0; + + if (new_value) + cData->flags |= CHANNEL_UNREVIEWED; + else + { + free(cData->registrar); + cData->registrar = strdup(user->handle_info->handle); + cData->flags &= ~CHANNEL_UNREVIEWED; + } + value = new_value; + } + } + + if(value) + reply("CSMSG_SET_UNREVIEWED", user_find_message(user, "MSG_ON")); + else + reply("CSMSG_SET_UNREVIEWED", user_find_message(user, "MSG_OFF")); + return 1; +} + static MODCMD_FUNC(chan_opt_defaults) { struct userData *uData; @@ -5428,7 +5486,8 @@ static MODCMD_FUNC(chan_opt_defaults) reply("CSMSG_CONFIRM_DEFAULTS", channel->name, confirm); return 0; } - cData->flags = CHANNEL_DEFAULT_FLAGS; + cData->flags = (CHANNEL_DEFAULT_FLAGS & ~CHANNEL_PRESERVED_FLAGS) + | (cData->flags & CHANNEL_PRESERVED_FLAGS); cData->modes = chanserv_conf.default_modes; for(lvlOpt = 0; lvlOpt < NUM_LEVEL_OPTIONS; ++lvlOpt) cData->lvlOpts[lvlOpt] = levelOptions[lvlOpt].default_value; @@ -5677,6 +5736,8 @@ static CHANSERV_FUNC(cmd_set) return 0; } + argv[0] = ""; + argv[1] = buf; return subcmd->command->func(user, channel, argc - 1, argv + 1, subcmd); } @@ -7723,6 +7784,9 @@ init_chanserv(const char *nick) DEFINE_CHANNEL_OPTION(ctcpusers); DEFINE_CHANNEL_OPTION(ctcpreaction); DEFINE_CHANNEL_OPTION(inviteme); + DEFINE_CHANNEL_OPTION(unreviewed); + modcmd_register(chanserv_module, "set unreviewed on", NULL, 0, 0, NULL); + modcmd_register(chanserv_module, "set unreviewed off", NULL, 0, 0, NULL); if(off_channel > 1) DEFINE_CHANNEL_OPTION(offchannel); modcmd_register(chanserv_module, "set defaults", chan_opt_defaults, 1, 0, "access", "owner", NULL); diff --git a/src/chanserv.h b/src/chanserv.h index 3f33aae..83f310e 100644 --- a/src/chanserv.h +++ b/src/chanserv.h @@ -65,6 +65,7 @@ enum charOption { #define CHANNEL_TOPIC_SNARF 0x00000040 /* (1 << 6) - DEPRECATED */ #define CHANNEL_PEON_INVITE 0x00000080 /* (1 << 7) - DEPRECATED */ #define CHANNEL_OFFCHANNEL 0x00000100 /* (1 << 8) */ +#define CHANNEL_UNREVIEWED 0x00000200 /* (1 << 9) */ /* Flags with values over 0x20000000 or (1 << 29) will not work * because chanData.flags is a 30-bit field. */ diff --git a/src/chanserv.help b/src/chanserv.help index 9e08fa8..6d4191f 100644 --- a/src/chanserv.help +++ b/src/chanserv.help @@ -322,7 +322,7 @@ " REGISTERED Channels that have been registered for less than the given duration", " FLAGS Matches channels with the specified flag set", " LIMIT Limit the number of channels returned by the search", - "Flags that can be matched against are: nodelete and suspended.", + "Flags that can be matched against are: nodelete, suspended and unreviewed.", "$uSee Also:$u search, search actions"); "SEARCH ACTIONS" ("$bSEARCH ACTIONS$b", "The following are valid $bsearch$b actions:", @@ -359,7 +359,8 @@ "TOPICREFRESH: Controls if (and how often) $b$C$b will reset the topic.", "DYNLIMIT: Adjusts user limit (+l channel mode) to prevent join floods.", "$bIRCOP ONLY$b:", - "NODELETE: Prevents channel deletion.", + "NODELETE: Prevents channel deletion.", + "UNREVIEWED: Indicates channels that have not been manually reviewed.", "If you wish to reset your channel to the default settings, you can use the $bSET DEFAULTS$b command.", "$uSee Also:$u set pubcmd, set giveops, set enfops, set enfmodes, set enftopic, set protect, set toys, set setters, set topicrefresh, set ctcpusers, set ctcpreaction, set defaults"); "SET DEFAULTTOPIC" ("/msg $C SET <#channel> DEFAULTTOPIC ",