Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add global allow sending without reply parameter #913

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
22 changes: 21 additions & 1 deletion aiogram/bot/base.py
Expand Up @@ -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
):
Expand All @@ -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.
Expand Down Expand Up @@ -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(
Expand Down Expand Up @@ -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)
Olegt0rr marked this conversation as resolved.
Show resolved Hide resolved

@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)
36 changes: 36 additions & 0 deletions aiogram/bot/bot.py
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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]
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down