Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- From 4b412a75b1ab7ce7080bc7c539dd189904e9c1a1 Mon Sep 17 00:00:00 2001
- From: popcornmix <popcornmix@gmail.com>
- Date: Tue, 18 Jun 2019 20:37:48 +0100
- Subject: [PATCH] Gymhunter: Add support for forms and sex or raid bosses
- ---
- GymHunter.py | 25 ++++++++++++++++---------
- MonsterMap.py | 8 +++++++-
- utility.py | 30 ++++++++++++++++++------------
- 3 files changed, 41 insertions(+), 22 deletions(-)
- diff --git a/GymHunter.py b/GymHunter.py
- index b263835..fcfaa94 100755
- --- a/GymHunter.py
- +++ b/GymHunter.py
- @@ -180,19 +180,25 @@ def get_gym_name(self, id, kind):
- i = None
- return utility.portalnames(kind)[i] if i is not None else None
- -async def raid_message(channel, end_time, until, title, lat, lon, content=None, mon=None, egg=None, move1=None, move2=None):
- +async def raid_message(channel, end_time, until, title, lat, lon, content=None, mon=None, egg=None, props=None):
- if mon is None:
- description="Hatching at {} ({}m {}s)".format(end_time.strftime("%H:%M:%S"), *divmod(until.seconds, 60))
- thumb = "eggs/{}.png".format(egg)
- name = "Level {} egg!".format(egg)
- else:
- + move1, move2, form, sex = utility.extract_props(props)
- if move1 and move2:
- description = "Prepare for {}/{}\n".format(move1, move2)
- else:
- description = ""
- description += "Until {} ({}m {}s)".format(end_time.strftime("%H:%M:%S"), *divmod(until.seconds, 60))
- thumb = "monsters/{:03}_000.png".format(mon)
- - name = "{} Raid!".format(utility.get_mon_name(mon))
- + name = utility.get_mon_name(mon)
- + if sex:
- + name += " " + sex
- + if form:
- + name += " ({})".format(form)
- + name += " Raid!"
- thumbnail = "https://monsterimages.tk/v1.5/regular/{}".format(thumb)
- await utility.post_map_internal(channel, None, lat, lon, None, want_image=True, title=title, description=description, thumbnail=thumbnail, name=name, content=content)
- @@ -854,7 +860,7 @@ class GymHunter:
- await channel.send("No nests with {} types found".format(args[0].lower()))
- return
- now = datetime.datetime.now()
- - egg, mon, end_time, until, move1, move2, args = utility.parse_egg_mon_time(inarg, now)
- + egg, mon, end_time, until, props, args = utility.parse_egg_mon_time(inarg, now)
- if len(args) > 0:
- gym, error = utility.get_gym(" ".join(args), utility.portalnames('nest'), kind = "nest")
- if error is not None:
- @@ -952,8 +958,9 @@ class GymHunter:
- gyms.append(gym)
- await channel.send("The current exgyms are {}".format(", ".join(gyms)))
- - async def raid_message_check(self, now, gym, egg, mon, end_time, until, move1, move2):
- - print("raid_message_check: gym:{} mon:{} egg:{} move:{}/{} now:{} end:{} until:{}".format(gym, mon, egg, move1, move2, now, end_time, until))
- + async def raid_message_check(self, now, gym, egg, mon, end_time, until, props):
- + move1, move2, form, sex = utility.extract_props(props)
- + print("raid_message_check: gym:{} mon:{} egg:{} props:{} now:{} end:{} until:{}".format(gym, mon, egg, props, now, end_time, until))
- error = None
- response = []
- recents = await self.get_recent_raids(utility.channel(self.bot, 'raidsgymhunter'), utility.egg_time() + utility.boss_time() + utility.slop_time(), gym)
- @@ -1032,7 +1039,7 @@ class GymHunter:
- content = utility.role(self.bot, 'exraidspawner') if spawner else None
- title="{}. {} ({} {})".format(gym, address, utility.get_dist_as_str(distance), utility.get_cardinal_dir((lat, lon), self.cambridge))
- print("{} ({}) [{}]".format(title, spawner, content))
- - await raid_message(raid_channel, end_time, until, title, lat, lon, content, mon=mon, egg=egg, move1=move1, move2=move2)
- + await raid_message(raid_channel, end_time, until, title, lat, lon, content, mon=mon, egg=egg, props=props)
- return error, None if len(response) == 0 else "\n".join(response)
- @@ -1048,7 +1055,7 @@ class GymHunter:
- return
- now = datetime.datetime.now()
- - egg, mon, end_time, until, move1, move2, args = utility.parse_egg_mon_time(inarg, now)
- + egg, mon, end_time, until, props, args = utility.parse_egg_mon_time(inarg, now)
- gym = error = response = None
- if len(inarg) == 0:
- @@ -1059,7 +1066,7 @@ class GymHunter:
- gym, error = utility.get_gym(" ".join(args), utility.portalnames('gym'))
- if gym:
- - error, response = await self.raid_message_check(now, gym.split(" (")[0], egg, mon, end_time, until, move1, move2)
- + error, response = await self.raid_message_check(now, gym.split(" (")[0], egg, mon, end_time, until, props)
- if error is not None:
- await channel.send(error)
- return
- @@ -1092,7 +1099,7 @@ class GymHunter:
- return
- now = datetime.datetime.now()
- now = now.replace(hour=8, minute=0, second=0)
- - egg, mon, end_time, until, move1, move2, args = utility.parse_egg_mon_time(inarg, now)
- + egg, mon, end_time, until, props, args = utility.parse_egg_mon_time(inarg, now)
- if end_time is None:
- await ctx.message.channel.send("I need a date and time for the ex raid")
- return
- diff --git a/MonsterMap.py b/MonsterMap.py
- index 030e11a..b643117 100644
- --- a/MonsterMap.py
- +++ b/MonsterMap.py
- @@ -89,7 +89,13 @@ class MonsterMap:
- if boss:
- post = "!raid {} {} {}".format(boss, gym, raid_time.strftime('%H:%M'))
- if move1 and move2:
- - post += " {}/{}".format(move1.replace(" ", "_"), move2.replace(" ", "_"))
- + post += " ‹{}/{}›".format(move1.replace(" ", "_"), move2.replace(" ", "_"))
- + if r.get('pokemon_form_name') and len(r.get('pokemon_form_name')) > 0:
- + post += " ‹{}›".format(r.get('pokemon_form_name'))
- + if r.get('gender') and r.get('gender').lower() in ["♀", "female"]:
- + post += " ‹♀›"
- + if r.get('gender') and r.get('gender').lower() in ["♂","male"]:
- + post += " ‹♂›"
- print("{} ({})".format(post, len(current_raids)))
- def pred(m):
- return m.channel == channel
- diff --git a/utility.py b/utility.py
- index 5935e12..2f87a62 100644
- --- a/utility.py
- +++ b/utility.py
- @@ -94,6 +94,7 @@ re_replace = [
- (re.compile(r'<:dra:417236951515529227>', flags=re.IGNORECASE), r' dragonite ' ),
- (re.compile(r'<:shuckle:451463019218599964>', flags=re.IGNORECASE), r' shuckle ' ),
- (re.compile(r'<:Slowpoke:497650972093448202>', flags=re.IGNORECASE), r' slowpoke ' ),
- + (re.compile(r'‹(.*?)›', flags=re.IGNORECASE), r'' ),
- ]
- def replace(inarg):
- @@ -113,7 +114,23 @@ def mangle_portal(gym):
- gym = "SPM"
- return gym
- +def extract_props(props):
- + move1 = move2 = form = sex = None
- + for s in props:
- + if s.count('/') == 1:
- + move1 = s.split('/')[0]
- + move2 = s.split('/')[1]
- + move1=move1.replace("_", " ").title()
- + move2=move2.replace("_", " ").title()
- + elif s == "♀" or s == "♂":
- + sex = s
- + else:
- + form = s
- + return move1, move2, form, sex
- +
- def parse_egg_mon_time(inarg, now):
- + # grab any quoted props and remove them
- + props = re.findall(r"‹(.*?)›", inarg, re.DOTALL)
- inarg = replace(inarg)
- args = list(filter(None, inarg.split(" ")))
- mon = None
- @@ -121,8 +138,6 @@ def parse_egg_mon_time(inarg, now):
- until = None
- end_time = None
- date = None
- - move1= None
- - move2 = None
- pops = []
- for i in range(len(args)-1, -1, -1):
- eggnames = {'level1':1, 'level2':2, 'level3':3, 'level4':4, 'level5':5 }
- @@ -151,15 +166,6 @@ def parse_egg_mon_time(inarg, now):
- pops.append(i)
- continue
- - if args[i].count('/') == 1:
- - m1 = args[i].split('/')[0]
- - m2 = args[i].split('/')[1]
- - if len(m1) >= 3 and len(m2) >= 3 and not is_int(m1) and not is_int(m2):
- - move1=m1.replace("_", " ").title()
- - move2=m2.replace("_", " ").title()
- - pops.append(i)
- - continue
- -
- if end_time:
- until = end_time - now
- @@ -175,7 +181,7 @@ def parse_egg_mon_time(inarg, now):
- egg = int(args[-1])
- args.pop(-1)
- - return egg, mon, end_time, until, move1, move2, args
- + return egg, mon, end_time, until, props, args
- def egg_time():
- return 60 * 60
- --
- 2.11.0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement