diff --git a/davtelepot/bot.py b/davtelepot/bot.py index 339d17d..566546d 100644 --- a/davtelepot/bot.py +++ b/davtelepot/bot.py @@ -7,6 +7,7 @@ camelCase methods mirror API directly, while snake_case ones act as middlewares # Standard library modules import asyncio import logging +import re # Third party modules from aiohttp import web @@ -573,6 +574,71 @@ class Bot(TelegramBot): "but this handler does nothing yet." ) + async def send_message(self, chat_id=None, text=None, + parse_mode=None, + disable_web_page_preview=None, + disable_notification=None, + reply_to_message_id=None, + reply_markup=None, + update=dict(), + reply_to_update=False, + send_default_keyboard=True): + """Send text via message(s). + + This method wraps lower-level `sendMessage` method. + Pass an `update` to extract `chat_id` and `message_id` from it. + Set `reply_to_update` = True to reply to `update['message_id']`. + Set `send_default_keyboard` = False to avoid sending default keyboard + as reply_markup (only those messages can be edited, which were + sent with no reply markup or with an inline keyboard). + """ + if 'message' in update: + update = update['message'] + if chat_id is None and 'chat' in update: + chat_id = self.get_chat_id(update) + if reply_to_update and 'message_id' in update: + reply_to_message_id = update['message_id'] + if ( + send_default_keyboard + and reply_markup is None + and type(chat_id) is int + and chat_id > 0 + and text != self.authorization_denied_message + ): + reply_markup = self.default_keyboard + return await self.sendMessage( + chat_id=chat_id, + text=text, + parse_mode=parse_mode, + disable_web_page_preview=disable_web_page_preview, + disable_notification=disable_notification, + reply_to_message_id=reply_to_message_id, + reply_markup=reply_markup + ) + + async def answer_inline_query(self, + inline_query_id=None, + results=[], + cache_time=None, + is_personal=None, + next_offset=None, + switch_pm_text=None, + switch_pm_parameter=None): + """Answer inline queries. + + This method wraps lower-level `answerInlineQuery` method. + """ + # If results is a string, cast to proper type + return await self.answerInlineQuery( + inline_query_id=inline_query_id, + results=results, + cache_time=cache_time, + is_personal=is_personal, + next_offset=next_offset, + switch_pm_text=switch_pm_text, + switch_pm_parameter=switch_pm_parameter, + ) + @classmethod def set_class_maintenance_message(cls, maintenance_message): """Set class maintenance message.