Files
new_lottery_bot/COMMAND_FIX.md
2025-11-15 20:03:49 +09:00

127 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Исправления системы обнаружения счетов
## Проблема
Бот не реагировал на команды `/start` и `/admin`, потому что обработчик `detect_account_input` перехватывал ВСЕ текстовые сообщения, включая команды.
## Решение
### 1. Добавлена проверка команд в `account_handlers.py`
```python
@account_router.message(F.text, StateFilter(None))
async def detect_account_input(message: Message, state: FSMContext):
"""
Обнаружение ввода счетов в сообщении
Активируется только для администраторов
"""
if not is_admin(message.from_user.id):
return
# Игнорируем команды (начинаются с /)
if message.text.startswith('/'):
return # ✅ НОВАЯ ПРОВЕРКА
# Парсим счета из сообщения
accounts = parse_accounts_from_message(message.text)
if not accounts:
return # Счета не обнаружены, пропускаем
```
### 2. Добавлен параметр `limit` в `LotteryService.get_all_lotteries()`
```python
@staticmethod
async def get_all_lotteries(session: AsyncSession, limit: Optional[int] = None) -> List[Lottery]:
"""Получить список всех розыгрышей"""
query = select(Lottery).order_by(Lottery.created_at.desc())
if limit:
query = query.limit(limit) # ✅ ПОДДЕРЖКА ЛИМИТА
result = await session.execute(query)
return result.scalars().all()
```
## Логика обработки сообщений
Теперь обработчик работает так:
```
Входящее сообщение
Проверка: админ?
НЕТ → игнорировать
↓ ДА
Проверка: команда (начинается с /)?
↓ ДА → пропустить дальше (к обработчикам команд)
НЕТ
Парсинг счетов из текста
Счета найдены?
НЕТ → игнорировать
↓ ДА
Показать inline-меню с действиями
```
## Что теперь работает
**Команды обрабатываются корректно:**
- `/start` → приветствие
- `/admin` → админ-панель
- `/help` → справка
**Обнаружение счетов работает только для текста без `/`:**
- `11-22-33-44-55-66-77-88` → обнаружен счет
- `Вот счета: 11-22-33-44-55-66-77-88` → обнаружен счет
- `/start` → команда, не счет
**Проверка прав:**
- Только администраторы видят меню действий со счетами
- Обычные пользователи получают обычные ответы
## Порядок обработки обновлений
```python
# В main.py
dp.include_router(account_router) # 1. Приоритет - счета (только если не команда)
dp.include_router(router) # 2. Команды пользователя (/start, /join, etc)
dp.include_router(admin_router) # 3. Админ-команды (/admin, etc)
```
Это гарантирует, что:
1. Счета обнаруживаются первыми (но пропускают команды)
2. Команды обрабатываются вторыми
3. Админ-команды обрабатываются последними
## Тестирование
Попробуйте отправить боту:
### Команды (должны работать):
```
/start
/admin
/help
```
### Счета (должны обнаружиться):
```
11-22-33-44-55-66-77-88
```
### Текст со счетами:
```
Вот мои счета для розыгрыша:
11-22-33-44-55-66-77-88
22-33-44-55-66-77-88-99
```
### Обычный текст (должен игнорироваться):
```
Привет, как дела?
Когда будет розыгрыш?
```
Все должно работать корректно!