-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcourse_management.py
139 lines (133 loc) · 5.73 KB
/
course_management.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import discord
import utils
import datetime, json
async def send_timetable(ctx, client, args):
users = []
if not args:
discord_ids = json.load(open("datafiles/discord_ids.json", "r"))
users.append(discord_ids[str(ctx.author.id)]['kerberos'])
else:
for arg in args:
if type(arg) == discord.member.Member:
discord_ids = json.load(open("datafiles/discord_ids.json", "r"))
try:
users.append(discord_ids[str(arg.id)]['kerberos'])
except:
pass
else:
users.append(arg)
ctr = 0
for user in users:
timetable = {"Monday": [], "Tuesday": [], "Wednesday": [], "Thursday": [], "Friday": []}
courses = utils.get_courses(user)
if not courses:
return
for course in courses:
if course[2] != "L":
continue
course = course[:6]
if course in utils.course_slots and utils.course_slots[course] in utils.slots:
slot = utils.course_slots[course]
slot_details = utils.slots[slot]
for day in slot_details:
timetable[day].append(f"{course}: {slot_details[day]}")
embed = discord.Embed(title=f"Timetable for {user}", color=0x3480D5, timestamp=datetime.datetime.utcnow())
for day in timetable:
embed.add_field(name=day, value="```"+ "\n".join(timetable[day]) + "```", inline=False)
embed.set_footer(text=f"Requested by: {ctx.author.name}#{ctx.author.discriminator}")
if ctr == 0:
await ctx.reply(embed=embed)
ctr = 1
else:
await ctx.send(embed=embed)
async def send_courses(ctx, client, args):
users = []
if not args:
discord_ids = json.load(open("datafiles/discord_ids.json", "r"))
users.append(discord_ids[str(ctx.author.id)]['kerberos'])
else:
for arg in args:
if type(arg) == discord.member.Member:
discord_ids = json.load(open("datafiles/discord_ids.json", "r"))
try:
users.append(discord_ids[str(arg.id)]['kerberos'])
except:
pass
else:
users.append(arg)
ctr = 0
for user in users:
courses = utils.get_courses(user)
if not courses:
return
reply = ""
for course in courses:
reply += f"`{course}` "
embed = discord.Embed(title=f"Courses for {user}", description=reply,color=0x3480D5, timestamp=datetime.datetime.utcnow())
embed.set_footer(text=f"Requested by: {ctx.author.name}#{ctx.author.discriminator}")
if ctr == 0:
await ctx.reply(embed=embed)
ctr = 1
else:
await ctx.send(embed=embed)
async def send_slots(ctx, client, args):
embed = discord.Embed(title=f"Course Slots", color=0x3480D5, timestamp=datetime.datetime.utcnow())
for arg in args:
if arg.upper() in utils.course_slots:
embed.add_field(name=arg.upper(), value=f"`{utils.course_slots[arg.upper()]}`")
embed.set_footer(text=f"Requested by: {ctx.author.name}#{ctx.author.discriminator}")
await ctx.reply(embed=embed)
async def count(ctx, client, course):
count = utils.get_course_count(course)
if count:
await ctx.reply(f"`{course}` has {count} participants. Number may include faculty and staff.")
else:
await ctx.reply(f"`{course}` is not offered this semester [or] data not available.")
async def send_info(ctx, client, args):
ctr = 0
for arg in args:
arg = arg.upper()
if arg in utils.courseinfo:
info = utils.course_info(arg)
if not info:
continue
embed = discord.Embed(title = f"{info['code']} - {info['name']}", color=discord.Color.gold())
embed.add_field(name='Credits', value = f"`{info['credits']}`")
embed.add_field(name='Credit Structure', value = f"`{info['credit-structure']}`")
embed.add_field(name='Pre-requisites', value = f"`{info['pre-requisites']}`")
embed.add_field(name='Dependencies', value = '\t'.join(f"`{c}`" for c in info['dependencies']))
embed.add_field(name='Overlap', value = f"`{info['overlap']}`")
embed.add_field(name='Description', value = info['description'][:1024], inline=False)
if ctr == 0:
ctr = 1
await ctx.reply(embed=embed)
else:
await ctx.send(embed=embed)
async def majors(ctx, client, args):
kerberos = []
if not args:
discord_ids = json.load(open("datafiles/discord_ids.json", "r"))
kerberos.append(discord_ids[str(ctx.author.id)]['kerberos'])
else:
for arg in args:
if type(arg) == discord.member.Member:
discord_ids = json.load(open("datafiles/discord_ids.json", "r"))
try:
kerberos.append(discord_ids[str(arg.id)]['kerberos'])
except:
pass
else:
kerberos.append(arg)
if len(kerberos) == 0:
return
ctr = 0
for user in kerberos:
embed = discord.Embed(title=f"Major Schedule for {user}", color=discord.Color.green(), timestamp=datetime.datetime.utcnow())
for major in utils.get_majors(user):
embed.add_field(name=f"{major['Day']} May", value=f"`{major['Course']}`: **{major['Time']}** ({'/'.join(major['Venues'])})", inline=False)
embed.set_footer(text=f"Requested by: {ctx.author.name}#{ctx.author.discriminator}")
if ctr == 0:
await ctx.reply(embed=embed)
ctr = 1
else:
await ctx.send(embed=embed)