thezero 4 months ago
parent
commit
915fb87df1
7 changed files with 74 additions and 2 deletions
  1. 5 0
      Dockerfile
  2. 11 0
      docker-compose.yml
  3. 1 1
      main.py
  4. 1 0
      requirements.txt
  5. 0 0
      src/db.py
  6. 55 0
      src/main.py
  7. 1 1
      src/vid_utils.py

+ 5 - 0
Dockerfile

@@ -0,0 +1,5 @@
+FROM python:3.8-slim-buster
+WORKDIR /bot
+COPY requirements.txt .
+RUN pip3 install -r requirements.txt
+COPY src src

+ 11 - 0
docker-compose.yml

@@ -0,0 +1,11 @@
+version: "3.3"
+services:
+  bot:
+    build: .
+    command: python3 /bot/src/main.py
+    volumes:
+      - ./out:/bot/out
+      - ./conf:/bot/conf
+    environment:
+      - CONF_FOLDER=/bot/conf/
+    user: 1000:1000

+ 1 - 1
main.py

@@ -42,7 +42,7 @@ def download_choosen_format(update, context):
                                message_id=query.message.message_id)
 
 TOKEN = None
-with open('bot.token') as f:
+with open(os.path.join(os.environ['CONF_FOLDER'], 'bot.token')) as f:
     TOKEN = f.read().strip()
 
 updater = Updater(token=TOKEN)

+ 1 - 0
requirements.txt

@@ -0,0 +1 @@
+python-telegram-bot==13.0

+ 0 - 0
db.py → src/db.py


+ 55 - 0
src/main.py

@@ -0,0 +1,55 @@
+import logging
+import os
+
+from telegram import InlineKeyboardMarkup
+from telegram.ext import Updater, CallbackQueryHandler, MessageHandler, Filters
+
+from vid_utils import Video, BadLink
+
+logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
+logger = logging.getLogger(__name__)
+
+
+def get_format(update, context):
+    logger.info("from {}: {}".format(update.message.chat_id, update.message.text))  # "history"
+
+    try:
+        video = Video(link=update.message.text, init_keyboard=True)
+    except BadLink as e:
+        update.message.reply_text("Bad link: {}".format(e))
+    else:
+        reply_markup = InlineKeyboardMarkup(video.keyboard)
+        update.message.reply_text('Choose format:', reply_markup=reply_markup)
+
+
+def download_choosen_format(update, context):
+    query = update.callback_query
+    video_index = query.data
+
+    context.bot.edit_message_text(text="Downloading...",
+                                  chat_id=query.message.chat_id,
+                                  message_id=query.message.message_id)
+
+    video = Video(vid=video_index)
+    video.download()
+
+    with video.send() as files:
+        for f in files:
+            logger.log("Sending... {} ".format(f))
+            context.bot.send_document(chat_id=query.message.chat_id, document=open(f, 'rb'))
+
+    context.bot.delete_message(chat_id=query.message.chat_id,
+                               message_id=query.message.message_id)
+
+TOKEN = None
+with open(os.path.join(os.environ['CONF_FOLDER'], 'bot.token')) as f:
+    TOKEN = f.read().strip()
+
+updater = Updater(token=TOKEN)
+
+updater.dispatcher.add_handler(MessageHandler(Filters.text, get_format))
+updater.dispatcher.add_handler(CallbackQueryHandler(download_choosen_format))
+
+
+updater.start_polling()
+updater.idle()

+ 1 - 1
vid_utils.py → src/vid_utils.py

@@ -13,7 +13,7 @@ class BadLink(Exception):
 
 class Video:
     def __init__(self, link=None, vid=None, init_keyboard=False):
-        self.db = VidDatabase("viddb.sqlite3")
+        self.db = VidDatabase(os.path.join(os.environ['CONF_FOLDER'], "viddb.sqlite3"))
         if not self.db.is_valid:
             # Database file not present
             # Create a new database