Răsfoiți Sursa

* Add msg-release

Bryan Drewery 16 ani în urmă
părinte
comite
ab612cce5e

+ 1 - 0
doc/help.txt

@@ -1601,6 +1601,7 @@ See also: reload, backup
 [S]  $bmsg-pass$b        Defines the cmd for setting a pass via msging the bot.
 [S]  $bmsg-invite$b      Defines the cmd for requesting invite via msging the bot.
 [S]  $bmsg-ident$b       Defines the cmd for identing via msging the bot.
+[S]  $bmsg-release$b     Defines the cmd for releasing a nick.
  
 [N]  $bfork-interval$b   Number of seconds in between each fork() call made by the bot. 
                           (Resets PID/CPU)

+ 30 - 0
src/mod/irc.mod/msgcmds.c

@@ -418,6 +418,35 @@ static int msg_unauth(char *nick, char *host, struct userrec *u, char *par)
   return BIND_RET_BREAK;
 }
 
+static int msg_release(char *nick, char *host, struct userrec *u, char *par)
+{
+  char *pass = NULL;
+
+  if (match_my_nick(nick))
+    return BIND_RET_BREAK;
+  if (u && u->bot)
+    return BIND_RET_BREAK;
+
+  pass = newsplit(&par);
+
+  if (u_pass_match(u, pass) && !u_pass_match(u, "-")) {
+    putlog(LOG_CMDS, "*", STR("(%s!%s) !%s! RELEASE"), nick, host, u->handle);
+    // Only do this if currently on a jupenick
+    if (jupenick[0] && match_my_nick(jupenick)) {
+      keepnick = 0;
+      release_time = now;
+      altnick_char = rolls = 0;
+      tried_nick = now;
+      dprintf(DP_MODE, "NICK %s\n", origbotname);
+    } else
+      putlog(LOG_CMDS, "*", "Not releasing nickname. (Not currently on a jupenick)");
+  } else {
+    putlog(LOG_CMDS, "*", STR("(%s!%s) !%s! failed RELEASE"), nick, host, u ? u->handle : "*");
+  }
+  return BIND_RET_BREAK;
+
+}
+
 /* MSG COMMANDS
  *
  * Function call should be:
@@ -437,6 +466,7 @@ static cmd_t C_msg[] =
   {"invite",		"",	(Function) msg_invite,		NULL, LEAF},
   {"op",		"",	(Function) msg_op,		NULL, LEAF},
   {"pass",		"",	(Function) msg_pass,		NULL, LEAF},
+  {"release",		"",	(Function) msg_release,		NULL, LEAF},
   {"bewm",		"",	(Function) msg_bewm,		NULL, LEAF},
   {NULL,		NULL,	NULL,				NULL, 0}
 };

+ 5 - 0
src/mod/server.mod/server.c

@@ -70,6 +70,7 @@ char botuserhost[UHOSTLEN] = "";	/* bot's user@host (refreshed whenever the bot
 					/* may not be correct user@host BUT it's how the server sees it */
 char botuserip[UHOSTLEN] = "";		/* bot's user@host with the ip. */
 
+time_t release_time = 0;
 bool keepnick = 1;		/* keep trying to regain my intended
 				   nickname? */
 static bool nick_juped = 0;	/* True if origbotname is juped(RPL437) (dw) */
@@ -1002,6 +1003,10 @@ static void server_secondly()
         ison_cnt = 0;
       } else
         ++ison_cnt;
+    } else if (!keepnick && ((now - release_time) >= 7)) {
+      release_time = 0;
+      keepnick = 1;
+      dprintf(DP_SERVER, "MONITOR S\n");
     }
 
     if (!loading) {

+ 1 - 1
src/mod/server.mod/server.h

@@ -50,7 +50,7 @@ extern bool		trigger_on_ignore, floodless, keepnick, deaf_set;
 extern int 		servidx, ctcp_mode, answer_ctcp, serv, curserv, default_alines;
 extern unsigned int     rolls;
 extern port_t		default_port, newserverport, curservport;
-extern time_t		server_online, tried_jupenick, tried_nick;
+extern time_t		server_online, tried_jupenick, tried_nick, release_time;
 extern interval_t	cycle_time;
 extern char		cursrvname[], botrealname[121], botuserhost[], ctcp_reply[1024],
 			newserver[], newserverpass[], curnetwork[], botuserip[], altnick_char, deaf_char, callerid_char;

+ 5 - 3
src/mod/server.mod/servmsg.c

@@ -674,8 +674,8 @@ static int gotmsg(char *from, char *msg)
         bool doit = 1;
 
         if (!strcasecmp(my_code, "op") || !strcasecmp(my_code, "pass") || !strcasecmp(my_code, "invite")
-            || !strcasecmp(my_code, "ident")
-            || !strcasecmp(my_code, msgop) || !strcasecmp(my_code, msgpass)
+            || !strcasecmp(my_code, "ident") || !strcasecmp(my_code, "release")
+            || !strcasecmp(my_code, msgop) || !strcasecmp(my_code, msgpass) || !strcasecmp(my_code, msgrelease)
             || !strcasecmp(my_code, msginvite) || !strcasecmp(my_code, msgident)) {
           const char *buf2 = NULL;
 
@@ -688,6 +688,8 @@ static int gotmsg(char *from, char *msg)
             buf2 = "invite";
           else if (!strcasecmp(my_code, msgident))
             buf2 = "ident";
+          else if (!strcasecmp(my_code, msgrelease))
+            buf2 = "release";
 
           if (buf2)
             check_bind_msg(buf2, nick, uhost, my_u, msg);
@@ -1130,7 +1132,7 @@ static int gotnick(char *from, char *msg)
       altnick_char = rolls = 0;
       putlog(LOG_SERV | LOG_MISC, "*", "Regained nickname '%s'.", msg);
       nick_juped = 0;
-    } else if (keepnick && strcmp(nick, msg)) {
+    } else if ((keepnick || release_time) && strcmp(nick, msg)) {
 
       // Was this an attempt at a nick thru rotation?
       if (!strcmp(rnick, msg)) {

+ 2 - 0
src/set.c

@@ -58,6 +58,7 @@ char msgident[21] = "";
 char msginvite[21] = "";
 char msgop[21] = "";
 char msgpass[21] = "";
+char msgrelease[21] = "";
 int op_bots;
 rate_t op_requests;
 int promisc;
@@ -103,6 +104,7 @@ static variable_t vars[] = {
  VAR("msg-invite",	msginvite,		VAR_WORD|VAR_NOLHUB,				0, 0, NULL),
  VAR("msg-op",		msgop,			VAR_WORD|VAR_NOLHUB,				0, 0, NULL),
  VAR("msg-pass",	msgpass,		VAR_WORD|VAR_NOLHUB,				0, 0, NULL),
+ VAR("msg-release",	msgrelease,		VAR_WORD|VAR_NOLHUB,				0, 0, NULL),
  VAR("nick",		origbotname,		VAR_WORD|VAR_NOHUB|VAR_NICK|VAR_NODEF,	0, 0, NULL),
  VAR("notify-time",	&ison_time,		VAR_INT|VAR_NOLHUB,				1, 30, "10"),
  VAR("oidentd",		&oidentd,		VAR_INT|VAR_BOOL|VAR_NOLHUB,			0, 1, "0"),

+ 1 - 1
src/set.h

@@ -68,7 +68,7 @@ typedef struct rate_b {
 } rate_t;
 
 extern char		auth_key[], auth_prefix[2], motd[], alias[], rbl_servers[1024],
-			msgident[], msginvite[], msgop[], msgpass[],
+			msgident[], msginvite[], msgop[], msgpass[], msgrelease[],
                         homechan[], altchars[];
 extern bool		dccauth, auth_obscure, manop_warn, auth_chan, oidentd, ident_botnick, irc_autoaway, link_cleartext, use_deaf, use_callerid;
 extern int		cloak_script, fight_threshold, fork_interval, in_bots, set_noshare, dcc_autoaway,