Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <curl/curl.h> // Для HTTP-запросов
- #include <cjson/cJSON.h> // Для работы с JSON
- #include <unistd.h> // Для sleep()
- #include <pcre.h> // Для регулярных выражений
- // Константы для работы с Telegram API
- #define TOKEN "6554173513:AAE8bvZ7lLVUBcjr1l5SoyLTjuunhPG4R_M" // Убедитесь, что кавычки не являются частью токена
- #define URL "https://api.telegram.org/bot" TOKEN "/"
- // Структура для хранения HTTP-ответа
- struct MemoryStruct {
- char *memory;
- size_t size;
- };
- // Функция для обработки HTTP-ответа
- static size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) {
- size_t realsize = size * nmemb;
- struct MemoryStruct *mem = (struct MemoryStruct *)userp;
- mem->memory = realloc(mem->memory, mem->size + realsize + 1);
- if (mem->memory == NULL) {
- printf("Ошибка: не удалось выделить память\n");
- return 0;
- }
- memcpy(&(mem->memory[mem->size]), contents, realsize);
- mem->size += realsize;
- mem->memory[mem->size] = 0;
- return realsize;
- }
- // Функция для получения обновлений от Telegram API
- char *get_updates(int offset) {
- CURL *curl;
- CURLcode res;
- char url[256];
- struct MemoryStruct chunk;
- chunk.memory = malloc(1);
- chunk.size = 0;
- curl = curl_easy_init();
- if (curl) {
- snprintf(url, sizeof(url), "%sgetUpdates?offset=%d", URL, offset);
- curl_easy_setopt(curl, CURLOPT_URL, url);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
- res = curl_easy_perform(curl);
- if (res != CURLE_OK) {
- fprintf(stderr, "Ошибка при выполнении запроса: %s\n", curl_easy_strerror(res));
- }
- curl_easy_cleanup(curl);
- }
- return chunk.memory;
- }
- // Функция для отправки сообщения в Telegram
- void send_message(long long chat_id, const char *text) {
- CURL *curl;
- CURLcode res;
- char url[512];
- char *escaped_text = curl_easy_escape(NULL, text, 0); // Экранируем текст
- if (escaped_text == NULL) {
- fprintf(stderr, "Ошибка при экранировании текста\n");
- return;
- }
- curl = curl_easy_init();
- if (curl) {
- snprintf(url, sizeof(url), "%ssendMessage?chat_id=%lld&text=%s", URL, chat_id, escaped_text);
- printf("URL для отправки сообщения: %s\n", url); // Отладочный вывод
- curl_easy_setopt(curl, CURLOPT_URL, url);
- res = curl_easy_perform(curl);
- if (res != CURLE_OK) {
- fprintf(stderr, "Ошибка при отправке сообщения: %s\n", curl_easy_strerror(res));
- } else {
- printf("Сообщение отправлено: %s\n", text);
- }
- curl_easy_cleanup(curl);
- }
- curl_free(escaped_text); // Освобождаем память, выделенную для экранированного текста
- }
- // Основной цикл работы бота
- void run() {
- int update_id = 0;
- while (1) {
- sleep(2); // Пауза между запросами
- char *response = get_updates(update_id);
- if (response == NULL) {
- continue;
- }
- cJSON *root = cJSON_Parse(response);
- if (root == NULL) {
- printf("Ошибка при разборе JSON\n");
- free(response);
- continue;
- }
- cJSON *result = cJSON_GetObjectItem(root, "result");
- if (result == NULL) {
- printf("Ошибка: поле 'result' отсутствует в JSON\n");
- cJSON_Delete(root);
- free(response);
- continue;
- }
- int num_updates = cJSON_GetArraySize(result);
- if (num_updates > 0) {
- cJSON *update = cJSON_GetArrayItem(result, num_updates - 1);
- cJSON *update_id_json = cJSON_GetObjectItem(update, "update_id");
- if (update_id_json != NULL) {
- update_id = update_id_json->valueint + 1;
- }
- cJSON *message = cJSON_GetObjectItem(update, "message");
- if (message != NULL) {
- cJSON *chat = cJSON_GetObjectItem(message, "chat");
- cJSON *text = cJSON_GetObjectItem(message, "text");
- if (chat != NULL && text != NULL) {
- cJSON *chat_id_json = cJSON_GetObjectItem(chat, "id");
- if (chat_id_json != NULL && cJSON_IsNumber(chat_id_json)) {
- printf("chat_iавыфавыфаd: %u\n", chat_id_json->valueint);
- long long chat_id = chat_id_json->valuedouble;
- const char *message_text = text->valuestring;
- printf("chat_idfdsf33333: %lld\n", chat_id);
- // Отладочный вывод
- printf("chat_id: %lld\n", chat_id);
- printf("Получено сообщение: %s\n", message_text);
- // Проверка chat_id
- if (chat_id == -1001380105834) {
- printf("Используется правильный chat_id: %lld\n", chat_id);
- } else {
- printf("Ошибка: неправильный chat_id: %lld\n", chat_id);
- }
- // Обработка команды "илвл"
- if (strcmp(message_text, "илвл") == 0) {
- send_message(chat_id, "Ваш уровень: 60");
- }
- // Обработка команды "ВОЖДЬ, покажи сиськи"
- if (strcmp(message_text, "ВОЖДЬ, покажи сиськи") == 0) {
- send_message(-1001380105834, "( . Y . )");
- }
- } else {
- printf("Ошибка: chat_id не найден или не является числом\n");
- }
- }
- }
- }
- cJSON_Delete(root);
- free(response);
- }
- }
- int main() {
- // Инициализация libcurl
- curl_global_init(CURL_GLOBAL_DEFAULT);
- // Запуск основного цикла
- run();
- // Очистка libcurl
- curl_global_cleanup();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment