2022-12-09 00:04:01 +01:00
""" Main script to toot a new post """
import praw , wget
from dotenv import load_dotenv
from mastodon import Mastodon
from os import getenv , remove
from os . path import getsize
2023-08-01 18:59:46 +02:00
# ----- load .env ----- #
2022-12-09 00:04:01 +01:00
load_dotenv ( )
2023-08-01 18:59:46 +02:00
# ----- initialization ----- #
2022-12-09 00:04:01 +01:00
# initialize reddit
reddit = praw . Reddit (
client_id = getenv ( " REDDIT_CLIENT_ID " ) ,
client_secret = getenv ( " REDDIT_CLIENT_SECRET " ) ,
redirect_uri = " http://localhost:8080 " , # does not matter what is here
user_agent = getenv ( " REDDIT_USER_AGENT " )
)
# initialize mastodon
mastodon = Mastodon (
access_token = getenv ( " MASTODON_USER_SECRET " ) ,
api_base_url = getenv ( " MASTODON_URL " )
)
2023-08-01 18:59:46 +02:00
# ----- main script ----- #
2022-12-09 00:04:01 +01:00
# get recent posts to check for duplicates
last_posts = mastodon . account_statuses ( getenv ( " MASTODON_USER_ID " ) , limit = 15 )
2022-12-10 00:46:15 +01:00
for submission in reddit . subreddit ( str ( getenv ( " REDDIT_SUBREDDIT " ) ) ) . top ( time_filter = " day " , limit = 10 ) :
2022-12-09 00:04:01 +01:00
# skip post if it is a stickied post
if ( submission . stickied ) :
continue
2023-08-01 18:59:46 +02:00
2022-12-09 00:04:01 +01:00
# check if the post has been posted before
already_posted = False
for posted_submission in last_posts :
if submission . permalink in posted_submission [ " content " ] :
already_posted = True
break
if already_posted :
continue
2023-08-01 18:59:46 +02:00
2022-12-09 00:04:01 +01:00
# check if text only
if submission . is_self :
status_text = submission . title + " \n \n geposted von u/ " + submission . author . name + " \n " + submission . permalink + " \n \n " + submission . selftext
mastodon . status_post ( status_text , visibility = " unlisted " )
# check if reddit video
elif " v.redd.it " in submission . url :
url = submission . media [ " reddit_video " ] [ " fallback_url " ]
url = url . split ( " ? " ) [ 0 ]
filename = wget . download ( url )
print ( )
2023-08-01 18:59:46 +02:00
2022-12-09 00:04:01 +01:00
# check if video file is small enough for the server (10MB)
if getsize ( filename ) < 10 * 1000000 :
media = mastodon . media_post ( filename )
status_text = submission . title + " \n \n geposted von u/ " + submission . author . name + " \n https://reddit.com " + submission . permalink
mastodon . status_post ( status_text , media_ids = media [ " id " ] , visibility = " unlisted " )
else :
status_text = submission . title + " \n \n Geposteter Videolink: " + url + " \n \n geposted von u/ " + submission . author . name + " \n " + submission . permalink + " \n \n " + submission . selftext
mastodon . status_post ( status_text , visibility = " unlisted " )
remove ( filename )
else :
filename = wget . download ( submission . url )
print ( )
media = mastodon . media_post ( filename )
status_text = submission . title + " \n \n geposted von u/ " + submission . author . name + " \n https://reddit.com " + submission . permalink
mastodon . status_post ( status_text , media_ids = media [ " id " ] , visibility = " unlisted " )
remove ( filename )
break