diff options
author | Trumeet <yuuta@yuuta.moe> | 2022-04-05 13:06:55 -0700 |
---|---|---|
committer | Trumeet <yuuta@yuuta.moe> | 2022-04-05 13:06:55 -0700 |
commit | 1ad9927e8eb242a828effff2d3bec2aae9314667 (patch) | |
tree | fef5cb702b038d78e226bbb4eaa8be651a91a455 | |
parent | a20a1a7434edc48ad12200201a8829bd89f4bb1f (diff) | |
download | ksyxbot-1ad9927e8eb242a828effff2d3bec2aae9314667.tar ksyxbot-1ad9927e8eb242a828effff2d3bec2aae9314667.tar.gz ksyxbot-1ad9927e8eb242a828effff2d3bec2aae9314667.tar.bz2 ksyxbot-1ad9927e8eb242a828effff2d3bec2aae9314667.zip |
Support global statistics.
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | logic.h | 2 | ||||
-rw-r--r-- | main.c | 5 | ||||
-rw-r--r-- | stat.c | 46 |
4 files changed, 54 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 7251ace..deede86 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,6 @@ set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fsanitize=address") add_definitions(-D_POSIX_C_SOURCE=200809L) -add_executable(ksyxbotd main.c tdutils.c tdutils.h log.c log.h botd.h db.c db.h cmdline.c store.c logic.h query.c refresh.c) +add_executable(ksyxbotd main.c tdutils.c tdutils.h log.c log.h botd.h db.c db.h cmdline.c store.c logic.h query.c refresh.c stat.c) target_include_directories(ksyxbotd PUBLIC "${PROJECT_BINARY_DIR}") target_link_libraries(ksyxbotd PRIVATE tdc tdsqlite m) @@ -12,4 +12,6 @@ void store(struct TdMessage *msg, void (*cb)(bool)); void refresh(struct TdMessage *msg); +void stat(struct TdMessage *msg); + #endif /* KSYXBOT_LOGIC_H */ @@ -39,6 +39,11 @@ static void cb_store(bool succ) {} int handle_message(struct TdUpdateNewMessage *update) { struct TdMessage *msg = update->message_; + if (msg->content_->ID == CODE_MessageText && + !strncmp(((struct TdMessageText *) msg->content_)->text_->text_, "/stat", 5)) { + stat(msg); + return 0; + } if (msg->sender_id_->ID == CODE_MessageSenderUser && ((struct TdMessageSenderUser *) msg->sender_id_)->user_id_ == ADMIN) { if (msg->content_->ID == CODE_MessageText && @@ -0,0 +1,46 @@ +/* + * Created by yuuta on 4/5/22. + */ + +#include "logic.h" +#include "log.h" +#include "tdutils.h" +#include "db.h" + +void stat(struct TdMessage *msg) { + int r; + char m[2048]; + sqlite3_stmt *stmt = NULL; + if ((r = sqlite3_prepare_v2(db, "SELECT COUNT(user), SUM(i) FROM stats;", -1, &stmt, NULL))) { + goto sql_err; + sql_err: + { + snprintf(m, 1024, "Cannot query statistics: %s.", sqlite3_errstr(r)); + LOGEV("%s", m); + if (stmt) sqlite3_finalize(stmt); + goto send; + } + } + if ((r = sqlite3_step(stmt)) != SQLITE_ROW) goto sql_err; + snprintf(m, 1024, "普天之下,莫非 K 土。TGCN 共有 %d 位 K 教授的虔诚学生卖了 %d 句菜。", + sqlite3_column_int(stmt, 0), + sqlite3_column_int(stmt, 1)); + sqlite3_finalize(stmt); + goto send; + send: + td_send(TdCreateObjectSendMessage(msg->chat_id_, + 0, + msg->id_, + TdCreateObjectMessageSendOptions(false, false, true, NULL), + NULL, + (struct TdInputMessageContent *) + TdCreateObjectInputMessageText( + TdCreateObjectFormattedText(m, + (struct TdVectorTextEntity *) + TdCreateObjectVectorObject( + 0, NULL) + ), + false, + false)), + NULL, NULL); +}
\ No newline at end of file |