X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/fac236ccd78c75ffc929146a4f59c15fe62a24c9..78546f2b0f59b5c8fede1ce5535972716eb17041:/lua/luacommands.c?ds=inline diff --git a/lua/luacommands.c b/lua/luacommands.c index 22b1b457..1d96ac66 100644 --- a/lua/luacommands.c +++ b/lua/luacommands.c @@ -17,6 +17,7 @@ #include "../lib/irc_string.h" #include "../lib/flags.h" #include "../authext/authext.h" +#include "../glines/glines.h" #include "lua.h" #include "luabot.h" @@ -220,7 +221,6 @@ static int lua_gline(lua_State *ps) { nick *target; char mask[512]; int duration, usercount = 0; - host *hp; if(!lua_isstring(ps, 1) || !lua_isint(ps, 2) || !lua_isstring(ps, 3)) LUA_RETURN(ps, LUA_FAIL); @@ -237,31 +237,10 @@ static int lua_gline(lua_State *ps) { if(!target || (IsOper(target) || IsXOper(target) || IsService(target))) LUA_RETURN(ps, LUA_FAIL); - hp = target->host; - if(!hp) + if(glinebynick(target, duration, reason, GLINE_SIMULATE, "lua") > 50) LUA_RETURN(ps, LUA_FAIL); - usercount = hp->clonecount; - if(usercount > 10) { /* (decent) trusted host */ - int j; - nick *np; - - usercount = 0; - - for (j=0;jnext) - if (np && (np->host == hp) && (!ircd_strcmp(np->ident, target->ident))) - usercount++; - - if(usercount > 50) - LUA_RETURN(ps, LUA_FAIL); - - snprintf(mask, sizeof(mask), "*%s@%s", target->ident, IPtostr(target->p_ipaddr)); - } else { - snprintf(mask, sizeof(mask), "*@%s", IPtostr(target->p_ipaddr)); - } - - irc_send("%s GL * +%s %d %jd :%s", mynumeric->content, mask, duration, (intmax_t)getnettime(), reason); + usercount = glinebynick(target, duration, reason, 0, "lua"); LUA_RETURN(ps, lua_cmsg(LUA_PUKECHAN, "lua-GLINE: %s (%d users, %d seconds -- %s)", mask, usercount, duration, reason)); } @@ -377,6 +356,14 @@ static int lua_botnick(lua_State *ps) { return 1; } +static int lua_numerictobase64(lua_State *ps) { + if(!lua_islong(ps, 1)) + return 0; + + lua_pushstring(ps, longtonumeric(lua_tolong(ps, 1), 5)); + return 1; +} + static int lua_getuserbyauth(lua_State *l) { nick *np; int found = 0; @@ -898,6 +885,8 @@ void lua_registercommands(lua_State *l) { lua_register(l, "irc_simplechanmode", lua_simplechanmode); lua_register(l, "irc_sethost", lua_sethost); + + lua_register(l, "irc_numerictobase64", lua_numerictobase64); } /* --- */ @@ -948,6 +937,9 @@ static int lua_skill(lua_State *ps) { #define PUSHER_CHANMODES 12 #define PUSHER_TIMESTAMP 13 #define PUSHER_STRING_INDIRECT 14 +#define PUSHER_ACC_ID 15 +#define PUSHER_SERVER_NAME 16 +#define PUSHER_SERVER_NUMERIC 17 void lua_initnickpusher(void) { int i = 0; @@ -966,6 +958,9 @@ void lua_initnickpusher(void) { PUSH_NICKPUSHER(PUSHER_LONG, accountts); PUSH_NICKPUSHER(PUSHER_UMODES, umodes); PUSH_NICKPUSHER_CUSTOM(PUSHER_COUNTRY, "country"); + PUSH_NICKPUSHER_CUSTOM(PUSHER_ACC_ID, "accountid"); + PUSH_NICKPUSHER_CUSTOM(PUSHER_SERVER_NAME, "servername"); + PUSH_NICKPUSHER_CUSTOM(PUSHER_SERVER_NUMERIC, "servernumeric"); nickpushercount = i; nickpusher[i].argtype = 0; @@ -1037,6 +1032,16 @@ int lua_usepusher(lua_State *l, struct lua_pusher **lp, void *np) { case PUSHER_CHANMODES: lua_pushstring(l, printallmodes(*((channel **)offset))); break; + case PUSHER_ACC_ID: + { + nick *tnp = (nick *)np; + if(IsAccount(tnp) && tnp->auth) { + lua_pushlong(l, tnp->auth->userid); + } else { + lua_pushnil(l); + } + break; + } case PUSHER_REALUSERS: { channel *cp = *((channel **)offset); @@ -1074,6 +1079,12 @@ int lua_usepusher(lua_State *l, struct lua_pusher **lp, void *np) { lua_pushint(l, (long)((nick *)offset)->exts[geoipext]); } break; + case PUSHER_SERVER_NAME: + lua_pushstring(l, serverlist[homeserver(((nick *)offset)->numeric)].name->content); + break; + case PUSHER_SERVER_NUMERIC: + lua_pushint(l, homeserver(((nick *)offset)->numeric)); + break; } i++; @@ -1098,3 +1109,4 @@ void lua_initchanpusher(void) { chanpushercount = i; chanpusher[i].argtype = 0; } +