refactor suggest, media_group doesn't work
This commit is contained in:
@@ -7,12 +7,15 @@ from time import sleep
|
|||||||
import telebot
|
import telebot
|
||||||
from telebot import types
|
from telebot import types
|
||||||
from telebot.apihelper import ApiTelegramException
|
from telebot.apihelper import ApiTelegramException
|
||||||
|
from telebot.types import InputMediaPhoto
|
||||||
|
|
||||||
import messages
|
import messages
|
||||||
from logs.custom_logger import Logger
|
from logs.custom_logger import Logger
|
||||||
|
|
||||||
#Инициализируем логгер
|
#Инициализируем логгер
|
||||||
bot_logger = Logger(name='bot')
|
bot_logger = Logger(name='bot')
|
||||||
|
|
||||||
|
|
||||||
class State(Enum):
|
class State(Enum):
|
||||||
START = "START"
|
START = "START"
|
||||||
SUGGEST = "SUGGEST"
|
SUGGEST = "SUGGEST"
|
||||||
@@ -84,7 +87,7 @@ class TelegramHelperBot:
|
|||||||
self.logger.info(f'Пользователь {message.from_user.full_name} (ID: {message.chat.id}) отправил непонятное сообщение: {message.text}')
|
self.logger.info(f'Пользователь {message.from_user.full_name} (ID: {message.chat.id}) отправил непонятное сообщение: {message.text}')
|
||||||
|
|
||||||
if self.state == State.SUGGEST:
|
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
|
self.state = State.START
|
||||||
if message.text == '/start':
|
if message.text == '/start':
|
||||||
self.state = State.START
|
self.state = State.START
|
||||||
@@ -480,11 +483,9 @@ class TelegramHelperBot:
|
|||||||
self.bot.send_message(chat_id=self.IMPORTANT_LOGS,
|
self.bot.send_message(chat_id=self.IMPORTANT_LOGS,
|
||||||
text=f"Произошла ошибка: {str(e)}\n\nTraceback:\n{traceback.format_exc()}")
|
text=f"Произошла ошибка: {str(e)}\n\nTraceback:\n{traceback.format_exc()}")
|
||||||
|
|
||||||
def send_to_suggest(self, message):
|
#TODO: deprecated
|
||||||
markup = types.InlineKeyboardMarkup(row_width=1)
|
def send_to_suggest_2(self, message):
|
||||||
item1 = types.InlineKeyboardButton("Опубликовать", callback_data='publish')
|
markup = self._get_reply_keyboard_for_post()
|
||||||
item2 = types.InlineKeyboardButton("Отклонить", callback_data='decline')
|
|
||||||
markup.add(item1, item2)
|
|
||||||
try:
|
try:
|
||||||
if message.content_type == 'text':
|
if message.content_type == 'text':
|
||||||
post_text = message.text.lower()
|
post_text = message.text.lower()
|
||||||
@@ -549,6 +550,113 @@ class TelegramHelperBot:
|
|||||||
self.bot.send_message(message.chat.id, success_send_message, parse_mode='html',
|
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)
|
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):
|
def get_reply_keyboard(self, message):
|
||||||
markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
|
markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user