subsplease
unknown
python
a year ago
5.1 kB
9
Indexable
from telethon import events, Button from datetime import datetime, timedelta import pytz import requests # Replace 'YOUR_API_ID' and 'YOUR_API_HASH' with your actual values api_id = 'YOUR_API_ID' api_hash = 'YOUR_API_HASH' # Replace 'YOUR_BOT_TOKEN' with your actual bot token bot_token = 'YOUR_BOT_TOKEN' # Function to get the SubsPlease schedule for a specific day def get_subsplease_schedule(date_param): # SubsPlease API endpoint for schedule api_url = f'https://subsplease.org/api/?f=schedule&h=true&tz=$&date={date_param}' # Make the API request try: response = requests.get(api_url) response.raise_for_status() # Raise an HTTPError for bad responses return response.json() except requests.exceptions.RequestException as e: print(f"Error fetching SubsPlease schedule: {e}") return None # Function to convert UTC time to Indian Standard Time (IST) def convert_utc_to_ist(utc_time_str): # Parse the UTC time string utc_time = datetime.strptime(utc_time_str, '%H:%M') # Set the time zone to Indian Standard Time (IST) ist_timezone = pytz.timezone('Asia/Kolkata') # Get today's date in IST today_ist = datetime.now(ist_timezone).date() # Combine today's date with the parsed time ist_time = datetime.combine(today_ist, utc_time.time()).astimezone(ist_timezone) # Format the IST time and date formatted_ist_time = ist_time.strftime('%Y-%m-%d %H:%M:%S IST') return formatted_ist_time # Function to get the date of the next occurrence of a specified day def get_next_occurrence_of_day(day): today = datetime.utcnow() days_until_target_day = (today.weekday() - day) % 7 next_occurrence = today + timedelta(days=(7 - days_until_target_day)) return next_occurrence.strftime('%Y-%m-%d') # Function to print a tick or cross based on the aired status def print_status(aired_status): return '✅' if aired_status else '❌' # Function to get the schedule for a specific day async def get_schedule_for_day(event, day): try: # Get the schedule for the specified day target_day_index = day target_day_date = get_next_occurrence_of_day(target_day_index) # Get the SubsPlease schedule for the specified day response_data = get_subsplease_schedule(target_day_date) if response_data: # Extract anime titles, airing times, and aired status schedule = response_data.get('schedule', []) # Prepare the response message response_msg = "✅ Aired | ❌ Not Aired\n\n" # Append anime details with status for entry in schedule: anime_title = entry.get('title', '') airing_time_utc = entry.get('time', '') aired_status = entry.get('aired', False) # Convert UTC time to IST airing_time_ist = convert_utc_to_ist(airing_time_utc) response_msg += f"{anime_title} - {airing_time_ist} | Status: {print_status(aired_status)}\n" # Send the response message await event.edit(response_msg) else: await event.edit("Error fetching SubsPlease schedule. Please try again later.") except Exception as e: print(f"Error in get_schedule_for_day: {e}") await event.edit("An error occurred. Please try again later.") # Define the Telethon event handler for the /subsplease command @events.register(events.NewMessage(pattern='/subsplease')) async def subsplease_handler(event): try: # Define the button rows for each day button_rows = [] for day_index, day_name in enumerate(["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], start=1): button_rows.append([Button.inline(day_name, data=f'schedule_{day_index}')]) # Build the response message response_msg = "Today's currently airing animes:\n" response_msg += "Press a button to view the schedule for a specific day.\n" # Send the initial response message with inline buttons await event.respond(response_msg, buttons=button_rows) except Exception as e: print(f"Error in subsplease_handler: {e}") # Define the Telethon event handler for button clicks @events.register(events.CallbackQuery(pattern=b'schedule_(\d+)')) async def button_click_handler(event): try: # Extract the day index from the button data day_index = int(event.pattern_match.group(1)) # Get the schedule for the specified day and edit the response await get_schedule_for_day(event, day_index) except Exception as e: print(f"Error in button_click_handler: {e}") # Start the Telethon client from telethon import TelegramClient with TelegramClient('session_name', api_id, api_hash) as client: client.run_until_disconnected()
Editor is loading...