Upload New File

parent 827f80cb
import asyncio
from aiogram import Bot, Dispatcher, Router
from aiogram.types import ChatMemberUpdated, Message
from aiogram.exceptions import AiogramError
import random
import time
# Токен вашего бота
BOT_TOKEN = "***"
# Инициализация бота и диспетчера
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher()
router = Router()
dp.include_router(router)
# Для хранения информации о новых участниках
active_users = {}
def generate_math_problem():
"""Генерация простого математического примера."""
a = random.randint(1, 10)
b = random.randint(1, 10)
return f"{a} + {b}", a + b
@router.chat_member()
async def welcome_new_user(event: ChatMemberUpdated):
"""Обработчик новых участников группы."""
if event.new_chat_member.status == "member" and event.old_chat_member.status not in ["member", "administrator", "creator"]:
new_user = event.new_chat_member.user
math_problem, correct_answer = generate_math_problem()
try:
# Отправляем приветственное сообщение
welcome_message = await bot.send_message(
chat_id=event.chat.id,
text=f"Привет, {new_user.first_name}! Добро пожаловать в нашу группу!\n\n"
f"Вот твой математический пример: {math_problem}\n"
f"Попробуй решить его в течение 1 минуты!"
)
# Сохраняем данные о пользователе
active_users[new_user.id] = {
"message_ids": [welcome_message.message_id], # Список для хранения всех сообщений бота
"correct_answer": correct_answer,
"timestamp": time.time(),
"user_messages": [], # Сообщения пользователя
"user_answered": False,
"chat_id": event.chat.id,
}
print(f"Приветственное сообщение отправлено пользователю {new_user.id} с примером {math_problem}")
except Exception as e:
print(f"Не удалось отправить сообщение в группу {event.chat.id}. Ошибка: {e}")
# Ожидание ответа пользователя
await check_answer(new_user.id)
async def check_answer(user_id):
"""Проверка ответа пользователя через 1 минуту."""
await asyncio.sleep(60)
user_data = active_users.get(user_id)
if user_data and not user_data["user_answered"]:
try:
# Удаляем все сообщения
await cleanup_messages(user_data)
# Удаляем пользователя из группы
await bot.ban_chat_member(chat_id=user_data["chat_id"], user_id=user_id)
print(f"Пользователь {user_id} не ответил вовремя. Удален из группы.")
except AiogramError as e:
print(f"Ошибка при удалении пользователя {user_id}. Ошибка: {e}")
except Exception as e:
print(f"Ошибка при удалении пользователя {user_id}. Ошибка: {e}")
async def cleanup_messages(user_data):
"""Удаление всех сообщений пользователя и бота."""
try:
# Удаляем все сообщения бота
for message_id in user_data["message_ids"]:
try:
print(f"Удаляю сообщение бота: chat_id={user_data['chat_id']}, message_id={message_id}")
await bot.delete_message(chat_id=user_data["chat_id"], message_id=message_id)
print(f"Сообщение бота для пользователя {user_data['chat_id']} удалено.")
except Exception as e:
print(f"Ошибка при удалении сообщения бота. Ошибка: {e}")
# Удаляем сообщения пользователя
for user_message in user_data["user_messages"]:
try:
if user_message:
await bot.delete_message(chat_id=user_data["chat_id"], message_id=user_message.message_id)
print(f"Сообщение пользователя {user_message.message_id} удалено.")
except Exception as e:
print(f"Ошибка при удалении сообщения пользователя. Ошибка: {e}")
except Exception as e:
print(f"Ошибка при удалении сообщений. Ошибка: {e}")
@router.message()
async def handle_message(message: Message):
"""Обработчик сообщений от пользователей для проверки ответа."""
user_data = active_users.get(message.from_user.id)
if user_data and not user_data["user_answered"]:
# Сохраняем сообщение пользователя
user_data["user_messages"].append(message)
if message.text.isdigit():
user_answer = int(message.text)
if user_answer == user_data["correct_answer"]:
user_data["user_answered"] = True
# Ответ правильный — сохраняем сообщение и удаляем все
correct_message = await message.reply("Правильно! Молодец!")
user_data["message_ids"].append(correct_message.message_id) # Добавляем в список ID сообщений
print(f"Пользователь {message.from_user.id} ответил правильно.")
# Удаляем сообщения после правильного ответа
await cleanup_messages(user_data)
else:
# Ответ неправильный, добавляем новое сообщение бота
incorrect_message = await message.reply("Неправильный ответ. Попробуй еще раз.")
user_data["message_ids"].append(incorrect_message.message_id)
print(f"Отправлено сообщение о неправильном ответе для пользователя {message.from_user.id}")
else:
# Если ответ не число
invalid_message = await message.reply("Пожалуйста, отправь числовой ответ.")
user_data["message_ids"].append(invalid_message.message_id)
print(f"Отправлено сообщение с просьбой ввести числовой ответ для пользователя {message.from_user.id}")
async def main():
"""Запуск бота."""
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment