summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrumeet <yuuta@yuuta.moe>2023-03-19 14:44:42 -0700
committerTrumeet <yuuta@yuuta.moe>2023-03-19 14:44:42 -0700
commit4389fe029f51e8ae24f3e68ad46a1064d822a8f6 (patch)
tree2a2164e362b246ff2adf5f3296855c41112cc4f3
parent5633eccae8c8bc9387e63e22c0eb420eefa5e991 (diff)
downloadksyxbot-4389fe029f51e8ae24f3e68ad46a1064d822a8f6.tar
ksyxbot-4389fe029f51e8ae24f3e68ad46a1064d822a8f6.tar.gz
ksyxbot-4389fe029f51e8ae24f3e68ad46a1064d822a8f6.tar.bz2
ksyxbot-4389fe029f51e8ae24f3e68ad46a1064d822a8f6.zip
Use SQLite3 view to do global stats
-rw-r--r--db.c5
-rw-r--r--stat.c27
2 files changed, 18 insertions, 14 deletions
diff --git a/db.c b/db.c
index 6c49f3d..98b35a0 100644
--- a/db.c
+++ b/db.c
@@ -20,7 +20,10 @@ static const char *sql_upgrades[] = {
"'user' INTEGER UNIQUE,"
"'i' INTEGER NOT NULL,"
"PRIMARY KEY('user')"
- ");"
+ ");",
+ "CREATE VIEW 'stat_global'"
+ "AS"
+ "SELECT * FROM (SELECT COUNT(user), SUM(i), MAX(i), AVG(i) FROM stats), (SELECT COUNT(msg) FROM says)"
};
sqlite3 *db = NULL;
diff --git a/stat.c b/stat.c
index 2c1323e..143a98d 100644
--- a/stat.c
+++ b/stat.c
@@ -12,15 +12,15 @@
#include <string.h>
static char *praises[] = {
- "普天之下,莫非 K 土。TGCN 共有 %d 位 K 教授的虔诚学生卖了 %d 句菜,其中卖菜最多的人共卖了 %d 句菜,平均每人卖了 %d 句菜。",
- "率土之滨,莫非 K 臣。TGCN 共有 %d 位 K 教授的虔诚学生卖了 %d 句菜,其中卖菜最多的人共卖了 %d 句菜,平均每人卖了 %d 句菜。",
+ "普天之下,莫非 K 土。",
+ "率土之滨,莫非 K 臣。",
};
void stat(struct TdMessage *msg) {
int r;
char m[1024];
sqlite3_stmt *stmt = NULL;
- if ((r = sqlite3_prepare_v2(db, "SELECT COUNT(user), SUM(i), MAX(i), AVG(i) FROM stats;", -1, &stmt, NULL))) {
+ if ((r = sqlite3_prepare_v2(db, "SELECT * FROM stats_global;", -1, &stmt, NULL))) {
goto sql_err;
sql_err:
{
@@ -31,19 +31,20 @@ void stat(struct TdMessage *msg) {
}
}
if ((r = sqlite3_step(stmt)) != SQLITE_ROW) goto sql_err;
- snprintf(m, 1024, praises[rand() % (sizeof(praises) / sizeof(char *))],
+
+ snprintf(m, sizeof(m), "%s"
+ "TGCN 共有 %d 位 K 教授的虔诚学生卖了 %d 句菜,"
+ "其中卖菜最多的人共卖了 %d 句菜,"
+ "平均每人卖了 %d 句菜。"
+ "\n\n"
+ "共有 %d 句教授语录。\n"
+ "Bot 已运行 %ld 秒。",
+ praises[rand() % (sizeof(praises) / sizeof(char *))],
sqlite3_column_int(stmt, 0),
sqlite3_column_int(stmt, 1),
sqlite3_column_int(stmt, 2),
- sqlite3_column_int(stmt, 3));
- sqlite3_finalize(stmt);
- stmt = NULL;
-
- if ((r = sqlite3_prepare_v2(db, "SELECT COUNT(t) FROM says;", -1, &stmt, NULL))) goto sql_err;
- if ((r = sqlite3_step(stmt)) != SQLITE_ROW) goto sql_err;
- size_t len = strlen(m);
- snprintf(&m[len], 1024 - len, "\n\n共有 %d 句教授语录。\nBot 已运行 %ld 秒。",
- sqlite3_column_int(stmt, 0),
+ sqlite3_column_int(stmt, 3),
+ sqlite3_column_int(stmt, 4),
time(NULL) - start_time);
sqlite3_finalize(stmt);
goto send;