From f7fdaa115399f59b6c353e005481efd622b3fded Mon Sep 17 00:00:00 2001 From: Arwichok Date: Mon, 16 Sep 2019 14:50:23 +0300 Subject: [PATCH 1/6] add IsReplyFilter --- aiogram/dispatcher/dispatcher.py | 8 +++++++- aiogram/dispatcher/filters/builtin.py | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/aiogram/dispatcher/dispatcher.py b/aiogram/dispatcher/dispatcher.py index dd764a76..600e25ba 100644 --- a/aiogram/dispatcher/dispatcher.py +++ b/aiogram/dispatcher/dispatcher.py @@ -10,7 +10,7 @@ from aiohttp.helpers import sentinel from aiogram.utils.deprecated import renamed_argument from .filters import Command, ContentTypeFilter, ExceptionsFilter, FiltersFactory, HashTag, Regexp, \ - RegexpCommandsFilter, StateFilter, Text, IDFilter, AdminFilter + RegexpCommandsFilter, StateFilter, Text, IDFilter, AdminFilter, IsReplyFilter from .handler import Handler from .middlewares import MiddlewareManager from .storage import BaseStorage, DELTA, DisabledStorage, EXCEEDED_COUNT, FSMContext, \ @@ -145,6 +145,12 @@ class Dispatcher(DataMixin, ContextInstanceMixin): self.callback_query_handlers, self.inline_query_handlers, ]) + filters_factory.bind(IsReplyFilter, event_handlers=[ + self.message_handlers, + self.edited_message_handlers, + self.channel_post_handlers, + self.edited_channel_post_handlers, + ]) def __del__(self): self.stop_polling() diff --git a/aiogram/dispatcher/filters/builtin.py b/aiogram/dispatcher/filters/builtin.py index e15b98de..4d5af40a 100644 --- a/aiogram/dispatcher/filters/builtin.py +++ b/aiogram/dispatcher/filters/builtin.py @@ -625,3 +625,17 @@ class AdminFilter(Filter): admins = [member.user.id for chat_id in chat_ids for member in await obj.bot.get_chat_administrators(chat_id)] return user_id in admins + + +class IsReplyFilter(BoundFilter): + """ + Check if message is replied and send reply message to handler + """ + key = 'is_reply' + + def __init__(self, is_reply): + self.is_reply = is_reply + + async def check(self, msg: ats.Message): + if msg.reply_to_message: + return {'reply': msg.reply_to_message} From 0365173450b7067832bb191a775de1c0b2c77fb8 Mon Sep 17 00:00:00 2001 From: Arwichok Date: Mon, 16 Sep 2019 15:15:43 +0300 Subject: [PATCH 2/6] fix IsReplyFilter typing --- aiogram/dispatcher/filters/builtin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aiogram/dispatcher/filters/builtin.py b/aiogram/dispatcher/filters/builtin.py index 4d5af40a..cec9ff1b 100644 --- a/aiogram/dispatcher/filters/builtin.py +++ b/aiogram/dispatcher/filters/builtin.py @@ -636,6 +636,6 @@ class IsReplyFilter(BoundFilter): def __init__(self, is_reply): self.is_reply = is_reply - async def check(self, msg: ats.Message): + async def check(self, msg: Message): if msg.reply_to_message: return {'reply': msg.reply_to_message} From 615b5af00f69ac8acf16fad010eef9352dc8a271 Mon Sep 17 00:00:00 2001 From: Arwichok Date: Mon, 16 Sep 2019 15:47:31 +0300 Subject: [PATCH 3/6] reply True if msg == None and is_reply == False --- aiogram/dispatcher/filters/builtin.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/aiogram/dispatcher/filters/builtin.py b/aiogram/dispatcher/filters/builtin.py index cec9ff1b..a95ecf52 100644 --- a/aiogram/dispatcher/filters/builtin.py +++ b/aiogram/dispatcher/filters/builtin.py @@ -637,5 +637,7 @@ class IsReplyFilter(BoundFilter): self.is_reply = is_reply async def check(self, msg: Message): - if msg.reply_to_message: + if msg.reply_to_message and self.is_reply: return {'reply': msg.reply_to_message} + elif msg.reply_to_message is None and self.is_reply is False: + return True From 000cd9aad8179212c775d56ee15a0483449635a3 Mon Sep 17 00:00:00 2001 From: Arwichok Date: Mon, 23 Sep 2019 16:24:33 +0300 Subject: [PATCH 4/6] Update aiogram/dispatcher/filters/builtin.py Co-Authored-By: Alex Root Junior --- aiogram/dispatcher/filters/builtin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aiogram/dispatcher/filters/builtin.py b/aiogram/dispatcher/filters/builtin.py index a95ecf52..d11a7e35 100644 --- a/aiogram/dispatcher/filters/builtin.py +++ b/aiogram/dispatcher/filters/builtin.py @@ -639,5 +639,5 @@ class IsReplyFilter(BoundFilter): async def check(self, msg: Message): if msg.reply_to_message and self.is_reply: return {'reply': msg.reply_to_message} - elif msg.reply_to_message is None and self.is_reply is False: + elif not msg.reply_to_message and not self.is_reply: return True From 496560ab0c81172e4de7fada374fe07ac40a3249 Mon Sep 17 00:00:00 2001 From: Arwichok Date: Mon, 23 Sep 2019 16:32:18 +0300 Subject: [PATCH 5/6] Add IsReplyFilter to docs/../filters.rst --- docs/source/dispatcher/filters.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/source/dispatcher/filters.rst b/docs/source/dispatcher/filters.rst index 059a4f06..98c1e8fb 100644 --- a/docs/source/dispatcher/filters.rst +++ b/docs/source/dispatcher/filters.rst @@ -172,3 +172,10 @@ BoundFilter dp.filters_factory.bind(ChatIdFilter, event_handlers=[dp.message_handlers]) + + +IsReplyFilter +------------- +.. autoclass:: aiogram.dispatcher.filters.filters.IsReplyFilter + :members: + :show-inheritance: \ No newline at end of file From 1cd78648ccd5cd414e535d0141eab83670420ad3 Mon Sep 17 00:00:00 2001 From: Arwichok Date: Mon, 23 Sep 2019 16:48:23 +0300 Subject: [PATCH 6/6] Update docs/../filters.rst --- docs/source/dispatcher/filters.rst | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/source/dispatcher/filters.rst b/docs/source/dispatcher/filters.rst index 98c1e8fb..b174f1ef 100644 --- a/docs/source/dispatcher/filters.rst +++ b/docs/source/dispatcher/filters.rst @@ -127,6 +127,14 @@ AdminFilter :show-inheritance: +IsReplyFilter +------------- + +.. autoclass:: aiogram.dispatcher.filters.filters.IsReplyFilter + :members: + :show-inheritance: + + Making own filters (Custom filters) =================================== @@ -173,9 +181,3 @@ BoundFilter dp.filters_factory.bind(ChatIdFilter, event_handlers=[dp.message_handlers]) - -IsReplyFilter -------------- -.. autoclass:: aiogram.dispatcher.filters.filters.IsReplyFilter - :members: - :show-inheritance: \ No newline at end of file