]> jfr.im git - irc/quakenet/newserv.git/blobdiff - lua/lualocal.c
CHANSERV: better batcher error handling for expired accounts/accounts with no email.
[irc/quakenet/newserv.git] / lua / lualocal.c
index a3dd853d98f24f3c945664fc07b0a897966e2129..2d519e55e340754eb000f26b4648f69eb01b49da 100644 (file)
@@ -159,6 +159,17 @@ void lua_localnickhandler(nick *target, int type, void **args) {
 
       break;
 
+    case LU_PRIVNOTICE:
+      np = (nick *)args[0];
+      p = (char *)args[1];
+
+      if(!np || !p)
+        return;
+
+      lua_vlpcall(l, ln, "irc_onnotice", "Ns", np, p);
+
+      break;
+
     case LU_CHANMSG:
       np = (nick *)args[0];
       c = (channel *)args[1];
@@ -190,7 +201,7 @@ void lua_localnickhandler(nick *target, int type, void **args) {
       np = (nick *)args[0];
       c = (channel *)args[1];
 
-      if(!c || !np || !c->index || !c->index->name || !c->index->name->content)
+      if(!c || !np || !c->index || !c->index->name)
         return;
 
       lua_vlpcall(l, ln, "irc_oninvite", "Ns", np, c->index->name->content);
@@ -211,7 +222,7 @@ void lua_reconnectlocal(void *arg) {
   ln->reconnect = NULL;
 
   if(lua_getlocalnickbynick(ln->nick, &l, &ln)) /* hacky! */
-    lua_vlpcall(l, ln, "irc_onkillreconnect", "N", ln->nick);
+    lua_vlpcall(l, ln, "irc_onkillreconnect", "");
 }
 
 static int lua_localjoin(lua_State *ps) {
@@ -599,6 +610,42 @@ static int lua_localwallops(lua_State *ps) {
   LUA_RETURN(ps, LUA_OK);
 }
 
+static int lua_localsimplechanmode(lua_State *ps) {
+  nick *source;
+  channel *cp;
+  char *modes;
+  flag_t add = 0, del = ~add;
+  flag_t permitted = CHANMODE_NOEXTMSG | CHANMODE_TOPICLIMIT | CHANMODE_SECRET | CHANMODE_PRIVATE | CHANMODE_INVITEONLY | CHANMODE_MODERATE | CHANMODE_NOCOLOUR | CHANMODE_NOCTCP | CHANMODE_REGONLY | CHANMODE_DELJOINS | CHANMODE_NOQUITMSG | CHANMODE_NONOTICE | CHANMODE_MODNOAUTH | CHANMODE_SINGLETARG;
+  modechanges changes;
+
+  if(!lua_islong(ps, 1) || !lua_isstring(ps, 2) || !lua_isstring(ps, 3))
+    LUA_RETURN(ps, LUA_FAIL);
+
+  source = getnickbynumeric(lua_tolong(ps, 1));
+  if(!source)
+    LUA_RETURN(ps, LUA_FAIL);
+
+  cp = findchannel((char *)lua_tostring(ps, 2));
+  if(!cp)
+    LUA_RETURN(ps, LUA_FAIL);
+
+  modes = (char *)lua_tostring(ps, 3);
+  if(!modes)
+    LUA_RETURN(ps, LUA_FAIL);
+
+  if(setflags(&add, permitted, modes, cmodeflags, REJECT_DISALLOWED|REJECT_UNKNOWN) != REJECT_NONE)
+    LUA_RETURN(ps, LUA_FAIL);
+
+  if(setflags(&del, permitted, modes, cmodeflags, REJECT_DISALLOWED|REJECT_UNKNOWN) != REJECT_NONE)
+    LUA_RETURN(ps, LUA_FAIL);
+
+  localsetmodeinit(&changes, cp, source);
+  localdosetmode_simple(&changes, add, ~del);
+  localsetmodeflush(&changes, 1);
+
+  LUA_RETURN(ps, LUA_OK);
+}
+
 void lua_registerlocalcommands(lua_State *l) {
   lua_register(l, "irc_localregisteruserid", lua_registerlocaluserid);
   lua_register(l, "irc_localderegisteruser", lua_deregisterlocaluser);
@@ -619,5 +666,7 @@ void lua_registerlocalcommands(lua_State *l) {
 
   lua_register(l, "irc_localwallusers", lua_localwallusers);
   lua_register(l, "irc_localwallops", lua_localwallops);
+
+  lua_register(l, "irc_localsimplechanmode", lua_localsimplechanmode);
 }