Исходник Софт Download via telegram | Скачай с ютуба в телеграмме

msihek

Участник
Автор темы
29
3
Доброго времени суток, уважаемые обитатели данного великого форума.
Хотел бы вам слить исходник, программы для скачивания видео/аудио с ютуба через телеграмм.
Попрошу не бить палками за какие то моменты в коде.
1709758841915.png

1709758892480.png

1709758913346.png

(Кнопками ещё вариант загрузки - Видео)

main.py:
import os
from pytube import YouTube
import telebot
import re
import time
from telebot import types

version = '2.3'


if not os.path.exists("token.txt"):
   
    user_token = input(f"[INFO] Введите токен вашего бота: ")

   
    with open("token.txt", "w") as file:
        file.write(user_token)

with open("token.txt") as file:
    TELEGRAM_BOT_TOKEN = file.read()

bot = telebot.TeleBot(TELEGRAM_BOT_TOKEN)


current_directory = os.getcwd()

video_directory = os.path.join(current_directory, 'video')

image = 'https://i.imgur.com/fk6jg9r.png'

print(f'Версия бота: {version}')
if not os.path.exists(video_directory):
    os.makedirs(video_directory)
    print(f"[INFO] Папку video найти не удалось, создаю её сам.")

@bot.message_handler(commands=['start', 'help'])

def send_welcome(message):
    user_id = message.from_user.id
    user_first_name = message.from_user.first_name

    ms = '''
Привет! Я <b>бот для сохранения видео</b> из youtube.
Просто отправь мне ссылку и я всё <b>быстренько</b> сделаю :)
    '''
    bot.send_photo(message.chat.id, image, parse_mode='html', caption=ms)

@bot.message_handler(func=lambda message: True)
def download_video(message):
    video_path = None

    try:
       
        video_url = message.text

        yt = YouTube(video_url)


        markup = types.ReplyKeyboardMarkup(row_width=2)
        item_video = types.KeyboardButton('Видео')
        item_audio = types.KeyboardButton('Аудио')
        markup.add(item_video, item_audio)


        msg = bot.send_message(message.chat.id, "Выберите формат загрузки:", reply_markup=markup)
        bot.register_next_step_handler(msg, process_format_choice, yt)

    except Exception as e:
        print(f'[INFO] Произошла ошибка: {str(e)}')
        bot.reply_to(message, f'Произошла ошибка: {str(e)}')
        if video_path and os.path.exists(video_path):
            os.remove(video_path)

def process_format_choice(message, yt):
    try:
        chat_id = message.chat.id
        user_choice = message.text.lower()

        if user_choice == 'видео':
            download_and_send_video(yt, chat_id)
        elif user_choice == 'аудио':
            download_and_send_audio(yt, chat_id)
        else:
            bot.send_message(chat_id, 'Пожалуйста, выберите формат, используя клавиатуру.')

    except Exception as e:
        print(f'[INFO] Ошибка при обработке выбора формата: {str(e)}')
        bot.send_message(chat_id, f'Произошла ошибка: {str(e)}')


def download_and_send_video(yt, chat_id):
    video_path = download_video(yt)
    send_video(chat_id, video_path)


def download_and_send_audio(yt, chat_id):
    audio_path = download_audio(yt)
    send_audio(chat_id, audio_path)


def download_video(yt):
    stream = yt.streams.get_highest_resolution()
    cleaned_title = re.sub(r'[^\w\s.-]', '', yt.title)
    video_filename = f'{cleaned_title}.mp4'
    video_path = os.path.join(video_directory, video_filename)
    stream.download(output_path=video_directory, filename=video_filename)
    return video_path


def download_audio(yt):
    audio_stream = yt.streams.filter(only_audio=True).first()
    cleaned_title = re.sub(r'[^\w\s.-]', '', yt.title)
    audio_filename = f'{cleaned_title}.mp3'
    audio_path = os.path.join(video_directory, audio_filename)
    audio_stream.download(output_path=video_directory, filename=audio_filename)
    return audio_path


def send_video(chat_id, video_path):
    if os.path.exists(video_path):
        print(f'[INFO] Видео успешно загружено, автоматическое удаление произойдет после отправки видео.')
        bot.send_message(chat_id, 'Видео было загружено на сервер, оно отправится вам через 15 секунд.')
        time.sleep(15)
        bot.send_video(chat_id, video=open(video_path, 'rb'), caption=f'Видео успешно загружено! Держи!')
        os.remove(video_path)
        print(f'[INFO] Видео: {os.path.basename(video_path)}, было удалено с сервера.')
    else:
        bot.send_message(chat_id, 'Видео не было загружено.')


def send_audio(chat_id, audio_path):
    if os.path.exists(audio_path):
        print(f'[INFO] Аудио успешно загружено, автоматическое удаление произойдет после отправки аудио.')
        bot.send_message(chat_id, 'Аудио было загружено на сервер, оно отправится вам через 15 секунд.')
        time.sleep(15)
        bot.send_audio(chat_id, audio=open(audio_path, 'rb'), caption=f'Аудио успешно загружено! Держи!')
        os.remove(audio_path)
        print(f'[INFO] Аудио: {os.path.basename(audio_path)}, было удалено с сервера.')
    else:
        bot.send_message(chat_id, 'Аудио не было загружено.')

bot.polling()

Нахрена я добавил версию в бота? - Чтоб было (я прост сам хз)
Советую, скрипт закинуть в отдельную папку, ибо он создает файлы. Потом потеряетесь.
 

Вложения

  • main.py
    5.3 KB · Просмотры: 41

hvntr

Участник
61
15
@msihek, спасибо, годно! забрал себе как основу.
подскажи по лимитам, до скольки мб может бот скачать видео? до 2гб максимум?