opers now ignore nodelete
[srvx.git] / src / chanserv.c
index 23e8e63166401e652edbde12e4572d509be46d1a..9358d160a305c46ec36fa7d87a9f6124cf2373c9 100644 (file)
 #define KEY_EXPIRES     "expires"
 #define KEY_TRIGGERED   "triggered"
 
-#define CHANNEL_DEFAULT_FLAGS   (CHANNEL_OFFCHANNEL | CHANNEL_UNREVIEWED)
+#define CHANNEL_DEFAULT_FLAGS   (CHANNEL_UNREVIEWED)
 #define CHANNEL_PRESERVED_FLAGS (CHANNEL_UNREVIEWED)
 #define CHANNEL_DEFAULT_OPTIONS "lmoooanpcnat"
 
@@ -156,7 +156,6 @@ static const struct message_entry msgtab[] = {
     { "CSMSG_MUST_BE_OPPED", "You must be a channel operator in $b%s$b to register it." },
     { "CSMSG_PROXY_FORBIDDEN", "You may not register a channel for someone else." },
     { "CSMSG_OWN_TOO_MANY", "%s already owns enough channels (at least %d); use FORCE to override." },
-    { "CMSG_ALERT_REGISTERED", "%s registered to %s by %s." },
 
 /* Do-not-register channels */
     { "CSMSG_NOT_DNR", "$b%s$b is not a valid channel name or *account." },
@@ -179,7 +178,6 @@ static const struct message_entry msgtab[] = {
     { "CSMSG_UNREG_NODELETE", "$b%s$b is protected from unregistration." },
     { "CSMSG_CHAN_SUSPENDED", "$b$C$b access to $b%s$b has been temporarily suspended (%s)." },
     { "CSMSG_CONFIRM_UNREG", "To confirm this unregistration, you must use 'unregister %s'." },
-    { "CMSG_ALERT_UNREGISTERED", "%s %s" },
 
 /* Channel moving */
     { "CSMSG_MOVE_SUCCESS", "Channel registration has been moved to $b%s$b." },
@@ -401,7 +399,7 @@ static const struct message_entry msgtab[] = {
     { "CSMSG_LC_H_TITLE", "support helper" },
     { "CSMSG_LAME_SMURF_TARGET", "%s is an IRC operator." },
     { "CSMSG_MYACCESS_COUNT", "%s has access in $b%d$b channels and is owner of $b%d$b channel(s)." },
-       { "CSMSG_MYACCESS_COUNT_1", "%s has access in $b%d$b channel and is owner of $b%d$b channel(s)." },
+    { "CSMSG_MYACCESS_COUNT_1", "%s has access in $b%d$b channel and is owner of $b%d$b channel(s)." },
 
 
 /* Seen information */
@@ -485,6 +483,7 @@ static const struct message_entry msgtab[] = {
 /* Toys */
     { "CSMSG_UNF_RESPONSE", "I don't want to be part of your sick fantasies!" },
     { "CSMSG_PING_RESPONSE", "Pong!" },
+    { "CSMSG_PONG_RESPONSE", "Ping!" },
     { "CSMSG_WUT_RESPONSE", "wut" },
     { "CSMSG_BAD_NUMBER", "$b%s$b is an invalid number.  Please use a number greater than 1 with this command." },
     { "CSMSG_BAD_DIE_FORMAT", "I do not understand $b%s$b.  Please use either a single number or standard 4d6+3 format." },
@@ -525,6 +524,9 @@ static const struct message_entry msgtab[] = {
     { NULL, NULL }
 };
 
+#define CSMSG_ALERT_REGISTERED "%s registered to %s by %s."
+#define CSMSG_ALERT_UNREGISTERED "%s %s"
+
 /* eject_user and unban_user flags */
 #define ACTION_KICK             0x0001
 #define ACTION_BAN              0x0002
@@ -1522,11 +1524,12 @@ unregister_channel(struct chanData *channel, const char *reason)
     if(channel->expiry)
         timeq_del(channel->expiry, chanserv_expire_channel, channel, 0);
     channel->channel->channel_info = NULL;
-
+    sprintf(msgbuf, "%s %s", channel->channel->name, reason);
     dict_delete(channel->notes);
     if(!IsSuspended(channel))
         DelChannelUser(chanserv, channel->channel, msgbuf, 0);
-    chanserv_oper_message("CSMSG_ALERT_UNREGISTERED"", channel->channel->name, reason);
+
+    chanserv_oper_message(CSMSG_ALERT_UNREGISTERED, channel->channel->name, reason);
     UnlockChannel(channel->channel);
     free(channel);
     registered_channels--;
@@ -2166,7 +2169,6 @@ static CHANSERV_FUNC(cmd_register)
     struct handle_info *handle;
     struct chanData *cData;
     struct modeNode *mn;
-    char reason[MAXLEN];
     char *chan_name;
     unsigned int new_channel, force=0;
     struct do_not_register *dnr;
@@ -2277,7 +2279,7 @@ static CHANSERV_FUNC(cmd_register)
     else
         reply("CSMSG_REG_SUCCESS", channel->name);
 
-    chanserv_oper_message("CSMSG_ALERT_REGISTERED", channel->name, handle->handle, user->handle_info->handle);
+    chanserv_oper_message(CSMSG_ALERT_REGISTERED, channel->name, handle->handle, user->handle_info->handle);
     return 1;
 }
 
@@ -2389,7 +2391,7 @@ static CHANSERV_FUNC(cmd_move)
 
     REQUIRE_PARAMS(2);
 
-    if(IsProtected(channel->channel_info))
+    if(IsProtected(channel->channel_info) && !IsOper(user))
     {
         reply("CSMSG_MOVE_NODELETE", channel->name);
         return 0;
@@ -2697,7 +2699,7 @@ static CHANSERV_FUNC(cmd_merge)
         return 0;
     }
 
-    if(IsProtected(channel->channel_info))
+    if(IsProtected(channel->channel_info) && !IsOper(user))
     {
         reply("CSMSG_MERGE_NODELETE");
         return 0;
@@ -3285,8 +3287,7 @@ static CHANSERV_FUNC(cmd_opme)
         return 0;
     }
 
-    struct devnull_class *devnull;
-    if(user->handle_info->devnull && (devnull = devnull_get(user->handle_info->devnull)) && (devnull->modes & DEVNULL_MODE_OPME))
+    if(devnull_user_has_priv(user->handle_info, DEVNULL_PRIV_OPME))
     {
         change.args[0].mode = MODE_CHANOP;
         errmsg = "CSMSG_ALREADY_OPPED";
@@ -5424,7 +5425,7 @@ static CHANSERV_FUNC(cmd_csuspend)
 
     REQUIRE_PARAMS(3);
 
-    if(IsProtected(channel->channel_info))
+    if(IsProtected(channel->channel_info) && !IsOper(user))
     {
         reply("CSMSG_SUSPEND_NODELETE", channel->name);
         return 0;
@@ -7128,6 +7129,20 @@ static CHANSERV_FUNC(cmd_ping)
     return 1;
 }
 
+static CHANSERV_FUNC(cmd_pong)
+{
+    if(channel)
+    {
+        char response[MAXLEN];
+        const char *fmt = user_find_message(user, "CSMSG_PONG_RESPONSE");
+        sprintf(response, "\ 2%s\ 2: %s", user->nick, fmt);
+        irc_privmsg(cmd->parent->bot, channel->name, response);
+    }
+    else
+        reply("CSMSG_PONG_RESPONSE");
+    return 1;
+}
+
 static CHANSERV_FUNC(cmd_wut)
 {
     if(channel)
@@ -7986,7 +8001,7 @@ chanserv_conf_read(void)
     str = database_get_data(conf_node, "off_channel", RECDB_QSTRING);
     off_channel = str ? atoi(str) : 0;
 
-    str = database_get_data(conf_node, "oper_chan", RECDB_QSTRING);
+    str = database_get_data(conf_node, "oper_channel", RECDB_QSTRING);
        if(str)
        {
                chanserv_conf.oper_channel = AddChannel(str, now, "+tinms", NULL);
@@ -8961,6 +8976,7 @@ init_chanserv(const char *nick)
 
     DEFINE_COMMAND(unf, 1, 0, "flags", "+nolog,+toy,+acceptchan", NULL);
     DEFINE_COMMAND(ping, 1, 0, "flags", "+nolog,+toy,+acceptchan", NULL);
+    DEFINE_COMMAND(pong, 1, 0, "flags", "+nolog,+toy,+acceptchan", NULL);
     DEFINE_COMMAND(wut, 1, 0, "flags", "+nolog,+toy,+acceptchan", NULL);
     DEFINE_COMMAND(8ball, 2, 0, "flags", "+nolog,+toy,+acceptchan", NULL);
     DEFINE_COMMAND(d, 2, 0, "flags", "+nolog,+toy,+acceptchan", NULL);