Spaces:
Runtime error
Runtime error
Upload 2 files
Browse files
app.py
CHANGED
@@ -20,15 +20,6 @@ def new_streak(intensity):
|
|
20 |
new_streak = utils.get_streak()
|
21 |
return f"{new_streak} streak days", '## ' + 'β
' * new_streak, reward
|
22 |
|
23 |
-
# def update_pokemon_gallery():
|
24 |
-
# pokemon_exps = []
|
25 |
-
|
26 |
-
# pokemons = utils.get_pokemon()
|
27 |
-
# for dex in pokemons.keys():
|
28 |
-
# info = gr.Markdown(f"**EXP**: {utils.get_poke_energy(dex)}")
|
29 |
-
# pokemon_exps.append(info)
|
30 |
-
# return pokemon_exps
|
31 |
-
|
32 |
def restart():
|
33 |
with open('dummy.txt', 'w') as f:
|
34 |
f.write(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
|
@@ -43,28 +34,25 @@ with gr.Blocks() as demo:
|
|
43 |
|
44 |
gr.Markdown('<h1 style="text-align: center;">PokeVerse</h1>')
|
45 |
reward_md = gr.Markdown()
|
46 |
-
winning_btn = gr.Button("Are you winning today? πͺ")
|
47 |
-
restart_btn = gr.Button("Restart π")
|
48 |
intensity = gr.Slider(0, 3, step=1, label="Intensity")
|
49 |
-
streak_md = gr.Markdown(f"{streaks} streak days")
|
50 |
streakboard = gr.Markdown('## ' + 'β
' * streaks)
|
51 |
-
|
|
|
52 |
gr.Markdown('<h2 style="text-align: center;">My Poke Friends</h2>')
|
53 |
|
54 |
-
pokemon_exps = []
|
55 |
-
|
56 |
with gr.Row():
|
57 |
for dex in pokemons.keys():
|
58 |
-
|
59 |
-
with gr.
|
60 |
-
gr.
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
|
67 |
winning_btn.click(new_streak, inputs=[intensity], outputs=[streak_md, streakboard, reward_md])
|
68 |
restart_btn.click(restart, None, None)
|
69 |
-
# streak_md.change(update_pokemon_gallery, outputs=pokemon_exps)
|
70 |
demo.launch()
|
|
|
20 |
new_streak = utils.get_streak()
|
21 |
return f"{new_streak} streak days", '## ' + 'β
' * new_streak, reward
|
22 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
def restart():
|
24 |
with open('dummy.txt', 'w') as f:
|
25 |
f.write(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
|
|
|
34 |
|
35 |
gr.Markdown('<h1 style="text-align: center;">PokeVerse</h1>')
|
36 |
reward_md = gr.Markdown()
|
37 |
+
winning_btn = gr.Button("πͺ Are you winning today? πͺ")
|
38 |
+
restart_btn = gr.Button("π Restart π")
|
39 |
intensity = gr.Slider(0, 3, step=1, label="Intensity")
|
40 |
+
streak_md = gr.Markdown(f"### π₯ {streaks} streak days")
|
41 |
streakboard = gr.Markdown('## ' + 'β
' * streaks)
|
42 |
+
money_md = gr.Markdown(f"### π° Money saved: {'{:,}'.format(utils.get_money())} VND")
|
43 |
+
money_md = gr.Markdown(f"### 𧱠Minifigure: {utils.get_total_minifigure()}")
|
44 |
gr.Markdown('<h2 style="text-align: center;">My Poke Friends</h2>')
|
45 |
|
|
|
|
|
46 |
with gr.Row():
|
47 |
for dex in pokemons.keys():
|
48 |
+
if pokemons[dex]['visible'] == True:
|
49 |
+
with gr.Group():
|
50 |
+
with gr.Column(min_width=200) as poke_col:
|
51 |
+
gr.Image(pokemons[dex]['image'], show_label=False)
|
52 |
+
with gr.Accordion(pokemons[dex]['name'], open=False):
|
53 |
+
gr.Markdown(pokemons[dex]['description'])
|
54 |
+
info = gr.Markdown(f"**EXP**: {utils.get_poke_energy(dex)}")
|
|
|
55 |
|
56 |
winning_btn.click(new_streak, inputs=[intensity], outputs=[streak_md, streakboard, reward_md])
|
57 |
restart_btn.click(restart, None, None)
|
|
|
58 |
demo.launch()
|
utils.py
CHANGED
@@ -84,7 +84,7 @@ def get_poke_energy(dex):
|
|
84 |
metadata = read_metadata()
|
85 |
return metadata["pokemon"][dex]["energy"]
|
86 |
|
87 |
-
def
|
88 |
pokemon = pypokedex.get(dex=dex)
|
89 |
description = pokemon.get_descriptions()
|
90 |
try:
|
@@ -99,6 +99,62 @@ def pokemon(dex):
|
|
99 |
sprite = None
|
100 |
return name, description, image, sprite
|
101 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
102 |
def random_pokemon():
|
103 |
min_dex = 1
|
104 |
max_dex = 1017
|
@@ -106,8 +162,9 @@ def random_pokemon():
|
|
106 |
all_dex = get_all_pokemon_dex()
|
107 |
while True:
|
108 |
dex = random.randint(min_dex, max_dex)
|
109 |
-
if
|
110 |
-
|
|
|
111 |
break
|
112 |
|
113 |
random_pokemon = {
|
@@ -116,7 +173,9 @@ def random_pokemon():
|
|
116 |
"image": image,
|
117 |
"sprite": sprite,
|
118 |
"description": description,
|
119 |
-
"energy": 0
|
|
|
|
|
120 |
}
|
121 |
}
|
122 |
|
@@ -124,8 +183,7 @@ def random_pokemon():
|
|
124 |
|
125 |
def add_new_pokemon(new_pokemon):
|
126 |
metadata = read_metadata()
|
127 |
-
|
128 |
-
metadata["pokemon"][dex] = new_pokemon[dex]
|
129 |
return metadata
|
130 |
|
131 |
def is_lucky(streak):
|
@@ -185,6 +243,44 @@ def new_streak(intensity):
|
|
185 |
streak = metadata["streak"]
|
186 |
reward = ""
|
187 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
188 |
if is_lucky(streak):
|
189 |
gift = lucky_draw()
|
190 |
if gift[0] == 'money':
|
@@ -199,19 +295,32 @@ def new_streak(intensity):
|
|
199 |
gift_str = "a minifigure"
|
200 |
|
201 |
if gift[0] == 'energy':
|
202 |
-
gift_str = f"{gift[2]} energy point to {get_pokemon_by_dex(gift[1])['name']}"
|
203 |
|
204 |
-
reward += f"**Lucky
|
205 |
|
206 |
# Update new reward
|
207 |
metadata = read_metadata()
|
208 |
|
209 |
all_dex = get_all_pokemon_dex()
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
214 |
|
|
|
|
|
|
|
215 |
save_metadata(metadata)
|
216 |
|
217 |
is_first_day_of_week = datetime.date.today().weekday() == 0
|
|
|
84 |
metadata = read_metadata()
|
85 |
return metadata["pokemon"][dex]["energy"]
|
86 |
|
87 |
+
def get_pokemon_info(dex):
|
88 |
pokemon = pypokedex.get(dex=dex)
|
89 |
description = pokemon.get_descriptions()
|
90 |
try:
|
|
|
99 |
sprite = None
|
100 |
return name, description, image, sprite
|
101 |
|
102 |
+
def get_evolution_chain(dex):
|
103 |
+
# Fetch the PokΓ©mon species data for Ivysaur
|
104 |
+
pokemon = pypokedex.get(dex=dex)
|
105 |
+
name = pokemon.name
|
106 |
+
species_url = f"https://pokeapi.co/api/v2/pokemon-species/{name}"
|
107 |
+
species_response = requests.get(species_url)
|
108 |
+
species_data = json.loads(species_response.text)
|
109 |
+
|
110 |
+
# Extract the evolution chain URL
|
111 |
+
evolution_chain_url = species_data['evolution_chain']['url']
|
112 |
+
|
113 |
+
# Fetch the evolution chain data
|
114 |
+
evolution_chain_response = requests.get(evolution_chain_url)
|
115 |
+
evolution_chain_data = json.loads(evolution_chain_response.text)
|
116 |
+
|
117 |
+
# Parse the evolution chain data and get the full list of evolutions
|
118 |
+
evolution_list = []
|
119 |
+
chain = evolution_chain_data['chain']
|
120 |
+
while chain:
|
121 |
+
species_name = chain['species']['name']
|
122 |
+
evolution_list.append(pypokedex.get(name=species_name).dex)
|
123 |
+
if chain.get('evolves_to') != []:
|
124 |
+
chain = chain.get('evolves_to')[0]
|
125 |
+
else:
|
126 |
+
break
|
127 |
+
|
128 |
+
return evolution_list
|
129 |
+
|
130 |
+
def can_evolve(dex, energy):
|
131 |
+
metadata = read_metadata()
|
132 |
+
if metadata["pokemon"][dex]["max_energy"] <= energy:
|
133 |
+
return True
|
134 |
+
else:
|
135 |
+
return False
|
136 |
+
|
137 |
+
def evolve_to(dex):
|
138 |
+
evolution_chain = get_evolution_chain(dex)
|
139 |
+
print(evolution_chain)
|
140 |
+
# If fully evolved
|
141 |
+
if dex == evolution_chain[-1]:
|
142 |
+
return None
|
143 |
+
else:
|
144 |
+
evolve_dex = evolution_chain[evolution_chain.index(dex) + 1]
|
145 |
+
name, description, image, sprite = get_pokemon_info(evolve_dex)
|
146 |
+
return {
|
147 |
+
evolve_dex: {
|
148 |
+
"name": name,
|
149 |
+
"image": image,
|
150 |
+
"sprite": sprite,
|
151 |
+
"description": description,
|
152 |
+
"energy": 0,
|
153 |
+
"max_energy": 100 + 20*(evolution_chain.index(dex) + 1),
|
154 |
+
"visible": True
|
155 |
+
}
|
156 |
+
}
|
157 |
+
|
158 |
def random_pokemon():
|
159 |
min_dex = 1
|
160 |
max_dex = 1017
|
|
|
162 |
all_dex = get_all_pokemon_dex()
|
163 |
while True:
|
164 |
dex = random.randint(min_dex, max_dex)
|
165 |
+
# if not in the team and the first level
|
166 |
+
if (dex not in all_dex) and (dex == get_evolution_chain(dex)[0]):
|
167 |
+
name, description, image, sprite = get_pokemon_info(dex)
|
168 |
break
|
169 |
|
170 |
random_pokemon = {
|
|
|
173 |
"image": image,
|
174 |
"sprite": sprite,
|
175 |
"description": description,
|
176 |
+
"energy": 0,
|
177 |
+
"max_energy": 100,
|
178 |
+
"visible": True
|
179 |
}
|
180 |
}
|
181 |
|
|
|
183 |
|
184 |
def add_new_pokemon(new_pokemon):
|
185 |
metadata = read_metadata()
|
186 |
+
metadata["pokemon"].update(new_pokemon)
|
|
|
187 |
return metadata
|
188 |
|
189 |
def is_lucky(streak):
|
|
|
243 |
streak = metadata["streak"]
|
244 |
reward = ""
|
245 |
|
246 |
+
date1 = datetime.datetime.today()
|
247 |
+
date2 = datetime.datetime.strptime(metadata["last_streak_day"], "%d/%m/%Y")
|
248 |
+
delta = date1 - date2
|
249 |
+
distance = delta.days
|
250 |
+
|
251 |
+
if (distance >= 2):
|
252 |
+
metadata = {
|
253 |
+
"streak": 0,
|
254 |
+
"total_minifigure": 0,
|
255 |
+
"donation": [
|
256 |
+
{
|
257 |
+
"wildact": {
|
258 |
+
"donation_link": "https://www.wildact-vn.org/en/support-us/donate/",
|
259 |
+
"image": "https://a-us.storyblok.com/f/1014782/567x567/7338612d04/wa_logo-2023-vn.png"
|
260 |
+
}
|
261 |
+
}
|
262 |
+
],
|
263 |
+
"last_streak_day": datetime.datetime.today().strftime("%d/%m/%Y"),
|
264 |
+
"money": 0,
|
265 |
+
"pokemon": {
|
266 |
+
"4": {
|
267 |
+
"name": "Charmander",
|
268 |
+
"image": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/4.png",
|
269 |
+
"sprite": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/4.png",
|
270 |
+
"description": "Obviously prefers hot places. When it rains, steam is said to spout from the tip of its tail.",
|
271 |
+
"energy": 179,
|
272 |
+
"max_energy": 100,
|
273 |
+
"visible": false
|
274 |
+
}
|
275 |
+
},
|
276 |
+
"wishlist": [
|
277 |
+
"https://u6wdnj9wggobj.vcdn.cloud/media/catalog/product/cache/a237138a07ed0dd2cc8a6fa440635ea6/7/6/76414_copy_0.jpg",
|
278 |
+
"https://u6wdnj9wggobj.vcdn.cloud/media/catalog/product/cache/a237138a07ed0dd2cc8a6fa440635ea6/6/0/60302_7_.jpg"
|
279 |
+
]
|
280 |
+
}
|
281 |
+
save_metadata(metadata)
|
282 |
+
return "# π₯π₯π₯ YOU SKIP 1 DAYYYYYY. EVERYTHING IS BURNTTTTTT. ALL YOUR FRIENDS ARE VANISHINGGGGG π₯π₯π₯"
|
283 |
+
|
284 |
if is_lucky(streak):
|
285 |
gift = lucky_draw()
|
286 |
if gift[0] == 'money':
|
|
|
295 |
gift_str = "a minifigure"
|
296 |
|
297 |
if gift[0] == 'energy':
|
298 |
+
gift_str = f"{gift[2]} energy point to **{get_pokemon_by_dex(gift[1])['name']}**"
|
299 |
|
300 |
+
reward += f"**Lucky!!!** You are awarded {gift_str} π.\n\n \n\n"
|
301 |
|
302 |
# Update new reward
|
303 |
metadata = read_metadata()
|
304 |
|
305 |
all_dex = get_all_pokemon_dex()
|
306 |
+
while True:
|
307 |
+
random_dex = random.choice(all_dex)
|
308 |
+
if metadata["pokemon"][random_dex]["visible"] == True:
|
309 |
+
energy = poke_energy(streak, intensity)
|
310 |
+
metadata["pokemon"][random_dex]["energy"] += energy
|
311 |
+
|
312 |
+
if can_evolve(random_dex, metadata["pokemon"][random_dex]["energy"]):
|
313 |
+
metadata["pokemon"][random_dex]["visible"] = False
|
314 |
+
evolve_pokemon = evolve_to(int(random_dex))
|
315 |
+
evolve_dex = list(evolve_pokemon.keys())[0]
|
316 |
+
metadata["pokemon"].update(evolve_pokemon)
|
317 |
+
reward += f"Your **{metadata['pokemon'][random_dex]['name']}** has just evolved into **{metadata['pokemon'][evolve_dex]['name']}**. Hoorayyyyy!!! π₯³.\n\n \n\n"
|
318 |
+
|
319 |
+
reward += f"Your **{metadata['pokemon'][random_dex]['name']}** has just got **{energy} EXP** βοΈ.\n\n \n\n"
|
320 |
|
321 |
+
break
|
322 |
+
|
323 |
+
metadata["last_streak_day"] = datetime.datetime.today().strftime("%d/%m/%Y")
|
324 |
save_metadata(metadata)
|
325 |
|
326 |
is_first_day_of_week = datetime.date.today().weekday() == 0
|