mirror of
https://github.com/eternnoir/pyTelegramBotAPI.git
synced 2023-08-10 21:12:57 +03:00
Merge pull request #1587 from coder2020official/master
Middleware update: everything in data will be passed to handler if ne…
This commit is contained in:
commit
752f35614c
@ -9,6 +9,7 @@ import time
|
||||
import traceback
|
||||
from typing import Any, Callable, List, Optional, Union
|
||||
|
||||
|
||||
# these imports are used to avoid circular import error
|
||||
import telebot.util
|
||||
import telebot.types
|
||||
@ -3977,7 +3978,7 @@ class TeleBot:
|
||||
middlewares = [i for i in self.middlewares if update_type in i.update_types]
|
||||
return middlewares
|
||||
|
||||
def _run_middlewares_and_handler(self, message, handlers, middlewares, *args, **kwargs):
|
||||
def _run_middlewares_and_handler(self, message, handlers, middlewares):
|
||||
"""
|
||||
This class is made to run handler and middleware in queue.
|
||||
|
||||
@ -3998,6 +3999,7 @@ class TeleBot:
|
||||
return
|
||||
elif isinstance(result, SkipHandler) and skip_handler is False:
|
||||
skip_handler = True
|
||||
|
||||
|
||||
try:
|
||||
if handlers and not skip_handler:
|
||||
@ -4009,24 +4011,24 @@ class TeleBot:
|
||||
params.append(i)
|
||||
if len(params) == 1:
|
||||
handler['function'](message)
|
||||
|
||||
elif len(params) == 2:
|
||||
if handler.get('pass_bot') is True:
|
||||
handler['function'](message, self)
|
||||
|
||||
elif handler.get('pass_bot') is False:
|
||||
handler['function'](message, data)
|
||||
|
||||
elif len(params) == 3:
|
||||
if params[2] == 'bot' and handler.get('pass_bot') is True:
|
||||
handler['function'](message, data, self)
|
||||
else:
|
||||
if "data" in params:
|
||||
if len(params) == 2:
|
||||
handler['function'](message, data)
|
||||
elif len(params) == 3:
|
||||
handler['function'](message, data=data, bot=self)
|
||||
else:
|
||||
logger.error("It is not allowed to pass data and values inside data to the handler. Check your handler: {}".format(handler['function']))
|
||||
return
|
||||
|
||||
elif not handler.get('pass_bot'):
|
||||
raise RuntimeError('Your handler accepts 3 parameters but pass_bot is False. Please re-check your handler.')
|
||||
|
||||
else:
|
||||
handler['function'](message, self, data)
|
||||
|
||||
if handler.get('pass_bot'): data["bot"] = self
|
||||
if len(data) > len(params) - 1: # remove the message parameter
|
||||
logger.error("You are passing more data than the handler needs. Check your handler: {}".format(handler['function']))
|
||||
return
|
||||
|
||||
handler["function"](message, **data)
|
||||
|
||||
except Exception as e:
|
||||
handler_error = e
|
||||
|
||||
@ -4035,6 +4037,9 @@ class TeleBot:
|
||||
return self.exception_handler.handle(e)
|
||||
logging.error(str(e))
|
||||
return
|
||||
# remove the bot from data
|
||||
if "bot" in data:
|
||||
del data["bot"]
|
||||
if middlewares:
|
||||
for middleware in middlewares:
|
||||
middleware.post_process(message, data, handler_error)
|
||||
|
@ -277,7 +277,7 @@ class AsyncTeleBot:
|
||||
handler_error = None
|
||||
data = {}
|
||||
process_handler = True
|
||||
|
||||
params = []
|
||||
if middlewares:
|
||||
for middleware in middlewares:
|
||||
middleware_result = await middleware.pre_process(message, data)
|
||||
@ -295,27 +295,27 @@ class AsyncTeleBot:
|
||||
continue
|
||||
elif process_update:
|
||||
try:
|
||||
params = []
|
||||
|
||||
for i in signature(handler['function']).parameters:
|
||||
params.append(i)
|
||||
if len(params) == 1:
|
||||
await handler['function'](message)
|
||||
break
|
||||
elif len(params) == 2:
|
||||
if handler['pass_bot']:
|
||||
await handler['function'](message, self)
|
||||
break
|
||||
else:
|
||||
if "data" in params:
|
||||
if len(params) == 2:
|
||||
await handler['function'](message, data)
|
||||
elif len(params) == 3:
|
||||
await handler['function'](message, data=data, bot=self)
|
||||
else:
|
||||
logger.error("It is not allowed to pass data and values inside data to the handler. Check your handler: {}".format(handler['function']))
|
||||
return
|
||||
|
||||
else:
|
||||
await handler['function'](message, data)
|
||||
break
|
||||
elif len(params) == 3:
|
||||
if handler['pass_bot'] and params[1] == 'bot':
|
||||
await handler['function'](message, self, data)
|
||||
break
|
||||
else:
|
||||
await handler['function'](message, data)
|
||||
break
|
||||
|
||||
if handler.get('pass_bot'): data["bot"] = self
|
||||
if len(data) > len(params) - 1:
|
||||
logger.error("You are passing more data than the handler needs. Check your handler: {}".format(handler['function']))
|
||||
return
|
||||
await handler["function"](message, **data)
|
||||
except Exception as e:
|
||||
handler_error = e
|
||||
|
||||
@ -324,6 +324,9 @@ class AsyncTeleBot:
|
||||
return self.exception_handler.handle(e)
|
||||
logging.error(str(e))
|
||||
return
|
||||
# remove the bot from data
|
||||
if "bot" in data:
|
||||
del data["bot"]
|
||||
|
||||
if middlewares:
|
||||
for middleware in middlewares:
|
||||
|
Loading…
Reference in New Issue
Block a user