Route updates according to their type calling associated method
This commit is contained in:
parent
2bb0ef9436
commit
ab563c9486
@ -60,6 +60,20 @@ class Bot(TelegramBot):
|
|||||||
self._session_token = get_secure_key(length=10)
|
self._session_token = get_secure_key(length=10)
|
||||||
self._name = None
|
self._name = None
|
||||||
self._telegram_id = None
|
self._telegram_id = None
|
||||||
|
# The following routing table associates each type of Telegram `update`
|
||||||
|
# with a Bot method to be invoked on it.
|
||||||
|
self.routing_table = {
|
||||||
|
'message': self.message_router,
|
||||||
|
'edited_message': self.edited_message_handler,
|
||||||
|
'channel_post': self.channel_post_handler,
|
||||||
|
'edited_channel_post': self.edited_channel_post_handler,
|
||||||
|
'inline_query': self.inline_query_handler,
|
||||||
|
'chosen_inline_result': self.chosen_inline_result_handler,
|
||||||
|
'callback_query': self.callback_query_handler,
|
||||||
|
'shipping_query': self.shipping_query_handler,
|
||||||
|
'pre_checkout_query': self.pre_checkout_query_handler,
|
||||||
|
'poll': self.poll_handler,
|
||||||
|
}
|
||||||
self._under_maintenance = False
|
self._under_maintenance = False
|
||||||
self._allowed_during_maintenance = []
|
self._allowed_during_maintenance = []
|
||||||
self._maintenance_message = None
|
self._maintenance_message = None
|
||||||
@ -174,6 +188,88 @@ class Bot(TelegramBot):
|
|||||||
return ("I am currently under maintenance!\n"
|
return ("I am currently under maintenance!\n"
|
||||||
"Please retry later...")
|
"Please retry later...")
|
||||||
|
|
||||||
|
async def message_router(self, update):
|
||||||
|
"""Route Telegram `message` update to appropriate message handler."""
|
||||||
|
for key, value in update.items():
|
||||||
|
if key in self.message_handlers:
|
||||||
|
return await self.message_handlers[key](update)
|
||||||
|
logging.error(
|
||||||
|
f"The following message update was received: {update}\n"
|
||||||
|
"However, this message type is unknown."
|
||||||
|
)
|
||||||
|
|
||||||
|
async def edited_message_handler(self, update):
|
||||||
|
"""Handle Telegram `edited_message` update."""
|
||||||
|
logging.info(
|
||||||
|
f"The following update was received: {update}\n"
|
||||||
|
"However, this edited_message handler does nothing yet."
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
async def channel_post_handler(self, update):
|
||||||
|
"""Handle Telegram `channel_post` update."""
|
||||||
|
logging.info(
|
||||||
|
f"The following update was received: {update}\n"
|
||||||
|
"However, this channel_post handler does nothing yet."
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
async def edited_channel_post_handler(self, update):
|
||||||
|
"""Handle Telegram `edited_channel_post` update."""
|
||||||
|
logging.info(
|
||||||
|
f"The following update was received: {update}\n"
|
||||||
|
"However, this edited_channel_post handler does nothing yet."
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
async def inline_query_handler(self, update):
|
||||||
|
"""Handle Telegram `inline_query` update."""
|
||||||
|
logging.info(
|
||||||
|
f"The following update was received: {update}\n"
|
||||||
|
"However, this inline_query handler does nothing yet."
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
async def chosen_inline_result_handler(self, update):
|
||||||
|
"""Handle Telegram `chosen_inline_result` update."""
|
||||||
|
logging.info(
|
||||||
|
f"The following update was received: {update}\n"
|
||||||
|
"However, this chosen_inline_result handler does nothing yet."
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
async def callback_query_handler(self, update):
|
||||||
|
"""Handle Telegram `callback_query` update."""
|
||||||
|
logging.info(
|
||||||
|
f"The following update was received: {update}\n"
|
||||||
|
"However, this callback_query handler does nothing yet."
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
async def shipping_query_handler(self, update):
|
||||||
|
"""Handle Telegram `shipping_query` update."""
|
||||||
|
logging.info(
|
||||||
|
f"The following update was received: {update}\n"
|
||||||
|
"However, this shipping_query handler does nothing yet."
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
async def pre_checkout_query_handler(self, update):
|
||||||
|
"""Handle Telegram `pre_checkout_query` update."""
|
||||||
|
logging.info(
|
||||||
|
f"The following update was received: {update}\n"
|
||||||
|
"However, this pre_checkout_query handler does nothing yet."
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
async def poll_handler(self, update):
|
||||||
|
"""Handle Telegram `poll` update."""
|
||||||
|
logging.info(
|
||||||
|
f"The following update was received: {update}\n"
|
||||||
|
"However, this poll handler does nothing yet."
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def set_class_maintenance_message(cls, maintenance_message):
|
def set_class_maintenance_message(cls, maintenance_message):
|
||||||
"""Set class maintenance message.
|
"""Set class maintenance message.
|
||||||
@ -381,20 +477,29 @@ class Bot(TelegramBot):
|
|||||||
async def route_update(self, update):
|
async def route_update(self, update):
|
||||||
"""Pass `update` to proper method.
|
"""Pass `update` to proper method.
|
||||||
|
|
||||||
Work in progress: at the moment the update gets simply printed and
|
Update objects have two keys:
|
||||||
echoed back in the same chat.
|
- `update_id` (which is used as offset while retrieving new updates)
|
||||||
|
- One and only one of the following
|
||||||
|
`message`
|
||||||
|
`edited_message`
|
||||||
|
`channel_post`
|
||||||
|
`edited_channel_post`
|
||||||
|
`inline_query`
|
||||||
|
`chosen_inline_result`
|
||||||
|
`callback_query`
|
||||||
|
`shipping_query`
|
||||||
|
`pre_checkout_query`
|
||||||
|
`poll`
|
||||||
"""
|
"""
|
||||||
print(update)
|
|
||||||
await self.sendMessage(
|
|
||||||
chat_id=update['message']['chat']['id'],
|
|
||||||
text=update['message']['text']
|
|
||||||
)
|
|
||||||
return
|
|
||||||
if (
|
if (
|
||||||
self.under_maintenance
|
self.under_maintenance
|
||||||
and not self.is_allowed_during_maintenance(update)
|
and not self.is_allowed_during_maintenance(update)
|
||||||
):
|
):
|
||||||
return await self.handle_update_during_maintenance(update)
|
return await self.handle_update_during_maintenance(update)
|
||||||
|
for key, value in update.items():
|
||||||
|
if key in self.routing_table:
|
||||||
|
return await self.routing_table[key](value)
|
||||||
|
logging.error(f"Unknown type of update.\n{update}")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
async def start_app(cls):
|
async def start_app(cls):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user