Files
TG_autoposter/examples.py
2025-12-18 05:55:32 +09:00

173 lines
6.7 KiB
Python
Raw Permalink 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.

"""
Примеры использования репозиториев и основной функциональности
Запустите этот скрипт для быстрого тестирования базовой функциональности
"""
import asyncio
from app.database import AsyncSessionLocal, init_db
from app.database.repository import (
GroupRepository, MessageRepository, MessageGroupRepository
)
async def example_basic_workflow():
"""Базовый workflow: создание сообщения и группы"""
print("=" * 60)
print("БАЗОВЫЙ WORKFLOW")
print("=" * 60)
# Инициализируем БД
await init_db()
print("✅ База данных инициализирована\n")
async with AsyncSessionLocal() as session:
# 1. Создаем группу
group_repo = GroupRepository(session)
group = await group_repo.add_group(
chat_id="-1001234567890",
title="Тестовая группа",
slow_mode_delay=5
)
print(f"✅ Группа создана: {group}")
print(f" ID: {group.id}, Chat ID: {group.chat_id}, Slow Mode: {group.slow_mode_delay}s\n")
# 2. Создаем сообщение
msg_repo = MessageRepository(session)
message = await msg_repo.add_message(
text="<b>Привет!</b> Это тестовое сообщение",
title="Приветствие",
parse_mode="HTML"
)
print(f"✅ Сообщение создано: {message}")
print(f" ID: {message.id}, Title: {message.title}\n")
# 3. Связываем сообщение с группой
mg_repo = MessageGroupRepository(session)
link = await mg_repo.add_message_to_group(message.id, group.id)
print(f"✅ Связь создана: {link}")
print(f" Message ID: {link.message_id}, Group ID: {link.group_id}\n")
# 4. Получаем сообщения для отправки
to_send = await mg_repo.get_message_groups_to_send(message.id)
print(f"✅ Сообщений к отправке: {len(to_send)}")
for msg_group in to_send:
print(f" - Группа: {msg_group.group.title}, Статус: {'✅ Отправлено' if msg_group.is_sent else 'Не отправлено'}")
print()
async def example_multiple_messages():
"""Пример с несколькими сообщениями в одну группу"""
print("=" * 60)
print("НЕСКОЛЬКО СООБЩЕНИЙ В ОДНУ ГРУППУ")
print("=" * 60)
async with AsyncSessionLocal() as session:
# Получаем существующую группу
group_repo = GroupRepository(session)
groups = await group_repo.get_all_active_groups()
if groups:
group = groups[0]
print(f"Используем группу: {group.title}\n")
# Создаем несколько сообщений
msg_repo = MessageRepository(session)
mg_repo = MessageGroupRepository(session)
messages_text = [
("Сообщение 1", "Это первое сообщение 📨"),
("Сообщение 2", "Это второе сообщение 📧"),
("Сообщение 3", "Это третье сообщение 📬"),
]
for title, text in messages_text:
msg = await msg_repo.add_message(text, title)
await mg_repo.add_message_to_group(msg.id, group.id)
print(f"✅ Добавлено: {title}")
# Получаем все сообщения для группы
print(f"\n📋 Все сообщения для группы '{group.title}':")
group_messages = await mg_repo.get_messages_for_group(group.id)
for mg in group_messages:
status = "✅ Отправлено" if mg.is_sent else "Не отправлено"
print(f" {status} - {mg.message.title}")
else:
print("❌ Нет групп в базе данных")
async def example_slow_mode_check():
"""Пример проверки slow mode"""
print("\n" + "=" * 60)
print("ПРОВЕРКА SLOW MODE")
print("=" * 60)
async with AsyncSessionLocal() as session:
group_repo = GroupRepository(session)
groups = await group_repo.get_all_active_groups()
if groups:
group = groups[0]
print(f"\nГруппа: {group.title}")
print(f"Slow Mode: {group.slow_mode_delay} секунд")
print(f"Последнее сообщение: {group.last_message_time}")
# Проверяем возможность отправки
from app.utils import can_send_message
can_send, wait_time = await can_send_message(group)
if can_send:
print("✅ Можно отправлять сейчас")
else:
print(f"⏳ Нужно ждать {wait_time} секунд")
async def example_get_all_data():
"""Пример получения всех данных"""
print("\n" + "=" * 60)
print("ВСЕ ДАННЫЕ В БД")
print("=" * 60)
async with AsyncSessionLocal() as session:
# Все группы
group_repo = GroupRepository(session)
groups = await group_repo.get_all_active_groups()
print(f"\n👥 Всего групп: {len(groups)}")
for group in groups:
print(f"{group.title} (ID: {group.chat_id}, Slow: {group.slow_mode_delay}s)")
# Все сообщения
msg_repo = MessageRepository(session)
messages = await msg_repo.get_all_messages()
print(f"\n📨 Всего сообщений: {len(messages)}")
for msg in messages:
print(f"{msg.title} (ID: {msg.id})")
async def main():
"""Запуск всех примеров"""
try:
await example_basic_workflow()
await example_multiple_messages()
await example_slow_mode_check()
await example_get_all_data()
print("\n" + "=" * 60)
print("ВСЕ ПРИМЕРЫ ВЫПОЛНЕНЫ УСПЕШНО")
print("=" * 60)
except Exception as e:
print(f"\n❌ ОШИБКА: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
asyncio.run(main())