From 1fe14c8235eae96fe6cc8271eaaa2d5c86c3ef83 Mon Sep 17 00:00:00 2001 From: Jono Date: Mon, 16 May 2022 19:38:37 +0800 Subject: [PATCH] Add global allow sending without reply parameter --- aiogram/bot/base.py | 22 +++++++++++++++++++++- aiogram/bot/bot.py | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/aiogram/bot/base.py b/aiogram/bot/base.py index 8fd2094950..e6bf4d2cc6 100644 --- a/aiogram/bot/base.py +++ b/aiogram/bot/base.py @@ -38,6 +38,7 @@ def __init__( validate_token: Optional[base.Boolean] = True, parse_mode: typing.Optional[base.String] = None, disable_web_page_preview: Optional[base.Boolean] = None, + allow_sending_without_reply: Optional[base.Boolean] = None, timeout: typing.Optional[typing.Union[base.Integer, base.Float, aiohttp.ClientTimeout]] = None, server: TelegramAPIServer = TELEGRAM_PRODUCTION ): @@ -60,6 +61,8 @@ def __init__( :type parse_mode: :obj:`str` :param disable_web_page_preview: You can set default disable web page preview parameter :type disable_web_page_preview: :obj:`bool` + :param allow_sending_without_reply: You can set default allow sending without reply parameter + :type allow_sending_without_reply: :obj:`bool` :param timeout: Request timeout :type timeout: :obj:`typing.Optional[typing.Union[base.Integer, base.Float, aiohttp.ClientTimeout]]` :param server: Telegram Bot API Server endpoint. @@ -109,8 +112,8 @@ def __init__( self.timeout = timeout self.parse_mode = parse_mode - self.disable_web_page_preview = disable_web_page_preview + self.allow_sending_without_reply = allow_sending_without_reply async def get_new_session(self) -> aiohttp.ClientSession: return aiohttp.ClientSession( @@ -361,5 +364,22 @@ def disable_web_page_preview(self, value): def disable_web_page_preview(self): self.disable_web_page_preview = None + @property + def allow_sending_without_reply(self): + return getattr(self, '_allow_sending_without_reply', None) + + @allow_sending_without_reply.setter + def allow_sending_without_reply(self, value): + if value is None: + setattr(self, '_allow_sending_without_reply', None) + elif not isinstance(value, bool): + raise TypeError(f"Allow sending without reply must be bool, not {type(value)}") + else: + setattr(self, '_allow_sending_without_reply', value) + + @allow_sending_without_reply.deleter + def allow_sending_without_reply(self): + self.allow_sending_without_reply = None + def check_auth_widget(self, data): return check_integrity(self.__token, data) diff --git a/aiogram/bot/bot.py b/aiogram/bot/bot.py index 461f68b2e9..0b909f1a6c 100644 --- a/aiogram/bot/bot.py +++ b/aiogram/bot/bot.py @@ -330,6 +330,8 @@ async def send_message(self, payload.setdefault('parse_mode', self.parse_mode) if self.disable_web_page_preview: payload.setdefault('disable_web_page_preview', self.disable_web_page_preview) + if self.allow_sending_without_reply: + payload.setdefault('allow_sending_without_reply', self.allow_sending_without_reply) result = await self.request(api.Methods.SEND_MESSAGE, payload) return types.Message(**result) @@ -452,6 +454,8 @@ async def copy_message(self, payload = generate_payload(**locals()) if self.parse_mode and caption_entities is None: payload.setdefault('parse_mode', self.parse_mode) + if self.allow_sending_without_reply: + payload.setdefault('allow_sending_without_reply', self.allow_sending_without_reply) result = await self.request(api.Methods.COPY_MESSAGE, payload) return types.MessageId(**result) @@ -520,6 +524,8 @@ async def send_photo(self, payload = generate_payload(**locals(), exclude=['photo']) if self.parse_mode and caption_entities is None: payload.setdefault('parse_mode', self.parse_mode) + if self.allow_sending_without_reply: + payload.setdefault('allow_sending_without_reply', self.allow_sending_without_reply) files = {} prepare_file(payload, files, 'photo', photo) @@ -610,6 +616,8 @@ async def send_audio(self, payload = generate_payload(**locals(), exclude=['audio', 'thumb']) if self.parse_mode and caption_entities is None: payload.setdefault('parse_mode', self.parse_mode) + if self.allow_sending_without_reply: + payload.setdefault('allow_sending_without_reply', self.allow_sending_without_reply) files = {} prepare_file(payload, files, 'audio', audio) @@ -700,6 +708,8 @@ async def send_document(self, payload = generate_payload(**locals(), exclude=['document']) if self.parse_mode and caption_entities is None: payload.setdefault('parse_mode', self.parse_mode) + if self.allow_sending_without_reply: + payload.setdefault('allow_sending_without_reply', self.allow_sending_without_reply) files = {} prepare_file(payload, files, 'document', document) @@ -792,6 +802,8 @@ async def send_video(self, chat_id: typing.Union[base.Integer, base.String], payload = generate_payload(**locals(), exclude=['video', 'thumb']) if self.parse_mode and caption_entities is None: payload.setdefault('parse_mode', self.parse_mode) + if self.allow_sending_without_reply: + payload.setdefault('allow_sending_without_reply', self.allow_sending_without_reply) files = {} prepare_file(payload, files, 'video', video) @@ -887,6 +899,8 @@ async def send_animation(self, payload = generate_payload(**locals(), exclude=["animation", "thumb"]) if self.parse_mode and caption_entities is None: payload.setdefault('parse_mode', self.parse_mode) + if self.allow_sending_without_reply: + payload.setdefault('allow_sending_without_reply', self.allow_sending_without_reply) files = {} prepare_file(payload, files, 'animation', animation) @@ -967,6 +981,8 @@ async def send_voice(self, payload = generate_payload(**locals(), exclude=['voice']) if self.parse_mode and caption_entities is None: payload.setdefault('parse_mode', self.parse_mode) + if self.allow_sending_without_reply: + payload.setdefault('allow_sending_without_reply', self.allow_sending_without_reply) files = {} prepare_file(payload, files, 'voice', voice) @@ -1033,6 +1049,8 @@ async def send_video_note(self, chat_id: typing.Union[base.Integer, base.String] """ reply_markup = prepare_arg(reply_markup) payload = generate_payload(**locals(), exclude=['video_note']) + if self.allow_sending_without_reply: + payload.setdefault('allow_sending_without_reply', self.allow_sending_without_reply) files = {} prepare_file(payload, files, 'video_note', video_note) @@ -1096,6 +1114,8 @@ async def send_media_group(self, media = prepare_arg(media) payload = generate_payload(**locals(), exclude=['files']) + if self.allow_sending_without_reply: + payload.setdefault('allow_sending_without_reply', self.allow_sending_without_reply) result = await self.request(api.Methods.SEND_MEDIA_GROUP, payload, files) return [types.Message(**message) for message in result] @@ -1169,6 +1189,8 @@ async def send_location(self, chat_id: typing.Union[base.Integer, base.String], """ reply_markup = prepare_arg(reply_markup) payload = generate_payload(**locals()) + if self.allow_sending_without_reply: + payload.setdefault('allow_sending_without_reply', self.allow_sending_without_reply) result = await self.request(api.Methods.SEND_LOCATION, payload) return types.Message(**result) @@ -1347,6 +1369,8 @@ async def send_venue(self, """ reply_markup = prepare_arg(reply_markup) payload = generate_payload(**locals()) + if self.allow_sending_without_reply: + payload.setdefault('allow_sending_without_reply', self.allow_sending_without_reply) result = await self.request(api.Methods.SEND_VENUE, payload) return types.Message(**result) @@ -1408,6 +1432,8 @@ async def send_contact(self, chat_id: typing.Union[base.Integer, base.String], """ reply_markup = prepare_arg(reply_markup) payload = generate_payload(**locals()) + if self.allow_sending_without_reply: + payload.setdefault('allow_sending_without_reply', self.allow_sending_without_reply) result = await self.request(api.Methods.SEND_CONTACT, payload) return types.Message(**result) @@ -1528,6 +1554,8 @@ async def send_poll(self, payload = generate_payload(**locals()) if self.parse_mode and explanation_entities is None: payload.setdefault('explanation_parse_mode', self.parse_mode) + if self.allow_sending_without_reply: + payload.setdefault('allow_sending_without_reply', self.allow_sending_without_reply) result = await self.request(api.Methods.SEND_POLL, payload) return types.Message(**result) @@ -1587,6 +1615,8 @@ async def send_dice(self, reply_markup = prepare_arg(reply_markup) payload = generate_payload(**locals()) + if self.allow_sending_without_reply: + payload.setdefault('allow_sending_without_reply', self.allow_sending_without_reply) result = await self.request(api.Methods.SEND_DICE, payload) return types.Message(**result) @@ -2961,6 +2991,8 @@ async def send_sticker(self, chat_id: typing.Union[base.Integer, base.String], """ reply_markup = prepare_arg(reply_markup) payload = generate_payload(**locals(), exclude=['sticker']) + if self.allow_sending_without_reply: + payload.setdefault('allow_sending_without_reply', self.allow_sending_without_reply) files = {} prepare_file(payload, files, 'sticker', sticker) @@ -3393,6 +3425,8 @@ async def send_invoice(self, reply_markup = prepare_arg(reply_markup) provider_data = prepare_arg(provider_data) payload_ = generate_payload(**locals()) + if self.allow_sending_without_reply: + payload.setdefault('allow_sending_without_reply', self.allow_sending_without_reply) result = await self.request(api.Methods.SEND_INVOICE, payload_) return types.Message(**result) @@ -3535,6 +3569,8 @@ async def send_game(self, """ reply_markup = prepare_arg(reply_markup) payload = generate_payload(**locals()) + if self.allow_sending_without_reply: + payload.setdefault('allow_sending_without_reply', self.allow_sending_without_reply) result = await self.request(api.Methods.SEND_GAME, payload) return types.Message(**result)