summaryrefslogtreecommitdiff
path: root/main.py
blob: 0edb9cd9e9394fa5f93dadd6e77a8b531633be81 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import mimetypes
import traceback
from os import mkdir
from os.path import exists

import requests
from telegram import Update
from telegram.constants import ParseMode
from telegram.ext import ApplicationBuilder, MessageHandler, CallbackContext, filters


def upload_file(file_path: str, comment: str) -> str:
    mime_type, _ = mimetypes.guess_type(file_path)

    if mime_type is None:
        raise Exception("Unknown MIME type")

    response = requests.post(
        'https://tnd.quest/upload.php',
        files=dict(
            file=(file_path.split('/')[-1], open(file_path, 'rb'), mime_type)
        ),
        data=dict(
            comment=comment,
            visibility=1
        ),
        headers=dict(
            accept='application/json'
        )
    )

    if response.status_code == 201:
        j = response.json()
        return j['data']['urls']['download_url']
    else:
        raise Exception(f"Failed to send a file ({response.status_code}): {response.text}")


async def download_file(update: Update, _: CallbackContext) -> None:
    if not exists("./temp"):
        mkdir("./temp")

    file_path = None
    file_comment = ""

    if len(update.message.photo) > 0:
        file_id = update.message.photo[-1]
        file = await update.get_bot().get_file(file_id)
        file_extension = ""

        if file.file_path is not None:
            file_extension = f".{file.file_path.split('.')[-1]}"

        file_path = f"./temp/{file_id.file_unique_id}{file_extension}"
        await file.download_to_drive(file_path)
        file_comment = update.message.caption

    if file_path is not None:
        try:
            url = upload_file(file_path, file_comment)
            await update.message.reply_text(f'Saved! Here is your URL: [{url}]({url})', ParseMode.MARKDOWN,
                                            reply_to_message_id=update.message.message_id)
        except Exception as e:
            traceback.print_tb(e.__traceback__)
            await update.message.reply_text(f"Error occurred while uploading your file: {str(e)}")


def run():
    print("Starting the bot...")
    app = ApplicationBuilder().token("xd").build()
    app.add_handler(MessageHandler(filters.PHOTO, download_file))
    app.run_polling()


if __name__ == "__main__":
    run()