есть 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