Upload files to "/"
This commit is contained in:
parent
0ae19e4d28
commit
d23494777b
19
Dockerfile
Normal file
19
Dockerfile
Normal file
@ -0,0 +1,19 @@
|
||||
# Use the official Python image
|
||||
FROM python:3.10-slim
|
||||
|
||||
# Set the working directory
|
||||
WORKDIR /app
|
||||
|
||||
# Copy the bot script and requirements file to the working directory
|
||||
COPY bot.py ./
|
||||
COPY requirements.txt ./
|
||||
|
||||
|
||||
# Install dependencies
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
# Expose no ports, but needed for convention
|
||||
EXPOSE 8000
|
||||
|
||||
# Command to run the bot
|
||||
CMD ["python", "bot.py"]
|
||||
122
bot.py
Normal file
122
bot.py
Normal file
@ -0,0 +1,122 @@
|
||||
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("<br>", "\n") # Replace <br> 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("<br>", "\n") # Replace <br> 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)
|
||||
3
requirements.txt
Normal file
3
requirements.txt
Normal file
@ -0,0 +1,3 @@
|
||||
discord.py
|
||||
python-dotenv
|
||||
requests
|
||||
Loading…
x
Reference in New Issue
Block a user