X Tutup
Skip to content

Commit 3f28633

Browse files
committed
MessageHandler / filters: refactor
filters are now functions instead of enum like objects. their definitions were moved to messagehandler.py
1 parent 8ff8d57 commit 3f28633

File tree

11 files changed

+89
-77
lines changed

11 files changed

+89
-77
lines changed

README.rst

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -371,9 +371,8 @@ Our bot is now up and running (go ahead and try it)! It's not doing anything yet
371371
>>> def echo(bot, update):
372372
... bot.sendMessage(chat_id=update.message.chat_id, text=update.message.text)
373373
...
374-
>>> from telegram.ext import MessageHandler
375-
>>> from telegram.ext import filters
376-
>>> echo_handler = MessageHandler([filters.TEXT], echo)
374+
>>> from telegram.ext import MessageHandler, Filters
375+
>>> echo_handler = MessageHandler([Filters.text], echo)
377376
>>> dispatcher.addHandler(echo_handler)
378377
379378
Our bot should now reply to all text messages that are not a command with a message that has the same content.

docs/source/telegram.ext.filters.rst

Lines changed: 0 additions & 7 deletions
This file was deleted.

docs/source/telegram.ext.rst

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ Submodules
1414
telegram.ext.commandhandler
1515
telegram.ext.inlinequeryhandler
1616
telegram.ext.messagehandler
17-
telegram.ext.filters
1817
telegram.ext.regexhandler
1918
telegram.ext.stringcommandhandler
2019
telegram.ext.stringregexhandler

examples/clibot.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"""
2020

2121
from telegram.ext import Updater, StringCommandHandler, StringRegexHandler, \
22-
MessageHandler, CommandHandler, RegexHandler, filters
22+
MessageHandler, CommandHandler, RegexHandler, Filters
2323
from telegram.ext.dispatcher import run_async
2424
from time import sleep
2525
import logging
@@ -115,7 +115,7 @@ def main():
115115
dp.addHandler(CommandHandler("start", start))
116116
dp.addHandler(CommandHandler("help", help))
117117
# Message handlers only receive updates that don't contain commands
118-
dp.addHandler(MessageHandler([filters.TEXT], message))
118+
dp.addHandler(MessageHandler([Filters.text], message))
119119
# Regex handlers will receive all updates on which their regex matches,
120120
# but we have to add it in a separate group, since in one group,
121121
# only one handler will be executed

examples/echobot2.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
bot.
1818
"""
1919

20-
from telegram.ext import Updater, CommandHandler, MessageHandler, filters
20+
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
2121
import logging
2222

2323
# Enable logging
@@ -58,7 +58,7 @@ def main():
5858
dp.addHandler(CommandHandler("help", help))
5959

6060
# on noncommand i.e message - echo the message on Telegram
61-
dp.addHandler(MessageHandler([filters.TEXT], echo))
61+
dp.addHandler(MessageHandler([Filters.text], echo))
6262

6363
# log all errors
6464
dp.addErrorHandler(error)

examples/inlinekeyboard_example.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from telegram import Emoji, ForceReply, InlineKeyboardButton, \
1010
InlineKeyboardMarkup
1111
from telegram.ext import Updater, CommandHandler, MessageHandler, \
12-
CallbackQueryHandler, filters
12+
CallbackQueryHandler, Filters
1313

1414
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - '
1515
'%(message)s',
@@ -105,7 +105,7 @@ def error(bot, update, error):
105105
# The command
106106
updater.dispatcher.addHandler(CommandHandler('set', set_value))
107107
# The answer
108-
updater.dispatcher.addHandler(MessageHandler([filters.TEXT], entered_value))
108+
updater.dispatcher.addHandler(MessageHandler([Filters.text], entered_value))
109109
# The confirmation
110110
updater.dispatcher.addHandler(CallbackQueryHandler(confirm_value))
111111
updater.dispatcher.addHandler(CommandHandler('start', help))

examples/state_machine_bot.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import logging
88
from telegram import Emoji, ForceReply, ReplyKeyboardMarkup, KeyboardButton
9-
from telegram.ext import Updater, CommandHandler, MessageHandler, filters
9+
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
1010

1111
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - '
1212
'%(message)s',
@@ -93,7 +93,7 @@ def help(bot, update):
9393
# The command
9494
updater.dispatcher.addHandler(CommandHandler('set', set_value))
9595
# The answer and confirmation
96-
updater.dispatcher.addHandler(MessageHandler([filters.TEXT], set_value))
96+
updater.dispatcher.addHandler(MessageHandler([Filters.text], set_value))
9797
updater.dispatcher.addHandler(CommandHandler('cancel', cancel))
9898
updater.dispatcher.addHandler(CommandHandler('start', help))
9999
updater.dispatcher.addHandler(CommandHandler('help', help))

telegram/ext/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@
2727
from .commandhandler import CommandHandler
2828
from .handler import Handler
2929
from .inlinequeryhandler import InlineQueryHandler
30-
from .messagehandler import MessageHandler
30+
from .messagehandler import MessageHandler, Filters
3131
from .regexhandler import RegexHandler
3232
from .stringcommandhandler import StringCommandHandler
3333
from .stringregexhandler import StringRegexHandler
3434
from .typehandler import TypeHandler
3535

3636
__all__ = ('Dispatcher', 'JobQueue', 'Updater', 'CallbackQueryHandler',
3737
'ChosenInlineResultHandler', 'CommandHandler', 'Handler',
38-
'InlineQueryHandler', 'MessageHandler', 'RegexHandler',
38+
'InlineQueryHandler', 'MessageHandler', 'Filters', 'RegexHandler',
3939
'StringCommandHandler', 'StringRegexHandler', 'TypeHandler')

telegram/ext/filters.py

Lines changed: 0 additions & 23 deletions
This file was deleted.

telegram/ext/messagehandler.py

Lines changed: 75 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,71 @@
2222
from .handler import Handler
2323
from telegram import Update
2424

25-
from .filters import * # flake8: noqa
25+
26+
class Filters(object):
27+
"""
28+
Convenient namespace (class) & methods for the filter funcs of the
29+
MessageHandler class.
30+
"""
31+
32+
@staticmethod
33+
def text(update):
34+
return update.message.text and not update.message.text.startswith('/')
35+
36+
@staticmethod
37+
def command(update):
38+
return update.message.text and update.message.text.startswith('/')
39+
40+
@staticmethod
41+
def audio(update):
42+
return bool(update.message.audio)
43+
44+
@staticmethod
45+
def document(update):
46+
return bool(update.message.document)
47+
48+
@staticmethod
49+
def photo(update):
50+
return bool(update.message.photo)
51+
52+
@staticmethod
53+
def sticker(update):
54+
return bool(update.message.sticker)
55+
56+
@staticmethod
57+
def video(update):
58+
return bool(update.message.video)
59+
60+
@staticmethod
61+
def voice(update):
62+
return bool(update.message.voice)
63+
64+
@staticmethod
65+
def contact(update):
66+
return bool(update.message.contact)
67+
68+
@staticmethod
69+
def location(update):
70+
return bool(update.message.location)
71+
72+
@staticmethod
73+
def venue(update):
74+
return bool(update.message.venue)
75+
76+
@staticmethod
77+
def status_update(update):
78+
return bool(
79+
update.message.new_chat_member or
80+
update.message.left_chat_member or
81+
update.message.new_chat_title or
82+
update.message.new_chat_photo or
83+
update.message.delete_chat_photo or
84+
update.message.group_chat_created or
85+
update.message.supergroup_chat_created or
86+
update.message.channel_chat_created or
87+
update.message.migrate_to_chat_id or
88+
update.message.migrate_from_chat_id or
89+
update.message.pinned_message)
2690

2791

2892
class MessageHandler(Handler):
@@ -32,8 +96,10 @@ class MessageHandler(Handler):
3296
updates.
3397
3498
Args:
35-
filters (list): A list of filters defined in ``telegram.ext.filters``.
36-
All messages that match at least one of those filters will be
99+
filters (list[function]): A list of filter functions. Standard filters
100+
can be found in the Filters class above.
101+
| Each `function` takes ``Update`` as arg and returns ``bool``.
102+
| All messages that match at least one of those filters will be
37103
accepted. If ``bool(filters)`` evaluates to ``False``, messages are
38104
not filtered.
39105
callback (function): A function that takes ``bot, update`` as
@@ -49,36 +115,14 @@ def __init__(self, filters, callback, pass_update_queue=False):
49115
self.filters = filters
50116

51117
def checkUpdate(self, update):
52-
filters = self.filters
53118
if isinstance(update, Update) and update.message:
54-
message = update.message
55-
return (not filters or # If filters is empty, accept all messages
56-
TEXT in filters and message.text and
57-
not message.text.startswith('/') or
58-
AUDIO in filters and message.audio or
59-
DOCUMENT in filters and message.document or
60-
PHOTO in filters and message.photo or
61-
STICKER in filters and message.sticker or
62-
VIDEO in filters and message.video or
63-
VOICE in filters and message.voice or
64-
CONTACT in filters and message.contact or
65-
LOCATION in filters and message.location or
66-
VENUE in filters and message.venue or
67-
STATUS_UPDATE in filters and (
68-
message.new_chat_member or
69-
message.left_chat_member or
70-
message.new_chat_title or
71-
message.new_chat_photo or
72-
message.delete_chat_photo or
73-
message.group_chat_created or
74-
message.supergroup_chat_created or
75-
message.channel_chat_created or
76-
message.migrate_to_chat_id or
77-
message.migrate_from_chat_id or
78-
message.pinned_message)
79-
)
119+
if not self.filters:
120+
res = True
121+
else:
122+
res = any(func(update) for func in self.filters)
80123
else:
81-
return False
124+
res = False
125+
return res
82126

83127
def handleUpdate(self, update, dispatcher):
84128
optional_args = self.collectOptionalArgs(dispatcher)

0 commit comments

Comments
 (0)
X Tutup