Skip to content
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions telegram/ext/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,14 @@
# along with this program. If not, see [http://www.gnu.org/licenses/].
"""Extensions over the Telegram Bot API to facilitate bot making"""

from .dispatcher import Dispatcher
from .annotations import UpdateQueue, ChatData, Groupdict, Groups, UserData, Args
from .jobqueue import JobQueue, Job
from .dispatcher import Dispatcher
from .updater import Updater
from .handler import Handler
from .callbackqueryhandler import CallbackQueryHandler
from .choseninlineresulthandler import ChosenInlineResultHandler
from .commandhandler import CommandHandler
from .handler import Handler
from .inlinequeryhandler import InlineQueryHandler
from .messagehandler import MessageHandler
from .filters import BaseFilter, Filters
Expand All @@ -36,8 +37,10 @@
from .precheckoutqueryhandler import PreCheckoutQueryHandler
from .shippingqueryhandler import ShippingQueryHandler


__all__ = ('Dispatcher', 'JobQueue', 'Job', 'Updater', 'CallbackQueryHandler',
'ChosenInlineResultHandler', 'CommandHandler', 'Handler', 'InlineQueryHandler',
'MessageHandler', 'BaseFilter', 'Filters', 'RegexHandler', 'StringCommandHandler',
'StringRegexHandler', 'TypeHandler', 'ConversationHandler',
'PreCheckoutQueryHandler', 'ShippingQueryHandler')
'PreCheckoutQueryHandler', 'ShippingQueryHandler', 'UpdateQueue', 'ChatData',
'Groups', 'Groupdict', 'UserData', 'Args')
28 changes: 28 additions & 0 deletions telegram/ext/annotations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from collections import defaultdict
from queue import Queue


class Groupdict(dict):
pass


class Groups(list):
pass


class ChatData(defaultdict):
pass


class UserData(defaultdict):
pass


class UpdateQueue(Queue):
pass


class Args(list):
pass

# Also JobQueue
18 changes: 9 additions & 9 deletions telegram/ext/callbackqueryhandler.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
from future.utils import string_types

from telegram import Update
from .handler import Handler
from telegram.ext import Handler, Groups, Groupdict


class CallbackQueryHandler(Handler):
Expand Down Expand Up @@ -66,10 +66,10 @@ def __init__(self,
pass_update_queue=False,
pass_job_queue=False,
pattern=None,
pass_groups=False,
pass_groupdict=False,
pass_user_data=False,
pass_chat_data=False):
pass_groups=None,
pass_groupdict=None,
pass_user_data=None,
pass_chat_data=None):
super(CallbackQueryHandler, self).__init__(
callback,
pass_update_queue=pass_update_queue,
Expand All @@ -81,8 +81,8 @@ def __init__(self,
pattern = re.compile(pattern)

self.pattern = pattern
self.pass_groups = pass_groups
self.pass_groupdict = pass_groupdict
self.pass_groups = self.should_pass(Groups, pass_groups, 'groups')
self.pass_groupdict = self.should_pass(Groupdict, pass_groups, 'groups')

def check_update(self, update):
if isinstance(update, Update) and update.callback_query:
Expand All @@ -99,8 +99,8 @@ def handle_update(self, update, dispatcher):
match = re.match(self.pattern, update.callback_query.data)

if self.pass_groups:
optional_args['groups'] = match.groups()
optional_args[self.pass_groups] = Groups(match.groups())
if self.pass_groupdict:
optional_args['groupdict'] = match.groupdict()
optional_args[self.pass_groupdict] = Groupdict(match.groupdict())

return self.callback(dispatcher.bot, update, **optional_args)
8 changes: 4 additions & 4 deletions telegram/ext/choseninlineresulthandler.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,10 @@ class ChosenInlineResultHandler(Handler):

def __init__(self,
callback,
pass_update_queue=False,
pass_job_queue=False,
pass_user_data=False,
pass_chat_data=False):
pass_update_queue=None,
pass_job_queue=None,
pass_user_data=None,
pass_chat_data=None):
super(ChosenInlineResultHandler, self).__init__(
callback,
pass_update_queue=pass_update_queue,
Expand Down
16 changes: 8 additions & 8 deletions telegram/ext/commandhandler.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
""" This module contains the CommandHandler class """
import warnings

from .handler import Handler
from telegram.ext import Handler, Args
from telegram import Update


Expand Down Expand Up @@ -69,11 +69,11 @@ def __init__(self,
callback,
filters=None,
allow_edited=False,
pass_args=False,
pass_update_queue=False,
pass_job_queue=False,
pass_user_data=False,
pass_chat_data=False):
pass_args=None,
pass_update_queue=None,
pass_job_queue=None,
pass_user_data=None,
pass_chat_data=None):
super(CommandHandler, self).__init__(
callback,
pass_update_queue=pass_update_queue,
Expand All @@ -91,7 +91,7 @@ def __init__(self,
self.command = [x.lower() for x in command]
self.filters = filters
self.allow_edited = allow_edited
self.pass_args = pass_args
self.pass_args = self.should_pass(Args, pass_args, 'args')

# We put this up here instead of with the rest of checking code
# in check_update since we don't wanna spam a ton
Expand Down Expand Up @@ -131,6 +131,6 @@ def handle_update(self, update, dispatcher):
message = update.message or update.edited_message

if self.pass_args:
optional_args['args'] = message.text.split()[1:]
optional_args[self.pass_args] = Args(message.text.split()[1:])

return self.callback(dispatcher.bot, update, **optional_args)
6 changes: 3 additions & 3 deletions telegram/ext/dispatcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@
from threading import Thread, Lock, Event, current_thread, BoundedSemaphore
from time import sleep
from uuid import uuid4
from collections import defaultdict

from queue import Queue, Empty

from future.builtins import range

from telegram import TelegramError
from telegram.ext import ChatData, UserData
from telegram.ext.handler import Handler
from telegram.utils.promise import Promise

Expand Down Expand Up @@ -86,9 +86,9 @@ def __init__(self, bot, update_queue, workers=4, exception_event=None, job_queue
self.job_queue = job_queue
self.workers = workers

self.user_data = defaultdict(dict)
self.user_data = UserData(dict)
""":type: dict[int, dict]"""
self.chat_data = defaultdict(dict)
self.chat_data = ChatData(dict)
""":type: dict[int, dict]"""

self.handlers = {}
Expand Down
43 changes: 25 additions & 18 deletions telegram/ext/handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
# along with this program. If not, see [http://www.gnu.org/licenses/].
""" This module contains the base class for handlers as used by the
Dispatcher """
from telegram.ext import UpdateQueue, JobQueue, UserData, ChatData


class Handler(object):
Expand Down Expand Up @@ -49,15 +50,15 @@ class Handler(object):

def __init__(self,
callback,
pass_update_queue=False,
pass_job_queue=False,
pass_user_data=False,
pass_chat_data=False):
pass_update_queue=None,
pass_job_queue=None,
pass_user_data=None,
pass_chat_data=None):
self.callback = callback
self.pass_update_queue = pass_update_queue
self.pass_job_queue = pass_job_queue
self.pass_user_data = pass_user_data
self.pass_chat_data = pass_chat_data
self.pass_update_queue = self.should_pass(UpdateQueue, pass_update_queue, 'update_queue')
self.pass_job_queue = self.should_pass(JobQueue, pass_job_queue, 'job_queue')
self.pass_user_data = self.should_pass(UserData, pass_user_data, 'user_data')
self.pass_chat_data = self.should_pass(ChatData, pass_chat_data, 'chat_data')

def check_update(self, update):
"""
Expand Down Expand Up @@ -98,17 +99,23 @@ def collect_optional_args(self, dispatcher, update=None):
optional_args = dict()

if self.pass_update_queue:
optional_args['update_queue'] = dispatcher.update_queue
optional_args[self.pass_update_queue] = dispatcher.update_queue
if self.pass_job_queue:
optional_args['job_queue'] = dispatcher.job_queue
if self.pass_user_data or self.pass_chat_data:
chat = update.effective_chat
optional_args[self.pass_job_queue] = dispatcher.job_queue
if self.pass_user_data:
user = update.effective_user

if self.pass_user_data:
optional_args['user_data'] = dispatcher.user_data[user.id if user else None]

if self.pass_chat_data:
optional_args['chat_data'] = dispatcher.chat_data[chat.id if chat else None]
optional_args[self.pass_user_data] = dispatcher.user_data[user.id if user else None]
if self.pass_chat_data:
chat = update.effective_chat
optional_args[self.pass_chat_data] = dispatcher.chat_data[chat.id if chat else None]

return optional_args

def should_pass(self, type_, overwrite, default_name):
if overwrite:
return default_name
elif overwrite is None:
for name, annotation in self.callback.__annotations__.items():
if annotation == type_:
return name
return False
22 changes: 11 additions & 11 deletions telegram/ext/inlinequeryhandler.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@
from future.utils import string_types

from telegram import Update
from telegram.ext import Handler, Groups, Groupdict
from telegram.utils.deprecate import deprecate
from .handler import Handler


class InlineQueryHandler(Handler):
Expand Down Expand Up @@ -63,13 +63,13 @@ class InlineQueryHandler(Handler):

def __init__(self,
callback,
pass_update_queue=False,
pass_job_queue=False,
pass_update_queue=None,
pass_job_queue=None,
pattern=None,
pass_groups=False,
pass_groupdict=False,
pass_user_data=False,
pass_chat_data=False):
pass_groups=None,
pass_groupdict=None,
pass_user_data=None,
pass_chat_data=None):
super(InlineQueryHandler, self).__init__(
callback,
pass_update_queue=pass_update_queue,
Expand All @@ -81,8 +81,8 @@ def __init__(self,
pattern = re.compile(pattern)

self.pattern = pattern
self.pass_groups = pass_groups
self.pass_groupdict = pass_groupdict
self.pass_groups = self.should_pass(Groups, pass_groups, 'groups')
self.pass_groupdict = self.should_pass(Groupdict, pass_groupdict, 'groupdict')

def check_update(self, update):
if isinstance(update, Update) and update.inline_query:
Expand All @@ -99,9 +99,9 @@ def handle_update(self, update, dispatcher):
match = re.match(self.pattern, update.inline_query.query)

if self.pass_groups:
optional_args['groups'] = match.groups()
optional_args[self.pass_groups] = Groups(match.groups())
if self.pass_groupdict:
optional_args['groupdict'] = match.groupdict()
optional_args[self.pass_groupdict] = Groupdict(match.groupdict())

return self.callback(dispatcher.bot, update, **optional_args)

Expand Down
8 changes: 4 additions & 4 deletions telegram/ext/messagehandler.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,10 @@ def __init__(self,
filters,
callback,
allow_edited=False,
pass_update_queue=False,
pass_job_queue=False,
pass_user_data=False,
pass_chat_data=False,
pass_update_queue=None,
pass_job_queue=None,
pass_user_data=None,
pass_chat_data=None,
message_updates=True,
channel_post_updates=True,
edited_updates=False):
Expand Down
8 changes: 4 additions & 4 deletions telegram/ext/precheckoutqueryhandler.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@ class PreCheckoutQueryHandler(Handler):

def __init__(self,
callback,
pass_update_queue=False,
pass_job_queue=False,
pass_user_data=False,
pass_chat_data=False):
pass_update_queue=None,
pass_job_queue=None,
pass_user_data=None,
pass_chat_data=None):
super(PreCheckoutQueryHandler, self).__init__(
callback,
pass_update_queue=pass_update_queue,
Expand Down
22 changes: 11 additions & 11 deletions telegram/ext/regexhandler.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@

from future.utils import string_types

from .handler import Handler
from telegram import Update
from telegram.utils.deprecate import deprecate
from telegram.ext import Handler, Groups, Groupdict


class RegexHandler(Handler):
Expand Down Expand Up @@ -66,12 +66,12 @@ class RegexHandler(Handler):
def __init__(self,
pattern,
callback,
pass_groups=False,
pass_groupdict=False,
pass_update_queue=False,
pass_job_queue=False,
pass_user_data=False,
pass_chat_data=False,
pass_groups=None,
pass_groupdict=None,
pass_update_queue=None,
pass_job_queue=None,
pass_user_data=None,
pass_chat_data=None,
allow_edited=False,
message_updates=True,
channel_post_updates=False):
Expand All @@ -86,8 +86,8 @@ def __init__(self,
pattern = re.compile(pattern)

self.pattern = pattern
self.pass_groups = pass_groups
self.pass_groupdict = pass_groupdict
self.pass_groups = self.should_pass(Groups, pass_groups, 'groups')
self.pass_groupdict = self.should_pass(Groupdict, pass_groupdict, 'groupdict')
self.allow_edited = allow_edited
self.message_updates = message_updates
self.channel_post_updates = channel_post_updates
Expand All @@ -114,9 +114,9 @@ def handle_update(self, update, dispatcher):
match = re.match(self.pattern, update.effective_message.text)

if self.pass_groups:
optional_args['groups'] = match.groups()
optional_args[self.pass_groups] = Groups(match.groups())
if self.pass_groupdict:
optional_args['groupdict'] = match.groupdict()
optional_args[self.pass_groupdict] = Groupdict(match.groupdict())

return self.callback(dispatcher.bot, update, **optional_args)

Expand Down
Loading