X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/57882ee39cc4e5d7cd95e13c4b7f99a582b9c398..efe18ab74e250b0e0a65e8c5fc42220ba091be04:/lua/luacommands.c diff --git a/lua/luacommands.c b/lua/luacommands.c index 28aa00cf..2ed3b2b8 100644 --- a/lua/luacommands.c +++ b/lua/luacommands.c @@ -18,6 +18,9 @@ #include "../lib/flags.h" #include "../authext/authext.h" #include "../glines/glines.h" +#include "../trusts/trusts.h" +#include "../bans/bans.h" +#include "../core/modules.h" #include "lua.h" #include "luabot.h" @@ -344,6 +347,110 @@ static int lua_versioninfo(lua_State *ps) { return 5; } +static int lua_nickmatchban(lua_State *ps) { + const char *chanban_str; + long numeric; + chanban *cb; + nick *np; + + if(!lua_islong(ps, 1) || !lua_isstring(ps, 2)) + return 0; + + numeric = lua_tolong(ps, 1); + chanban_str = lua_tostring(ps, 2); + + np = getnickbynumeric(numeric); + if(!np) + return 0; + + cb = makeban(chanban_str); + if(!cb) + return 0; + + lua_pushboolean(ps, nickmatchban(np, cb, 1)); + + freechanban(cb); + + return 1; +} + +static int lua_nickbanned(lua_State *ps) { + const char *channel_str; + long numeric; + channel *cp; + nick *np; + + if(!lua_islong(ps, 1) || !lua_isstring(ps, 2)) + return 0; + + numeric = lua_tolong(ps, 1); + channel_str = lua_tostring(ps, 2); + + np = getnickbynumeric(numeric); + if(!np) + return 0; + + cp = findchannel((char *)channel_str); + if(!cp) + return 0; + + lua_pushboolean(ps, nickbanned(np, cp, 1)); + + return 1; +} + +static int lua_suggestbanmask(lua_State *ps) { + nick *np; + glinebuf gb; + gline *gl; + long numeric; + int i = 1; + + if (!lua_islong(ps, 1)) + return 0; + + numeric = lua_tolong(ps, 1); + + np = getnickbynumeric(numeric); + if (!np) + return 0; + + glinebufinit(&gb, 0); + glinebufaddbynick(&gb, np, 0, "Auto", "None", time(NULL), time(NULL), time(NULL)); + + lua_newtable(ps); + + for (gl = gb.glines; gl; gl = gl->next) { + if (gl->host && gl->host->content) { + char *mask = glinetostring(gl); + LUA_APUSHSTRING(ps, i, mask); + i++; + } + } + + glinebufabort(&gb); + + return 1; +} + +static int lua_nickistrusted(lua_State *ps) { + long numeric; + nick *np; + + if(!lua_islong(ps, 1)) + return 0; + + numeric = lua_tolong(ps, 1); + + np = getnickbynumeric(numeric); + if(!np) + return 0; + + lua_pushboolean(ps, istrusted(np)); + + return 1; +} + static int lua_basepath(lua_State *ps) { lua_pushfstring(ps, "%s/", cpath->content); @@ -904,6 +1011,11 @@ void lua_registercommands(lua_State *l) { lua_register(l, "irc_numerictobase64", lua_numerictobase64); lua_register(l, "ircmatch", lua_match); + + lua_register(l, "irc_nickmatchban", lua_nickmatchban); + lua_register(l, "irc_nickistrusted", lua_nickistrusted); + lua_register(l, "irc_nickbanned", lua_nickbanned); + lua_register(l, "irc_suggestbanmask", lua_suggestbanmask); } /* --- */