import discord from discord import app_commands import requests import random from datetime import datetime from dotenv import load_dotenv import os # Load environment variables from .env load_dotenv() # Fetch token and URL from .env DISCORD_TOKEN = os.getenv('DISCORD_TOKEN') QUOTES_URL = os.getenv('QUOTES_URL') # Function to fetch quotes from the URL def fetch_quotes(): response = requests.get(QUOTES_URL) if response.status_code == 200: return response.json() return None # Function to get all quotes from the fetched data def get_all_quotes(data): all_quotes = [] # List to hold all quotes for entry in data['cytaty']: for quote in entry['quotes']: all_quotes.append({ 'quote': quote['quote'], 'user': quote['user'], 'author': quote.get('author', "Unknown"), 'date': entry['date'] }) return all_quotes # Bot setup intents = discord.Intents.default() client = discord.Client(intents=intents) tree = app_commands.CommandTree(client) # Load quotes when the bot starts all_quotes = [] # Event when bot is ready @client.event async def on_ready(): global all_quotes # Sync commands again await tree.sync() # Sync global commands for guild in client.guilds: await tree.sync(guild=discord.Object(id=guild.id)) # Sync guild-specific commands if any data = fetch_quotes() if data: all_quotes = get_all_quotes(data) print(f'Logged in as {client.user}') print("Commands synced") else: print("Failed to fetch quotes on startup") # Slash command for fetching the quote of the day @tree.command(name="quote", description="Get the quote of the day based on the current date") async def fetch_quote(interaction: discord.Interaction): global all_quotes # Acknowledge the interaction immediately await interaction.response.defer(thinking=True) if all_quotes: total_quotes = len(all_quotes) # Calculate the index based on the current date current_date = datetime.now() epoch_start = datetime(1970, 1, 1) # Unix epoch start date days_since_epoch = (current_date - epoch_start).days # Calculate the quote index quote_index = days_since_epoch % total_quotes quote_data = all_quotes[quote_index] user = quote_data['user'] quote = quote_data['quote'].replace("
", "\n") # Replace
with new lines author = quote_data['author'] date = quote_data['date'] # Format response message response_message = ( f"**Quote of the Day**:\n> {quote}\n- Autor tego cuda: {author} (Wysłane przez: {user})\n*Data: {date}*" ) await interaction.followup.send(response_message) else: await interaction.followup.send("No quotes available.") # Slash command for fetching a random quote @tree.command(name="random_quote", description="Get a random quote") async def random_quote(interaction: discord.Interaction): global all_quotes # Acknowledge the interaction immediately await interaction.response.defer(thinking=True) if all_quotes: quote_data = random.choice(all_quotes) # Select a random quote user = quote_data['user'] quote = quote_data['quote'].replace("
", "\n") # Replace
with new lines author = quote_data['author'] date = quote_data['date'] # Format response message response_message = ( f"**Random Quote**:\n> {quote}\n- Autor tego cuda: {author} (Wysłane przez: {user})\n*Data: {date}*" ) await interaction.followup.send(response_message) else: await interaction.followup.send("No quotes available.") # Run the bot with the token from the .env file client.run(DISCORD_TOKEN)