From bd63a1292e96e9101fe053d9d8d2b09ca391ae23 Mon Sep 17 00:00:00 2001 From: Francesco Date: Thu, 22 May 2025 02:56:23 +0200 Subject: [PATCH] add sendDice (testing) --- .clangd | 1 + README.md | 1 + examples/echobot/echobot.c | 9 ++++- examples/inlinekeyboard/inlinekeyboard.c | 3 +- include/common.h | 2 ++ include/methods.h | 5 +-- meson.build | 2 +- src/methods.c | 45 ++++++++++++++++++------ 8 files changed, 52 insertions(+), 16 deletions(-) create mode 100644 .clangd diff --git a/.clangd b/.clangd new file mode 100644 index 0000000..5c4c28b --- /dev/null +++ b/.clangd @@ -0,0 +1 @@ +HeaderInsertion: Never diff --git a/README.md b/README.md index 994f88a..9b0946e 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,7 @@ You can find some examples [here](./examples/). - `getMe` - `sendMessage` - `editMessageText` +- `sendDice` ## Roadmap - `sendPhoto` diff --git a/examples/echobot/echobot.c b/examples/echobot/echobot.c index 7cae037..06f1263 100644 --- a/examples/echobot/echobot.c +++ b/examples/echobot/echobot.c @@ -1,6 +1,8 @@ #include #include #include +#include + #include bool run = true; @@ -35,7 +37,12 @@ int main(void) { while (run) { tgbot_get_update(&bot, &update, NULL); - echo_message(&bot, &update); + if (strcmp(update.text, "/start") == 0) { + /* Send dice if /start otherwise echo the message */ + tgbot_send_dice(&bot, update.chat_id, NULL); + } else { + echo_message(&bot, &update); + } } fprintf(stdout, "Closing..."); diff --git a/examples/inlinekeyboard/inlinekeyboard.c b/examples/inlinekeyboard/inlinekeyboard.c index 52ac583..a3d1ddd 100644 --- a/examples/inlinekeyboard/inlinekeyboard.c +++ b/examples/inlinekeyboard/inlinekeyboard.c @@ -4,8 +4,7 @@ #include #include -#include "tgbot.h" -#include "types.h" +#include #define WELCOME_MSG "Hi there! This bot is coded in C." diff --git a/include/common.h b/include/common.h index 3ae97a6..f248795 100644 --- a/include/common.h +++ b/include/common.h @@ -78,6 +78,8 @@ enum tgbot_rc { TGBOT_GETUPDATES_ERROR, TGBOT_GETME_ERROR, TGBOT_SENDMESSAGE_ERROR, + TGBOT_EDITMESSAGETEXT_ERROR, + TGBOT_SENDDICE_ERROR, TGBOT_TELEGRAM_OK_ERROR, }; typedef enum tgbot_rc tgbot_rc; diff --git a/include/methods.h b/include/methods.h index 26ff354..8296cfd 100644 --- a/include/methods.h +++ b/include/methods.h @@ -14,9 +14,10 @@ tgbot_rc tgbot_request(tgbot *bot, char *url, struct memory_buffer **mb, json_ob /* Methods */ tgbot_rc tgbot_get_me(tgbot *bot, tgbot_me *me); -tgbot_rc tgbot_send_message(tgbot *bot, int64_t chat_id, char *text, char *parse_mode, tgbot_inlinekeyboard *reply_markup); +tgbot_rc tgbot_send_message(tgbot *bot, int64_t chat_id, const char *text, const char *parse_mode, tgbot_inlinekeyboard *reply_markup); +tgbot_rc tgbot_send_dice(tgbot *bot, int64_t chat_id, const char *emoji); /* Updating Methods */ -tgbot_rc tgbot_edit_message_text(tgbot *bot, int64_t chat_id, long message_id, char *text, tgbot_inlinekeyboard *keyboard); +tgbot_rc tgbot_edit_message_text(tgbot *bot, int64_t chat_id, long message_id, const char *text, tgbot_inlinekeyboard *keyboard); #endif diff --git a/meson.build b/meson.build index 59dfd4d..bd49d26 100644 --- a/meson.build +++ b/meson.build @@ -24,7 +24,7 @@ lib = library( #lib_inc_dir = include_directories('C:/include') executable( 'example', - 'examples/inlinekeyboard/inlinekeyboard.c', + 'examples/echobot/echobot.c', dependencies: deps, link_with: lib, include_directories: inc_dir, diff --git a/src/methods.c b/src/methods.c index 8cff69b..1087d39 100644 --- a/src/methods.c +++ b/src/methods.c @@ -212,7 +212,7 @@ tgbot_rc tgbot_get_me(tgbot *bot, tgbot_me *me) { return TGBOT_OK; } -tgbot_rc tgbot_send_message(tgbot *bot, int64_t chat_id, char *text, char *parse_mode, tgbot_inlinekeyboard *keyboard) { +tgbot_rc tgbot_send_message(tgbot *bot, int64_t chat_id, const char *text, const char *parse_mode, tgbot_inlinekeyboard *keyboard) { char url[1024]; json_object *rjson = json_object_new_object(); @@ -230,20 +230,17 @@ tgbot_rc tgbot_send_message(tgbot *bot, int64_t chat_id, char *text, char *parse struct memory_buffer *mb; tgbot_rc ret = tgbot_request(bot, url, &mb, rjson); json_object_put(rjson); - if (ret != TGBOT_OK) { - free(mb->data); - free(mb); - - return TGBOT_SENDMESSAGE_ERROR; - } - free(mb->data); free(mb); + if (ret != TGBOT_OK) { + return TGBOT_SENDMESSAGE_ERROR; + } + return TGBOT_OK; } -tgbot_rc tgbot_edit_message_text(tgbot *bot, int64_t chat_id, long message_id, char *text, tgbot_inlinekeyboard *keyboard) { +tgbot_rc tgbot_edit_message_text(tgbot *bot, int64_t chat_id, long message_id, const char *text, tgbot_inlinekeyboard *keyboard) { char url[1024]; json_object *rjson = json_object_new_object(); @@ -259,10 +256,38 @@ tgbot_rc tgbot_edit_message_text(tgbot *bot, int64_t chat_id, long message_id, c } struct memory_buffer *mb; - tgbot_request(bot, url, &mb, rjson); + tgbot_rc ret = tgbot_request(bot, url, &mb, rjson); json_object_put(rjson); free(mb->data); free(mb); + if (ret != TGBOT_OK) { + return TGBOT_EDITMESSAGETEXT_ERROR; + } + + return TGBOT_OK; +} + +tgbot_rc tgbot_send_dice(tgbot *bot, int64_t chat_id, const char *emoji) { + char url[1024]; + + json_object *rjson = json_object_new_object(); + json_object_object_add(rjson, "chat_id", json_object_new_int64(chat_id)); + if (emoji != NULL) { + json_object_object_add(rjson, "emoji", json_object_new_string(emoji)); + } + + snprintf(url, sizeof(url), "%ssendDice", bot->api); + + struct memory_buffer *mb; + tgbot_rc ret = tgbot_request(bot, url, &mb, rjson); + json_object_put(rjson); + free(mb->data); + free(mb); + + if (ret != TGBOT_OK) { + return TGBOT_SENDDICE_ERROR; + } + return TGBOT_OK; }