panda1835 commited on
Commit
ad9b99b
1 Parent(s): 43b67d8

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +52 -0
  2. utils.py +225 -0
app.py ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import pypokedex
3
+ import json
4
+ import utils
5
+
6
+ streaks = utils.get_streak()
7
+ pokemons = utils.get_pokemon()
8
+
9
+ def new_streak(intensity):
10
+ global pokemons
11
+ pokemons = utils.get_pokemon()
12
+
13
+ reward = utils.new_streak(intensity)
14
+ new_streak = utils.get_streak()
15
+ return f"{new_streak} streak days", '## ' + '✅ ' * new_streak, reward
16
+
17
+ # def update_pokemon_gallery():
18
+ # pokemon_exps = []
19
+
20
+ # pokemons = utils.get_pokemon()
21
+ # for dex in pokemons.keys():
22
+ # info = gr.Markdown(f"**EXP**: {utils.get_poke_energy(dex)}")
23
+ # pokemon_exps.append(info)
24
+ # return pokemon_exps
25
+
26
+ with gr.Blocks() as demo:
27
+
28
+ gr.Markdown('<h1 style="text-align: center;">PokeVerse</h1>')
29
+ reward_md = gr.Markdown()
30
+ winning_btn = gr.Button("Are you winning today? 💪")
31
+ intensity = gr.Slider(0, 3, step=1, label="Intensity")
32
+ streak_md = gr.Markdown(f"{streaks} streak days")
33
+ streakboard = gr.Markdown('## ' + '✅ ' * streaks)
34
+
35
+ gr.Markdown('<h2 style="text-align: center;">My Poke Friends</h2>')
36
+
37
+ pokemon_exps = []
38
+
39
+ with gr.Row():
40
+ for dex in pokemons.keys():
41
+ with gr.Group():
42
+ with gr.Column(min_width=200) as poke_col:
43
+ gr.Image(pokemons[dex]['image'], show_label=False)
44
+ with gr.Accordion(pokemons[dex]['name'], open=False):
45
+ gr.Markdown(pokemons[dex]['description'])
46
+ info = gr.Markdown(f"**EXP**: {utils.get_poke_energy(dex)}")
47
+ pokemon_exps.append(info)
48
+
49
+
50
+ winning_btn.click(new_streak, inputs=[intensity], outputs=[streak_md, streakboard, reward_md])
51
+ # streak_md.change(update_pokemon_gallery, outputs=pokemon_exps)
52
+ demo.launch()
utils.py ADDED
@@ -0,0 +1,225 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import random
2
+ import json
3
+ import pypokedex
4
+ import json
5
+ import datetime
6
+ import requests
7
+ from huggingface_hub import login, HfApi
8
+ import os
9
+
10
+ hf_token = os.environ["HF_TOKEN"]
11
+
12
+ login(hf_token)
13
+
14
+ hfapi = HfApi()
15
+
16
+ metadata_url = "https://huggingface.co/spaces/panda1835/pokemon-data/raw/main/metadata.json"
17
+
18
+ def read_json_from_url(url):
19
+ try:
20
+ response = requests.get(url)
21
+ response.raise_for_status() # Will raise an HTTPError if the HTTP request returned an unsuccessful status code
22
+ json_data = response.json()
23
+ return json_data
24
+ except requests.RequestException as e:
25
+ print(f"Error occurred: {e}")
26
+ return None
27
+
28
+ def read_metadata():
29
+ # Open the JSON file and read its contents
30
+ # with open("metadata.json", "r") as json_file:
31
+ # metadata = json.load(json_file)
32
+
33
+ metadata = read_json_from_url(metadata_url)
34
+ # Access the JSON data
35
+ return metadata
36
+
37
+ def save_metadata(metadata):
38
+ with open("metadata.json", "w") as json_file:
39
+ json.dump(metadata, json_file, indent=4)
40
+ try:
41
+ hfapi.upload_file(
42
+ path_or_fileobj="metadata.json",
43
+ path_in_repo="metadata.json",
44
+ repo_id="panda1835/pokemon-data",
45
+ repo_type="space",
46
+ )
47
+ return "### Data updated ✅"
48
+ except Exception as e:
49
+ return "❌ " + str(e)
50
+
51
+ def get_all_pokemon_dex():
52
+ metadata = read_metadata()
53
+ return list(metadata["pokemon"].keys())
54
+
55
+ def get_streak():
56
+ metadata = read_metadata()
57
+ return metadata["streak"]
58
+
59
+ def get_total_minifigure():
60
+ metadata = read_metadata()
61
+ return metadata["total_minifigure"]
62
+
63
+ def get_money():
64
+ metadata = read_metadata()
65
+ return metadata["money"]
66
+
67
+ def get_pokemon():
68
+ metadata = read_metadata()
69
+ return metadata["pokemon"]
70
+
71
+ def get_pokemon_by_dex(dex):
72
+ metadata = read_metadata()
73
+ return metadata["pokemon"][dex]
74
+
75
+ def get_donation():
76
+ metadata = read_metadata()
77
+ return metadata["donation"]
78
+
79
+ def get_wishlist():
80
+ metadata = read_metadata()
81
+ return metadata["wishlist"]
82
+
83
+ def get_poke_energy(dex):
84
+ metadata = read_metadata()
85
+ return metadata["pokemon"][dex]["energy"]
86
+
87
+ def pokemon(dex):
88
+ pokemon = pypokedex.get(dex=dex)
89
+ description = pokemon.get_descriptions()
90
+ try:
91
+ description = description[list(description.keys())[0]].replace('\n', ' ')
92
+ except:
93
+ description = "Not yet understood"
94
+ name = pokemon.name.capitalize()
95
+ image = list(pokemon.other_sprites.values())[2].front['default']
96
+ try:
97
+ sprite = pokemon.sprites.front['default']
98
+ except:
99
+ sprite = None
100
+ return name, description, image, sprite
101
+
102
+ def random_pokemon():
103
+ min_dex = 1
104
+ max_dex = 1017
105
+
106
+ all_dex = get_all_pokemon_dex()
107
+ while True:
108
+ dex = random.randint(min_dex, max_dex)
109
+ if dex not in all_dex:
110
+ name, description, image, sprite = pokemon(dex)
111
+ break
112
+
113
+ random_pokemon = {
114
+ dex: {
115
+ "name": name,
116
+ "image": image,
117
+ "sprite": sprite,
118
+ "description": description,
119
+ "energy": 0
120
+ }
121
+ }
122
+
123
+ return random_pokemon
124
+
125
+ def add_new_pokemon(new_pokemon):
126
+ metadata = read_metadata()
127
+ dex = list(new_pokemon.keys())[0]
128
+ metadata["pokemon"][dex] = new_pokemon[dex]
129
+ return metadata
130
+
131
+ def is_lucky(streak):
132
+
133
+ p = (-0.0274 * streak + 30) / 100
134
+
135
+ # Generate a random number from the Bernoulli distribution
136
+ random_number = random.choices([0, 1], weights=[1-p, p])[0]
137
+
138
+ return random_number == 1
139
+
140
+ def lucky_draw():
141
+ """Placeholder
142
+ 0 = 50 energy
143
+ 1 = a new pokemon
144
+ 2 = money
145
+ 3 = minifigure
146
+ """
147
+ metadata = read_metadata()
148
+ gifts = ['energy', 'pokemon', 'money', 'minifigure']
149
+ random_number = random.choices([0, 1, 2, 3], weights=[0.3, 0.3, 0.3, 0.1])[0]
150
+
151
+ gift = gifts[random_number]
152
+ if gift == 'money':
153
+ money = random.choices([20000, 50000, 100000], weights=[0.4, 0.4, 0.4])[0]
154
+
155
+ metadata["money"] += money
156
+ save_metadata(metadata)
157
+
158
+ return ('money', money)
159
+
160
+ elif gift == 'pokemon':
161
+ new_pokemon = random_pokemon()
162
+ metadata = add_new_pokemon(new_pokemon)
163
+ save_metadata(metadata)
164
+ return ("pokemon", new_pokemon)
165
+
166
+ elif gift == 'energy':
167
+ all_dex = get_all_pokemon_dex()
168
+ random_dex = random.choice(all_dex)
169
+ metadata["pokemon"][random_dex]["energy"] += 50
170
+ save_metadata(metadata)
171
+ return ('energy', random_dex, 50)
172
+
173
+ else:
174
+ metadata["total_minifigure"] += 1
175
+ save_metadata(metadata)
176
+ return ('minifigure', 'https://u6wdnj9wggobj.vcdn.cloud/media/catalog/product/cache/a237138a07ed0dd2cc8a6fa440635ea6/7/1/71034_3_.jpg')
177
+
178
+
179
+ def poke_energy(streak, intensity):
180
+ return round(7 + streak/60 + intensity)
181
+
182
+ def new_streak(intensity):
183
+ metadata = read_metadata()
184
+ metadata["streak"] += 1
185
+ streak = metadata["streak"]
186
+ reward = ""
187
+
188
+ if is_lucky(streak):
189
+ gift = lucky_draw()
190
+ if gift[0] == 'money':
191
+ gift_str = f"{gift[1]} VND"
192
+
193
+ if gift[0] == 'pokemon':
194
+ new_pokemon = gift[1]
195
+ dex = list(new_pokemon.keys())[0]
196
+ gift_str = f"**{new_pokemon[dex]['name']}**"
197
+
198
+ if gift[0] == 'minifigure':
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*!!!* You are rewarded {gift_str}.\n\n"
205
+
206
+ # Update new reward
207
+ metadata = read_metadata()
208
+
209
+ all_dex = get_all_pokemon_dex()
210
+ random_dex = random.choice(all_dex)
211
+ energy = poke_energy(streak, intensity)
212
+ metadata["pokemon"][random_dex]["energy"] += energy
213
+ reward += f"Your **{metadata['pokemon'][random_dex]['name']}** has just got **{energy} EXP**.\n\n"
214
+
215
+ save_metadata(metadata)
216
+
217
+ is_first_day_of_week = datetime.date.today().weekday() == 0
218
+ if is_first_day_of_week:
219
+ new_pokemon = random_pokemon()
220
+ add_new_pokemon(new_pokemon)
221
+ dex = list(new_pokemon.keys())[0]
222
+ reward += f"**{new_pokemon[dex]['name']}** has joined with your family!!!"
223
+
224
+ return reward
225
+