Queer European MD passionate about IT
Browse Source

/db command implemented

Davte 5 years ago
parent
commit
9890988f7f
1 changed files with 58 additions and 9 deletions
  1. 58 9
      davtelepot/administration_tools.py

+ 58 - 9
davtelepot/administration_tools.py

@@ -14,9 +14,9 @@ import datetime
 
 # Third party modules
 from davtelepot.utilities import (
-    async_wrapper, Confirmator, get_cleaned_text, get_user, escape_html_chars,
-    line_drawing_unordered_list, make_button, make_inline_keyboard,
-    remove_html_tags
+    async_wrapper, Confirmator, extract, get_cleaned_text, get_user,
+    escape_html_chars, line_drawing_unordered_list, make_button,
+    make_inline_keyboard, remove_html_tags
 )
 
 
@@ -543,6 +543,24 @@ default_admin_messages = {
             'en': "Operation was cancelled",
             'it': "Operazione annullata"
         }
+    },
+    'db_command': {
+        'not_sqlite': {
+            'en': "Only SQLite databases may be sent via Telegram, since they "
+                  "are single-file databases.\n"
+                  "This bot has a `{db_type}` database.",
+            'it': "Via Telegram possono essere inviati solo database SQLite, "
+                  "in quanto composti di un solo file.\n"
+                  "Questo bot ha invece un database `{db_type}`."
+        },
+        'file_caption': {
+            'en': "Here is bot database.",
+            'it': "Ecco il database!"
+        },
+        'db_sent': {
+            'en': "Database sent.",
+            'it': "Database inviato."
+        }
     }
 }
 
@@ -649,6 +667,33 @@ async def _stop_button(bot, update, user_record, data):
     return result
 
 
+async def _send_bot_database(bot, update, user_record):
+    if not all(
+        [
+            bot.db_url.endswith('.db'),
+            bot.db_url.startswith('sqlite:///')
+        ]
+    ):
+        return bot.get_message(
+            'admin', 'db_command', 'not_sqlite',
+            update=update, user_record=user_record,
+            db_type=bot.db_url.partition(':///')[0]
+        )
+    database_name = extract(bot.db_url, starter='data/')
+    await bot.send_document(
+        chat_id=user_record['telegram_id'],
+        document_path=f'{{path}}/data/{database_name}',
+        caption=bot.get_message(
+            'admin', 'db_command', 'file_caption',
+            update=update, user_record=user_record
+        )
+    )
+    return bot.get_message(
+        'admin', 'db_command', 'db_sent',
+        update=update, user_record=user_record
+    )
+
+
 def init(bot, talk_messages=None, admin_messages=None, language='en'):
     """Assign parsers, commands, buttons and queries to given `bot`."""
     if talk_messages is None:
@@ -705,13 +750,11 @@ def init(bot, talk_messages=None, admin_messages=None, language='en'):
     async def talk_button(bot, update, user_record, data):
         return await _talk_button(bot, update, user_record, data)
 
-    restart_command_description = bot.get_message(
-        'admin', 'restart_command', 'description',
-        language=language
-    )
-
     @bot.command(command='/restart', aliases=[], show_in_keyboard=False,
-                 description=restart_command_description,
+                 description=bot.get_message(
+                     'admin', 'restart_command', 'description',
+                     language=language, default_message=''
+                 ),
                  authorization_level='admin')
     async def restart_command(bot, update, user_record):
         return await _restart_command(bot, update, user_record)
@@ -761,3 +804,9 @@ def init(bot, talk_messages=None, admin_messages=None, language='en'):
                 authorization_level='admin')
     async def stop_button(bot, update, user_record, data):
         return await _stop_button(bot, update, user_record, data)
+
+    @bot.command(command='/db', aliases=[], show_in_keyboard=False,
+                 description="Ask for bot database via Telegram",
+                 authorization_level='admin')
+    async def send_bot_database(bot, update, user_record):
+        return await _send_bot_database(bot, update, user_record)