no error on inexistent commands done publicly, announcements setting display fix...
authorAdam Loghry <adam@gamesurge.net>
Mon, 1 Mar 2004 09:54:10 +0000 (09:54 +0000)
committerAdam Loghry <adam@gamesurge.net>
Mon, 1 Mar 2004 09:54:10 +0000 (09:54 +0000)
git-archimport-id: srvx@srvx.net--2004-srvx/srvx--devo--1.3--patch-18

src/modcmd.c
src/nickserv.c
src/nickserv.help
src/opserv.c

index 24776ff390e8b66e0d378fb8bae915dc766a0bf3..1cb8399ca7051b4e94a10e34b71749f92a8e53c5 100644 (file)
@@ -642,7 +642,8 @@ svccmd_invoke_argv(struct userNode *user, struct service *service, struct chanNo
     }
     cmd = dict_find(service->commands, argv[cmd_arg], NULL);
     if (!cmd) {
-        send_message(user, service->bot, "MSG_COMMAND_UNKNOWN", argv[cmd_arg]);
+        if (!channel)
+            send_message(user, service->bot, "MSG_COMMAND_UNKNOWN", argv[cmd_arg]);
         return 0;
     }
     flags = cmd->effective_flags;
index 5a61bfdb76e089f23c9ec795de160a9b574f01c9..47aae0f9e5945f2cee7979a50cfd707f41651747 100644 (file)
@@ -2747,7 +2747,7 @@ struct nickserv_discrim {
     unsigned long flags_on, flags_off;
     time_t min_registered, max_registered;
     time_t lastseen;
-    enum { SUBSET, EXACT, SUPERSET } hostmask_type;
+    enum { SUBSET, EXACT, SUPERSET, LASTQUIT } hostmask_type;
     const char *nickmask;
     const char *hostmask;
     const char *handlemask;
@@ -2830,6 +2830,12 @@ nickserv_discrim_create(struct userNode *user, unsigned int argc, char *argv[])
                     goto fail;
                 }
                 discrim->hostmask_type = SUPERSET;
+           } else if (!irccasecmp(argv[i], "lastquit") || !irccasecmp(argv[i], "lastauth")) {
+              if (i == argc - 1) {
+                  send_message(user, nickserv, "MSG_MISSING_PARAMS", argv[i]);
+                  goto fail;
+              }
+              discrim->hostmask_type = LASTQUIT;
             } else {
                 i--;
                 discrim->hostmask_type = SUPERSET;
@@ -2905,6 +2911,8 @@ nickserv_discrim_match(struct nickserv_discrim *discrim, struct handle_info *hi)
                      && !irccasecmp(discrim->hostmask, mask)) break;
             else if ((discrim->hostmask_type == SUPERSET)
                      && (match_ircglobs(mask, discrim->hostmask))) break;
+           else if ((discrim->hostmask_type == LASTQUIT)
+                    && (match_ircglobs(discrim->hostmask, hi->last_quit_host))) break;
         }
         if (i==hi->masks->used) return 0;
     }
index 039a8b7bc97ecbb89a39d1885b3ea374007d5519..7a08b33d39c6156c0b5540f0447961ea06e97fcb 100644 (file)
         "  HOSTMASK SUPERSET - Account matches if someone with this hostmask can auth to the account",
         "  HOSTMASK EXACT - Account matches if this exact hostmask is in list",
         "  HOSTMASK SUBSET - Account matches if this mask \"covers\" one in their userlist",
+       "  HOSTMASK LASTQUIT - Account matches if this mask \"covers\" user was last seen using",
         "  HOSTMASK   - A glob that must match a hostmask for the account (equivalent to HOSTMASK SUPERSET)",
         "  ACCESS     - An $O access constraint (<nnn, <=nnn, =nnn, >=nnn or >nnn)",
         "$uSee Also:$u search, search action"
         "  HOSTMASK SUPERSET - Account matches if someone with this hostmask can auth to the account",
         "  HOSTMASK EXACT - Account matches if this exact hostmask is in list",
         "  HOSTMASK SUBSET - Account matches if this mask \"covers\" one in their userlist",
+        "  HOSTMASK LASTQUIT - Account matches if this mask \"covers\" user was last seen using",
         "  HOSTMASK   - A glob that must match a hostmask for the account (equivalent to HOSTMASK SUPERSET)",
         "  ACCESS     - An $O access constraint (<nnn, <=nnn, =nnn, >=nnn or >nnn)",
         "$uSee Also:$u search, search action"
index ba6d7e7b21a0804578829127b7093f703a557c93..80db462f8f29450e134320fcc1921dad45543d43 100644 (file)
@@ -240,7 +240,7 @@ static const struct message_entry msgtab[] = {
     { "OSMSG_CHANINFO_TOPIC_UNKNOWN", "Topic: (none / not gathered)" },
     { "OSMSG_CHANINFO_BAN_COUNT", "Bans (%d):" },
     { "OSMSG_CHANINFO_BAN", "%%s by %%s (%a %b %d %H:%M:%S %Y)" },
-    { "OSMSG_CHANINFO_MANY_USERS", "%d users (\"/msg $s %s %s users\" for the list)" },
+    { "OSMSG_CHANINFO_MANY_USERS", "%d users (\"/msg $S %s %s users\" for the list)" },
     { "OSMSG_CHANINFO_USER_COUNT", "Users (%d):" },
     { "OSMSG_CSEARCH_CHANNEL_INFO", "%s [%d users] %s %s" },
     { NULL, NULL }
@@ -442,7 +442,7 @@ static MODCMD_FUNC(cmd_chaninfo)
        for (n = 0; n < channel->banlist.used; n++) {
            ban = channel->banlist.list[n];
            strftime(buffer, sizeof(buffer), fmt, localtime(&ban->set));
-           reply(buffer, ban->ban, ban->who);
+           send_message_type(4, user, cmd->parent->bot, buffer, ban->ban, ban->who);
        }
     }
     if ((argc < 2) && (channel->members.used >= 50)) {
@@ -1875,7 +1875,7 @@ opserv_join_check(struct modeNode *mNode)
                 change.modes_set |= MODE_MODERATED;
             if (change.modes_set || change.argc)
                 mod_chanmode_announce(opserv, channel, &change);
-            send_target_message(0, channel->name, opserv, "OSMSG_FLOOD_MODERATE");
+            send_channel_notice(channel, opserv, user_find_message(user, "OSMSG_FLOOD_MODERATE")); 
             opserv_alert("Warning: Possible join flood in %s (currently %d users; channel moderated).", channel->name, channel->members.used);
         } else {
             opserv_alert("Warning: Possible join flood in %s (currently %d users).", channel->name, channel->members.used);