Newer
Older
import json
import os
import uuid
import datetime
import discord
from dotenv import load_dotenv
import models
from models import Appointment
from views.appointment_view import AppointmentView
def import_links(json_file: str) -> None:
file = open(json_file, mode="r")
links = json.load(file)
for channel, categories in links.items():
for category, links in categories.items():
category = category.capitalize()
db_category = models.LinkCategory.get_or_create(channel=int(channel), name=category)
for title, link in links.items():
link = link[1:-1] if link[0] == "<" and link[-1] == ">" else link
models.Link.create(url=link, title=title, category=db_category[0].id)
def import_news(json_file: str) -> None:
file = open(json_file, mode="r")
news = json.load(file)
for link, date in news.items():
models.News.create(link=link, date=date)
def import_commands(json_file: str) -> None:
file = open(json_file, mode="r")
commands = json.load(file)
for command, data in commands.items():
db_command = models.Command.get_or_create(command=command, description=data["description"])
for text in data["data"]:
models.CommandText.create(text=text, command=db_command[0].id)
def import_courses(json_file: str) -> None:
file = open(json_file, mode="r")
courses = json.load(file)
for course in courses:
models.Course.get_or_create(name=course["name"], short=course["short"], url=course["url"],
role_id=int(course["role"]))
async def import_appointments(json_file: str) -> None:
file = open(json_file, mode="r")
appointments = json.load(file)
for channel_id, messages in appointments.items():
for message_id, appointment in messages.items():
date_time = datetime.datetime.strptime(appointment["date_time"], "%d.%m.%Y %H:%M")
reminder_sent = True if appointment["reminder"] == 0 and appointment.get(
"original_reminder") is not None else False
app = models.Appointment.create(channel=int(channel_id), message=int(message_id), date_time=date_time, appointment=appointment["reminder"], description="", author=appointment["author_id"],
recurring=appointment.get("recurring", 0), reminder_sent=reminder_sent,
uuid=uuid.uuid4())
channel = await client.fetch_channel(app.channel_id)
message = await channel.fetch_message(app.message)
for reaction in message.reactions:
if reaction.emoji == "👍":
async for user in reaction.users():
if not user.bot:
models.Attendee.create(appointment=app, member_id=user.id)
new_msg = await channel.send(embed=appointment.get_embed(0), view=AppointmentView())
Appointment.update(message=new_msg.id).where(Appointment.id == app.id).execute()
load_dotenv()
client = discord.Client(intents=discord.Intents.all())
@client.event()
async def on_ready():
"""
Make sure to create a database backup before you import data from json files.
"""
# import_links("data/links.json")
# import_news("data/news.json")
# import_commands("data/text_commands.json")
# import_courses("data/courses_of_studies.json")