#!/usr/bin/env python
import math
import sys
from logging import error
from os import name
from pathlib import Path
from subprocess import Popen
from prawcore import ResponseException
from reddit . subreddit import get_subreddit_threads
from utils import settings
from utils . cleanup import cleanup
from utils . console import print_markdown , print_step
from utils . id import id
from utils . version import checkversion
from video_creation . background import (
download_background ,
chop_background_video ,
get_background_config ,
)
from video_creation . final_video import make_final_video
from video_creation . screenshot_downloader import get_screenshots_of_reddit_posts
from video_creation . voices import save_text_to_mp3
__VERSION__ = " 3.0 "
print (
"""
█ █ █ █ █ █ ╗ █ █ █ █ █ █ █ ╗ █ █ █ █ █ █ ╗ █ █ █ █ █ █ ╗ █ █ ╗ █ █ █ █ █ █ █ █ ╗ █ █ ╗ █ █ ╗ █ █ ╗ █ █ █ █ █ █ ╗ █ █ █ █ █ █ █ ╗ █ █ █ █ █ █ ╗ █ █ █ ╗ █ █ █ ╗ █ █ █ █ █ ╗ █ █ ╗ █ █ ╗ █ █ █ █ █ █ █ ╗ █ █ █ █ █ █ ╗
█ █ ╔ ═ ═ █ █ ╗ █ █ ╔ ═ ═ ═ ═ ╝ █ █ ╔ ═ ═ █ █ ╗ █ █ ╔ ═ ═ █ █ ╗ █ █ ║ ╚ ═ ═ █ █ ╔ ═ ═ ╝ █ █ ║ █ █ ║ █ █ ║ █ █ ╔ ═ ═ █ █ ╗ █ █ ╔ ═ ═ ═ ═ ╝ █ █ ╔ ═ ═ ═ █ █ ╗ █ █ █ █ ╗ █ █ █ █ ║ █ █ ╔ ═ ═ █ █ ╗ █ █ ║ █ █ ╔ ╝ █ █ ╔ ═ ═ ═ ═ ╝ █ █ ╔ ═ ═ █ █ ╗
█ █ █ █ █ █ ╔ ╝ █ █ █ █ █ ╗ █ █ ║ █ █ ║ █ █ ║ █ █ ║ █ █ ║ █ █ ║ █ █ ║ █ █ ║ █ █ ║ █ █ ║ █ █ ║ █ █ █ █ █ ╗ █ █ ║ █ █ ║ █ █ ╔ █ █ █ █ ╔ █ █ ║ █ █ █ █ █ █ █ ║ █ █ █ █ █ ╔ ╝ █ █ █ █ █ ╗ █ █ █ █ █ █ ╔ ╝
█ █ ╔ ═ ═ █ █ ╗ █ █ ╔ ═ ═ ╝ █ █ ║ █ █ ║ █ █ ║ █ █ ║ █ █ ║ █ █ ║ ╚ █ █ ╗ █ █ ╔ ╝ █ █ ║ █ █ ║ █ █ ║ █ █ ╔ ═ ═ ╝ █ █ ║ █ █ ║ █ █ ║ ╚ █ █ ╔ ╝ █ █ ║ █ █ ╔ ═ ═ █ █ ║ █ █ ╔ ═ █ █ ╗ █ █ ╔ ═ ═ ╝ █ █ ╔ ═ ═ █ █ ╗
█ █ ║ █ █ ║ █ █ █ █ █ █ █ ╗ █ █ █ █ █ █ ╔ ╝ █ █ █ █ █ █ ╔ ╝ █ █ ║ █ █ ║ ╚ █ █ █ █ ╔ ╝ █ █ ║ █ █ █ █ █ █ ╔ ╝ █ █ █ █ █ █ █ ╗ ╚ █ █ █ █ █ █ ╔ ╝ █ █ ║ ╚ ═ ╝ █ █ ║ █ █ ║ █ █ ║ █ █ ║ █ █ ╗ █ █ █ █ █ █ █ ╗ █ █ ║ █ █ ║
╚ ═ ╝ ╚ ═ ╝ ╚ ═ ═ ═ ═ ═ ═ ╝ ╚ ═ ═ ═ ═ ═ ╝ ╚ ═ ═ ═ ═ ═ ╝ ╚ ═ ╝ ╚ ═ ╝ ╚ ═ ═ ═ ╝ ╚ ═ ╝ ╚ ═ ═ ═ ═ ═ ╝ ╚ ═ ═ ═ ═ ═ ═ ╝ ╚ ═ ═ ═ ═ ═ ╝ ╚ ═ ╝ ╚ ═ ╝ ╚ ═ ╝ ╚ ═ ╝ ╚ ═ ╝ ╚ ═ ╝ ╚ ═ ═ ═ ═ ═ ═ ╝ ╚ ═ ╝ ╚ ═ ╝
"""
)
# Modified by JasonLovesDoggo
print_markdown (
" ### Thanks for using this tool! [Feel free to contribute to this project on GitHub!](https://lewismenelaws.com) If you have any questions, feel free to reach out to me on Twitter or submit a GitHub issue. You can find solutions to many common problems in the [Documentation](): https://reddit-video-maker-bot.netlify.app/ "
)
checkversion ( __VERSION__ )
def main ( POST_ID = None ) - > None :
global redditid , reddit_object
reddit_object = get_subreddit_threads ( POST_ID )
redditid = id ( reddit_object )
length , number_of_comments = save_text_to_mp3 ( reddit_object )
length = math . ceil ( length )
get_screenshots_of_reddit_posts ( reddit_object , number_of_comments )
bg_config = get_background_config ( )
download_background ( bg_config )
chop_background_video ( bg_config , length , reddit_object )
make_final_video ( number_of_comments , length , reddit_object , bg_config )
def run_many ( times ) - > None :
for x in range ( 1 , times + 1 ) :
print_step (
f ' on the { x } { ( " th " , " st " , " nd " , " rd " , " th " , " th " , " th " , " th " , " th " , " th " ) [ x % 10 ] } iteration of { times } '
) # correct 1st 2nd 3rd 4th 5th....
main ( )
Popen ( " cls " if name == " nt " else " clear " , shell = True ) . wait ( )
def shutdown ( ) :
try :
redditid
except NameError :
print ( " Exiting... " )
exit ( )
else :
print_markdown ( " ## Clearing temp files " )
cleanup ( redditid )
print ( " Exiting... " )
exit ( )
if __name__ == " __main__ " :
assert sys . version_info > = ( 3 , 9 ) , " Python 3.10 or higher is required "
directory = Path ( ) . absolute ( )
config = settings . check_toml (
f " { directory } /utils/.config.template.toml " , " config.toml "
)
config is False and exit ( )
try :
if config [ " reddit " ] [ " thread " ] [ " post_id " ] :
for index , post_id in enumerate (
config [ " reddit " ] [ " thread " ] [ " post_id " ] . split ( " + " )
) :
index + = 1
print_step (
f ' on the { index } { ( " st " if index % 10 == 1 else ( " nd " if index % 10 == 2 else ( " rd " if index % 10 == 3 else " th " ) ) ) } post of { len ( config [ " reddit " ] [ " thread " ] [ " post_id " ] . split ( " + " ) ) } '
)
main ( post_id )
Popen ( " cls " if name == " nt " else " clear " , shell = True ) . wait ( )
elif config [ " settings " ] [ " times_to_run " ] :
run_many ( config [ " settings " ] [ " times_to_run " ] )
else :
main ( )
except KeyboardInterrupt :
shutdown ( )
except ResponseException :
# error for invalid credentials
print_markdown ( " ## Invalid credentials " )
print_markdown ( " Please check your credentials in the config.toml file " )
shutdown ( )
except Exception as err :
print_step ( f ' Sorry, something went wrong with this version! Try again, and feel free to report this issue at GitHub or the Discord community. \n '
f ' Version: { __VERSION__ } ,Story mode: { str ( config [ " settings " ] [ " storymode " ] ) } , Story mode method: { str ( config [ " settings " ] [ " storymodemethod " ] ) } , \n '
f ' Postid : { str ( config [ " settings " ] ) } ,allownsfw : { config [ " settings " ] [ " allow_nsfw " ] } ,is_nsfw : { str ( reddit_object [ " is_nsfw " ] ) } '
)
raise err