]> jfr.im git - irc/quakenet/newserv.git/commitdiff
lua: Implement irc_localsimplechanmode.
authorGunnar Beutner <redacted>
Fri, 21 Jun 2013 09:19:38 +0000 (11:19 +0200)
committerGunnar Beutner <redacted>
Fri, 21 Jun 2013 09:19:38 +0000 (11:19 +0200)
lua/lualocal.c

index a3dd853d98f24f3c945664fc07b0a897966e2129..66d93a2f42c0a23cfa642d45fa70e57c2a304d25 100644 (file)
@@ -599,6 +599,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 +655,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);
 }