Задать вопрос
@Fudziama148w

Как облегчить код телеграмм бота предложки?

есть python код телеграмм бота предложки для тг канала. пользователь на команду /content получает от бота запрос текста, после этого бот запрашивает(по желанию) media(фото или видео материал), которое временно записывается в user_content = [], после всех запросов, полученные ответы от пользователя отправляются администратору на "рассмотрение"(админ либо одобряет, либо отказывает в предложении) P.S: после "рассмотрения" медиа контент удаляется из user_content .Сам вопрос: Можно ли облегчить этот код? Если да, то как?
user_content = {}
# Обработчик команды /content
@bot.message_handler(commands=['content'])
def content(message):
    user_id = message.from_user.id
    chat_id = message.chat.id
    user_content[user_id] = {'text': None, 'media': None}
    bot.send_message(chat_id=chat_id, text="Отправьте текст контента")
    bot.register_next_step_handler(message, process_content_text)

# Обработчик текста контента
def process_content_text(message):
    user_id = message.from_user.id
    chat_id = message.chat.id
    username = message.chat.username
    user_content[user_id]['text'] = message.text
    keyboard = types.InlineKeyboardMarkup()
    approve_button = types.InlineKeyboardButton(text="Одобрено", callback_data=f"approve {user_id}")
    reject_button = types.InlineKeyboardButton(text="Отклонено", callback_data=f"reject {user_id}")
    keyboard.add(approve_button, reject_button)
    bot.send_message(chat_id=admin_id, text=f"Пользователь @{username} отправил следующий контент: {message.text}", reply_markup=keyboard)
    bot.send_message(chat_id=chat_id, text="Отправьте фото/видео контент (необязательно, если не собираетесь отправлять ответьте: нет)")

    # Сбрасываем медиа из предыдущего сообщения пользователя, если оно было
    user_content[user_id]['media'] = None

    # Переключаем обработчик на process_content_media
    bot.register_next_step_handler(message, process_content_media)



# Обработчик медиа контента
def process_content_media(message):
    try:
       user_id = message.from_user.id
       chat_id = message.chat.id
       username = message.chat.username
       if message.content_type == 'photo':
             user_content[user_id]['media'] = message.photo[-1].file_id
       elif message.content_type == 'video':
             user_content[user_id]['media'] = message.video.file_id
       else:
              user_content[user_id]['media'] = None

       if user_content[user_id]['media']:
              if message.content_type == 'photo':
                      bot.send_message(chat_id=admin_id, text=f"Пользователь @{username} отправил фото:")
                      bot.send_photo(chat_id=admin_id, photo=user_content[user_id]['media'])
              elif message.content_type == 'video':
                      bot.send_message(chat_id=admin_id, text=f"Пользователь @{username} отправил видео:")
                      bot.send_video(chat_id=admin_id, video=user_content[user_id]['media'])
       else:
            bot.send_message(chat_id=admin_id, text=f"Пользователь @{username} не отправил медиа контент")
    except Exception as e:
          print(e)


# Обработчик нажатия на кнопки одобрения/отклонения контента
@bot.callback_query_handler(lambda call: call.data.startswith(('approve', 'reject')))
def process_callback(call):
    user_id = int(call.data.split()[1])
    if call.data.startswith('approve'):
        bot.send_message(chat_id=user_id, text="Ваш контент одобрен")
    else:
        bot.send_message(chat_id=user_id, text="Ваш контент отклонен")
    del user_content[user_id]  # Удаляем контент из словаря после обработки
    bot.edit_message_reply_markup(chat_id=call.message.chat.id, message_id=call.message.message_id, reply_markup=None)

    if user_id in user_content:
        user_content.pop(user_id)
    else:
        pass
  • Вопрос задан
  • 590 просмотров
Подписаться 1 Средний 5 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы