]> jfr.im git - irc/evilnet/x3.git/commitdiff
added $n $a and $m expansions to BIND (nick, account, numnick)
authorrubin <redacted>
Sat, 19 Aug 2006 06:19:56 +0000 (06:19 +0000)
committerrubin <redacted>
Sat, 19 Aug 2006 06:19:56 +0000 (06:19 +0000)
ChangeLog
src/chanserv.c
src/modcmd.c

index 93c73b8c51f6858f4c093aed5c43ec03c16361a4..a9038cb4b94d5b703b7779d165711e6d2c73e4e8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,18 @@
 /***********************************************************************
  X3 ChangeLog
 
+2006-08-19  Alex Schumann  <rubin@afternet.org>
+
+       * src/chanserv.c: added reply command, which responds similar to calc,
+       but with any message. (for use with bindings)
+
+       * src/modcmd.c: enabled the ability to use $a $n and $m in BIND, which
+       are replaced with the target command's calling user's account, nick,
+       and numnick respectively. This and the above allows things like:
+       BIND x3 account x3.reply your account is $a   or
+       BIND x3 kickme  x3.kick $n $1-
+       more to come, maybe, later.
+
 2006-08-01  Alex Schumann  <rubin@afternet.org>
 
        * src/modcmd.c: Added OSI certification message to VERSION command
index 1a871fb2cf2600e61bb453d87c0a5a1eacc0c122..9f5f8e1637e99e54e06d47c145f18b33b3da389a 100644 (file)
@@ -6941,6 +6941,19 @@ static CHANSERV_FUNC(cmd_calc)
     return 1;
 }
 
+static CHANSERV_FUNC(cmd_reply)
+{
+
+    REQUIRE_PARAMS(2);
+    unsplit_string(argv + 1, argc - 1, NULL);
+
+    if(channel)
+        send_channel_message(channel, cmd->parent->bot, "$b%s$b: %s", user->nick, unsplit_string(argv + 1, argc - 1, NULL));
+    else
+        send_message_type(4, user, cmd->parent->bot, "%s", unsplit_string(argv + 1, argc - 1, NULL));
+    return 1;
+}
+
 static void
 chanserv_adjust_limit(void *data)
 {
@@ -8586,6 +8599,7 @@ init_chanserv(const char *nick)
     DEFINE_COMMAND(d, 1, 0, "flags", "+nolog,+toy,+acceptchan", NULL);
     DEFINE_COMMAND(huggle, 1, 0, "flags", "+nolog,+toy,+acceptchan", NULL);
     DEFINE_COMMAND(calc, 1, 0, "flags", "+nolog,+toy,+acceptchan", NULL);
+    DEFINE_COMMAND(reply, 1, 0, "flags", "+nolog,+toy,+acceptchan", NULL);
 
     /* Channel options */
     DEFINE_CHANNEL_OPTION(defaulttopic);
index d46d2880d287c71ae0e28dfa9070af86e9a9eb9d..d16cdea60309adad973cb50abf43ca3ceaa981b3 100644 (file)
@@ -587,7 +587,7 @@ svccmd_can_invoke(struct userNode *user, struct userNode *bot, struct svccmd *cm
 }
 
 static int
-svccmd_expand_alias(struct svccmd *cmd, unsigned int old_argc, char *old_argv[], char *new_argv[]) {
+svccmd_expand_alias(struct svccmd *cmd, struct userNode *user, unsigned int old_argc, char *old_argv[], char *new_argv[]) {
     unsigned int ii, new_argc;
     char *arg;
 
@@ -625,8 +625,24 @@ svccmd_expand_alias(struct svccmd *cmd, unsigned int old_argc, char *old_argv[],
                 for (jj = lbound; jj <= ubound; )
                     new_argv[new_argc++] = old_argv[jj++];
         } else {
-            log_module(MAIN_LOG, LOG_ERROR, "Alias expansion: I do not know how to handle %s (%s.%s arg %d).", arg, cmd->parent->bot->nick, cmd->name, ii);
-            return 0;
+            switch(arg[1]) {
+                case 'a':
+                    new_argv[new_argc++] = (user && user->handle_info) ? user->handle_info->handle : "(account)";
+                    break;
+                case 'n':
+                    new_argv[new_argc++] = user ? user->nick : "(nick)";
+                    break;
+                case 'm':
+#ifdef WITH_PROTOCOL_P10
+                    new_argv[new_argc++] = user ? user->numeric : "(numnick)";
+#else
+                    new_argv[new_argc++] = "(This ircd protocol has no numnicks!)";
+#endif
+                    break;
+                default:
+                    log_module(MAIN_LOG, LOG_ERROR, "Alias expansion: I do not know how to handle %s (%s.%s arg %d).", arg, cmd->parent->bot->nick, cmd->name, ii);
+                    return 0;
+            }
         }
     }
     return new_argc;
@@ -702,9 +718,9 @@ svccmd_invoke_argv(struct userNode *user, struct service *service, struct chanNo
     /* Expand the alias arguments, if there are any. */
     if (cmd->alias.used) {
         char *new_argv[MAXNUMPARAMS];
-        argc = svccmd_expand_alias(cmd, argc, argv, new_argv);
+        argc = svccmd_expand_alias(cmd, user, argc, argv, new_argv);
         if (!argc) {
-            send_message(service->bot, user, "MCMSG_ALIAS_ERROR", cmd->name);
+            send_message(user, service->bot, "MCMSG_ALIAS_ERROR", cmd->name);
             return 0;
         }
         argv = new_argv;
@@ -1083,8 +1099,16 @@ check_alias_args(char *argv[], unsigned int argc) {
             default:
                 return arg;
             }
-        } else
-            return arg;
+        } else {
+            switch(argv[arg][1]) {
+                case 'a':
+                case 'n':
+                case 'm':
+                    continue;
+                default: 
+                    return arg;
+            }
+        }
     }
     return arg;
 }