1. Подтверждение запуска розыгрыша: - Показ диалога с информацией об участниках и призах - Кнопки 'Да, провести' и 'Отмена' - Индикатор загрузки при проведении 2. Удаление сообщений администратором: - Команда /delete для удаления сообщений бота (ответ на сообщение) - Callback кнопка delete_message - Новый роутер message_admin_router 3. Определение владельцев счетов: - Извлечение номера клубной карты (последние 4 цифры) - Поиск владельца по club_card_number - Отображение владельца в списке обнаруженных счетов - Метод UserService.get_user_by_club_card() 4. Тестирование производительности: - Скрипт generate_test_accounts.py - Генерация файлов с 100, 500, 1000, 2000, 5000 счетов - Готовые тестовые файлы для проверки 5. Улучшения парсинга: - Обработка текста из кабинета с мусорными данными - Построчный парсинг с разбором по пробелам - Поддержка формата 'Viposnova 16-11-2025 22:19:36 17-24-66-42-38-31-53 0.00 2918' 6. Исправления багов: - AttributeError при отображении победителей без user_id - Безопасная обработка winner.user == None
77 lines
2.6 KiB
Python
Executable File
77 lines
2.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
||
"""
|
||
Генератор тестовых счетов для проверки производительности розыгрыша
|
||
"""
|
||
import random
|
||
|
||
|
||
def generate_account_number():
|
||
"""Генерирует случайный номер счета в формате XX-XX-XX-XX-XX-XX-XX"""
|
||
parts = []
|
||
for _ in range(7):
|
||
part = f"{random.randint(0, 99):02d}"
|
||
parts.append(part)
|
||
return "-".join(parts)
|
||
|
||
|
||
def generate_accounts(count, card_numbers=None):
|
||
"""
|
||
Генерирует список уникальных счетов
|
||
|
||
Args:
|
||
count: Количество счетов для генерации
|
||
card_numbers: Список номеров карт (опционально)
|
||
|
||
Returns:
|
||
List[str]: Список счетов
|
||
"""
|
||
accounts = set()
|
||
|
||
while len(accounts) < count:
|
||
account = generate_account_number()
|
||
|
||
# Добавляем с картой или без
|
||
if card_numbers and random.random() > 0.3: # 70% с картой
|
||
card = random.choice(card_numbers)
|
||
full_account = f"{card} {account}"
|
||
else:
|
||
full_account = account
|
||
|
||
accounts.add(full_account)
|
||
|
||
return list(accounts)
|
||
|
||
|
||
def save_to_file(accounts, filename):
|
||
"""Сохраняет счета в файл"""
|
||
with open(filename, 'w', encoding='utf-8') as f:
|
||
for account in accounts:
|
||
f.write(account + '\n')
|
||
print(f"✅ Сохранено {len(accounts)} счетов в файл {filename}")
|
||
|
||
|
||
def main():
|
||
"""Главная функция"""
|
||
print("🎲 Генератор тестовых счетов для розыгрыша\n")
|
||
|
||
# Параметры
|
||
counts = [100, 500, 1000, 2000, 5000]
|
||
card_numbers = ['2521', '2522', '2523', '2524', '2525']
|
||
|
||
for count in counts:
|
||
print(f"Генерация {count} счетов...")
|
||
accounts = generate_accounts(count, card_numbers)
|
||
filename = f"test_accounts_{count}.txt"
|
||
save_to_file(accounts, filename)
|
||
|
||
print("\n✅ Генерация завершена!")
|
||
print("\nИспользование:")
|
||
print("1. Скопируйте содержимое нужного файла")
|
||
print("2. В боте: Управление розыгрышами → Выберите розыгрыш → Участники → Добавить массово")
|
||
print("3. Вставьте содержимое файла")
|
||
print("4. Проведите розыгрыш и проверьте время выполнения")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|