-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathcommands.py
164 lines (140 loc) · 4.98 KB
/
commands.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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
import hikari
import json
import calendar
from datetime import date, datetime, timedelta
from itertools import chain
from serverdb import *
#
# Update rotation: 01/03/2023
#
# Json file containing the instability data
with open("data.json", "r") as file:
instability_data = json.load(file)
# Json file for fractal names and rotation indexing
with open("mappings.json", "r") as file:
fractal_data = json.load(file)
cms = [8, 9, 20, 21, 22]
instablist = [
"Adrenaline Rush",
"Afflicted",
"Boon Overload",
"Flux Bomb",
"Fractal Vindicators",
"Frailty",
"Hamstrung",
"Last Laugh",
"Mists Convergence",
"No Pain, No Gain",
"Outflanked",
"Social Awkwardness",
"Stick Together",
"Sugar Rush",
"Toxic Sickness",
"Toxic Trail",
"Vengeance",
"We Bleed Fire",
]
help_command = """```md\nDiscretize [dT] Bot - Help menu
Bot now includes integrated slash commands. To ease use, you can tab or click options
\t - /today - Shows the instabilities for today
\t - /tomorrow - Shows the instabilities for tomorrow
\t - /in x - Shows the instabilities in x days
\t - /filter <level> <with_without> <instability_1> <instability_2>
\t - !logs - all logs that are in a message containing this command will be formatted pretty
If channel #instabilities is created, the bot will auto broadcast new instabilities every day at 02:00```"""
def get_day_of_year():
day_of_year = datetime.now().timetuple().tm_yday
return day_of_year
def get_rotation(day=0):
current_rotation = date(2024, 1, 1)
rotation = (((date.today()+timedelta(day)) - current_rotation).days) % 15
return rotation
def get_instabs(day):
if get_day_of_year() > day and calendar.isleap(date.today().year) == False:
rot_num = (get_day_of_year() + day) % 365
elif get_day_of_year() > day and calendar.isleap(date.today().year) == True:
rot_num = (get_day_of_year() + day) % 366
else:
rot_num = day - get_day_of_year()
todays_instabilities = []
for i in fractal_data["rotation"][get_rotation(rot_num)]:
todays_instabilities.append(
instability_data["instabilities"][
f"{fractal_data['fractals'][i]['level']}"
][day]
)
todays_instabilities = list(chain(*todays_instabilities))
return todays_instabilities
def assign_names(day):
instab_names = []
for i in get_instabs(day):
instab_names.append(instability_data["instability_names"][i])
return instab_names
def get_cm_instabs(day):
cm_instabilities = []
for i in cms:
cm_instabilities.append(
instability_data["instabilities"][
f"{fractal_data['fractals'][i]['level']}"
][day]
)
cm_instabilities = list(chain(*cm_instabilities))
return cm_instabilities
def assign_cm_names(day):
cm_instab_names = []
for i in get_cm_instabs(day):
cm_instab_names.append(instability_data["instability_names"][i])
return cm_instab_names
def filter_instabs(level, day):
filtered_instabs = []
names = []
filtered_instabs.append(instability_data["instabilities"][f"{level}"][day - 1])
filtered_instabs = list(chain(*filtered_instabs))
for i in filtered_instabs:
names.append(instability_data["instability_names"][i])
return names
def send_instabilities(days=0):
rotation_num = get_rotation(days) % 15
in_x = get_day_of_year() + days - 1
if in_x > 365 and calendar.isleap(date.today().year) == False:
in_x %= 365
elif in_x > 366 and calendar.isleap(date.today().year) == True:
in_x %= 366
embed = hikari.Embed(
title=f"Instabilities for {date.today()+timedelta(days)}", colour="#00cccc"
)
embed.set_thumbnail("https://discretize.eu/logo.png")
for loop_count, i in enumerate(fractal_data["rotation"][rotation_num]):
if i not in cms:
embed.add_field(
f"{fractal_data['fractals'][i]['name']} (lv.{fractal_data['fractals'][i]['level']})",
" - ".join(
assign_names(in_x)[3 * (loop_count + 1) - 3 : 3 * (loop_count + 1)]
),
)
for loop_count, i in enumerate(cms):
if i in fractal_data["rotation"][rotation_num]:
embed.add_field(
f"{fractal_data['fractals'][i]['name']} (daily)",
" - ".join(
assign_cm_names(in_x)[
3 * (loop_count + 1) - 3 : 3 * (loop_count + 1)
]
),
)
else:
embed.add_field(
f"{fractal_data['fractals'][i]['name']}",
" - ".join(
assign_cm_names(in_x)[
3 * (loop_count + 1) - 3 : 3 * (loop_count + 1)
]
),
)
return embed
def get_boss_emoji(name):
temp = ""
for i in spec_emojis.keys():
if name.split()[0] in i: # split for Ai naming
temp = f"{i}{spec_emojis[i]}"
return temp