summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrumeet <yuuta@yuuta.moe>2022-04-01 23:00:18 -0700
committerTrumeet <yuuta@yuuta.moe>2022-04-01 23:00:18 -0700
commit23030400fdeb39d21677b837e58609015f499d59 (patch)
tree1b95e29661a6679d70ad9ac2c709416d22313da1
parentd8952476eb5c37b6d94ecaa24c61d48c4c726e3a (diff)
downloadksyxbot-23030400fdeb39d21677b837e58609015f499d59.tar
ksyxbot-23030400fdeb39d21677b837e58609015f499d59.tar.gz
ksyxbot-23030400fdeb39d21677b837e58609015f499d59.tar.bz2
ksyxbot-23030400fdeb39d21677b837e58609015f499d59.zip
Search support
-rw-r--r--query.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/query.c b/query.c
index fe30ade..2af01bf 100644
--- a/query.c
+++ b/query.c
@@ -36,9 +36,11 @@ int handle_inline(struct TdUpdateNewInlineQuery *update) {
memset(results, 0, sizeof(results));
sqlite3_stmt *stmt;
int r;
+ const bool query = update->query_;
bool sys = false;
if ((r = sqlite3_prepare_v2(db,
- "SELECT id, t, url FROM says ORDER BY RANDOM() LIMIT 10;",
+ query ? "SELECT id, t, url FROM says WHERE t LIKE ? LIMIT 10;"
+ :"SELECT id, t, url FROM says ORDER BY RANDOM() LIMIT 10;",
-1,
&stmt,
NULL))) {
@@ -54,6 +56,22 @@ int handle_inline(struct TdUpdateNewInlineQuery *update) {
goto answer;
}
+ char *query_str = NULL;
+ if (query) {
+ const size_t raw_query_len = strlen(update->query_);
+ if (!(query_str = calloc(raw_query_len + 3, sizeof(char)))) {
+ r = errno;
+ LOGEV("Cannot allocate memory: %s.", strerror(r));
+ sqlite3_finalize(stmt);
+ return r;
+ }
+ sprintf(query_str, "%%%s%%", update->query_);
+ if ((r = sqlite3_bind_text(stmt, 1, query_str, ((int) raw_query_len + 3), NULL))) {
+ free(query_str);
+ goto sql_err;
+ }
+ }
+
int j = 0;
goto step;
step:
@@ -94,13 +112,14 @@ int handle_inline(struct TdUpdateNewInlineQuery *update) {
}
}
+ if (query_str) free(query_str);
sqlite3_finalize(stmt);
if (!j) {
results[0].title = "No data";
- results[0].description = "No data is available. Check it out later.";
+ results[0].description = "No data is available.";
sprintf(results[0].id, "e_nodat");
- results[0].text = "No data is available. Check it out later.\n\n"
+ results[0].text = "No data is available. Adjust your search terms or check it out later.\n\n"
"https://www.youtube.com/watch?v=dQw4w9WgXcQ";
sys = true;
}