refactor suggest, media_group doesn't work
This commit is contained in:
@@ -7,12 +7,15 @@ from time import sleep
|
||||
import telebot
|
||||
from telebot import types
|
||||
from telebot.apihelper import ApiTelegramException
|
||||
from telebot.types import InputMediaPhoto
|
||||
|
||||
import messages
|
||||
from logs.custom_logger import Logger
|
||||
|
||||
#Инициализируем логгер
|
||||
bot_logger = Logger(name='bot')
|
||||
|
||||
|
||||
class State(Enum):
|
||||
START = "START"
|
||||
SUGGEST = "SUGGEST"
|
||||
@@ -84,7 +87,7 @@ class TelegramHelperBot:
|
||||
self.logger.info(f'Пользователь {message.from_user.full_name} (ID: {message.chat.id}) отправил непонятное сообщение: {message.text}')
|
||||
|
||||
if self.state == State.SUGGEST:
|
||||
self.bot.register_next_step_handler(message, self.send_to_suggest)
|
||||
self.bot.register_next_step_handler(message, self.suggest_router)
|
||||
self.state = State.START
|
||||
if message.text == '/start':
|
||||
self.state = State.START
|
||||
@@ -480,11 +483,9 @@ class TelegramHelperBot:
|
||||
self.bot.send_message(chat_id=self.IMPORTANT_LOGS,
|
||||
text=f"Произошла ошибка: {str(e)}\n\nTraceback:\n{traceback.format_exc()}")
|
||||
|
||||
def send_to_suggest(self, message):
|
||||
markup = types.InlineKeyboardMarkup(row_width=1)
|
||||
item1 = types.InlineKeyboardButton("Опубликовать", callback_data='publish')
|
||||
item2 = types.InlineKeyboardButton("Отклонить", callback_data='decline')
|
||||
markup.add(item1, item2)
|
||||
#TODO: deprecated
|
||||
def send_to_suggest_2(self, message):
|
||||
markup = self._get_reply_keyboard_for_post()
|
||||
try:
|
||||
if message.content_type == 'text':
|
||||
post_text = message.text.lower()
|
||||
@@ -549,6 +550,113 @@ class TelegramHelperBot:
|
||||
self.bot.send_message(message.chat.id, success_send_message, parse_mode='html',
|
||||
disable_web_page_preview=not self.PREVIEW_LINK, reply_markup=markup_for_user)
|
||||
|
||||
def suggest_router(self, message):
|
||||
try:
|
||||
if message.content_type == 'text':
|
||||
lower_text = message.text.lower()
|
||||
post_text, is_anonymous = self._get_text_message(lower_text, message.from_user.full_name, message.from_user.id)
|
||||
if is_anonymous:
|
||||
self._send_text_message(post_text)
|
||||
else:
|
||||
self._send_text_message(post_text)
|
||||
elif message.content_type == 'photo' and message.media_group_id is None:
|
||||
lower_caption = message.caption.lower()
|
||||
post_caption, is_anonymous = self._get_text_message(lower_caption, message.from_user.full_name, message.from_user.id)
|
||||
if is_anonymous:
|
||||
self._send_photo_message(message.photo[-1].file_id, post_caption)
|
||||
else:
|
||||
self._send_photo_message(message.photo[-1].file_id, post_caption)
|
||||
elif message.media_group_id is not None:
|
||||
#TODO: Остановился здесь, так нихрена не рабоатет
|
||||
|
||||
|
||||
self._get_media_group_from_user(message)
|
||||
media_group = self._prepare_media_group(message.media, message.caption)
|
||||
self._send_media_group_message(media_group)
|
||||
except Exception as e:
|
||||
if self.LOGS:
|
||||
self.bot.send_message(chat_id=self.IMPORTANT_LOGS,
|
||||
text=f"Произошла ошибка: {str(e)}\n\nTraceback:\n{traceback.format_exc()}")
|
||||
markup_for_user = self.get_reply_keyboard(message)
|
||||
success_send_message = messages.get_message(self.__get_first_name(message), 'SUCCESS_SEND_MESSAGE')
|
||||
self.bot.send_message(message.chat.id, success_send_message, parse_mode='html',
|
||||
disable_web_page_preview=not self.PREVIEW_LINK, reply_markup=markup_for_user)
|
||||
|
||||
def _get_media_group_from_user(self, message):
|
||||
if message.media_group_id is not None:
|
||||
print(message)
|
||||
|
||||
|
||||
@staticmethod
|
||||
def _get_reply_keyboard_for_post():
|
||||
markup = types.InlineKeyboardMarkup(row_width=1)
|
||||
item1 = types.InlineKeyboardButton("Опубликовать", callback_data='publish')
|
||||
item2 = types.InlineKeyboardButton("Отклонить", callback_data='decline')
|
||||
markup.add(item1, item2)
|
||||
return markup
|
||||
|
||||
def _prepare_media_group(self, message, post_caption):
|
||||
post_content = message.photo
|
||||
media_group = []
|
||||
if len(post_caption) > 1021:
|
||||
#TODO: Выключил обработку таких сообщений. Позднее нужно будет подумать что делать с длинными сообщениями
|
||||
pass
|
||||
else:
|
||||
for idx, photo in enumerate(post_content):
|
||||
if idx == 0:
|
||||
media_group.append(InputMediaPhoto(photo.file_id,
|
||||
caption=post_caption))
|
||||
else:
|
||||
media_group.append(InputMediaPhoto(photo.file_id,
|
||||
caption=''))
|
||||
return media_group
|
||||
|
||||
@staticmethod
|
||||
def _get_text_message(post_text: str, first_name: str, username: str):
|
||||
"""
|
||||
Форматирует текст сообщения для публикации в зависимости от наличия ключевых слов "анон" и "неанон".
|
||||
|
||||
Args:
|
||||
post_text: Текст сообщения
|
||||
first_name: Имя автора поста
|
||||
username: Юзернейм автора поста
|
||||
|
||||
Returns:
|
||||
Кортеж из двух элементов:
|
||||
- Сформированный текст сообщения.
|
||||
- Флаг, указывающий, является ли пост анонимным (True - анонимный, False - не анонимный).
|
||||
"""
|
||||
if "неанон" in post_text or "не анон" in post_text:
|
||||
is_anonymous = False
|
||||
return f'Пост из ТГ:\n{post_text}\n\nАвтор поста: {first_name} @{username}', is_anonymous
|
||||
elif "анон" in post_text:
|
||||
is_anonymous = True
|
||||
return f'Пост из ТГ:\n{post_text}\n\nПост опубликован анонимно', is_anonymous
|
||||
else:
|
||||
is_anonymous = False
|
||||
return f'Пост из ТГ:\n{post_text}\n\nАвтор поста: {first_name} @{username}', is_anonymous
|
||||
|
||||
def _send_text_message(self, post_text: str):
|
||||
markup = self._get_reply_keyboard_for_post()
|
||||
self.bot.send_message(
|
||||
chat_id=self.GROUP_FOR_POST,
|
||||
text=post_text,
|
||||
parse_mode='html',
|
||||
disable_web_page_preview=not self.PREVIEW_LINK,
|
||||
reply_markup=markup
|
||||
)
|
||||
|
||||
def _send_photo_message(self, photo: str, post_text: str):
|
||||
markup = self._get_reply_keyboard_for_post()
|
||||
self.bot.send_photo(
|
||||
chat_id=self.GROUP_FOR_POST,
|
||||
caption=post_text,
|
||||
photo=photo,
|
||||
reply_markup=markup
|
||||
)
|
||||
|
||||
def _send_media_group_message(self, media_group: list[InputMediaPhoto]):
|
||||
self.bot.send_media_group(chat_id=self.GROUP_FOR_POST, media=media_group)
|
||||
|
||||
def get_reply_keyboard(self, message):
|
||||
markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
|
||||
|
||||
Reference in New Issue
Block a user