Guest User

Untitled

a guest
Jan 15th, 2025
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.84 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <curl/curl.h>  // Для HTTP-запросов
  5. #include <cjson/cJSON.h>  // Для работы с JSON
  6. #include <unistd.h>  // Для sleep()
  7. #include <pcre.h>  // Для регулярных выражений
  8.  
  9. // Константы для работы с Telegram API
  10. #define TOKEN "6554173513:AAE8bvZ7lLVUBcjr1l5SoyLTjuunhPG4R_M"  // Убедитесь, что кавычки не являются частью токена
  11. #define URL "https://api.telegram.org/bot" TOKEN "/"
  12.  
  13. // Структура для хранения HTTP-ответа
  14. struct MemoryStruct {
  15.     char *memory;
  16.     size_t size;
  17. };
  18.  
  19. // Функция для обработки HTTP-ответа
  20. static size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) {
  21.     size_t realsize = size * nmemb;
  22.     struct MemoryStruct *mem = (struct MemoryStruct *)userp;
  23.  
  24.     mem->memory = realloc(mem->memory, mem->size + realsize + 1);
  25.     if (mem->memory == NULL) {
  26.         printf("Ошибка: не удалось выделить память\n");
  27.         return 0;
  28.     }
  29.  
  30.     memcpy(&(mem->memory[mem->size]), contents, realsize);
  31.     mem->size += realsize;
  32.     mem->memory[mem->size] = 0;
  33.  
  34.     return realsize;
  35. }
  36.  
  37. // Функция для получения обновлений от Telegram API
  38. char *get_updates(int offset) {
  39.     CURL *curl;
  40.     CURLcode res;
  41.     char url[256];
  42.     struct MemoryStruct chunk;
  43.  
  44.     chunk.memory = malloc(1);
  45.     chunk.size = 0;
  46.  
  47.     curl = curl_easy_init();
  48.     if (curl) {
  49.         snprintf(url, sizeof(url), "%sgetUpdates?offset=%d", URL, offset);
  50.         curl_easy_setopt(curl, CURLOPT_URL, url);
  51.         curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
  52.         curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
  53.         res = curl_easy_perform(curl);
  54.  
  55.         if (res != CURLE_OK) {
  56.             fprintf(stderr, "Ошибка при выполнении запроса: %s\n", curl_easy_strerror(res));
  57.         }
  58.  
  59.         curl_easy_cleanup(curl);
  60.     }
  61.  
  62.     return chunk.memory;
  63. }
  64.  
  65. // Функция для отправки сообщения в Telegram
  66. void send_message(long long chat_id, const char *text) {
  67.     CURL *curl;
  68.     CURLcode res;
  69.     char url[512];
  70.     char *escaped_text = curl_easy_escape(NULL, text, 0);  // Экранируем текст
  71.  
  72.     if (escaped_text == NULL) {
  73.         fprintf(stderr, "Ошибка при экранировании текста\n");
  74.         return;
  75.     }
  76.  
  77.     curl = curl_easy_init();
  78.     if (curl) {
  79.         snprintf(url, sizeof(url), "%ssendMessage?chat_id=%lld&text=%s", URL, chat_id, escaped_text);
  80.         printf("URL для отправки сообщения: %s\n", url);  // Отладочный вывод
  81.         curl_easy_setopt(curl, CURLOPT_URL, url);
  82.         res = curl_easy_perform(curl);
  83.  
  84.         if (res != CURLE_OK) {
  85.             fprintf(stderr, "Ошибка при отправке сообщения: %s\n", curl_easy_strerror(res));
  86.         } else {
  87.             printf("Сообщение отправлено: %s\n", text);
  88.         }
  89.  
  90.         curl_easy_cleanup(curl);
  91.     }
  92.  
  93.     curl_free(escaped_text);  // Освобождаем память, выделенную для экранированного текста
  94. }
  95.  
  96. // Основной цикл работы бота
  97. void run() {
  98.     int update_id = 0;
  99.     while (1) {
  100.         sleep(2);  // Пауза между запросами
  101.  
  102.         char *response = get_updates(update_id);
  103.         if (response == NULL) {
  104.             continue;
  105.         }
  106.  
  107.         cJSON *root = cJSON_Parse(response);
  108.         if (root == NULL) {
  109.             printf("Ошибка при разборе JSON\n");
  110.             free(response);
  111.             continue;
  112.         }
  113.  
  114.         cJSON *result = cJSON_GetObjectItem(root, "result");
  115.         if (result == NULL) {
  116.             printf("Ошибка: поле 'result' отсутствует в JSON\n");
  117.             cJSON_Delete(root);
  118.             free(response);
  119.             continue;
  120.         }
  121.  
  122.         int num_updates = cJSON_GetArraySize(result);
  123.         if (num_updates > 0) {
  124.             cJSON *update = cJSON_GetArrayItem(result, num_updates - 1);
  125.             cJSON *update_id_json = cJSON_GetObjectItem(update, "update_id");
  126.             if (update_id_json != NULL) {
  127.                 update_id = update_id_json->valueint + 1;
  128.             }
  129.  
  130.             cJSON *message = cJSON_GetObjectItem(update, "message");
  131.             if (message != NULL) {
  132.                 cJSON *chat = cJSON_GetObjectItem(message, "chat");
  133.                 cJSON *text = cJSON_GetObjectItem(message, "text");
  134.  
  135.                 if (chat != NULL && text != NULL) {
  136.                     cJSON *chat_id_json = cJSON_GetObjectItem(chat, "id");
  137.                     if (chat_id_json != NULL && cJSON_IsNumber(chat_id_json)) {
  138.                         printf("chat_iавыфавыфаd: %u\n", chat_id_json->valueint);
  139.                         long long chat_id = chat_id_json->valuedouble;
  140.                         const char *message_text = text->valuestring;
  141.                         printf("chat_idfdsf33333: %lld\n", chat_id);
  142.                         // Отладочный вывод
  143.                         printf("chat_id: %lld\n", chat_id);
  144.                         printf("Получено сообщение: %s\n", message_text);
  145.  
  146.                         // Проверка chat_id
  147.                         if (chat_id == -1001380105834) {
  148.                             printf("Используется правильный chat_id: %lld\n", chat_id);
  149.                         } else {
  150.                             printf("Ошибка: неправильный chat_id: %lld\n", chat_id);
  151.                         }
  152.  
  153.                         // Обработка команды "илвл"
  154.                         if (strcmp(message_text, "илвл") == 0) {
  155.                             send_message(chat_id, "Ваш уровень: 60");
  156.                         }
  157.  
  158.                         // Обработка команды "ВОЖДЬ, покажи сиськи"
  159.                         if (strcmp(message_text, "ВОЖДЬ, покажи сиськи") == 0) {
  160.                             send_message(-1001380105834, "( . Y . )");
  161.                         }
  162.                     } else {
  163.                         printf("Ошибка: chat_id не найден или не является числом\n");
  164.                     }
  165.                 }
  166.             }
  167.         }
  168.  
  169.         cJSON_Delete(root);
  170.         free(response);
  171.     }
  172. }
  173.  
  174. int main() {
  175.     // Инициализация libcurl
  176.     curl_global_init(CURL_GLOBAL_DEFAULT);
  177.  
  178.     // Запуск основного цикла
  179.     run();
  180.  
  181.     // Очистка libcurl
  182.     curl_global_cleanup();
  183.  
  184.     return 0;
  185. }
Advertisement
Add Comment
Please, Sign In to add comment