Set default keyboard at setup

This commit is contained in:
Davte 2019-07-01 20:34:16 +02:00
parent 8f261a4cfa
commit 4ae826f52c

View File

@ -13,7 +13,7 @@ from aiohttp import web
# Project modules
from api import TelegramBot, TelegramError
from utilities import get_secure_key
from utilities import get_secure_key, make_lines_of_buttons
# Do not log aiohttp `INFO` and `DEBUG` levels
logging.getLogger('aiohttp').setLevel(logging.WARNING)
@ -124,6 +124,8 @@ class Bot(TelegramBot):
self._authorization_denied_message = None
# Default authorization function (always return True)
self.authorization_function = lambda update, authorization_level: True
self.default_reply_keyboard_elements = []
self._default_keyboard = dict()
return
@property
@ -245,6 +247,14 @@ class Bot(TelegramBot):
return self._authorization_denied_message
return self.__class__._authorization_denied_message
@property
def default_keyboard(self):
"""Get the default keyboard.
It is sent when reply_markup is left blank and chat is private.
"""
return self._default_keyboard
async def message_router(self, update):
"""Route Telegram `message` update to appropriate message handler."""
for key, value in update.items():
@ -733,6 +743,33 @@ class Bot(TelegramBot):
del self.individual_text_message_handlers[identifier]
return
def set_default_keyboard(self, keyboard='set_default'):
"""Set a default keyboard for the bot.
If a keyboard is not passed as argument, a default one is generated,
based on aliases of commands.
"""
if keyboard == 'set_default':
buttons = [
dict(
text=x
)
for x in self.default_reply_keyboard_elements
]
if len(buttons) == 0:
self._default_keyboard = None
else:
self._default_keyboard = dict(
keyboard=make_lines_of_buttons(
buttons,
(2 if len(buttons) < 4 else 3) # Row length
),
resize_keyboard=True
)
else:
self._default_keyboard = keyboard
return
async def webhook_feeder(self, request):
"""Handle incoming HTTP `request`s.
@ -774,6 +811,7 @@ class Bot(TelegramBot):
def setup(self):
"""Make bot ask for updates and handle responses."""
self.set_default_keyboard()
if not self.webhook_url:
asyncio.ensure_future(self.get_updates())
else: