import os import praw import threading import gradio as gr from slack_sdk import WebClient from slack_sdk.errors import SlackApiError SLACK_BOT_TOKEN = os.getenv('BOT_USER_OAUTH_TOKEN_HF') SLACK_CHANNEL_ID = 'C079VG7D03V' SLACK_CHANNEL_ID_TEST = 'C07B4KNU5BQ' slack_client = WebClient(token=SLACK_BOT_TOKEN) print("Initializing Reddit instance...") client_id = os.getenv('CLIENT_ID') client_secret = os.getenv('CLIENT_SECRET') user_agent = os.getenv('USER_AGENT') username = os.getenv('REDDIT_USERNAME') password = os.getenv('REDDIT_PASSWORD') print(f"Client ID: {client_id}") print(f"Client Secret is set: {'Yes' if client_secret else 'No'}") print(f"User Agent: {user_agent}") print(f"Username: {username}") print(f"Password is set: {'Yes' if password else 'No'}") # Check if all credentials are retrieved successfully if not all([client_id, client_secret, user_agent, username, password]): print("Error: One or more environment variables are missing.") exit(1) try: reddit = praw.Reddit( client_id=client_id, client_secret=client_secret, user_agent=user_agent, username=username, password=password ) print("Reddit instance created successfully.") except Exception as e: print(f"Error creating Reddit instance: {e}") exit(1) def monitor_new_posts(): try: print("Attempting to access subreddit...") subreddit_name = 'huggingface' # test subreddit = reddit.subreddit(subreddit_name) print(f"Successfully accessed subreddit: {subreddit.display_name}") except Exception as e: print(f"Error accessing subreddit: {e}") return print("Starting to monitor new posts...") try: for submission in subreddit.stream.submissions(skip_existing=True): print(f"New post detected in r/{subreddit.display_name}:") print(f"Title: {submission.title}") print(f"Author: {submission.author}") print(f"URL: {submission.url}") print(f"Content: {submission.selftext}\n") text_content = f"*{submission.title}*" if submission.selftext: text_content += f"\n{submission.selftext}" else: text_content += "\n_No content available (may be a link or image post)_" text_content += f"{submission.url}" response = slack_client.chat_postMessage( channel=SLACK_CHANNEL_ID, text=text_content, thread_ts=None, unfurl_links=False, unfurl_media=False ) except Exception as e: print(f"Error during streaming submissions: {e}") REPORT = "" def log(msg): global REPORT REPORT += "\n\n" + msg with gr.Blocks() as demo: gr.Markdown("Background job running to check for access requests...") report = gr.Markdown() report.attach_load_event(lambda: REPORT, every=1) threading.Thread(target=monitor_new_posts, daemon=True).start() demo.launch()