X Tutup
Skip to content

Commit c7dbdce

Browse files
jh0kertsnoam
authored andcommitted
Allow CallbackQueryHandler in ConversationHandler with per_mess… (python-telegram-bot#561)
* 🐛 Allow CallbackQueryHandler in ConversationHandler with per_message=False but show a warning python-telegram-bot#556 * ⏪ warning logs instead of ValueErrors python-telegram-bot#556
1 parent fe5ae8e commit c7dbdce

File tree

2 files changed

+11
-26
lines changed

2 files changed

+11
-26
lines changed

telegram/ext/conversationhandler.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,10 @@ def __init__(self,
122122
if not any((self.per_user, self.per_chat, self.per_message)):
123123
raise ValueError("'per_user', 'per_chat' and 'per_message' can't all be 'False'")
124124

125+
if self.per_message and not self.per_chat:
126+
logging.warning("If 'per_message=True' is used, 'per_chat=True' should also be used, "
127+
"since message IDs are not globally unique.")
128+
125129
all_handlers = list()
126130
all_handlers.extend(entry_points)
127131
all_handlers.extend(fallbacks)
@@ -132,17 +136,20 @@ def __init__(self,
132136
if self.per_message:
133137
for handler in all_handlers:
134138
if not isinstance(handler, CallbackQueryHandler):
135-
raise ValueError("If 'per_message=True', all entry points and state handlers"
136-
" must be 'CallbackQueryHandler'")
139+
logging.warning("If 'per_message=True', all entry points and state handlers"
140+
" must be 'CallbackQueryHandler', since no other handlers "
141+
"have a message context.")
137142
else:
138143
for handler in all_handlers:
139144
if isinstance(handler, CallbackQueryHandler):
140-
raise ValueError("If 'per_message=False', 'CallbackQueryHandler' doesn't work")
145+
logging.warning("If 'per_message=False', 'CallbackQueryHandler' will not be "
146+
"tracked for every message.")
141147

142148
if self.per_chat:
143149
for handler in all_handlers:
144150
if isinstance(handler, (InlineQueryHandler, ChosenInlineResultHandler)):
145-
raise ValueError("If 'per_chat=True', 'InlineQueryHandler' doesn't work")
151+
logging.warning("If 'per_chat=True', 'InlineQueryHandler' can not be used, "
152+
"since inline queries have no chat context.")
146153

147154
def _get_key(self, update):
148155
chat = update.effective_chat

tests/test_conversationhandler.py

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -280,28 +280,6 @@ def two(bot, update):
280280
sleep(.1)
281281
self.assertEquals(handler.conversations[(self.group.id, user.id, message.message_id)], 2)
282282

283-
def test_illegal_handlers(self):
284-
with self.assertRaises(ValueError):
285-
ConversationHandler(
286-
entry_points=[CommandHandler('/test', lambda bot, update: None)],
287-
states={},
288-
fallbacks=[],
289-
per_message=True)
290-
291-
with self.assertRaises(ValueError):
292-
ConversationHandler(
293-
entry_points=[CallbackQueryHandler(lambda bot, update: None)],
294-
states={},
295-
fallbacks=[],
296-
per_message=False)
297-
298-
with self.assertRaises(ValueError):
299-
ConversationHandler(
300-
entry_points=[InlineQueryHandler(lambda bot, update: None)],
301-
states={},
302-
fallbacks=[],
303-
per_chat=True)
304-
305283
def test_endOnFirstMessage(self):
306284
self._setup_updater('', messages=0)
307285
d = self.updater.dispatcher

0 commit comments

Comments
 (0)
X Tutup