Телеграм бот не реагирует на кнопки aiogram
Бот выписывает сообщение и прекрепляет кнопки, но не выполняет действия которые должны выполнять эти кнопки Код:
class ReportModel:
def __init__(self, user_id, report_text, photo_ids=None):
self.user_id = user_id
self.report_text = report_text
self.photo_ids = photo_ids
# Метод для сохранения жалобы в базу данных
def save(self):
reports_collection = mongo_db["reports"]
reports_collection.insert_one(self.__dict__)
@dp.message_handler(commands=["start"])
async def start_handler(message: types.Message):
user_id = message.from_user.id
username = message.from_user.username
registration_time = message.date
profile = ProfileModel(user_id, username, 0, registration_time, 0)
profile.save()
await message.reply("Твой текст")
@dp.message_handler(commands=["report"])
async def report_handler(message: types.Message):
user_id = message.from_user.id
username = message.from_user.username
report_text = message.text.split("/report", 1)[1].strip()
# Проверяем, есть ли уже профиль пользователя в базе данных
profile = ProfileModel(user_id, username, 0, 0, 0)
profiles_collection = mongo_db["profiles"]
existing_profile = profiles_collection.find_one({"user_id": user_id})
if existing_profile:
profile.report_count = existing_profile.get("report_count", 0)
else:
profile.save()
profile.report_count += 1
profile.save()
photo_ids = []
if message.photo:
# Сохраняем фотографии в базу данных
for photo in message.photo:
photo_id = photo.file_id
photo_ids.append(photo_id)
report = ReportModel(user_id, report_text+f"\nОтправитель:{user_id}", photo_ids)
report.save()
await message.reply("Спасибо за вашу жалобу. Она будет рассмотрена администрацией.")
@dp.message_handler(commands=["admin_reports"])
async def admin_reports_handler(message: types.Message)`:
# Проверяем, является ли пользователь администратором
if message.from_user.id not in [6878850076]: # Замените на список айдишников администраторов
return
profiles_collection = mongo_db["profiles"]
reported_profiles = profiles_collection.find({"report_count": {"$gt": 0}})
reports_collection = mongo_db["reports"]
for profile in reported_profiles:
user_id = profile["user_id"]
report_count = profile["report_count"]
await bot.send_message(user_id, f"У вас имеется {report_count} жалоб(ы).")
reports = reports_collection.find({"user_id": user_id})
for report in reports:
report_text = report["report_text"]
photo_ids = report["photo_ids"]
keyboard = InlineKeyboardMarkup(row_width=2)
accept_button = InlineKeyboardButton("Принять", callback_data=f"accept_{user_id}")
reject_button = InlineKeyboardButton("Отклонить", callback_data=f"reject_{user_id}")
keyboard.add(accept_button, reject_button)
await bot.send_message(user_id, f"Жалоба: {report_text}", reply_markup=keyboard)
if photo_ids:
for photo_id in photo_ids:
await bot.send_photo(user_id, photo_id)
# Сохраняем сообщение в профиле пользователя
profiles_collection.update_one({"user_id": user_id}, {"$set": {"report": report}})
async def handle_report_decision(user_id, decision, reports_collection, profiles_collection, bot):
profile_data = profiles_collection.find_one({"user_id": user_id})
if profile_data is None:
return
# Получаем сохраненное сообщение из профиля пользователя
report = profile_data.get("report")
if report is None:
return
if decision == "accept":
profile = ProfileModel(**profile_data)
profile.accepted_reports += 1
profiles_collection.update_one({"user_id": user_id}, {"$set": {"accepted_reports": profile.accepted_reports}})
await bot.send_message(user_id, "Ваша жалоба была принята администратором.")
else:
await bot.send_message(user_id, "Ваша жалоба была отклонена администратором.")
reports_collection.delete_many({"user_id": user_id})
# Удаляем сохраненное сообщение из профиля пользователя
profiles_collection.update_one({"user_id": user_id}, {"$unset": {"report": ""}})
@dp.callback_query_handler(lambda callback_query: callback_query.data.startswith(("accept_", "reject_")))
async def callback_handler(callback_query: types.CallbackQuery):
decision, user_id = callback_query.data.split("_")
profiles_collection = mongo_db["profiles"]
reports_collection = mongo_db["reports"]
await handle_report_decision(user_id, decision, reports_collection, profiles_collection, bot)
# После обработки callback_query, отправляем уведомление через answer()
await callback_query.answer()