diff --git a/bot.py b/bot.py
index 919e809..1b265ab 100644
--- a/bot.py
+++ b/bot.py
@@ -304,6 +304,14 @@ ID: {user_info['ID']}
await self.handle_tic_tac_toe_move(query, context)
elif query.data.startswith('quiz_'):
await self.handle_quiz_answer(query, context)
+ elif query.data.startswith('confirm_schedule_'):
+ await self.confirm_schedule_post(query, context)
+ elif query.data == 'edit_text':
+ await self.edit_schedule_text(query, context)
+ elif query.data == 'add_image':
+ await self.add_schedule_image(query, context)
+ elif query.data == 'cancel_schedule':
+ await self.cancel_schedule_post(query, context)
async def start_rps_game(self, query, context):
@@ -972,24 +980,36 @@ ID: {user_info['ID']}
await update.message.reply_text(SCHEDULER_MESSAGES['time_in_past'])
return
- # Добавление поста в базу данных
- post_id = db.add_scheduled_post(
- chat_id=update.effective_chat.id,
- text=text,
- schedule_time=schedule_time.strftime('%Y-%m-%d %H:%M:%S'),
- created_by=user.id
- )
+ # Показываем предварительный просмотр поста
+ preview_text = f"""
+📝 Предварительный просмотр поста:
- if post_id:
- await update.message.reply_text(
- SCHEDULER_MESSAGES['post_scheduled'].format(
- time=schedule_time.strftime('%Y-%m-%d %H:%M:%S'),
- text=text[:50] + ('...' if len(text) > 50 else ''),
- post_id=post_id
- )
- )
- else:
- await update.message.reply_text(SCHEDULER_MESSAGES['save_error'])
+📅 Время публикации: {schedule_time.strftime('%Y-%m-%d %H:%M:%S')}
+
+📋 Текст поста:
+{text}
+
+❓ Что вы хотите сделать?
+ """
+
+ keyboard = [
+ [InlineKeyboardButton("✅ Опубликовать сейчас", callback_data=f'confirm_schedule_{schedule_time.strftime("%Y%m%d_%H%M%S")}_{len(text)}')],
+ [InlineKeyboardButton("📝 Изменить текст", callback_data='edit_text')],
+ [InlineKeyboardButton("🖼 Добавить картинку", callback_data='add_image')],
+ [InlineKeyboardButton("❌ Отменить", callback_data='cancel_schedule')]
+ ]
+ reply_markup = InlineKeyboardMarkup(keyboard)
+
+ # Сохраняем данные для подтверждения в user_data
+ context.user_data['schedule_draft'] = {
+ 'time_str': time_str,
+ 'text': text,
+ 'schedule_time': schedule_time,
+ 'chat_id': update.effective_chat.id,
+ 'created_by': user.id
+ }
+
+ await update.message.reply_text(preview_text, parse_mode='HTML', reply_markup=reply_markup)
async def list_posts(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Показать список запланированных постов"""
@@ -1149,6 +1169,12 @@ ID: {user_info['ID']}
async def handle_message(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Обработка текстовых сообщений"""
user = update.effective_user
+
+ # Проверяем, ждет ли пользователь редактирования текста поста
+ if context.user_data.get('waiting_for_text_edit'):
+ await self.handle_text_edit(update, context)
+ return
+
message_text = update.message.text.lower()
# Добавление пользователя в базу данных
@@ -1201,6 +1227,39 @@ ID: {user_info['ID']}
db.update_score(user.id, bonus_points)
await update.message.reply_text(USER_MESSAGES['bonus_points'].format(points=bonus_points))
+ async def handle_text_edit(self, update, context):
+ """Обработка редактирования текста поста"""
+ new_text = update.message.text
+
+ draft = context.user_data.get('schedule_draft')
+ if draft:
+ draft['text'] = new_text
+ context.user_data['schedule_draft'] = draft
+
+ # Показываем обновленный предварительный просмотр
+ preview_text = f"""
+📝 Текст обновлен! Предварительный просмотр:
+
+📅 Время публикации: {draft['schedule_time'].strftime('%Y-%m-%d %H:%M:%S')}
+
+📋 Новый текст поста:
+{new_text}
+
+❓ Что вы хотите сделать?
+ """
+
+ keyboard = [
+ [InlineKeyboardButton("✅ Опубликовать сейчас", callback_data=f'confirm_schedule_{draft["schedule_time"].strftime("%Y%m%d_%H%M%S")}_{len(new_text)}')],
+ [InlineKeyboardButton("📝 Изменить текст еще раз", callback_data='edit_text')],
+ [InlineKeyboardButton("🖼 Добавить картинку", callback_data='add_image')],
+ [InlineKeyboardButton("❌ Отменить", callback_data='cancel_schedule')]
+ ]
+ reply_markup = InlineKeyboardMarkup(keyboard)
+
+ await update.message.reply_text(preview_text, parse_mode='HTML', reply_markup=reply_markup)
+
+ context.user_data.pop('waiting_for_text_edit', None)
+
async def handle_new_chat_members(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
"""Обработка новых участников чата"""
for member in update.chat_member.new_chat_members:
@@ -1303,6 +1362,73 @@ ID: {user_info['ID']}
await query.edit_message_text(GAME_MESSAGES['select_game'], reply_markup=reply_markup)
+ async def confirm_schedule_post(self, query, context):
+ """Подтверждение и добавление поста в расписание"""
+ try:
+ draft = context.user_data.get('schedule_draft')
+ if not draft:
+ await query.edit_message_text("❌ Данные поста не найдены. Попробуйте создать пост заново.")
+ return
+
+ # Добавление поста в базу данных
+ post_id = db.add_scheduled_post(
+ chat_id=draft['chat_id'],
+ text=draft['text'],
+ schedule_time=draft['schedule_time'].strftime('%Y-%m-%d %H:%M:%S'),
+ created_by=draft['created_by']
+ )
+
+ if post_id:
+ await query.edit_message_text(
+ f"✅ Пост успешно запланирован!\n\n📅 Время публикации: {draft['schedule_time'].strftime('%Y-%m-%d %H:%M:%S')}\n📝 Текст: {draft['text'][:50]}{'...' if len(draft['text']) > 50 else ''}\n🆔 ID поста: {post_id}"
+ )
+ else:
+ await query.edit_message_text("❌ Ошибка при сохранении поста в базу данных.")
+
+ # Очищаем черновик
+ context.user_data.pop('schedule_draft', None)
+
+ except Exception as e:
+ await query.edit_message_text(f"❌ Ошибка при планировании поста: {str(e)}")
+
+ async def edit_schedule_text(self, query, context):
+ """Редактирование текста поста"""
+ draft = context.user_data.get('schedule_draft')
+ if not draft:
+ await query.edit_message_text("❌ Данные поста не найдены.")
+ return
+
+ await query.edit_message_text(
+ "📝 Отправьте новый текст для поста в ответ на это сообщение.\n\nТекущий текст:\n" + draft['text'],
+ reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton("❌ Отменить", callback_data='cancel_schedule')]])
+ )
+
+ # Устанавливаем флаг ожидания нового текста
+ context.user_data['waiting_for_text_edit'] = True
+
+ async def add_schedule_image(self, query, context):
+ """Добавление картинки к посту"""
+ draft = context.user_data.get('schedule_draft')
+ if not draft:
+ await query.edit_message_text("❌ Данные поста не найдены.")
+ return
+
+ await query.edit_message_text(
+ "🖼 Отправьте картинку для поста в ответ на это сообщение.\n\nТекущий текст:\n" + draft['text'],
+ reply_markup=InlineKeyboardMarkup([[InlineKeyboardButton("❌ Отменить", callback_data='cancel_schedule')]])
+ )
+
+ # Устанавливаем флаг ожидания картинки
+ context.user_data['waiting_for_image'] = True
+
+ async def cancel_schedule_post(self, query, context):
+ """Отмена планирования поста"""
+ context.user_data.pop('schedule_draft', None)
+ context.user_data.pop('waiting_for_text_edit', None)
+ context.user_data.pop('waiting_for_image', None)
+
+ await query.edit_message_text("❌ Планирование поста отменено.")
+
def run(self):
"""Запуск бота"""
print("Bot started!")