БЫЛО: CSS стили выводились как текст на странице
СТАЛО: Стили правильно в <head> через base.html
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
БЫЛО: Каждая из 14 страниц имела своё собственное вшитое меню
с разным набором кнопок (от 4 до 10 пунктов)
СТАЛО: Все 14 страниц наследуют base.html с единым меню из 14 пунктов
в 4 разделах: Пользователи / Коммуникации / Контент / Система
Убрано 1949 строк дублирующегося кода, добавлено 1323 строки чистого контента.
Экономия: -626 строк (32% сокращение).
Переписанные страницы:
- dashboard.html, users.html, verification.html
- phones.html, polls.html, events.html
- schedules.html, ads.html, scheduled_posts.html, export.html
Результат: На ЛЮБОЙ странице пользователь видит ВСЕ 14 пунктов меню.
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Используется aiohttp вместо bot.send_message
- Нет ошибки Timeout context manager
- Коммит в Gitea
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Добавлен API endpoint /api/digest/generate
- Исправлена JS функция generateNow() — теперь реально вызывает API
- Превью отправляется админу в Telegram после генерации
- Время авто-генерации изменено на 19:00 Ульяновск (15:00 UTC)
- Проверка на дубликаты за ту же неделю
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Добавлены функции to_local() и fmt_local()
- Время рассылок теперь 17:55 вместо 13:55
- Время прочтений в локальном поясе
- Время запланированных постов исправлено
- Время дайджестов исправлено
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Удалена отправка объявления в ADMIN_CHAT_ID (общий чат)
- Умная рассылка идёт ТОЛЬКО выбранным получателям
- Статистика отправляется только админу в личку
- broadcast_type='smart' вместо 'manual'
- chat_id и message_id теперь None в БД
Инцидент: бот спамил в общий чат со 100+ жителями
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Глобальный синглтон бота (bot_instance.py) — работает из любого процесса
- Прямые HTTP запросы в send_smart_broadcast — нет ошибки Timeout context
- Исправлен joinedload в InitiativeGroupService
- Удалён дубликат route /broadcast
- Удалена страница /broadcasts — всё в одном месте с табами
- Удалён /api/broadcast/send — дублировал /api/broadcast/create
- Добавлен dry_run режим для тестирования без отправки
- Двойное подтверждение перед реальной рассылкой
- Добавлен файл КРИТИЧЕСКИЕ-ПРАВИЛА.md
Инцидент: тестовая рассылка ушла реальным пользователям
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Timezone: веб-панель показывает локальное время (UTC+4, Ульяновск)
- Timezone: конвертация UTC → локальное при отображении
- Duplicate fix: промежуточный статус 'sending' в БД
- Duplicate fix: только один процесс берет пост
- UI: подсказки 'По твоему времени (UTC+4)'
- Тест: пост 5 опубликован ровно 1 раз ✅
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Timezone: конвертация в UTC вместо простого удаления tzinfo
- General topic: не добавлять message_thread_id для topic_id=1
- Telegram API требует БЕЗ message_thread_id для общего чата
- Тест: пост 3 успешно опубликован
- Исправлены 2 критические ошибки планировщика
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Очищен __pycache__ (Python кэш)
- Бот перезапущен с новым кодом
- Тест API: пост создан успешно (ID=2)
- Веб-сервер работает без ошибок
- Пользователь уведомлён
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Исправлена ошибка 'name Path is not defined'
- Добавлена строка: from pathlib import Path
- Теперь запланированные посты работают корректно
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Исправлено 'плавающее' меню (дублирование кнопок при навигации)
- Создан base.html - единый базовый шаблон для всех страниц
- Добавлена кнопка '📅 Запланированные посты' во все 11 страниц
- Sticky sidebar с улучшенным дизайном
- Все страницы теперь имеют одинаковое меню (11 кнопок)
- Улучшенная подсветка активного пункта (border-left)
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Новая страница /scheduled_posts в веб-панели
- Создание постов с фото/текстом в любую тему форума
- Планирование даты и времени публикации
- Автоматическая отправка по расписанию (каждую минуту)
- Поддержка всех 10 тем форума
- Уведомления админа о публикации/ошибках
- Миграция БД: таблица scheduled_posts
- Тесты: test_scheduled_posts.py
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
🐛 ПРОБЛЕМА:
• Жильцы писали номер квартиры — он НЕ СОХРАНЯЛСЯ
• 11 человек верифицированы БЕЗ квартиры!
• Авто-верификация верифицировала без проверки квартиры
🔧 ИСПРАВЛЕНИЯ:
1️⃣ web/app.py — auto_verify:
• Теперь верифицирует ТОЛЬКО с квартирой
• Проверка: apartment != None AND apartment != ''
2️⃣ handlers/verification.py — process_verification:
• Если верифицирован БЕЗ квартиры → СОХРАНЯЕТ!
• Если верифицирован С квартирой → сообщение
• Для неверифицированных → как раньше
✅ РЕЗУЛЬТАТ:
• Жильцы смогут добавить квартиру постфактум
• Авто-верификация не сломает данные
• 11 человек смогут восстановить квартиры
📝 ФАЙЛЫ:
• web/app.py: auto_verify fix
• handlers/verification.py: apartment save fix
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
🧪 ТЕСТИРОВАНИЕ:
• Проверены все кнопки меню
• Протестировано для всех уровней доступа
• Найдены и исправлены проблемы
🐛 ИСПРАВЛЕНИЯ:
• IG меню — теперь доступно админам даже если не в ИГ
• Мастера — добавлена заглушка если список пуст
• Суперадмин добавлен в ИГ автоматически
✅ РЕЗУЛЬТАТЫ ТЕСТОВ:
• Всего пользователей: 19
• Верифицированы: 12
• Не верифицированы: 7
• ИГ: 9
• Админы: 1
• Мастера в базе: 1
• Экстренные: 5
📝 ФАЙЛЫ:
• handlers/initiative_group.py: доступ админам
• handlers/users.py: заглушка для мастеров
• test_bot_comprehensive.py: новый тест
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
🐛 ИСПРАВЛЕНИЯ:
• ChatMemberUpdatedFilter не работает в aiogram 3.x как ожидалось
• Временное решение: закомментировано приветствие новых участников
• Импорт ChatMemberUpdatedFilter удалён
✅ БОТ РАБОТАЕТ:
• Active: active (running)
• Обработка сообщений: OK
• Update id обрабатываются
📝 ФАЙЛЫ:
• handlers/users.py: закомментировано welcome_new_member
🎯 В ПЛАНЕ:
• Разобраться с ChatMemberUpdatedFilter правильно
• Вернуть приветствие новых участников
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
📋 ИНСТРУКЦИИ:
• ИНСТРУКЦИЯ_ИГ_ВЕРИФИКАЦИЯ.md — полная версия
• ИГ_БЫСТРАЯ_ИНСТРУКЦИЯ.md — короткая версия
✅ СОДЕРЖАНИЕ:
• Как найти бота (@lkmthreeseven_bot)
• Как пройти верификацию
• Возможности после верификации
• Особенности для ИГ
• Ответы на вопросы
🎯 ДЛЯ ОТПРАВКИ:
Скопируй текст из файла и отправь в чат ИГ!
Время на верификацию: 2-3 минуты!
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
🎉 ПРИВЕТСТВИЕ:
• Бот встречает новых участников
• Отправляет привет в личку
• Рассказывает про ЖК Ленком 37
• Инструкция по верификации
• Полезные команды
📁 ФАЙЛЫ:
• handlers/users.py: welcome_new_member
• router.chat_member: LEFT → MEMBER
🚀 АКТИВАЦИЯ:
• QR код на объявлениях
• Новые жильцы в чате
• Автоматическое приветствие
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ НОВЫЕ ПОЛЬЗОВАТЕЛИ:
• /start - добавляет в базу и приветствует
• Может сразу отправить номер квартиры
• Стимул к верификации
✅ БЛАГОДАРНОСТИ:
• Показывает ВСЕХ верифицированных (не топ-100)
• Пагинация: 20 на странице
• Совет: /thank @username для поиска
• Работает с 500+ пользователями
📁 ФАЙЛЫ:
• handlers/users.py: /start добавляет, thanks pagination
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
🔒 БЕЗОПАСНОСТЬ:
• Бот работает ТОЛЬКО с пользователями из базы
• /start - игнор если нет в базе
• /help - игнор если нет в базе
• Верифицированные - полный доступ
• Неверифицированные - стимул пройти верификацию
📁 ФАЙЛЫ:
• handlers/users.py: проверка базы
• collect_all_members.py: скрипт сбора
🎯 СТИМУЛ:
• Хочешь бота? → Пройди верификацию!
• Админы, ИГ, верифицированные - работают
• Остальные - игнор
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ Реализовано:
- Рассылка текста (работает)
- Рассылка картинки с подписью (НОВОЕ!)
- Отправка в общий чат + в личку каждому
- Отчёт админу об успешной рассылке
🎯 Как использовать:
1. /admin → 📤 Рассылка
2. Отправить текст ИЛИ картинку с подписью
3. Бот разошлёт всем верифицированным:
- В общий чат
- В личку каждому
📝 Для срочного объявления:
1. Напиши боту в личку
2. /admin
3. 📤 Рассылка
4. Отправь картинку + текст
5. Готово!
💡 Важно:
- Рассылка только верифицированным
- Картинка сжимается Telegram
- Подпись до 1024 символов
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ Реализовано:
- Автоверификация по 50+ сообщениям
- Кнопка админу '⚡ Автоверификация'
- Веб-админка → Пользователи → Статистика + Кнопка
- Плавный ввод верификации
🎯 Как работает:
1. Бот считает сообщения пользователей
2. Кто набрал 50+ сообщений — считается 'своим'
3. Админ жмёт кнопку → все активные верифицируются
4. Веб-админка показывает статистику:
- Всего пользователей
- Верифицировано
- Не верифицировано
- Активных для верификации
📝 Преимущества:
- Не нужно проверять 200 человек вручную
- Активные жильцы сразу получают доступ
- Админы проверяют только подозрительных
- Мотивация: телефоны только после верификации
🧪 Тест:
/admin → ⚡ Автоверификация
или
Веб-админка → Пользователи → Верифицировать всех
💡 Плавный ввод:
- Бот предлагает верификацию, но не требует
- Телефоны и функции только после верификации
- Жильцы сами мотивированы пройти верификацию
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ Все команды теперь работают ТОЛЬКО В ЛИЧКЕ:
- /start, /help - только в личке
- Все кнопки меню - только в личке
- Админ-команды - только в личке (уже было)
📝 Что будет если написать в общем чате:
'💡 Бот работает только в личных сообщениях!
Нажмите на имя бота сверху и напишите /start в личке'
🎯 Преимущества:
- Нет спама в общем чате
- Все диалоги конфиденциальны
- Жильцы общаются с ботом в личке
- Админы управляют через личку
💡 Исключения:
- Мониторинг сообщений (анти-мат, анти-спам)
- Детект шпионов
- Рейтинги активности
- Эти функции работают в чате но не спам!
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ Теперь кнопка показывает реальный список:
- Пользователи с отозванной верификацией
- Показывает ID, квартиру, когда отозвано
- Сколько дней назад
📝 Было:
- Показывала подсказку по команде /unverify
📝 Стало:
- Показывает реальный список пользователей
- Сразу видно у кого отозвана верификация
- Удобно для админа!
💡 Все кнопки теперь работают без подсказок!
- Для подсказок есть кнопка '❓ Помощь'
- Остальные кнопки показывают результат сразу!
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ Теперь кнопка показывает реальный список:
- Пользователи с verified=False
- Сортировка по дате вступления
- Показывает ID, квартиру, дату
- Подсказка что делать
📝 Было:
- Показывала подсказку по команде /unverified_list
📝 Стало:
- Показывает реальный список непроверенных
- Сразу видно кто требует верификации
- Удобно для админа!
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ Проведено полное тестирование функционала:
- Меню жильца (11 кнопок)
- Меню админа (17 кнопок)
- База данных (проверка записей)
- Уникальность callback_data
- Сообщения в личку (без спама)
📝 Созданные файлы:
- tests/run_tests.py — автотесты
- tests/TEST_REPORT.md — отчёт о тестировании
- tests/COMPREHENSIVE_TEST_PLAN.md — план тестов
- send_test_report.py — отправка отчёта
📊 Результаты:
- Все кнопки работают
- Участковский работает через БД (2 записи)
- Сообщения только в личку
- Веб-админка работает со всеми разделами
🎯 ВСЁ РАБОТАЕТ!
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
✅ WEB_ADMIN_LOGIN/PASSWORD в .env.example
✅ Конфиг web_admin в config.py
✅ API /api/command - выполнение команд
✅ API /api/commands - список команд
✅ Обновлён web_server.py с конфигом
📦 Бекап: backups/versions/v2.1.2_web_auth_2026-02-28/
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>