Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
136 changes: 136 additions & 0 deletions FIXES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
# CheckerBot - Исправления

## Исправленные проблемы

### ✅ PHP Warning'и устранены

- Исправлена безопасная обработка Telegram webhook данных в `config/variables.php`
- Добавлены проверки на null перед обращением к свойствам объектов
- Устранены ошибки "Attempt to read property on null"

### ✅ Пути к файлам исправлены

- Исправлены относительные пути в модулях checker (ss.php, schk.php, sm.php)
- Добавлена поддержка разных способов запуска
- Корректная работа как через webhook, так и через long polling

### ✅ Обработка команд исправлена

- Создан отдельный файл `modules/commands.php` для основных команд
- Добавлена обработка callback queries для inline кнопок
- Исправлена команда `/cmds` и `/start`

### ✅ Добавлены недостающие функции

- Добавлены функции `countUsers()` и `countChecks()` в `functions/db.php`
- Улучшена обработка ошибок в `run_bot.php`
- Добавлена безопасная загрузка модулей

### ✅ Исправлены дополнительные ошибки

- Исправлен неверный timezone 'IST' на корректный 'Asia/Kolkata' в `config/config.php`
- Устранена ошибка "Cannot use object of type stdClass as array" в `run_bot.php`
- Добавлена проверка типа данных для callback queries

### ✅ Добавлена работа только в приватных чатах

- Бот теперь отвечает только в личных сообщениях
- В группах и каналах бот предлагает написать ему в личку
- Callback queries в группах блокируются с уведомлением пользователю

## Запуск бота

### Через WSL

```bash
wsl -d Ubuntu-22.04 bash -c "cd '/mnt/c/Users/artem/Рабочий стол/figma/SDMN_CheckerBot' && sudo service mysql start && php run_bot.php"
```

### Для тестирования (15 секунд)

```bash
wsl -d Ubuntu-22.04 bash -c "cd '/mnt/c/Users/artem/Рабочий стол/figma/SDMN_CheckerBot' && sudo service mysql start && timeout 15 php run_bot.php"
```

## Тестирование команд

⚠️ **Важно**: Бот теперь работает только в личных сообщениях (приватных чатах).

После запуска бота можно тестировать следующие команды в Telegram в личке с ботом:

### Основные команды

- `/start` - Приветственное сообщение и главное меню
- `/cmds` - Список всех команд с inline кнопками
- `/admin` - Админ панель (только для админа)
- `/me` - Информация о пользователе
- `/stats` - Статистика бота

### Checker'ы

- `/ss 4111111111111111|12|2025|123` - Stripe Auth checker
- `/sm 4111111111111111|12|2025|123` - Stripe Merchant checker
- `/schk 4111111111111111|12|2025|123` - User Stripe checker

### Утилиты

- `/bin 411111` - BIN Lookup
- `/iban DE89370400440532013000` - IBAN проверка
- `/sk sk_test_...` - Проверка Stripe ключа

## Структура проекта

```text
SDMN_CheckerBot/
├── config/
│ ├── config.php # Основная конфигурация
│ └── variables.php # Безопасные переменные Telegram
├── functions/
│ ├── bot.php # Telegram Bot API функции
│ ├── db.php # Функции базы данных
│ └── functions.php # Вспомогательные функции
├── modules/
│ ├── commands.php # Основные команды (/start, /cmds)
│ ├── admin.php # Админ команды
│ ├── me.php # Пользовательские команды
│ └── checker/ # CC checker модули
│ ├── ss.php # Stripe Auth
│ ├── sm.php # Stripe Merchant
│ └── schk.php # User Stripe
└── run_bot.php # Long polling запуск бота
```

## Диагностика проблем с ответами

### 🔍 Выявленные проблемы

1. **Неверный токен бота** (HTTP 401)
- Токен `7981870709:AAGqBsEB...` недействителен
- Нужно получить новый токен от @BotFather

2. **Ошибки в функциях проверки**
- `isBanned()` и `isMuted()` обращались к несуществующим массивам
- Исправлено добавлением проверки `$userData && ...`

3. **Проблемы с обработкой continue**
- `continue 2;` прерывал обработку сообщений неправильно
- Исправлено на `continue;`

### ✅ Исправления для надежности

- Добавлено детальное логирование обработки команд
- Исправлена функция `addUser()` - теперь передается только `$userId`
- Добавлена обработка ошибок с отправкой уведомлений пользователю
- Создан тестовый режим для отладки без Telegram API

### 🛠️ Следующие шаги

1. **Получить новый токен**: Написать @BotFather и создать нового бота
2. **Обновить токен**: Заменить в `config/config.php`
3. **Протестировать**: Запустить `run_bot.php` с новым токеном

## Статус

⚠️ **Требуется новый токен бота**

Логика бота исправлена и протестирована. После получения действующего токена от @BotFather бот будет полностью готов к использованию.
3 changes: 3 additions & 0 deletions INSERT INTO dbo.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
INSERT INTO dbo.Users (UserId, RegisteredOn)
VALUES (1317255118, DATEDIFF(SECOND,'1970-01-01', SYSUTCDATETIME()));
GO
65 changes: 65 additions & 0 deletions TOKEN_SETUP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Получение нового токена Telegram бота

## Шаги для создания нового бота

1. **Найти @BotFather**
- Откройте Telegram
- Найдите бота @BotFather
- Отправьте `/start`

2. **Создать нового бота**

```
/newbot
```

- Введите название бота (например: "My Checker Bot")
- Введите username бота (должен заканчиваться на "bot", например: "mychecker123_bot")

3. **Получить токен**
- @BotFather отправит токен вида: `1234567890:ABCDEF...`
- Скопируйте весь токен

4. **Обновить конфигурацию**
- Откройте файл `config/config.php`
- Найдите строку: `$config['botToken'] = "..."`
- Замените старый токен на новый

## Пример обновления config.php

```php
// Старый (недействительный)
$config['botToken'] = "7981870709:AAGqBsEB2A-t5fGLjTN1UmzTwKxZlfvOCCY";

// Новый (замените на ваш токен)
$config['botToken'] = "1234567890:ABCDEF1234567890abcdef1234567890ABC";
```

## Тестирование

После обновления токена:

1. **Проверка токена**:

```bash
wsl -d Ubuntu-22.04 bash -c "cd '/mnt/c/Users/artem/Рабочий стол/figma/SDMN_CheckerBot' && php test_token.php"
```

2. **Запуск бота**:

```bash
wsl -d Ubuntu-22.04 bash -c "cd '/mnt/c/Users/artem/Рабочий стол/figma/SDMN_CheckerBot' && sudo service mysql start && php run_bot.php"
```

3. **Тестирование команд**:
- Найдите своего бота в Telegram по username
- Отправьте `/start`
- Проверьте работу команд `/cmds`, `/me`, `/stats`

## Безопасность

⚠️ **Важно**:

- Никогда не публикуйте токен в открытых репозиториях
- Храните токен в безопасном месте
- При компрометации токена создайте нового бота
37 changes: 33 additions & 4 deletions config/config.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
| It can be obtained from https://telegram.dog/BotFather
|
*/
$config['botToken'] = "";
$config['botToken'] = "7981870709:AAFDwVCeIr0Sg7gtjDyVtZBI42ZDaUnzhQA";

/*
|--------------------------------------------------------------------------
Expand All @@ -20,7 +20,7 @@
| ID can be obtained from https://telegram.dog/username_to_id_bot
|
*/
$config['adminID'] = "";
$config['adminID'] = "5913439523";

/*
|--------------------------------------------------------------------------
Expand All @@ -31,7 +31,7 @@
| ID can be obtained from https://telegram.dog/BotFather
|
*/
$config['logsID'] = "";
$config['logsID'] = "https://t.me/+4o9lzL5S2pA2MWM1";
Copy link

Copilot AI Oct 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The logsID should be a Telegram chat/channel ID (numeric), not a Telegram URL. The bot API expects a chat_id parameter, not a URL.

Suggested change
$config['logsID'] = "https://t.me/+4o9lzL5S2pA2MWM1";
$config['logsID'] = "-1001234567890"; // Replace with your actual channel/group numeric ID

Copilot uses AI. Check for mistakes.

/*
|--------------------------------------------------------------------------
Expand All @@ -40,7 +40,7 @@
|
| Current timezone for Logging Activities with time
| It can be obtained from http://1min.in/content/international/time-zones
| By Default it's in IST
| By Default it's in Asia/Kolkata (India Standard Time)
|
*/
$config['timeZone'] = "Asia/Kolkata";
Expand Down Expand Up @@ -80,3 +80,32 @@
*/
$config['sk_keys'] = array('sk_live_69GKI0saLB8uIEnxzv8VTvRX');
?>

{
"configurations": [
{
"type": "php",
"request": "launch",
"name": "Launch PHP Bot",
"program": "${workspaceFolder}/SDMN_CheckerBot/${input:phpFile}",
"runtimeArgs": [
"-dxdebug.start_with_request=yes"
],
"env": {
"XDEBUG_MODE": "debug,develop"
},
"port": 9003
}
],
"inputs": [
{
"type": "pickString",
"id": "phpFile",
"description": "Select the PHP file to debug",
"options": [
"main.php",
"run_bot.php",
"start_bot.php",
"test_callback.php",
"test_db.php",
"diagnose.php"
Comment on lines +84 to +111
Copy link

Copilot AI Oct 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JSON configuration is incorrectly placed in a PHP file. This JSON should be in a separate .vscode/launch.json file for VS Code debugging configuration.

Copilot uses AI. Check for mistakes.
69 changes: 36 additions & 33 deletions config/variables.php
Original file line number Diff line number Diff line change
@@ -1,38 +1,41 @@
<?php

$update = json_decode(file_get_contents("php://input"));

$chat_id = $update->message->chat->id;

$userId = $update->message->from->id;

$firstname = $update->message->from->first_name;

$lastname = $update->message->from->last_name;

$username = $update->message->from->username;

$chattype = $update->message->chat->type;

$message = $update->message->text;

$message_id = $update->message->message_id;

$replytomessageis = $update->message->reply_to_message->text;

$data = $update->callback_query->data;

$callbackfname = $update->callback_query->from->first_name;

$callbacklname = $update->callback_query->from->last_name;

$callbackusername = $update->callback_query->from->username;

$callbackchatid = $update->callback_query->message->chat->id;

$callbackuserid = $update->callback_query->message->reply_to_message->from->id;

$callbackmessageid = $update->callback_query->message->message_id;
// Безопасная обработка Telegram webhook данных
$input = file_get_contents("php://input");
$update = json_decode($input);

// Проверяем, что данные получены корректно
if (!$update) {
// Если запуск через run_bot.php, используем глобальные переменные
if (isset($GLOBALS['update'])) {
// Конвертируем массив в объект рекурсивно
$update = json_decode(json_encode($GLOBALS['update']));
} else {
$update = new stdClass();
}
}

// Безопасное извлечение данных сообщения
$chat_id = isset($update->message->chat->id) ? $update->message->chat->id : (isset($GLOBALS['chat_id']) ? $GLOBALS['chat_id'] : null);
$userId = isset($update->message->from->id) ? $update->message->from->id : (isset($GLOBALS['userId']) ? $GLOBALS['userId'] : null);
$firstname = isset($update->message->from->first_name) ? $update->message->from->first_name : (isset($GLOBALS['firstname']) ? $GLOBALS['firstname'] : '');
$lastname = isset($update->message->from->last_name) ? $update->message->from->last_name : (isset($GLOBALS['lastname']) ? $GLOBALS['lastname'] : '');
$username = isset($update->message->from->username) ? $update->message->from->username : (isset($GLOBALS['username']) ? $GLOBALS['username'] : '');
$chattype = isset($update->message->chat->type) ? $update->message->chat->type : (isset($GLOBALS['chattype']) ? $GLOBALS['chattype'] : '');
$message = isset($update->message->text) ? $update->message->text : (isset($GLOBALS['message']) ? $GLOBALS['message'] : '');
$message_id = isset($update->message->message_id) ? $update->message->message_id : (isset($GLOBALS['message_id']) ? $GLOBALS['message_id'] : null);

// Безопасное извлечение данных reply сообщения
$replytomessageis = isset($update->message->reply_to_message->text) ? $update->message->reply_to_message->text : '';

// Безопасное извлечение данных callback query
$data = isset($update->callback_query->data) ? $update->callback_query->data : '';
$callbackfname = isset($update->callback_query->from->first_name) ? $update->callback_query->from->first_name : '';
$callbacklname = isset($update->callback_query->from->last_name) ? $update->callback_query->from->last_name : '';
$callbackusername = isset($update->callback_query->from->username) ? $update->callback_query->from->username : '';
$callbackchatid = isset($update->callback_query->message->chat->id) ? $update->callback_query->message->chat->id : null;
$callbackuserid = isset($update->callback_query->message->reply_to_message->from->id) ? $update->callback_query->message->reply_to_message->from->id : null;
$callbackmessageid = isset($update->callback_query->message->message_id) ? $update->callback_query->message->message_id : null;


$live_array = array(
Expand Down
Loading