]> jfr.im git - irc/quakenet/newserv.git/blobdiff - localuser/localuser.c
nickwatch: Implement hook for messages/notices.
[irc/quakenet/newserv.git] / localuser / localuser.c
index 35c13ebe840cfcc57131a794f942df9969006ac1..9e056b9581e5fec1bf28bc8babdc8e915ec6c381 100644 (file)
@@ -108,6 +108,8 @@ nick *registerlocaluserflags(char *nickname, char *ident, char *host, char *real
   ((unsigned char *)(ipaddress.in6_16))[14] = 1;
   ((unsigned char *)(ipaddress.in6_16))[15] = (currentlocalunum%253)+1;
 
+  memcpy(&newuser->ipaddress, &ipaddress, sizeof(ipaddress));
+
   newuser->ipnode = refnode(iptree, &ipaddress, PATRICIA_MAXBITS);
   node_increment_usercount(newuser->ipnode);
 
@@ -203,7 +205,7 @@ int renamelocaluser(nick *np, char *newnick) {
       /* Case only name change */
       strncpy(np->nick,newnick,NICKLEN);
       np->nick[NICKLEN]='\0';
-      irc_send("%s N %s %jd",iptobase64(ipbuf, &(np->p_ipaddr), sizeof(ipbuf), 1),np->nick,(intmax_t)np->timestamp);
+      irc_send("%s N %s %jd",iptobase64(ipbuf, &(np->ipaddress), sizeof(ipbuf), 1),np->nick,(intmax_t)np->timestamp);
       triggerhook(HOOK_NICK_RENAME,harg);     
       return 0;
     } else {
@@ -310,7 +312,7 @@ void sendnickmsg(nick *np) {
 
   irc_send("%s N %s 1 %ld %s %s %s%s%s %s %s :%s",
     mynumeric->content,np->nick,np->timestamp,np->ident,np->host->name->content,
-    printflags(np->umodes,umodeflags),operbuf,accountbuf,iptobase64(ipbuf,&(np->p_ipaddr),
+    printflags(np->umodes,umodeflags),operbuf,accountbuf,iptobase64(ipbuf,&(np->ipaddress),
     sizeof(ipbuf),1),numericbuf,np->realname->name->content);
 }
 
@@ -362,7 +364,7 @@ int handlemessageornotice(void *source, int cargc, char **cargv, int isnotice) {
   char *ch;
   char targetnick[NICKLEN+1];
   int foundat;
-  void *nargs[2];
+  void *nargs[3];
   int i;
   
   /* Should have target and message */
@@ -370,15 +372,23 @@ int handlemessageornotice(void *source, int cargc, char **cargv, int isnotice) {
     return CMD_OK;
   }
 
-  if (cargv[0][0]=='#' || cargv[0][0]=='+') {
-    /* Channel message/notice */
-    return CMD_OK;
-  }
-  
   if ((sender=getnickbynumericstr((char *)source))==NULL) {
     Error("localuser",ERR_WARNING,"PRIVMSG from non existant user %s",(char *)source);
     return CMD_OK;
   }
+
+  freesstring(sender->message);
+  sender->message = getsstring(cargv[1], 512);
+
+  nargs[0] = sender;
+  nargs[1] = cargv[1];
+  nargs[2] = (void *)(uintptr_t)isnotice;
+  triggerhook(HOOK_NICK_MESSAGE, nargs);
+
+  if (cargv[0][0]=='#' || cargv[0][0]=='+') {
+    /* Channel message/notice */
+    return CMD_OK;
+  }
   
   /* Check for a "secure" message (foo@bar) */
   foundat=0;