Fix silent processing

This commit is contained in:
Taras Terletskyi 2023-04-16 23:32:47 +03:00
parent 782b7d3893
commit 180ef41f77
4 changed files with 24 additions and 22 deletions

View file

@ -12,11 +12,11 @@ _LANG_CODE_LEN = 2
_LANG_CODE_REGEX = rf'^[a-z]{{{_LANG_CODE_LEN}}}$'
class BaseUserSchema(RealBaseModel):
class AnonymousUserSchema(RealBaseModel):
id: StrictInt
@property
def is_base_user(self) -> bool:
def is_anonymous_user(self) -> bool:
return True
@ -27,7 +27,7 @@ class VideoCaptionSchema(RealBaseModel):
include_size: StrictBool
class UserUploadSchema(RealBaseModel):
class UploadSchema(RealBaseModel):
upload_video_file: StrictBool
upload_video_max_file_size: StrictInt
forward_to_group: StrictBool
@ -36,26 +36,26 @@ class UserUploadSchema(RealBaseModel):
video_caption: VideoCaptionSchema
class UserSchema(BaseUserSchema):
class UserSchema(AnonymousUserSchema):
send_startup_message: StrictBool
download_media_type: DownMediaType
save_to_storage: StrictBool
use_url_regex_match: StrictBool
upload: UserUploadSchema
upload: UploadSchema
@property
def is_base_user(self) -> bool:
def is_anonymous_user(self) -> bool:
return False
def _change_type(values: list[int]) -> list[BaseUserSchema]:
return [BaseUserSchema(id=id_) for id_ in values]
def _change_type(values: list[int]) -> list[AnonymousUserSchema]:
return [AnonymousUserSchema(id=id_) for id_ in values]
class ApiSchema(RealBaseModel):
upload_video_file: StrictBool
upload_video_max_file_size: StrictInt
upload_to_chat_ids: list[BaseUserSchema]
upload_to_chat_ids: list[AnonymousUserSchema]
silent: StrictBool
video_caption: VideoCaptionSchema

View file

@ -6,7 +6,7 @@ from yt_shared.enums import TaskSource, TelegramChatType
from yt_shared.schemas.error import ErrorDownloadPayload, ErrorGeneralPayload
from yt_shared.schemas.success import SuccessPayload
from bot.core.config.schema import BaseUserSchema, UserSchema
from bot.core.config.schema import AnonymousUserSchema, UserSchema
if TYPE_CHECKING:
from bot.core.bot import VideoBot
@ -37,7 +37,7 @@ class AbstractHandler(metaclass=abc.ABCMeta):
return self._body.context.from_user_id
return self._body.context.from_chat_id
def _get_receiving_users(self) -> list[BaseUserSchema | UserSchema]:
def _get_receiving_users(self) -> list[AnonymousUserSchema | UserSchema]:
if self._body.context.source is TaskSource.API:
return self._bot.conf.telegram.api.upload_to_chat_ids.copy()
return [self._bot.allowed_users[self._get_sender_id()]]

View file

@ -107,6 +107,8 @@ class SuccessHandler(AbstractHandler):
async def _send_success_text(self, media_object: BaseMedia) -> None:
text = self._create_success_text(media_object)
for user in self._receiving_users:
if user.upload.silent:
continue
kwargs = {
'chat_id': user.id,
'text': text,

View file

@ -19,7 +19,7 @@ from yt_shared.utils.tasks.abstract import AbstractTask
from yt_shared.utils.tasks.tasks import create_task
from bot.core.config.config import get_main_config
from bot.core.config.schema import BaseUserSchema, UserSchema
from bot.core.config.schema import AnonymousUserSchema, UserSchema
from bot.core.utils import bold
if TYPE_CHECKING:
@ -51,7 +51,7 @@ class AbstractUploadTask(AbstractTask, metaclass=abc.ABCMeta):
def __init__(
self,
media_object: BaseMedia,
users: list[BaseUserSchema | UserSchema],
users: list[AnonymousUserSchema | UserSchema],
bot: 'VideoBot',
semaphore: asyncio.Semaphore,
context: SuccessPayload,
@ -67,7 +67,7 @@ class AbstractUploadTask(AbstractTask, metaclass=abc.ABCMeta):
self._ctx = context
self._media_ctx = self._create_media_context()
self._upload_chat_ids, self._forward_chat_ids = self._get_upload_chat_ids()
self._forward_chat_ids = self._get_forward_chat_ids()
self._cached_message: Message | None = None
async def run(self) -> None:
@ -89,9 +89,11 @@ class AbstractUploadTask(AbstractTask, metaclass=abc.ABCMeta):
f'📏 {bold("Size")} {self._media_object.file_size_human()}'
)
coros = []
for chat_id in self._upload_chat_ids:
for user in self._users:
if user.upload.silent:
continue
kwargs = {
'chat_id': chat_id,
'chat_id': user.id,
'text': text,
'parse_mode': ParseMode.HTML,
}
@ -100,15 +102,13 @@ class AbstractUploadTask(AbstractTask, metaclass=abc.ABCMeta):
coros.append(self._bot.send_message(**kwargs))
await asyncio.gather(*coros)
def _get_upload_chat_ids(self) -> tuple[list[int], list[int]]:
chat_ids = []
def _get_forward_chat_ids(self) -> list[int]:
forward_chat_ids = []
for user in self._users:
chat_ids.append(user.id)
if isinstance(user, UserSchema):
if user.upload.forward_to_group and user.upload.forward_group_id:
forward_chat_ids.append(user.upload.forward_group_id)
return chat_ids, forward_chat_ids
return forward_chat_ids
@retry(wait=wait_fixed(3), stop=stop_after_attempt(3), reraise=True)
async def __upload(self, chat_id: int) -> Message | None:
@ -124,7 +124,7 @@ class AbstractUploadTask(AbstractTask, metaclass=abc.ABCMeta):
pass
async def _upload_file(self) -> None:
for chat_id in chain(self._upload_chat_ids, self._forward_chat_ids):
for chat_id in chain((u.id for u in self._users), self._forward_chat_ids):
self._log.info(
'Uploading "%s" [%s] [cached: %s] to chat id "%d"',
self._filename,
@ -246,7 +246,7 @@ class VideoUploadTask(AbstractUploadTask):
def _generate_file_caption(self) -> str:
caption_items = []
if self._users[0].is_base_user:
if self._users[0].is_anonymous_user:
caption_conf = self._bot.conf.telegram.api.video_caption
else:
caption_conf = self._users[0].upload.video_caption