]> jfr.im git - irc/quakenet/newserv.git/blobdiff - lua/lualocal.c
fix makefile of jupe module
[irc/quakenet/newserv.git] / lua / lualocal.c
index 20c92c05ec04b8f930e3bd672302d2c7e95ad29d..983103896f3c3fdab0834083c34044c2b87b928d 100644 (file)
@@ -37,7 +37,7 @@ static int lua_registerlocaluser(lua_State *ps) {
   if(!l)
     return 0;
 
-  ln = (lua_localnick *)malloc(sizeof(lua_localnick));
+  ln = (lua_localnick *)luamalloc(sizeof(lua_localnick));
   if(!ln)
     return 0;
 
@@ -45,7 +45,7 @@ static int lua_registerlocaluser(lua_State *ps) {
 
   ln->nick = registerlocaluser(nickname, ident, hostname, realname, account, modes, &lua_localnickhandler);
   if(!ln->nick) {
-    free(ln);
+    luafree(ln);
     return 0;
   }
 
@@ -67,7 +67,7 @@ void lua_freelocalnick(lua_State *ps, lua_localnick *l, char *quitm) {
 
   luaL_unref(ps, LUA_REGISTRYINDEX, l->handler);
 
-  free(l);
+  luafree(l);
 }
 
 int lua_getlocalnickbynick(nick *np, lua_list **rl, lua_localnick **rln) {
@@ -220,6 +220,8 @@ static int lua_localjoin(lua_State *ps) {
     LUA_RETURN(ps, LUA_FAIL);
 
   chan = (char *)lua_tostring(ps, 2);
+  if(chan[0] != '#')
+    LUA_RETURN(ps, LUA_FAIL);
 
   if(!lua_lineok(chan)) 
     LUA_RETURN(ps, LUA_FAIL);
@@ -237,7 +239,7 @@ static int lua_localjoin(lua_State *ps) {
 static int lua_localpart(lua_State *ps) {
   nick *source;
   channel *target;
-  char *chan;
+  char *chan, *reason;
 
   if(!lua_islong(ps, 1) || !lua_isstring(ps, 2))
     LUA_RETURN(ps, LUA_FAIL);
@@ -250,10 +252,18 @@ static int lua_localpart(lua_State *ps) {
 
   if(!lua_lineok(chan)) 
     LUA_RETURN(ps, LUA_FAIL);
-    
+  
+  if(lua_isstring(ps, 3)) {
+    reason = (char *)lua_tostring(ps, 3);
+    if(!lua_lineok(reason))
+      LUA_RETURN(ps, LUA_FAIL);
+  } else {
+    reason = NULL;
+  }
+
   target = findchannel(chan);
   if(target) {
-    localpartchannel(source, target);
+    localpartchannel(source, target, reason);
   } else {
     LUA_RETURN(ps, LUA_FAIL);
   }
@@ -342,7 +352,7 @@ static int lua_localprivmsg(lua_State *ps) {
 static int lua_localovmode(lua_State *l) {
   nick *source;
   channel *chan;
-  int state = 0, add, realmode, ignoring = 0;
+  int state = 0, add = 0, realmode = 0, ignoring = 0;
   modechanges changes;
 
   if(!lua_islong(l, 1) || !lua_isstring(l, 2) || !lua_istable(l, 3))
@@ -404,6 +414,26 @@ static int lua_localovmode(lua_State *l) {
   LUA_RETURN(l, LUA_OK);
 }
 
+static int lua_localumodes(lua_State *ps) {
+  nick *np;
+  char *modes;
+  flag_t newmodes = 0;
+
+  if(!lua_islong(ps, 1) || !lua_isstring(ps, 2))
+    LUA_RETURN(ps, LUA_FAIL);
+
+  np = getnickbynumeric(lua_tolong(ps, 1));
+  if(!np)
+    LUA_RETURN(ps, LUA_FAIL);
+
+  modes = (char *)lua_tostring(ps, 2);
+
+  setflags(&newmodes, UMODE_ALL, modes, umodeflags, REJECT_NONE);
+
+  localusersetumodes(np, newmodes);
+  LUA_RETURN(ps, LUA_OK);
+}
+
 static int lua_localtopic(lua_State *ps) {
   nick *np;
   channel *cp;
@@ -512,5 +542,6 @@ void lua_registerlocalcommands(lua_State *l) {
 
   lua_register(l, "irc_localban", lua_localban);
   lua_register(l, "irc_localkick", lua_localkick);
+  lua_register(l, "irc_localumodes", lua_localumodes);
 }