From: Gunnar Beutner Date: Sat, 22 Feb 2014 21:31:06 +0000 (+0100) Subject: Update the a4stats API some more. X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/commitdiff_plain/5bf3ab9d0028a7243690ce986ffe584274e09aea Update the a4stats API some more. --- diff --git a/a4stats/a4stats_db.c b/a4stats/a4stats_db.c index 9ed54ba9..f9ff50ce 100644 --- a/a4stats/a4stats_db.c +++ b/a4stats/a4stats_db.c @@ -23,7 +23,7 @@ static int a4stats_connectdb(void) { } a4statsdb->createtable(a4statsdb, NULL, NULL, - "CREATE TABLE ? (id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(64) UNIQUE, active INT DEFAULT 1, privacy INT DEFAULT 1)", "T", "channels"); + "CREATE TABLE ? (id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(64) UNIQUE, timestamp INT, active INT DEFAULT 1, privacy INT DEFAULT 1)", "T", "channels"); a4statsdb->createtable(a4statsdb, NULL, NULL, "CREATE TABLE ? (channelid INT, kicker VARCHAR(64), kickerid INT, victim VARCHAR(64), victimid INT, timestamp INT, reason VARCHAR(256))", "T", "kicks"); @@ -306,11 +306,20 @@ static int a4stats_lua_fetch_channels(lua_State *ps) { LUA_RETURN(ps, LUA_OK); } -static int a4stats_lua_add_channel(lua_State *ps) { +static int a4stats_lua_enable_channel(lua_State *ps) { if (!lua_isstring(ps, 1)) LUA_RETURN(ps, LUA_FAIL); - a4statsdb->squery(a4statsdb, "INSERT INTO ? (name) VALUES (?)", "Ts", "channels", lua_tostring(ps, 1)); + a4statsdb->squery(a4statsdb, "INSERT INTO ? (name, timestamp) VALUES (?)", "Tst", "channels", lua_tostring(ps, 1), time(NULL)); + + LUA_RETURN(ps, LUA_OK); +} + +static int a4stats_lua_disable_channel(lua_State *ps) { + if (!lua_isstring(ps, 1)) + LUA_RETURN(ps, LUA_FAIL); + + a4statsdb->squery(a4statsdb, "UPDATE ? SET active = 0 WHERE name = ?", "Ts", "channels", lua_tostring(ps, 1)); LUA_RETURN(ps, LUA_OK); } @@ -357,7 +366,8 @@ static void a4stats_hook_loadscript(int hooknum, void *arg) { void **args = arg; lua_State *l = args[1]; - lua_register(l, "a4_add_channel", a4stats_lua_add_channel); + lua_register(l, "a4_enable_channel", a4stats_lua_enable_channel); + lua_register(l, "a4_disable_channel", a4stats_lua_disable_channel); lua_register(l, "a4_fetch_channels", a4stats_lua_fetch_channels); lua_register(l, "a4_add_kick", a4stats_lua_add_kick); lua_register(l, "a4_add_topic", a4stats_lua_add_topic); @@ -381,7 +391,8 @@ static void a4stats_hook_unloadscript(int hooknum, void *arg) { } for (l = lua_head; l; l = l->next) { - lua_unregister(l->l, "a4_add_channel"); + lua_unregister(l->l, "a4_enable_channel"); + lua_unregister(l->l, "a4_disable_channel"); lua_unregister(l->l, "a4_fetch_channels"); lua_unregister(l->l, "a4_add_kick"); lua_unregister(l->l, "a4_add_topic"); diff --git a/a4stats/nterfacer_a4stats.c b/a4stats/nterfacer_a4stats.c index 3095dbab..27c7adbc 100644 --- a/a4stats/nterfacer_a4stats.c +++ b/a4stats/nterfacer_a4stats.c @@ -36,7 +36,7 @@ static void a4stats_nt_query_cb(const struct DBAPIResult *result, void *uarg) { } static int handle_getchannel(struct rline *ri, int argc, char **argv) { - a4statsdb->query(a4statsdb, a4stats_nt_query_cb, ri, "SELECT active, privacy FROM ? WHERE name = ?", "Ts", "channels", argv[0]); + a4statsdb->query(a4statsdb, a4stats_nt_query_cb, ri, "SELECT timestamp, active, privacy FROM ? WHERE name = ?", "Ts", "channels", argv[0]); return 0; } @@ -45,7 +45,8 @@ static int handle_getlines(struct rline *ri, int argc, char **argv) { "SUM(users.h4) AS h4, SUM(users.h5) AS h5, SUM(users.h6) AS h6, SUM(users.h7) AS h7, SUM(users.h8) AS h8, SUM(users.h9) AS h9, SUM(users.h10) AS h10, " "SUM(users.h11) AS h11, SUM(users.h12) AS h12, SUM(users.h13) AS h13, SUM(users.h14) AS h14, SUM(users.h15) AS h15, SUM(users.h16) AS h16, " "SUM(users.h17) AS h17, SUM(users.h18) AS h18, SUM(users.h19) AS h19, SUM(users.h20) AS h20, SUM(users.h21) AS h21, SUM(users.h22) AS h22, SUM(users.h23) AS h23 " - "FROM ? JOIN ? WHERE channels.name = ?", "TTss", "users", "channels", argv[0]); + "FROM ? JOIN ? ON channels.id = users.channelid WHERE channels.name = ?", "TTs", "users", "channels", argv[0]); + return 0; } @@ -54,28 +55,32 @@ static int handle_getusers(struct rline *ri, int argc, char **argv) { "h12, users.h13, users.h14, users.h15, users.h16, users.h17, users.h18, users.h19, users.h20, users.h21, users.h22, users.h23, users." "last, users.quote, users.quotereset, users.mood_happy, users.mood_sad, users.questions, users.yelling, users.caps, users." "slaps, users.slapped, users.highlights, users.kicks, users.kicked, users.ops, users.deops, users.actions, users.skitzo, users.foul, users." - "firstseen, users.curnick FROM ? JOIN channels ON channels.id = users.channelid WHERE channels.name = ? AND users.quote IS NOT NULL ORDER BY lines DESC LIMIT 25", "Tss", "users", argv[0]); + "firstseen, users.curnick FROM ? JOIN ? ON channels.id = users.channelid WHERE channels.name = ? AND users.quote IS NOT NULL ORDER BY lines DESC LIMIT 25", "Tss", "users", "channels", argv[0]); + return 0; } static int handle_getkicks(struct rline *ri, int argc, char **argv) { a4statsdb->query(a4statsdb, a4stats_nt_query_cb, ri, "SELECT kicks.kicker, kicks.kickerid, kicks.victim, kicks.victimid, kicks.timestamp, kicks.reason " - "FROM ? JOIN ? ON channels.id = users.channelid WHERE channels.name = ? ORDER BY timestamp DESC LIMIT 10", "TTs", "kicks", "channels", argv[0]); + "FROM ? JOIN ? ON channels.id = kicks.channelid WHERE channels.name = ? ORDER BY kicks.timestamp DESC LIMIT 10", "TTs", "kicks", "channels", argv[0]); + return 0; } static int handle_gettopics(struct rline *ri, int argc, char **argv) { a4statsdb->query(a4statsdb, a4stats_nt_query_cb, ri, "SELECT topics.topic, topics.timestamp, topics.setby, topics.setbyid " - "FROM ? JOIN ? ON channels.id = users.channelid WHERE channels.name = ? ORDER BY timestamp DESC LIMIT 10", "TTs", "topics", "channels", argv[0]); + "FROM ? JOIN ? ON channels.id = topics.channelid WHERE channels.name = ? ORDER BY topics.timestamp DESC LIMIT 10", "TTs", "topics", "channels", argv[0]); + return 0; } static int handle_getuser(struct rline *ri, int argc, char **argv) { - a4statsdb->query(a4statsdb, a4stats_nt_query_cb, ri, "SELECT account, users.accountid, users.seen, users.rating, users.lines, users.chars, users.words, users.h0, users.h1, users.h2, users.h3, users.h4, users.h5, users.h6, users.h7, users.h8, users.h9, users.h10, users.h11, users." + a4statsdb->query(a4statsdb, a4stats_nt_query_cb, ri, "SELECT users.account, users.accountid, users.seen, users.rating, users.lines, users.chars, users.words, users.h0, users.h1, users.h2, users.h3, users.h4, users.h5, users.h6, users.h7, users.h8, users.h9, users.h10, users.h11, users." "h12, users.h13, users.h14, users.h15, users.h16, users.h17, users.h18, users.h19, users.h20, users.h21, users.h22, users.h23, users." "last, users.quote, users.quotereset INT, users.mood_happy, users.mood_sad, users.questions, users.yelling, users.caps, users." "slaps, users.slapped, users.highlights, users.kicks, users.kicked, users.ops, users.deops, users.actions, users.skitzo, users.foul, users." - "firstseen, users.curnick FROM ? JOIN ? ON channels.id = users.channelid WHERE channels.name = ? AND users.account = ?", "TTss", "users", "channels", argv[0], argv[1]); + "firstseen, users.curnick FROM ? JOIN ? ON channels.id = users.channelid WHERE channels.name = ? AND (users.accountid != 0 AND users.accountid = ? OR users.accountid = 0 AND users.account = ?)", "TTsss", "users", "channels", argv[0], argv[2], argv[1]); + return 0; } @@ -89,7 +94,7 @@ void _init(void) { register_handler(a4stats_node, "getusers", 1, handle_getusers); register_handler(a4stats_node, "getkicks", 1, handle_getkicks); register_handler(a4stats_node, "gettopics", 1, handle_gettopics); - register_handler(a4stats_node, "getuser", 2, handle_getuser); + register_handler(a4stats_node, "getuser", 3, handle_getuser); } void _fini(void) {