feat: доработки функционала бота
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
This commit is contained in:
76
generate_test_accounts.py
Executable file
76
generate_test_accounts.py
Executable file
@@ -0,0 +1,76 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user