From 1df19e3b2dc99092b477cb97e99690b95b0e11d7 Mon Sep 17 00:00:00 2001 From: _run Date: Tue, 5 Jul 2022 21:18:42 +0500 Subject: [PATCH 1/2] CallbackQuery fixes for custom filters Now some custom filters support callback query messages --- telebot/asyncio_filters.py | 9 ++++++++- telebot/custom_filters.py | 8 +++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/telebot/asyncio_filters.py b/telebot/asyncio_filters.py index c594d31..887a953 100644 --- a/telebot/asyncio_filters.py +++ b/telebot/asyncio_filters.py @@ -201,6 +201,8 @@ class ChatFilter(AdvancedCustomFilter): key = 'chat_id' async def check(self, message, text): + if isinstance(message, types.CallbackQuery): + return message.message.chat.id in text return message.chat.id in text @@ -216,7 +218,7 @@ class ForwardFilter(SimpleCustomFilter): key = 'is_forwarded' async def check(self, message): - return message.forward_from_chat is not None + return message.forward_date is not None class IsReplyFilter(SimpleCustomFilter): @@ -231,6 +233,8 @@ class IsReplyFilter(SimpleCustomFilter): key = 'is_reply' async def check(self, message): + if isinstance(message, types.CallbackQuery): + return message.message.reply_to_message is not None return message.reply_to_message is not None @@ -266,6 +270,9 @@ class IsAdminFilter(SimpleCustomFilter): self._bot = bot async def check(self, message): + if isinstance(message, types.CallbackQuery): + result = await self._bot.get_chat_member(message.message.chat.id, message.from_user.id) + return result.status ('creator', 'administrator') result = await self._bot.get_chat_member(message.chat.id, message.from_user.id) return result.status in ['creator', 'administrator'] diff --git a/telebot/custom_filters.py b/telebot/custom_filters.py index abeffdd..407b3ec 100644 --- a/telebot/custom_filters.py +++ b/telebot/custom_filters.py @@ -208,6 +208,8 @@ class ChatFilter(AdvancedCustomFilter): key = 'chat_id' def check(self, message, text): + if isinstance(message, types.CallbackQuery): + return message.message.chat.id in text return message.chat.id in text @@ -223,7 +225,7 @@ class ForwardFilter(SimpleCustomFilter): key = 'is_forwarded' def check(self, message): - return message.forward_from_chat is not None + return message.forward_date is not None class IsReplyFilter(SimpleCustomFilter): @@ -238,6 +240,8 @@ class IsReplyFilter(SimpleCustomFilter): key = 'is_reply' def check(self, message): + if isinstance(message, types.CallbackQuery): + return message.message.reply_to_message is not None return message.reply_to_message is not None @@ -273,6 +277,8 @@ class IsAdminFilter(SimpleCustomFilter): self._bot = bot def check(self, message): + if isinstance(message, types.CallbackQuery): + return self._bot.get_chat_member(message.message.chat.id, message.from_user.id).status in ['creator', 'administrator'] return self._bot.get_chat_member(message.chat.id, message.from_user.id).status in ['creator', 'administrator'] From e1094c6f027921cf6d08587e2602553d89474a03 Mon Sep 17 00:00:00 2001 From: _run Date: Tue, 5 Jul 2022 21:50:11 +0500 Subject: [PATCH 2/2] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1bc6978..253692b 100644 --- a/README.md +++ b/README.md @@ -398,7 +398,7 @@ Here is example of creating filter-class: ```python class IsAdmin(telebot.custom_filters.SimpleCustomFilter): # Class will check whether the user is admin or creator in group or not - key='is_admin' + key='is_chat_admin' @staticmethod def check(message: telebot.types.Message): return bot.get_chat_member(message.chat.id,message.from_user.id).status in ['administrator','creator'] @@ -407,7 +407,7 @@ class IsAdmin(telebot.custom_filters.SimpleCustomFilter): bot.add_custom_filter(IsAdmin()) # Now, you can use it in handler. -@bot.message_handler(is_admin=True) +@bot.message_handler(is_chat_admin=True) def admin_of_group(message): bot.send_message(message.chat.id, 'You are admin of this group!')