Implemented /father command.
It allows to see commands stored by BotFather, get default command list, change it and send it to BotFather.
This commit is contained in:
parent
3896776f0e
commit
a4079cf91d
@ -11,7 +11,7 @@ __author__ = "Davide Testa"
|
|||||||
__email__ = "davide@davte.it"
|
__email__ = "davide@davte.it"
|
||||||
__credits__ = ["Marco Origlia", "Nick Lee @Nickoala"]
|
__credits__ = ["Marco Origlia", "Nick Lee @Nickoala"]
|
||||||
__license__ = "GNU General Public License v3.0"
|
__license__ = "GNU General Public License v3.0"
|
||||||
__version__ = "2.5.7"
|
__version__ = "2.5.8"
|
||||||
__maintainer__ = "Davide Testa"
|
__maintainer__ = "Davide Testa"
|
||||||
__contact__ = "t.me/davte"
|
__contact__ = "t.me/davte"
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -664,18 +664,33 @@ class TelegramBot:
|
|||||||
parameters=locals()
|
parameters=locals()
|
||||||
)
|
)
|
||||||
|
|
||||||
async def sendPoll(self, chat_id, question, options,
|
async def sendPoll(self,
|
||||||
dummy=None,
|
chat_id: Union[int, str],
|
||||||
disable_notification=None,
|
question: str,
|
||||||
reply_to_message_id=None,
|
options: List[str],
|
||||||
|
is_anonymous: bool = True,
|
||||||
|
type_: str = 'regular',
|
||||||
|
allows_multiple_answers: bool = False,
|
||||||
|
correct_option_id: int = None,
|
||||||
|
explanation: str = None,
|
||||||
|
explanation_parse_mode: str = None,
|
||||||
|
open_period: int = None,
|
||||||
|
close_date: int = None,
|
||||||
|
is_closed: bool = None,
|
||||||
|
disable_notification: bool = None,
|
||||||
|
reply_to_message_id: int = None,
|
||||||
reply_markup=None):
|
reply_markup=None):
|
||||||
"""Send a native poll in a group, a supergroup or channel.
|
"""Send a native poll in a group, a supergroup or channel.
|
||||||
|
|
||||||
See https://core.telegram.org/bots/api#sendpoll for details.
|
See https://core.telegram.org/bots/api#sendpoll for details.
|
||||||
"""
|
"""
|
||||||
|
# To avoid shadowing `type`, this workaround is required
|
||||||
|
parameters = locals().copy()
|
||||||
|
parameters['type'] = parameters['type_']
|
||||||
|
del parameters['type_']
|
||||||
return await self.api_request(
|
return await self.api_request(
|
||||||
'sendPoll',
|
'sendPoll',
|
||||||
parameters=locals()
|
parameters=parameters
|
||||||
)
|
)
|
||||||
|
|
||||||
async def sendChatAction(self, chat_id, action):
|
async def sendChatAction(self, chat_id, action):
|
||||||
@ -1409,7 +1424,7 @@ class TelegramBot:
|
|||||||
parameters=locals()
|
parameters=locals()
|
||||||
)
|
)
|
||||||
|
|
||||||
async def setMyCommands(self, commands: List[Command]):
|
async def setMyCommands(self, commands: List[Union[Command, dict]]):
|
||||||
"""Change the list of the bot's commands.
|
"""Change the list of the bot's commands.
|
||||||
|
|
||||||
Use this method to change the list of the bot's commands.
|
Use this method to change the list of the bot's commands.
|
||||||
|
@ -136,6 +136,7 @@ async def print_api_methods(loop=None,
|
|||||||
parameters_table = tag
|
parameters_table = tag
|
||||||
break # Stop searching in siblings if <table> is found
|
break # Stop searching in siblings if <table> is found
|
||||||
description += tag.get_text()
|
description += tag.get_text()
|
||||||
|
# Methods start with a lowercase letter
|
||||||
if method_name and method_name[0] == method_name[0].lower():
|
if method_name and method_name[0] == method_name[0].lower():
|
||||||
methods.append(
|
methods.append(
|
||||||
TelegramApiMethod(
|
TelegramApiMethod(
|
||||||
|
@ -17,11 +17,11 @@ Usage
|
|||||||
database_url='my_other_db')
|
database_url='my_other_db')
|
||||||
|
|
||||||
@long_polling_bot.command('/foo')
|
@long_polling_bot.command('/foo')
|
||||||
async def foo_command(bot, update, user_record):
|
async def foo_command(bot, update, user_record, language):
|
||||||
return "Bar!"
|
return "Bar!"
|
||||||
|
|
||||||
@webhook_bot.command('/bar')
|
@webhook_bot.command('/bar')
|
||||||
async def bar_command(bot, update, user_record):
|
async def bar_command(bot, update, user_record, language):
|
||||||
return "Foo!"
|
return "Foo!"
|
||||||
|
|
||||||
exit_state = Bot.run(
|
exit_state = Bot.run(
|
||||||
@ -579,17 +579,19 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
def administrators(self):
|
def administrators(self):
|
||||||
return self._get_administrators(self)
|
return self._get_administrators(self)
|
||||||
|
|
||||||
async def message_router(self, update, user_record):
|
async def message_router(self, update, user_record, language):
|
||||||
"""Route Telegram `message` update to appropriate message handler."""
|
"""Route Telegram `message` update to appropriate message handler."""
|
||||||
for key, value in update.items():
|
for key, value in update.items():
|
||||||
if key in self.message_handlers:
|
if key in self.message_handlers:
|
||||||
return await self.message_handlers[key](update, user_record)
|
return await self.message_handlers[key](update=update,
|
||||||
|
user_record=user_record,
|
||||||
|
language=language)
|
||||||
logging.error(
|
logging.error(
|
||||||
f"The following message update was received: {update}\n"
|
f"The following message update was received: {update}\n"
|
||||||
"However, this message type is unknown."
|
"However, this message type is unknown."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def edited_message_handler(self, update, user_record):
|
async def edited_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle Telegram `edited_message` update."""
|
"""Handle Telegram `edited_message` update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
f"The following update was received: {update}\n"
|
f"The following update was received: {update}\n"
|
||||||
@ -597,7 +599,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
async def channel_post_handler(self, update, user_record):
|
async def channel_post_handler(self, update, user_record, language=None):
|
||||||
"""Handle Telegram `channel_post` update."""
|
"""Handle Telegram `channel_post` update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
f"The following update was received: {update}\n"
|
f"The following update was received: {update}\n"
|
||||||
@ -605,7 +607,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
async def edited_channel_post_handler(self, update, user_record):
|
async def edited_channel_post_handler(self, update, user_record, language=None):
|
||||||
"""Handle Telegram `edited_channel_post` update."""
|
"""Handle Telegram `edited_channel_post` update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
f"The following update was received: {update}\n"
|
f"The following update was received: {update}\n"
|
||||||
@ -613,7 +615,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
async def inline_query_handler(self, update, user_record):
|
async def inline_query_handler(self, update, user_record, language=None):
|
||||||
"""Handle Telegram `inline_query` update.
|
"""Handle Telegram `inline_query` update.
|
||||||
|
|
||||||
Answer it with results or log errors.
|
Answer it with results or log errors.
|
||||||
@ -648,7 +650,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
logging.info("Error answering inline query\n{}".format(e))
|
logging.info("Error answering inline query\n{}".format(e))
|
||||||
return
|
return
|
||||||
|
|
||||||
async def chosen_inline_result_handler(self, update, user_record):
|
async def chosen_inline_result_handler(self, update, user_record, language=None):
|
||||||
"""Handle Telegram `chosen_inline_result` update."""
|
"""Handle Telegram `chosen_inline_result` update."""
|
||||||
if user_record is not None:
|
if user_record is not None:
|
||||||
user_id = user_record['telegram_id']
|
user_id = user_record['telegram_id']
|
||||||
@ -678,7 +680,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
self.chosen_inline_result_handlers[user_id][result_id] = handler
|
self.chosen_inline_result_handlers[user_id][result_id] = handler
|
||||||
return
|
return
|
||||||
|
|
||||||
async def callback_query_handler(self, update, user_record):
|
async def callback_query_handler(self, update, user_record, language=None):
|
||||||
"""Handle Telegram `callback_query` update.
|
"""Handle Telegram `callback_query` update.
|
||||||
|
|
||||||
A callback query is sent when users press inline keyboard buttons.
|
A callback query is sent when users press inline keyboard buttons.
|
||||||
@ -699,7 +701,8 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
answer = await _function(
|
answer = await _function(
|
||||||
bot=self,
|
bot=self,
|
||||||
update=update,
|
update=update,
|
||||||
user_record=user_record
|
user_record=user_record,
|
||||||
|
language=language
|
||||||
)
|
)
|
||||||
break
|
break
|
||||||
if answer is None:
|
if answer is None:
|
||||||
@ -733,7 +736,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
logging.error(e)
|
logging.error(e)
|
||||||
return
|
return
|
||||||
|
|
||||||
async def shipping_query_handler(self, update, user_record):
|
async def shipping_query_handler(self, update, user_record, language=None):
|
||||||
"""Handle Telegram `shipping_query` update."""
|
"""Handle Telegram `shipping_query` update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
f"The following update was received: {update}\n"
|
f"The following update was received: {update}\n"
|
||||||
@ -741,7 +744,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
async def pre_checkout_query_handler(self, update, user_record):
|
async def pre_checkout_query_handler(self, update, user_record, language=None):
|
||||||
"""Handle Telegram `pre_checkout_query` update."""
|
"""Handle Telegram `pre_checkout_query` update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
f"The following update was received: {update}\n"
|
f"The following update was received: {update}\n"
|
||||||
@ -749,7 +752,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
async def poll_handler(self, update, user_record):
|
async def poll_handler(self, update, user_record, language=None):
|
||||||
"""Handle Telegram `poll` update."""
|
"""Handle Telegram `poll` update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
f"The following update was received: {update}\n"
|
f"The following update was received: {update}\n"
|
||||||
@ -757,7 +760,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
async def text_message_handler(self, update, user_record):
|
async def text_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `text` message update."""
|
"""Handle `text` message update."""
|
||||||
replier, reply = None, None
|
replier, reply = None, None
|
||||||
text = update['text'].lower()
|
text = update['text'].lower()
|
||||||
@ -817,56 +820,56 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
async def audio_file_handler(self, update, user_record):
|
async def audio_file_handler(self, update, user_record, language=None):
|
||||||
"""Handle `audio` file update."""
|
"""Handle `audio` file update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A audio file update was received, "
|
"A audio file update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def document_message_handler(self, update, user_record):
|
async def document_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `document` message update."""
|
"""Handle `document` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A document message update was received, "
|
"A document message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def animation_message_handler(self, update, user_record):
|
async def animation_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `animation` message update."""
|
"""Handle `animation` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A animation message update was received, "
|
"A animation message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def game_message_handler(self, update, user_record):
|
async def game_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `game` message update."""
|
"""Handle `game` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A game message update was received, "
|
"A game message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def photo_message_handler(self, update, user_record):
|
async def photo_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `photo` message update."""
|
"""Handle `photo` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A photo message update was received, "
|
"A photo message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def sticker_message_handler(self, update, user_record):
|
async def sticker_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `sticker` message update."""
|
"""Handle `sticker` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A sticker message update was received, "
|
"A sticker message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def video_message_handler(self, update, user_record):
|
async def video_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `video` message update."""
|
"""Handle `video` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A video message update was received, "
|
"A video message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def voice_message_handler(self, update, user_record):
|
async def voice_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `voice` message update."""
|
"""Handle `voice` message update."""
|
||||||
replier, reply = None, None
|
replier, reply = None, None
|
||||||
user_id = update['from']['id'] if 'from' in update else None
|
user_id = update['from']['id'] if 'from' in update else None
|
||||||
@ -896,21 +899,21 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
async def video_note_message_handler(self, update, user_record):
|
async def video_note_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `video_note` message update."""
|
"""Handle `video_note` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A video_note message update was received, "
|
"A video_note message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def contact_message_handler(self, update, user_record):
|
async def contact_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `contact` message update."""
|
"""Handle `contact` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A contact message update was received, "
|
"A contact message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def location_message_handler(self, update, user_record):
|
async def location_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `location` message update."""
|
"""Handle `location` message update."""
|
||||||
replier, reply = None, None
|
replier, reply = None, None
|
||||||
user_id = update['from']['id'] if 'from' in update else None
|
user_id = update['from']['id'] if 'from' in update else None
|
||||||
@ -940,56 +943,56 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
async def venue_message_handler(self, update, user_record):
|
async def venue_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `venue` message update."""
|
"""Handle `venue` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A venue message update was received, "
|
"A venue message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def poll_message_handler(self, update, user_record):
|
async def poll_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `poll` message update."""
|
"""Handle `poll` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A poll message update was received, "
|
"A poll message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def new_chat_members_message_handler(self, update, user_record):
|
async def new_chat_members_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `new_chat_members` message update."""
|
"""Handle `new_chat_members` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A new_chat_members message update was received, "
|
"A new_chat_members message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def left_chat_member_message_handler(self, update, user_record):
|
async def left_chat_member_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `left_chat_member` message update."""
|
"""Handle `left_chat_member` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A left_chat_member message update was received, "
|
"A left_chat_member message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def new_chat_title_message_handler(self, update, user_record):
|
async def new_chat_title_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `new_chat_title` message update."""
|
"""Handle `new_chat_title` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A new_chat_title message update was received, "
|
"A new_chat_title message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def new_chat_photo_message_handler(self, update, user_record):
|
async def new_chat_photo_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `new_chat_photo` message update."""
|
"""Handle `new_chat_photo` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A new_chat_photo message update was received, "
|
"A new_chat_photo message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def delete_chat_photo_message_handler(self, update, user_record):
|
async def delete_chat_photo_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `delete_chat_photo` message update."""
|
"""Handle `delete_chat_photo` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A delete_chat_photo message update was received, "
|
"A delete_chat_photo message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def group_chat_created_message_handler(self, update, user_record):
|
async def group_chat_created_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `group_chat_created` message update."""
|
"""Handle `group_chat_created` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A group_chat_created message update was received, "
|
"A group_chat_created message update was received, "
|
||||||
@ -1004,63 +1007,63 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def channel_chat_created_message_handler(self, update, user_record):
|
async def channel_chat_created_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `channel_chat_created` message update."""
|
"""Handle `channel_chat_created` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A channel_chat_created message update was received, "
|
"A channel_chat_created message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def migrate_to_chat_id_message_handler(self, update, user_record):
|
async def migrate_to_chat_id_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `migrate_to_chat_id` message update."""
|
"""Handle `migrate_to_chat_id` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A migrate_to_chat_id message update was received, "
|
"A migrate_to_chat_id message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def migrate_from_chat_id_message_handler(self, update, user_record):
|
async def migrate_from_chat_id_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `migrate_from_chat_id` message update."""
|
"""Handle `migrate_from_chat_id` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A migrate_from_chat_id message update was received, "
|
"A migrate_from_chat_id message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def pinned_message_message_handler(self, update, user_record):
|
async def pinned_message_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `pinned_message` message update."""
|
"""Handle `pinned_message` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A pinned_message message update was received, "
|
"A pinned_message message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def invoice_message_handler(self, update, user_record):
|
async def invoice_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `invoice` message update."""
|
"""Handle `invoice` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A invoice message update was received, "
|
"A invoice message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def successful_payment_message_handler(self, update, user_record):
|
async def successful_payment_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `successful_payment` message update."""
|
"""Handle `successful_payment` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A successful_payment message update was received, "
|
"A successful_payment message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def connected_website_message_handler(self, update, user_record):
|
async def connected_website_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `connected_website` message update."""
|
"""Handle `connected_website` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A connected_website message update was received, "
|
"A connected_website message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def passport_data_message_handler(self, update, user_record):
|
async def passport_data_message_handler(self, update, user_record, language=None):
|
||||||
"""Handle `passport_data` message update."""
|
"""Handle `passport_data` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A passport_data message update was received, "
|
"A passport_data message update was received, "
|
||||||
"but this handler does nothing yet."
|
"but this handler does nothing yet."
|
||||||
)
|
)
|
||||||
|
|
||||||
async def dice_handler(self, update, user_record):
|
async def dice_handler(self, update, user_record, language=None):
|
||||||
"""Handle `dice` message update."""
|
"""Handle `dice` message update."""
|
||||||
logging.info(
|
logging.info(
|
||||||
"A dice message update was received, "
|
"A dice message update was received, "
|
||||||
@ -2013,7 +2016,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
"""
|
"""
|
||||||
self._allowed_during_maintenance.append(criterion)
|
self._allowed_during_maintenance.append(criterion)
|
||||||
|
|
||||||
async def handle_update_during_maintenance(self, update, user_record=None):
|
async def handle_update_during_maintenance(self, update, user_record=None, language=None):
|
||||||
"""Handle an update while bot is under maintenance.
|
"""Handle an update while bot is under maintenance.
|
||||||
|
|
||||||
Handle all types of updates.
|
Handle all types of updates.
|
||||||
@ -2106,7 +2109,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
Decorate command handlers like this:
|
Decorate command handlers like this:
|
||||||
```
|
```
|
||||||
@bot.command('/my_command', ['Button'], True, "My command", 'user')
|
@bot.command('/my_command', ['Button'], True, "My command", 'user')
|
||||||
async def command_handler(bot, update, user_record):
|
async def command_handler(bot, update, user_record, language):
|
||||||
return "Result"
|
return "Result"
|
||||||
```
|
```
|
||||||
When a message text starts with `/command[@bot_name]`, or with an
|
When a message text starts with `/command[@bot_name]`, or with an
|
||||||
@ -2165,7 +2168,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
command = command.strip('/ ').lower()
|
command = command.strip('/ ').lower()
|
||||||
|
|
||||||
def command_decorator(command_handler):
|
def command_decorator(command_handler):
|
||||||
async def decorated_command_handler(bot, update, user_record):
|
async def decorated_command_handler(bot, update, user_record, language=None):
|
||||||
logging.info(
|
logging.info(
|
||||||
f"Command `{command}@{bot.name}` called by "
|
f"Command `{command}@{bot.name}` called by "
|
||||||
f"`{update['from'] if 'from' in update else update['chat']}`"
|
f"`{update['from'] if 'from' in update else update['chat']}`"
|
||||||
@ -2223,7 +2226,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
return 'from' in update
|
return 'from' in update
|
||||||
|
|
||||||
@bot.parser(custom_criteria, authorization_level='user')
|
@bot.parser(custom_criteria, authorization_level='user')
|
||||||
async def text_parser(bot, update, user_record):
|
async def text_parser(bot, update, user_record, language):
|
||||||
return "Result"
|
return "Result"
|
||||||
```
|
```
|
||||||
If condition evaluates True when run on a message text
|
If condition evaluates True when run on a message text
|
||||||
@ -2241,7 +2244,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def parser_decorator(parser):
|
def parser_decorator(parser):
|
||||||
async def decorated_parser(bot, update, user_record):
|
async def decorated_parser(bot, update, user_record, language=None):
|
||||||
logging.info(
|
logging.info(
|
||||||
f"Text message update matching condition "
|
f"Text message update matching condition "
|
||||||
f"`{condition.__name__}@{bot.name}` from "
|
f"`{condition.__name__}@{bot.name}` from "
|
||||||
@ -2310,7 +2313,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
```
|
```
|
||||||
@bot.button('a_prefix:///', description="A button",
|
@bot.button('a_prefix:///', description="A button",
|
||||||
authorization_level='user')
|
authorization_level='user')
|
||||||
async def button_handler(bot, update, user_record, data):
|
async def button_handler(bot, update, user_record, language, data):
|
||||||
return "Result"
|
return "Result"
|
||||||
```
|
```
|
||||||
`separator` will be used to parse callback data received when a button
|
`separator` will be used to parse callback data received when a button
|
||||||
@ -2325,7 +2328,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def button_decorator(handler):
|
def button_decorator(handler):
|
||||||
async def decorated_button_handler(bot, update, user_record):
|
async def decorated_button_handler(bot, update, user_record, language=None):
|
||||||
logging.info(
|
logging.info(
|
||||||
f"Button `{update['data']}`@{bot.name} pressed by "
|
f"Button `{update['data']}`@{bot.name} pressed by "
|
||||||
f"`{update['from']}`"
|
f"`{update['from']}`"
|
||||||
@ -2382,7 +2385,7 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def query_decorator(handler):
|
def query_decorator(handler):
|
||||||
async def decorated_query_handler(bot, update, user_record):
|
async def decorated_query_handler(bot, update, user_record, language=None):
|
||||||
logging.info(
|
logging.info(
|
||||||
f"Inline query matching condition "
|
f"Inline query matching condition "
|
||||||
f"`{condition.__name__}@{bot.name}` from "
|
f"`{condition.__name__}@{bot.name}` from "
|
||||||
@ -2881,9 +2884,12 @@ class Bot(TelegramBot, ObjectWithDatabase, MultiLanguageObject):
|
|||||||
for key, value in update.items():
|
for key, value in update.items():
|
||||||
if key in self.routing_table:
|
if key in self.routing_table:
|
||||||
user_record = self.get_user_record(update=value)
|
user_record = self.get_user_record(update=value)
|
||||||
|
language = self.get_language(update=update,
|
||||||
|
user_record=user_record)
|
||||||
return await self.routing_table[key](
|
return await self.routing_table[key](
|
||||||
update=value,
|
update=value,
|
||||||
user_record=user_record
|
user_record=user_record,
|
||||||
|
language=language
|
||||||
)
|
)
|
||||||
logging.error(f"Unknown type of update.\n{update}")
|
logging.error(f"Unknown type of update.\n{update}")
|
||||||
|
|
||||||
|
@ -1,6 +1,24 @@
|
|||||||
"""Default messages for bot functions."""
|
"""Default messages for bot functions."""
|
||||||
|
|
||||||
default_admin_messages = {
|
default_admin_messages = {
|
||||||
|
'cancel': {
|
||||||
|
'button': {
|
||||||
|
'en': "↩️ Cancel",
|
||||||
|
'it': "↩️ Annulla"
|
||||||
|
},
|
||||||
|
'done': {
|
||||||
|
'en': "↩️ Operation cancelled",
|
||||||
|
'it': "↩️ Operazione annullata",
|
||||||
|
},
|
||||||
|
'lower': {
|
||||||
|
'en': "cancel",
|
||||||
|
'it': "annulla",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'confirm': {
|
||||||
|
'en': "🔄 Click again to confirm",
|
||||||
|
'it': "🔄 Clicka di nuovo per confermare",
|
||||||
|
},
|
||||||
'db_command': {
|
'db_command': {
|
||||||
'description': {
|
'description': {
|
||||||
'en': "Ask for bot database via Telegram",
|
'en': "Ask for bot database via Telegram",
|
||||||
@ -23,6 +41,12 @@ default_admin_messages = {
|
|||||||
'it': "Database inviato."
|
'it': "Database inviato."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
'error': {
|
||||||
|
'text': {
|
||||||
|
'en': "❌️ Error!",
|
||||||
|
'it': "❌️ Errore!"
|
||||||
|
},
|
||||||
|
},
|
||||||
'errors_command': {
|
'errors_command': {
|
||||||
'description': {
|
'description': {
|
||||||
'en': "Receive bot error log file, if set",
|
'en': "Receive bot error log file, if set",
|
||||||
@ -66,6 +90,302 @@ default_admin_messages = {
|
|||||||
"L'ordine è cronologico, con i messaggi nuovi in alto."
|
"L'ordine è cronologico, con i messaggi nuovi in alto."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
'father_command': {
|
||||||
|
'back': {
|
||||||
|
'en': "↩️ Back",
|
||||||
|
'it': "↩️ Indietro",
|
||||||
|
},
|
||||||
|
'description': {
|
||||||
|
'en': "Edit the @BotFather commands",
|
||||||
|
'it': "Modifica i comandi con @BotFather",
|
||||||
|
},
|
||||||
|
'error': {
|
||||||
|
'en': "❌ Error! ❌",
|
||||||
|
'it': "❌ Errore! ❌",
|
||||||
|
},
|
||||||
|
'modes': [
|
||||||
|
{
|
||||||
|
'id': "get",
|
||||||
|
'name': {
|
||||||
|
'en': "See",
|
||||||
|
'it': "Consulta"
|
||||||
|
},
|
||||||
|
'symbol': "ℹ️",
|
||||||
|
'description': {
|
||||||
|
'en': "See commands stored by @BotFather",
|
||||||
|
'it': "Consulta i comandi salvati su @BotFather"
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'id': "set",
|
||||||
|
'name': {
|
||||||
|
'en': "Change",
|
||||||
|
'it': "Modifica"
|
||||||
|
},
|
||||||
|
'symbol': "✏️",
|
||||||
|
'description': {
|
||||||
|
'en': "Change commands stored by @BotFather",
|
||||||
|
'it': "Modifica i comandi salvati su @BotFather"
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'id': "settings",
|
||||||
|
'name': {
|
||||||
|
'en': "Settings",
|
||||||
|
'it': "Impostazioni"
|
||||||
|
},
|
||||||
|
'symbol': "⚙️",
|
||||||
|
'description': {
|
||||||
|
'en': "Set commands to hide or to add",
|
||||||
|
'it': "Imposta comandi da nascondere o aggiungere"
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'set': {
|
||||||
|
'button': {
|
||||||
|
'en': "⚠️ Set these commands 🔧",
|
||||||
|
'it': "⚠️ Imposta questi comandi 🔧",
|
||||||
|
},
|
||||||
|
'done': {
|
||||||
|
'en': "✅ Done!",
|
||||||
|
'it': "✅ Fatto!",
|
||||||
|
},
|
||||||
|
'error': {
|
||||||
|
'en': "Something went wrong 😕",
|
||||||
|
'it': "Qualcosa è andato storto 😕",
|
||||||
|
},
|
||||||
|
'header': {
|
||||||
|
'en': "✏️ <b>Change commands stored by @BotFather 🤖</b>",
|
||||||
|
'it': "✏️ <b>Modifica i comandi salvati su @BotFather 🤖</b>",
|
||||||
|
},
|
||||||
|
'legend': {
|
||||||
|
'en': "<b>Legend</b>\n"
|
||||||
|
"✅ <i>Already stored</i>\n"
|
||||||
|
"✏️ <i>New description</i>\n"
|
||||||
|
"☑ <i>New command</i>\n"
|
||||||
|
"❌ <i>Will be removed</i>",
|
||||||
|
'it': "<b>Legenda</b>\n"
|
||||||
|
"✅ <i>Già presente</i>\n"
|
||||||
|
"✏️ <i>Nuova descrizione</i>\n"
|
||||||
|
"☑ <i>Nuovo comando</i>\n"
|
||||||
|
"❌ <i>Comando da eliminare</i>",
|
||||||
|
},
|
||||||
|
'no_change': {
|
||||||
|
'en': "❌ No change detected",
|
||||||
|
'it': "❌ Nessuna modifica",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'settings': {
|
||||||
|
'browse_records': {
|
||||||
|
'en': "✏️ <b>Edit BotFather settings</b> ⚙️\n\n"
|
||||||
|
"Select a record to edit.\n\n"
|
||||||
|
"{commands_list}\n\n"
|
||||||
|
"<i>Legend</i>\n"
|
||||||
|
"➕ Added commands\n"
|
||||||
|
"➖ Hidden commands\n\n"
|
||||||
|
"Showing records from {record_interval[0]} to "
|
||||||
|
"{record_interval[1]} of {record_interval[2]}",
|
||||||
|
'it': "✏️ <b>Modifica impostazioni di BotFather</b> ⚙\n\n️"
|
||||||
|
"Seleziona un'impostazione da modificare.\n\n"
|
||||||
|
"{commands_list}\n\n"
|
||||||
|
"<i>Legenda</i>\n"
|
||||||
|
"➕ Comandi aggiunti\n"
|
||||||
|
"➖ Comandi nascosti\n\n"
|
||||||
|
"Record da {record_interval[0]} a "
|
||||||
|
"{record_interval[1]} di {record_interval[2]}",
|
||||||
|
},
|
||||||
|
'modes': {
|
||||||
|
'add': {
|
||||||
|
'add': {
|
||||||
|
'done': {
|
||||||
|
'en': "➕️️ <b>Added additional command</b>\n\n"
|
||||||
|
"Command: {command}\n"
|
||||||
|
"Description: {description}",
|
||||||
|
'it': "➕️️ <b>Inserito comando aggiuntivo</b>\n\n"
|
||||||
|
"Comando: {command}\n"
|
||||||
|
"Descrizione: {description}",
|
||||||
|
},
|
||||||
|
'popup': {
|
||||||
|
'en': "Write the command to add",
|
||||||
|
'it': "Scrivimi il comando da aggiungere",
|
||||||
|
},
|
||||||
|
'text': {
|
||||||
|
'en': "Write the command to add or /cancel this operation",
|
||||||
|
'it': "Scrivimi il comando da aggiungere o /annulla",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'description': {
|
||||||
|
'en': "Add command to default list",
|
||||||
|
'it': "Aggiungi un comando dalla lista autogenerata"
|
||||||
|
},
|
||||||
|
'edit': {
|
||||||
|
'done': {
|
||||||
|
'en': "✏️ <b>Edited additional command</b>\n\n"
|
||||||
|
"Command: {command}\n"
|
||||||
|
"Description: {description}",
|
||||||
|
'it': "✏️ <b>Comando da nascondere modificato</b>\n\n"
|
||||||
|
"Comando: {command}\n"
|
||||||
|
"Descrizione: {description}",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'error': {
|
||||||
|
'description_too_long': {
|
||||||
|
'en': "<b>Description is too long</b>\n\n"
|
||||||
|
"Description length must be 3-256 chars.",
|
||||||
|
'it': "<b>Descrizione troppo lunga</b>\n\n"
|
||||||
|
"La descrizione deve essere di 3-256 caratteri.",
|
||||||
|
},
|
||||||
|
'duplicate_record': {
|
||||||
|
'en': "<b>Duplicate record</b>\n\n"
|
||||||
|
"Command is already being added to default "
|
||||||
|
"output. Edit that record if you need to.",
|
||||||
|
'it': "<b>Record già presente</b>\n\n"
|
||||||
|
"Questo comando è già aggiunto a quelli di "
|
||||||
|
"default. Modifica il record già presente se "
|
||||||
|
"necessario.",
|
||||||
|
},
|
||||||
|
'missing_description': {
|
||||||
|
'en': "<b>Missing description</b>\n\n"
|
||||||
|
"Additional commands must have a description "
|
||||||
|
"(3-256 chars).",
|
||||||
|
'it': "<b>Descrizione mancante</b>\n\n"
|
||||||
|
"I comandi aggiuntivi devono avere una "
|
||||||
|
"descrizione di 3-256 caratteri.",
|
||||||
|
},
|
||||||
|
'unhandled_exception': {
|
||||||
|
'en': "❌ <b>Unhandled exception </b> ⚠️",
|
||||||
|
'it': "❌ <b>Errore imprevisto </b> ⚠️",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'name': {
|
||||||
|
'en': "Add",
|
||||||
|
'it': "Aggiungi"
|
||||||
|
},
|
||||||
|
'symbol': "➕️",
|
||||||
|
},
|
||||||
|
'hide': {
|
||||||
|
'add': {
|
||||||
|
'done': {
|
||||||
|
'en': "➖ <b>Added hidden command</b>\n\n"
|
||||||
|
"Command: {command}\n",
|
||||||
|
'it': "➖ <b>Comando da nascondere aggiunto</b>"
|
||||||
|
"Comando: {command}\n",
|
||||||
|
},
|
||||||
|
'popup': {
|
||||||
|
'en': "Write the command to hide",
|
||||||
|
'it': "Scrivimi il comando da nascondere",
|
||||||
|
},
|
||||||
|
'text': {
|
||||||
|
'en': "Write the command to hide or /cancel this operation",
|
||||||
|
'it': "Scrivimi il comando da nascondere o /annulla",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'description': {
|
||||||
|
'en': "Hide command from default list",
|
||||||
|
'it': "Nascondi un comando dalla lista autogenerata"
|
||||||
|
},
|
||||||
|
'edit': {
|
||||||
|
'done': {
|
||||||
|
'en': "✏️ <b>Edited hidden command</b>\n\n"
|
||||||
|
"Command: {command}\n"
|
||||||
|
"Description: {description}",
|
||||||
|
'it': "✏️ <b>Comando da nascondere modificato</b>\n\n"
|
||||||
|
"Comando: {command}\n"
|
||||||
|
"Descrizione: {description}",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'name': {
|
||||||
|
'en': "Hide",
|
||||||
|
'it': "Nascondi"
|
||||||
|
},
|
||||||
|
'symbol': "➖️",
|
||||||
|
},
|
||||||
|
'edit': {
|
||||||
|
'button': {
|
||||||
|
'en': "✏️ Edit record",
|
||||||
|
'it': "✏️ Modifica record"
|
||||||
|
},
|
||||||
|
'description': {
|
||||||
|
'en': "Edit added or hidden commands",
|
||||||
|
'it': "Modifica i comandi aggiunti o nascosti"
|
||||||
|
},
|
||||||
|
'edit': {
|
||||||
|
'popup': {
|
||||||
|
'en': "Write the new description",
|
||||||
|
'it': "Scrivimi la nuova descrizione",
|
||||||
|
},
|
||||||
|
'text': {
|
||||||
|
'en': "Write the new description for command "
|
||||||
|
"{command} or /cancel",
|
||||||
|
'it': "Scrivimi la nuova descrizione per il "
|
||||||
|
"comando {command} o /annulla",
|
||||||
|
},
|
||||||
|
'done': {
|
||||||
|
'en': "✏️ Edit succeeded ✅\n\n"
|
||||||
|
"Command: {command}\n"""
|
||||||
|
"Description: {description}",
|
||||||
|
'it': "✏️ Modifica completata ✅\n\n"
|
||||||
|
"Comando: {command}\n"""
|
||||||
|
"Descrizione: {description}",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'name': {
|
||||||
|
'en': "Edit",
|
||||||
|
'it': "Modifica"
|
||||||
|
},
|
||||||
|
'panel': {
|
||||||
|
'delete': {
|
||||||
|
'button': {
|
||||||
|
'en': "❌ Delete record",
|
||||||
|
'it': "❌ Elimina record",
|
||||||
|
},
|
||||||
|
'done': {
|
||||||
|
'popup': {
|
||||||
|
'en': "Record deleted ✅",
|
||||||
|
'it': "Record eliminato ✅",
|
||||||
|
},
|
||||||
|
'text': {
|
||||||
|
'en': "Record deleted ✅",
|
||||||
|
'it': "Record eliminato ✅",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'edit_description': {
|
||||||
|
'button': {
|
||||||
|
'en': "✏️ Edit description",
|
||||||
|
'it': "✏️ Modifica descrizione",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'text': {
|
||||||
|
'en': "✏️ Edit record ✅\n\n"
|
||||||
|
"Command: {command}\n"""
|
||||||
|
"Description: {description}",
|
||||||
|
'it': "✏️ Modifica record\n\n"
|
||||||
|
"Comando: {command}\n"""
|
||||||
|
"Descrizione: {description}",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'symbol': "✏️",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'panel': {
|
||||||
|
'en': "🤖 <b>@BotFather settings</b> ⚙️\n\n"
|
||||||
|
"➕ <i>Additional commands</i>\n"
|
||||||
|
"{additional_commands}\n\n"
|
||||||
|
"➖ <i>Hidden commands</i>\n"
|
||||||
|
"{hidden_commands}",
|
||||||
|
'it': "⚙️ <b>Impostazioni di @BotFather</b> 🤖\n\n"
|
||||||
|
"➕ <i>Comandi aggiuntivi</i>\n"
|
||||||
|
"{additional_commands}\n\n"
|
||||||
|
"➖ <i>Comandi nascosti</i>\n"
|
||||||
|
"{hidden_commands}",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'title': {
|
||||||
|
'en': "🤖 <b>BotFather</b>",
|
||||||
|
'it': "🤖 <b>BotFather</b>",
|
||||||
|
},
|
||||||
|
},
|
||||||
'log_command': {
|
'log_command': {
|
||||||
'description': {
|
'description': {
|
||||||
'en': "Receive bot log file, if set",
|
'en': "Receive bot log file, if set",
|
||||||
|
@ -18,6 +18,8 @@ import time
|
|||||||
from difflib import SequenceMatcher
|
from difflib import SequenceMatcher
|
||||||
|
|
||||||
# Third party modules
|
# Third party modules
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
import aiohttp
|
import aiohttp
|
||||||
from aiohttp import web
|
from aiohttp import web
|
||||||
from bs4 import BeautifulSoup
|
from bs4 import BeautifulSoup
|
||||||
@ -703,7 +705,7 @@ class Confirmable():
|
|||||||
|
|
||||||
CONFIRM_TIMEDELTA = datetime.timedelta(seconds=10)
|
CONFIRM_TIMEDELTA = datetime.timedelta(seconds=10)
|
||||||
|
|
||||||
def __init__(self, confirm_timedelta=None):
|
def __init__(self, confirm_timedelta: Union[datetime.timedelta, int] = None):
|
||||||
"""Instantiate Confirmable instance.
|
"""Instantiate Confirmable instance.
|
||||||
|
|
||||||
If `confirm_timedelta` is not passed,
|
If `confirm_timedelta` is not passed,
|
||||||
@ -711,6 +713,8 @@ class Confirmable():
|
|||||||
"""
|
"""
|
||||||
if confirm_timedelta is None:
|
if confirm_timedelta is None:
|
||||||
confirm_timedelta = self.__class__.CONFIRM_TIMEDELTA
|
confirm_timedelta = self.__class__.CONFIRM_TIMEDELTA
|
||||||
|
elif type(confirm_timedelta) is int:
|
||||||
|
confirm_timedelta = datetime.timedelta(seconds=confirm_timedelta)
|
||||||
self.set_confirm_timedelta(confirm_timedelta)
|
self.set_confirm_timedelta(confirm_timedelta)
|
||||||
self._confirm_datetimes = {}
|
self._confirm_datetimes = {}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user