]> jfr.im git - irc/quakenet/newserv.git/commitdiff
Update the a4stats API some more.
authorGunnar Beutner <redacted>
Sat, 22 Feb 2014 21:31:06 +0000 (22:31 +0100)
committerGunnar Beutner <redacted>
Sat, 22 Feb 2014 21:31:06 +0000 (22:31 +0100)
a4stats/a4stats_db.c
a4stats/nterfacer_a4stats.c

index 9ed54ba908b6ff17cb3d1a01244e6faca6f04456..f9ff50ced74c7dda5ded73cc460a6387f16afac1 100644 (file)
@@ -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");
index 3095dbab0cc1de74f0424569c75898dab57f35d8..27c7adbce188b8fda29db47512f7e9c9b330ba8d 100644 (file)
@@ -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) {