From 7e308b988fb00320f70eaa2b3c901a79c4ffe71c Mon Sep 17 00:00:00 2001 From: momothereal Date: Thu, 22 Mar 2018 20:37:15 -0400 Subject: [PATCH 01/61] Add team to readme glhf --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 76c385a4..4d18d99e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -# Code Jam 1 +# Code Jam 1 - Team 23 + +**This is the code jam entry for Momo & kel** This is the repository for all code relating to our first code jam, in March 2018. Participants should fork this repository, and submit their code in a pull request. From 5da9811a1d1bb6fbe485ebf0a64a6a42066a8d98 Mon Sep 17 00:00:00 2001 From: momothereal Date: Thu, 22 Mar 2018 21:55:31 -0400 Subject: [PATCH 02/61] Add python snek and a bunch of todos --- bot/cogs/snakes.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index c9ed8042..c9b7a726 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -7,6 +7,30 @@ log = logging.getLogger(__name__) +# todo: move this to a new file? +class SnakeDef: + def __init__(self, common_name, species, image_url, family, genus, short_description, wiki_link): + self.common_name = common_name + self.species = species + self.image_url = image_url + self.family = family + self.genus = genus + self.short_description = short_description + self.wiki_link = wiki_link + + +# the python snek +SNEK_PYTHON = SnakeDef( + common_name="Python", + species="Pseudo lingua", + image_url="https://momoperes.ca/files/pythonpls.png", + family="sneks-that-byte", + genus="\"Programming Language\"", + short_description="python is a language that you learn because tensorflow has an API for it", + wiki_link="https://en.wikipedia.org/wiki/Pseudocode" +) + + class Snakes: """ Snake-related commands @@ -16,6 +40,10 @@ def __init__(self, bot: AutoShardedBot): self.bot = bot async def get_snek(self, name: str = None) -> Dict[str, Any]: + if name is not None and name.lower() == "python": + # return info about language + return SNEK_PYTHON.__dict__ + """ Go online and fetch information about a snake @@ -31,6 +59,11 @@ async def get_snek(self, name: str = None) -> Dict[str, Any]: @command() async def get(self, ctx: Context, name: str = None): + # fetch data for a snek + await ctx.send("Fetching data for " + name + "..." if name is not None else "Finding a random snek!") + data = await self.get_snek(name) + # todo: send as embed + print(data) """ Go online and fetch information about a snake From ce70e431e7f6babf004a48f9d9362f1bc6d3969b Mon Sep 17 00:00:00 2001 From: momothereal Date: Thu, 22 Mar 2018 22:14:30 -0400 Subject: [PATCH 03/61] sad snek --- bot/cogs/snakes.py | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index c9b7a726..ae535d3d 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -1,7 +1,8 @@ # coding=utf-8 import logging -from typing import Any, Dict +import discord +from discord import Colour from discord.ext.commands import AutoShardedBot, Context, command log = logging.getLogger(__name__) @@ -18,6 +19,19 @@ def __init__(self, common_name, species, image_url, family, genus, short_descrip self.short_description = short_description self.wiki_link = wiki_link + def as_embed(self): + # returns a discord embed with the snek + embed = discord.Embed() + embed.title = self.species + " (" + self.common_name + ")" + embed.colour = Colour.green() + embed.url = self.wiki_link + embed.add_field(name="Family", value=self.family) + embed.add_field(name="Genus", value=self.genus) + embed.add_field(name="Species", value=self.species) + embed.set_thumbnail(url=self.image_url) + embed.description = self.short_description + return embed + # the python snek SNEK_PYTHON = SnakeDef( @@ -30,6 +44,11 @@ def __init__(self, common_name, species, image_url, family, genus, short_descrip wiki_link="https://en.wikipedia.org/wiki/Pseudocode" ) +# consolation snek :( +SNEK_SAD = discord.Embed() +SNEK_SAD.title = "sad snek :(" +SNEK_SAD.set_image(url="https://momoperes.ca/files/sadsnek.jpeg") + class Snakes: """ @@ -39,10 +58,10 @@ class Snakes: def __init__(self, bot: AutoShardedBot): self.bot = bot - async def get_snek(self, name: str = None) -> Dict[str, Any]: + async def get_snek(self, name: str = None) -> SnakeDef: if name is not None and name.lower() == "python": # return info about language - return SNEK_PYTHON.__dict__ + return SNEK_PYTHON """ Go online and fetch information about a snake @@ -62,18 +81,11 @@ async def get(self, ctx: Context, name: str = None): # fetch data for a snek await ctx.send("Fetching data for " + name + "..." if name is not None else "Finding a random snek!") data = await self.get_snek(name) - # todo: send as embed - print(data) - """ - Go online and fetch information about a snake - - This should make use of your `get_snek` method, using it to get information about a snake. This information - should be sent back to Discord in an embed. - - :param ctx: Context object passed from discord.py - :param name: Optional, the name of the snake to get information for - omit for a random snake - """ - + if data is None: + await ctx.send("sssorry I can't find that snek :(", embed=SNEK_SAD) + return + channel: discord.TextChannel = ctx.channel + await channel.send(embed=data.as_embed()) # Any additional commands can be placed here. Be creative, but keep it to a reasonable amount! From 7ad443822e04b0ef868a2bb1a0a775cd1bbe9dee Mon Sep 17 00:00:00 2001 From: momothereal Date: Thu, 22 Mar 2018 22:15:33 -0400 Subject: [PATCH 04/61] Remove unnecessary import --- bot/cogs/snakes.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index ae535d3d..ab32ab69 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -2,7 +2,6 @@ import logging import discord -from discord import Colour from discord.ext.commands import AutoShardedBot, Context, command log = logging.getLogger(__name__) @@ -23,7 +22,7 @@ def as_embed(self): # returns a discord embed with the snek embed = discord.Embed() embed.title = self.species + " (" + self.common_name + ")" - embed.colour = Colour.green() + embed.colour = discord.Colour.green() embed.url = self.wiki_link embed.add_field(name="Family", value=self.family) embed.add_field(name="Genus", value=self.genus) From 40d4e0d4d6f2eb0be24176376ed2b7ec4cffd895 Mon Sep 17 00:00:00 2001 From: momothereal Date: Thu, 22 Mar 2018 22:24:16 -0400 Subject: [PATCH 05/61] Move SnakeDef into a new file --- bot/cogs/snakes.py | 43 ++++--------------------------------------- bot/sneks/__init__.py | 1 + bot/sneks/sneks.py | 29 +++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 39 deletions(-) create mode 100644 bot/sneks/__init__.py create mode 100644 bot/sneks/sneks.py diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index ab32ab69..402c1cf8 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -4,33 +4,9 @@ import discord from discord.ext.commands import AutoShardedBot, Context, command -log = logging.getLogger(__name__) - - -# todo: move this to a new file? -class SnakeDef: - def __init__(self, common_name, species, image_url, family, genus, short_description, wiki_link): - self.common_name = common_name - self.species = species - self.image_url = image_url - self.family = family - self.genus = genus - self.short_description = short_description - self.wiki_link = wiki_link - - def as_embed(self): - # returns a discord embed with the snek - embed = discord.Embed() - embed.title = self.species + " (" + self.common_name + ")" - embed.colour = discord.Colour.green() - embed.url = self.wiki_link - embed.add_field(name="Family", value=self.family) - embed.add_field(name="Genus", value=self.genus) - embed.add_field(name="Species", value=self.species) - embed.set_thumbnail(url=self.image_url) - embed.description = self.short_description - return embed +from bot.sneks.sneks import SnakeDef +log = logging.getLogger(__name__) # the python snek SNEK_PYTHON = SnakeDef( @@ -62,18 +38,8 @@ async def get_snek(self, name: str = None) -> SnakeDef: # return info about language return SNEK_PYTHON - """ - Go online and fetch information about a snake - - The information includes the name of the snake, a picture of the snake, and various other pieces of info. - What information you get for the snake is up to you. Be creative! - - If "python" is given as the snake name, you should return information about the programming language, but with - all the information you'd provide for a real snake. Try to have some fun with this! - - :param name: Optional, the name of the snake to get information for - omit for a random snake - :return: A dict containing information on a snake - """ + # todo: find a random snek online if there name is null + # todo: scrape the web to find the lost sneks @command() async def get(self, ctx: Context, name: str = None): @@ -85,7 +51,6 @@ async def get(self, ctx: Context, name: str = None): return channel: discord.TextChannel = ctx.channel await channel.send(embed=data.as_embed()) - # Any additional commands can be placed here. Be creative, but keep it to a reasonable amount! def setup(bot): diff --git a/bot/sneks/__init__.py b/bot/sneks/__init__.py new file mode 100644 index 00000000..bf893c06 --- /dev/null +++ b/bot/sneks/__init__.py @@ -0,0 +1 @@ +# coding=utf-8 \ No newline at end of file diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py new file mode 100644 index 00000000..1e3fd931 --- /dev/null +++ b/bot/sneks/sneks.py @@ -0,0 +1,29 @@ +import discord + + +class SnakeDef: + """ + Represents a snek + """ + + def __init__(self, common_name, species, image_url, family, genus, short_description, wiki_link): + self.common_name = common_name + self.species = species + self.image_url = image_url + self.family = family + self.genus = genus + self.short_description = short_description + self.wiki_link = wiki_link + + def as_embed(self): + # returns a discord embed with the snek + embed = discord.Embed() + embed.title = self.species + " (" + self.common_name + ")" + embed.colour = discord.Colour.green() + embed.url = self.wiki_link + embed.add_field(name="Family", value=self.family) + embed.add_field(name="Genus", value=self.genus) + embed.add_field(name="Species", value=self.species) + embed.set_thumbnail(url=self.image_url) + embed.description = self.short_description + return embed From 66bcd712a4716b079e36f19ceb8b0419b4d0a34b Mon Sep 17 00:00:00 2001 From: momothereal Date: Thu, 22 Mar 2018 22:27:23 -0400 Subject: [PATCH 06/61] Newline at EOF thank mr travis --- bot/sneks/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/sneks/__init__.py b/bot/sneks/__init__.py index bf893c06..9bad5790 100644 --- a/bot/sneks/__init__.py +++ b/bot/sneks/__init__.py @@ -1 +1 @@ -# coding=utf-8 \ No newline at end of file +# coding=utf-8 From 4846889799c26d14d17282591d9fb149023f3065 Mon Sep 17 00:00:00 2001 From: momothereal Date: Thu, 22 Mar 2018 22:29:00 -0400 Subject: [PATCH 07/61] snek it up --- run.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/run.py b/run.py index 2ec711fd..86a13ffa 100644 --- a/run.py +++ b/run.py @@ -16,7 +16,7 @@ ">>> ", ">> ", "> ", ">>>", ">>", ">" ), # Order matters (and so do commas) - activity=Game(name="Help: bot.help()"), + activity=Game(name="snek it up"), help_attrs={"aliases": ["help()"]}, formatter=Formatter() ) From db3c1e285c458611e717fc832a515bdb6dda6591 Mon Sep 17 00:00:00 2001 From: momothereal Date: Fri, 23 Mar 2018 01:22:14 -0400 Subject: [PATCH 08/61] scrape stuff from the internet --- Pipfile | 1 + Pipfile.lock | 38 ++++++++++++++++++++++++++++++++++- bot/cogs/snakes.py | 8 ++++++-- bot/sneks/sneks.py | 49 +++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 92 insertions(+), 4 deletions(-) diff --git a/Pipfile b/Pipfile index 096fb9b3..3feb1dec 100644 --- a/Pipfile +++ b/Pipfile @@ -8,6 +8,7 @@ name = "pypi" aiodns = "*" aiohttp = "<2.3.0,>=2.0.0" websockets = ">=4.0,<5.0" +wikipedia = "*" [dev-packages] "flake8" = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 4e5214bb..0399cdb0 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "d797e580ddcddc99bf058109ab0306ad584c2902752a3d4076ba713fdc580fb7" + "sha256": "738768c7b3fa9b26b2b995f90b9324d0d058394442c75e2407bc3b010d290de3" }, "pipfile-spec": 6, "requires": { @@ -53,6 +53,21 @@ ], "version": "==2.0.1" }, + "beautifulsoup4": { + "hashes": [ + "sha256:11a9a27b7d3bddc6d86f59fb76afb70e921a25ac2d6cc55b40d072bd68435a76", + "sha256:7015e76bf32f1f574636c4288399a6de66ce08fb7b2457f628a8d70c0fbabb11", + "sha256:808b6ac932dccb0a4126558f7dfdcf41710dd44a4ef497a0bb59a77f9f078e89" + ], + "version": "==4.6.0" + }, + "certifi": { + "hashes": [ + "sha256:14131608ad2fd56836d33a71ee60fa1c82bc9d2c8d98b7bdbc631fe1b3cd1296", + "sha256:edbc3f203427eef571f79a7692bb160a2b0f7ccaa31953e99bd17e307cf63f7d" + ], + "version": "==2018.1.18" + }, "chardet": { "hashes": [ "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", @@ -120,6 +135,20 @@ ], "version": "==2.3.0" }, + "requests": { + "hashes": [ + "sha256:6a1b267aa90cac58ac3a765d067950e7dbbf75b1da07e895d1f594193a40a38b", + "sha256:9c443e7324ba5b85070c4a818ade28bfabedf16ea10206da1132edaa6dda237e" + ], + "version": "==2.18.4" + }, + "urllib3": { + "hashes": [ + "sha256:06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b", + "sha256:cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f" + ], + "version": "==1.22" + }, "websockets": { "hashes": [ "sha256:0c31bc832d529dc7583d324eb6c836a4f362032a1902723c112cf57883488d8c", @@ -142,6 +171,13 @@ "index": "pypi", "version": "==4.0.1" }, + "wikipedia": { + "hashes": [ + "sha256:db0fad1829fdd441b1852306e9856398204dc0786d2996dd2e0c8bb8e26133b2" + ], + "index": "pypi", + "version": "==1.4.0" + }, "yarl": { "hashes": [ "sha256:045dbba18c9142278113d5dc62622978a6f718ba662392d406141c59b540c514", diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 402c1cf8..528ba655 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -4,7 +4,7 @@ import discord from discord.ext.commands import AutoShardedBot, Context, command -from bot.sneks.sneks import SnakeDef +from bot.sneks.sneks import SnakeDef, scrape_dbpedia log = logging.getLogger(__name__) @@ -40,6 +40,8 @@ async def get_snek(self, name: str = None) -> SnakeDef: # todo: find a random snek online if there name is null # todo: scrape the web to find the lost sneks + if name is not None: + return scrape_dbpedia(name) @command() async def get(self, ctx: Context, name: str = None): @@ -50,7 +52,9 @@ async def get(self, ctx: Context, name: str = None): await ctx.send("sssorry I can't find that snek :(", embed=SNEK_SAD) return channel: discord.TextChannel = ctx.channel - await channel.send(embed=data.as_embed()) + embed = data.as_embed() + print(data.__dict__) + await channel.send(embed=embed) def setup(bot): diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index 1e3fd931..07a10c0e 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -1,4 +1,8 @@ import discord +import requests +from bs4 import BeautifulSoup +from wikipedia import wikipedia +import json class SnakeDef: @@ -6,7 +10,8 @@ class SnakeDef: Represents a snek """ - def __init__(self, common_name, species, image_url, family, genus, short_description, wiki_link): + def __init__(self, common_name="", species="", image_url="", family="", genus="", short_description="", + wiki_link=""): self.common_name = common_name self.species = species self.image_url = image_url @@ -27,3 +32,45 @@ def as_embed(self): embed.set_thumbnail(url=self.image_url) embed.description = self.short_description return embed + + +def find_image_url(name: str) -> str: + req_url = "https://api.qwant.com/api/search/images?count=1&offset=1&q={}".format(name) + res = requests.get(url=req_url, headers={"User-Agent": "Mozilla/5.0"}) + j = json.JSONDecoder().decode(res.content.decode("utf-8")) + image_url = j['data']['result']['items'][0]['media'] + return image_url + + +def scrape_dbpedia(name: str) -> SnakeDef: + res = requests.get(url="http://dbpedia.org/page/{}".format(name)) + html = res.content + soup = BeautifulSoup(html, "html.parser") + + table = soup.find("table", "description table table-striped") + rows = table.find_all("tr", {'class': ['even', 'odd']}) + + snek = SnakeDef() + snek.short_description = wikipedia.summary(name) + snek.wiki_link = "https://en.wikipedia.org/wiki/{}".format(name) + snek.image_url = find_image_url(name) if not None else "" + + for i in range(1, len(rows)): + row = rows[i] + property = row.find("td", "property").find("a") + val: str = row.find_all("td")[1].find("ul").find("li").find("span").find_all(recursive=False)[0].text + if ":" in val: + val = val.split(":")[-1] + + if property['href'].endswith("/family"): + snek.family = val + elif property['href'].endswith("/genus") and snek.genus is "": + snek.genus = val + elif property['href'].endswith('/binomial'): + snek.species = val + snek.common_name = val + elif property['href'].endswith('/name'): + snek.species = val + snek.common_name = val + + return snek From 9ee4dcc2c7413d01ee0b3cefa45bd7eb5bfce00a Mon Sep 17 00:00:00 2001 From: momothereal Date: Fri, 23 Mar 2018 01:29:34 -0400 Subject: [PATCH 09/61] Use image instead of thumbnail because you can't zoom on thumbnails --- bot/sneks/sneks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index 1e3fd931..784e15fd 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -24,6 +24,6 @@ def as_embed(self): embed.add_field(name="Family", value=self.family) embed.add_field(name="Genus", value=self.genus) embed.add_field(name="Species", value=self.species) - embed.set_thumbnail(url=self.image_url) + embed.set_image(url=self.image_url) embed.description = self.short_description return embed From 06ba0c61c8e91e05669cebd269698d96933e4bcc Mon Sep 17 00:00:00 2001 From: momothereal Date: Fri, 23 Mar 2018 01:40:14 -0400 Subject: [PATCH 10/61] underscores and pluses --- bot/sneks/sneks.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index e3e44f03..293fa813 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -35,7 +35,7 @@ def as_embed(self): def find_image_url(name: str) -> str: - req_url = "https://api.qwant.com/api/search/images?count=1&offset=1&q={}".format(name) + req_url = "https://api.qwant.com/api/search/images?count=1&offset=1&q={}+snake".format(name.replace(" ", "+")) res = requests.get(url=req_url, headers={"User-Agent": "Mozilla/5.0"}) j = json.JSONDecoder().decode(res.content.decode("utf-8")) image_url = j['data']['result']['items'][0]['media'] @@ -43,7 +43,7 @@ def find_image_url(name: str) -> str: def scrape_dbpedia(name: str) -> SnakeDef: - res = requests.get(url="http://dbpedia.org/page/{}".format(name)) + res = requests.get(url="http://dbpedia.org/page/{}".format(name.replace(" ", "_"))) html = res.content soup = BeautifulSoup(html, "html.parser") @@ -52,7 +52,7 @@ def scrape_dbpedia(name: str) -> SnakeDef: snek = SnakeDef() snek.short_description = wikipedia.summary(name) - snek.wiki_link = "https://en.wikipedia.org/wiki/{}".format(name) + snek.wiki_link = "https://en.wikipedia.org/wiki/{}".format(name.replace(" ", "_")) snek.image_url = find_image_url(name) if not None else "" for i in range(1, len(rows)): From c4e523b9aff3f06475c5fb3e467aa9e67b0456d1 Mon Sep 17 00:00:00 2001 From: Kel Date: Thu, 22 Mar 2018 22:56:43 -0700 Subject: [PATCH 11/61] barebones snake search --- bot/cogs/snakes.py | 4 +++ bot/sneks/search.py | 62 +++++++++++++++++++++++++++++++++++++++++++++ bot/sneks/sneks.py | 3 ++- 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 bot/sneks/search.py diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 402c1cf8..e2f9a13d 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -5,6 +5,7 @@ from discord.ext.commands import AutoShardedBot, Context, command from bot.sneks.sneks import SnakeDef +import bot.sneks.search log = logging.getLogger(__name__) @@ -38,6 +39,9 @@ async def get_snek(self, name: str = None) -> SnakeDef: # return info about language return SNEK_PYTHON + web_search = search(name) + if(web_search is not None): + return web_search # todo: find a random snek online if there name is null # todo: scrape the web to find the lost sneks diff --git a/bot/sneks/search.py b/bot/sneks/search.py new file mode 100644 index 00000000..02cfb4e6 --- /dev/null +++ b/bot/sneks/search.py @@ -0,0 +1,62 @@ +import urllib +from bs4 import BeautifulSoup as BS + +from sneks import SnakeDef + +BASE_URL = "http://dbpedia.org/page/" + +def fc(s): + return s[0].upper() + s[1:] if (s is not None and len(s) > 0) else None + +def query_url(query): + return BASE_URL + fc("_".join(query.split(" "))) + + +def add_oc(ocs,oc_raw): + if oc_raw["rel"][0] in ocs: + ocs[oc_raw["rel"][0]].append(oc_raw.getText()) + else: + ocs[oc_raw["rel"][0]] = [oc_raw.getText()] + + +def search(query): + + snake = SnakeDef() + # already assume query is not None, not checking + snake_query_url = query_url(query) + + + try: + html = urllib.request.urlopen(snake_query_url).read() + except urllib.error.HTTPError: + return None + + soup = BS(html, "lxml") + + oc_raws = soup.findAll("a",{ "class": "uri", "rel": True}) + ocs = {} + for oc_raw in oc_raws: + add_oc(ocs,oc_raw) + + + # result has a valid dbpedia page but not a snake + if("dbr:Snake" not in ocs["dbo:order"]): + return None + + # reformat, messily written + snake.family = ocs["dbo:family"] if ocs["dbo:family"] not None else snake.family + snake.genus = ocs["dbo:genus"] if ocs["dbo:genus"] not None else snake.genus + snake.species = " ".join(list(map(fc, query.split(" ")))) + + return snake + + + + + + + + + + + diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index 1e3fd931..dc647c3b 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -6,7 +6,7 @@ class SnakeDef: Represents a snek """ - def __init__(self, common_name, species, image_url, family, genus, short_description, wiki_link): + def __init__(self, common_name = "Not known", species = "Not known", image_url = "", family = "Not known", genus = "Not known", short_description = "No description", wiki_link = "No wikipedia link"): self.common_name = common_name self.species = species self.image_url = image_url @@ -27,3 +27,4 @@ def as_embed(self): embed.set_thumbnail(url=self.image_url) embed.description = self.short_description return embed + From 804f5160f9417b119fc339bcb8b21ca243def91b Mon Sep 17 00:00:00 2001 From: momothereal Date: Fri, 23 Mar 2018 04:36:19 -0400 Subject: [PATCH 12/61] ITIS database scraping --- bot/cogs/snakes.py | 6 +- bot/sneks/sneks.py | 159 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 159 insertions(+), 6 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 528ba655..21c776a8 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -4,7 +4,7 @@ import discord from discord.ext.commands import AutoShardedBot, Context, command -from bot.sneks.sneks import SnakeDef, scrape_dbpedia +from bot.sneks.sneks import SnakeDef, scrape_dbpedia, scrape_itis, Embeddable log = logging.getLogger(__name__) @@ -33,7 +33,7 @@ class Snakes: def __init__(self, bot: AutoShardedBot): self.bot = bot - async def get_snek(self, name: str = None) -> SnakeDef: + async def get_snek(self, name: str = None) -> Embeddable: if name is not None and name.lower() == "python": # return info about language return SNEK_PYTHON @@ -41,7 +41,7 @@ async def get_snek(self, name: str = None) -> SnakeDef: # todo: find a random snek online if there name is null # todo: scrape the web to find the lost sneks if name is not None: - return scrape_dbpedia(name) + return scrape_itis(name) @command() async def get(self, ctx: Context, name: str = None): diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index 293fa813..1020dc8a 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -1,13 +1,24 @@ +import json +import re + import discord import requests from bs4 import BeautifulSoup from wikipedia import wikipedia -import json +# the search URL for the ITIS database +ITIS_BASE_URL = "https://itis.gov/servlet/SingleRpt/{}" +ITIS_SEARCH_URL = ITIS_BASE_URL.format("SingleRpt") + + +class Embeddable: + def as_embed(self) -> discord.Embed: + pass -class SnakeDef: + +class SnakeDef(Embeddable): """ - Represents a snek + Represents a snek species """ def __init__(self, common_name="", species="", image_url="", family="", genus="", short_description="", @@ -31,17 +42,159 @@ def as_embed(self): embed.add_field(name="Species", value=self.species) embed.set_image(url=self.image_url) embed.description = self.short_description + if len(embed.description) > 1000: + embed.description = embed.description[:997] + "..." + return embed + + +class SnakeGroup(Embeddable): + + def __init__(self, common_name="None", scientific_name="None", image_url="", rank="Unknown", sub=[], + short_description="A snake group", link=""): + self.link = link + self.common_name = common_name + self.scientific_name = scientific_name + self.image_url = image_url + self.rank = rank + self.sub = sub + self.short_description = short_description + + def as_embed(self): + embed = discord.Embed() + embed.title = self.scientific_name + ((" (" + self.common_name + ")") if self.common_name is not None else "") + embed.description = self.short_description + if len(embed.description) > 1000: + embed.description = embed.description[:997] + "..." + embed.colour = discord.Colour.green() + embed.url = self.link + embed.set_image(url=self.image_url) + if self.common_name is not "None": + embed.add_field(name="Common Name", value=self.common_name) + embed.add_field(name="Taxonomic Rank", value=self.rank) return embed def find_image_url(name: str) -> str: req_url = "https://api.qwant.com/api/search/images?count=1&offset=1&q={}+snake".format(name.replace(" ", "+")) res = requests.get(url=req_url, headers={"User-Agent": "Mozilla/5.0"}) + if res.status_code != 200: + return "" j = json.JSONDecoder().decode(res.content.decode("utf-8")) image_url = j['data']['result']['items'][0]['media'] return image_url +def is_itis_table_empty(soup) -> bool: + return "No Records Found." in str(soup) + + +def itis_find_link(soup) -> str: + return ITIS_BASE_URL.format(soup.find("a")['href']) + + +def scrape_itis_page(url: str) -> Embeddable: + res = requests.get(url=url) + html = res.content.decode('iso-8859-1') + # check taxonomic rank first + soup = BeautifulSoup(html, "html.parser") + rank = soup.find("td", text="Taxonomic Rank:").parent.find("td", {"class": "datafield"}).get_text(strip=True, + separator=' ') + common_names = soup.find("td", text="Common Name(s):").parent.find("td", {"class": "datafield"}).get_text( + strip=True, separator=' ') + if "[" in common_names: + common_names = common_names.split('[')[0].strip(" ") + scientific_name = ' '.join( + soup.find("td", text=re.compile("(\\s+)" + rank)).parent.find("td", {"class": "datafield"}) + .get_text(strip=True, separator=' ') + .split(",")[0].replace(u'\xa0', ' ').split(' ')[0:2]) + print(rank) + + if rank == "Species" or rank == "Subspecies": + embeddable = SnakeDef() + embeddable.common_name = common_names if common_names != "" else "None" + embeddable.species = scientific_name + try: + embeddable.short_description = wikipedia.summary(scientific_name) + except wikipedia.PageError: + pass + embeddable.wiki_link = url + embeddable.image_url = find_image_url(scientific_name) + embeddable.genus = \ + soup.find("td", text=re.compile("(\\s+)Genus")).parent.find("td", {"class": "datafield"}).get_text( + strip=True, + separator=' ').split( + ",")[0] + embeddable.family = \ + soup.find("td", text=re.compile("(\\s+)Family")).parent.find("td", {"class": "datafield"}).get_text( + strip=True, + separator=' ').split( + ",")[0] + else: + # its a snek group + embeddable = SnakeGroup() + try: + embeddable.short_description = wikipedia.summary(scientific_name) + except wikipedia.PageError: + try: + embeddable.short_description = wikipedia.summary(common_names) + except wikipedia.PageError: + pass + pass + embeddable.common_name = common_names + embeddable.scientific_name = scientific_name + embeddable.link = url + embeddable.image_url = find_image_url(scientific_name) + embeddable.rank = rank + + return embeddable + + +def scrape_itis(name: str) -> Embeddable: + form_data = { + 'categories': 'All', + 'Go': 'Search', + 'search_credRating': 'All', + 'search_kingdom': 'Animal', + 'search_span': 'exactly_for', + 'search_topic': 'all', + 'search_value': name, + 'source': 'html' + } + print(name.replace(" ", "+")) + res = requests.post(url=ITIS_SEARCH_URL, data=form_data) + html = res.content.decode('iso-8859-1') + if "No Records Found?" in html: + # abort, no snek + return None + soup = BeautifulSoup(html, "html.parser") + # print(soup) + + tables = soup.find_all("table", {"width": "100%"}) + # print(tables) + table_common_name = tables[1] + table_scientific = tables[2] + + is_common_name = not is_itis_table_empty(table_common_name) + is_scientific = not is_itis_table_empty(table_scientific) + + if not is_common_name and not is_scientific: + # unknown snek, abort + return None + + url = None + if is_scientific: + url = itis_find_link(table_scientific) + elif is_common_name: + url = itis_find_link(table_common_name) + if url is None: + return + + # follow link! + print(url) + + return scrape_itis_page(url) + + def scrape_dbpedia(name: str) -> SnakeDef: res = requests.get(url="http://dbpedia.org/page/{}".format(name.replace(" ", "_"))) html = res.content From d9ee4abbe02625cdc333ba902eac5a434d916a19 Mon Sep 17 00:00:00 2001 From: momothereal Date: Fri, 23 Mar 2018 13:24:07 -0400 Subject: [PATCH 13/61] Use JSON API when ITIS TSN is known --- bot/cogs/snakes.py | 2 +- bot/sneks/sneks.py | 116 ++++++++++++++++++++++----------------------- 2 files changed, 58 insertions(+), 60 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 21c776a8..6d1d916d 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -41,7 +41,7 @@ async def get_snek(self, name: str = None) -> Embeddable: # todo: find a random snek online if there name is null # todo: scrape the web to find the lost sneks if name is not None: - return scrape_itis(name) + return await scrape_itis(name) @command() async def get(self, ctx: Context, name: str = None): diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index 1020dc8a..5b168476 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -1,6 +1,8 @@ import json import re +from urllib import parse +import aiohttp import discord import requests from bs4 import BeautifulSoup @@ -9,6 +11,7 @@ # the search URL for the ITIS database ITIS_BASE_URL = "https://itis.gov/servlet/SingleRpt/{}" ITIS_SEARCH_URL = ITIS_BASE_URL.format("SingleRpt") +ITIS_JSON_SERVICE_URL = "https://itis.gov/ITISWebService/jsonservice/getFullRecordFromTSN?tsn={}" class Embeddable: @@ -92,64 +95,59 @@ def itis_find_link(soup) -> str: return ITIS_BASE_URL.format(soup.find("a")['href']) -def scrape_itis_page(url: str) -> Embeddable: - res = requests.get(url=url) - html = res.content.decode('iso-8859-1') - # check taxonomic rank first - soup = BeautifulSoup(html, "html.parser") - rank = soup.find("td", text="Taxonomic Rank:").parent.find("td", {"class": "datafield"}).get_text(strip=True, - separator=' ') - common_names = soup.find("td", text="Common Name(s):").parent.find("td", {"class": "datafield"}).get_text( - strip=True, separator=' ') - if "[" in common_names: - common_names = common_names.split('[')[0].strip(" ") - scientific_name = ' '.join( - soup.find("td", text=re.compile("(\\s+)" + rank)).parent.find("td", {"class": "datafield"}) - .get_text(strip=True, separator=' ') - .split(",")[0].replace(u'\xa0', ' ').split(' ')[0:2]) - print(rank) - - if rank == "Species" or rank == "Subspecies": - embeddable = SnakeDef() - embeddable.common_name = common_names if common_names != "" else "None" - embeddable.species = scientific_name - try: - embeddable.short_description = wikipedia.summary(scientific_name) - except wikipedia.PageError: - pass - embeddable.wiki_link = url - embeddable.image_url = find_image_url(scientific_name) - embeddable.genus = \ - soup.find("td", text=re.compile("(\\s+)Genus")).parent.find("td", {"class": "datafield"}).get_text( - strip=True, - separator=' ').split( - ",")[0] - embeddable.family = \ - soup.find("td", text=re.compile("(\\s+)Family")).parent.find("td", {"class": "datafield"}).get_text( - strip=True, - separator=' ').split( - ",")[0] - else: - # its a snek group - embeddable = SnakeGroup() - try: - embeddable.short_description = wikipedia.summary(scientific_name) - except wikipedia.PageError: - try: - embeddable.short_description = wikipedia.summary(common_names) - except wikipedia.PageError: - pass - pass - embeddable.common_name = common_names - embeddable.scientific_name = scientific_name - embeddable.link = url - embeddable.image_url = find_image_url(scientific_name) - embeddable.rank = rank - - return embeddable - - -def scrape_itis(name: str) -> Embeddable: +async def scrape_itis_page(url: str) -> Embeddable: + tsn = parse.parse_qs(parse.urlparse(url).query)['search_value'][0] + json_url = ITIS_JSON_SERVICE_URL.format(tsn) + + async with aiohttp.ClientSession() as session: + async with session.get(json_url) as res: + j = await res.text(encoding='iso-8859-1') + data = json.JSONDecoder().decode(j) + common_names = [] + for common_name_tag in data['commonNameList']['commonNames']: + if common_name_tag['language'] == "English": + common_names.append(common_name_tag['commonName']) + common_name = ', '.join(common_names) + rank = data['hierarchyUp']['rankName'] + scientific_name = data['hierarchyUp']['taxonName'] + if rank == "Species": + embeddable = SnakeDef() + embeddable.common_name = common_name if common_name != "" else "None" + embeddable.species = data['scientificName']['combinedName'] + embeddable.genus = data['hierarchyUp']['parentName'] + embeddable.family = "Unknown" + embeddable.image_url = find_image_url(scientific_name) + embeddable.wiki_link = url + try: + embeddable.short_description = wikipedia.summary(scientific_name) + except wikipedia.PageError: + try: + if common_name != "": + embeddable.short_description = wikipedia.summary(common_name) + except wikipedia.PageError: + pass + pass + + else: + embeddable = SnakeGroup() + try: + embeddable.short_description = wikipedia.summary(scientific_name) + except wikipedia.PageError: + try: + if common_name != "": + embeddable.short_description = wikipedia.summary(common_name) + except wikipedia.PageError: + pass + pass + embeddable.common_name = common_name if common_name != "" else "None" + embeddable.scientific_name = scientific_name + embeddable.link = url + embeddable.image_url = find_image_url(scientific_name) + embeddable.rank = rank + return embeddable + + +async def scrape_itis(name: str) -> Embeddable: form_data = { 'categories': 'All', 'Go': 'Search', @@ -192,7 +190,7 @@ def scrape_itis(name: str) -> Embeddable: # follow link! print(url) - return scrape_itis_page(url) + return await scrape_itis_page(url) def scrape_dbpedia(name: str) -> SnakeDef: From 005224c1e9a70f1d68c814b14696f39e8c86b96b Mon Sep 17 00:00:00 2001 From: Kel Date: Fri, 23 Mar 2018 10:58:53 -0700 Subject: [PATCH 14/61] working barebones search --- Pipfile | 1 + Pipfile.lock | 36 +++++++++++++++++++++++++++++++++++- bot/sneks/search.py | 17 ++++++++++++----- bot/sneks/sneks.py | 2 +- 4 files changed, 49 insertions(+), 7 deletions(-) diff --git a/Pipfile b/Pipfile index 096fb9b3..8e597a2f 100644 --- a/Pipfile +++ b/Pipfile @@ -8,6 +8,7 @@ name = "pypi" aiodns = "*" aiohttp = "<2.3.0,>=2.0.0" websockets = ">=4.0,<5.0" +lxml = "*" [dev-packages] "flake8" = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 4e5214bb..9dbb02dd 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "d797e580ddcddc99bf058109ab0306ad584c2902752a3d4076ba713fdc580fb7" + "sha256": "ff93cb1fe80c2b70ba2ec87872b6999325cdd74ac2a30c7410ef629bf4d4bb44" }, "pipfile-spec": 6, "requires": { @@ -67,6 +67,40 @@ ], "version": "==2.6" }, + "lxml": { + "hashes": [ + "sha256:01c45df6d90497c20aa2a07789a41941f9a1029faa30bf725fc7f6d515b1afe9", + "sha256:0c9fef4f8d444e337df96c54544aeb85b7215b2ed7483bb6c35de97ac99f1bcd", + "sha256:0e3cd94c95d30ba9ca3cff40e9b2a14e1a10a4fd8131105b86c6b61648f57e4b", + "sha256:0e7996e9b46b4d8b4ac1c329a00e2d10edcd8380b95d2a676fccabf4c1dd0512", + "sha256:1858b1933d483ec5727549d3fe166eeb54229fbd6a9d3d7ea26d2c8a28048058", + "sha256:1b164bba1320b14905dcff77da10d5ce9c411ac4acc4fb4ed9a2a4d10fae38c9", + "sha256:1b46f37927fa6cd1f3fe34b54f1a23bd5bea1d905657289e08e1297069a1a597", + "sha256:231047b05907315ae9a9b6925751f9fd2c479cf7b100fff62485a25e382ca0d4", + "sha256:28f0c6652c1b130f1e576b60532f84b19379485eb8da6185c29bd8c9c9bc97bf", + "sha256:34d49d0f72dd82b9530322c48b70ac78cca0911275da741c3b1d2f3603c5f295", + "sha256:3682a17fbf72d56d7e46db2e80ca23850b79c28cfe75dcd9b82f58808f730909", + "sha256:3cf2830b9a6ad7f6e965fa53a768d4d2372a7856f20ffa6ce43d2fe9c0d34b19", + "sha256:5b653c9379ce29ce271fbe1010c5396670f018e78b643e21beefbb3dc6d291de", + "sha256:65a272821d5d8194358d6b46f3ca727fa56a6b63981606eac737c86d27309cdd", + "sha256:691f2cd97cf026c611df1ea5055755eec7f878f2d4f4330dc8686583de6fc5fd", + "sha256:6b6379495d3baacf7ed755ac68547c8dff6ce5d37bf370f0b7678888dc1283f9", + "sha256:75322a531504d4f383264391d89993a42e286da8821ddc5ac315e57305cb84f0", + "sha256:7f457cbda964257f443bac861d3a36732dcba8183149e7818ee2fb7c86901b94", + "sha256:7ff1fc76d8804e0f870c343a72007ff587090c218b0f92d8ee784ac2b6eaf5b9", + "sha256:8523fbde9c2216f3f2b950cb01ebe52e785eaa8a07ffeb456dd3576ca1b4fb9b", + "sha256:8f37627f16e026523fca326f1b5c9a43534862fede6c3e99c2ba6a776d75c1ab", + "sha256:a7182ea298cc3555ea56ffbb0748fe0d5e0d81451e2bc16d7f4645cd01b1ca70", + "sha256:abbd2fb4a5a04c11b5e04eb146659a0cf67bb237dd3d7ca3b9994d3a9f826e55", + "sha256:accc9f6b77bed0a6f267b4fae120f6008a951193d548cdbe9b61fc98a08b1cf8", + "sha256:bd88c8ce0d1504fdfd96a35911dd4f3edfb2e560d7cfdb5a3d09aa571ae5fbae", + "sha256:c557ad647facb3c0027a9d0af58853f905e85a0a2f04dcb73f8e665272fcdc3a", + "sha256:defabb7fbb99f9f7b3e0b24b286a46855caef4776495211b066e9e6592d12b04", + "sha256:e2629cdbcad82b83922a3488937632a4983ecc0fed3e5cfbf430d069382eeb9b" + ], + "index": "pypi", + "version": "==4.2.1" + }, "multidict": { "hashes": [ "sha256:0462372fc74e4c061335118a4a5992b9a618d6c584b028ef03cf3e9b88a960e2", diff --git a/bot/sneks/search.py b/bot/sneks/search.py index 02cfb4e6..237e4712 100644 --- a/bot/sneks/search.py +++ b/bot/sneks/search.py @@ -1,15 +1,16 @@ import urllib from bs4 import BeautifulSoup as BS -from sneks import SnakeDef +from .sneks import SnakeDef -BASE_URL = "http://dbpedia.org/page/" +DBPEDIA_BASE_URL = "http://dbpedia.org/page/" +WIKI_BASE_URL = "http://wikipedia.org/wiki/page/" def fc(s): return s[0].upper() + s[1:] if (s is not None and len(s) > 0) else None def query_url(query): - return BASE_URL + fc("_".join(query.split(" "))) + return DBPEDIA_BASE_URL + fc("_".join(query.split(" "))) def add_oc(ocs,oc_raw): @@ -19,6 +20,10 @@ def add_oc(ocs,oc_raw): ocs[oc_raw["rel"][0]] = [oc_raw.getText()] +def db_strip(s): + return s.replace("dbo:","").replace("dbr:","") + + def search(query): snake = SnakeDef() @@ -44,9 +49,11 @@ def search(query): return None # reformat, messily written - snake.family = ocs["dbo:family"] if ocs["dbo:family"] not None else snake.family - snake.genus = ocs["dbo:genus"] if ocs["dbo:genus"] not None else snake.genus + + snake.family = ",".join(list(map(db_strip,ocs["dbo:family"]))) + snake.genus = ",".join(list(map(db_strip,ocs["dbo:genus"]))) snake.species = " ".join(list(map(fc, query.split(" ")))) + snake.wiki_link = WIKI_BASE_URL + fc("_".join(query.split(" "))) return snake diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index dc647c3b..0d85a0d7 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -6,7 +6,7 @@ class SnakeDef: Represents a snek """ - def __init__(self, common_name = "Not known", species = "Not known", image_url = "", family = "Not known", genus = "Not known", short_description = "No description", wiki_link = "No wikipedia link"): + def __init__(self, common_name = "", species = "Not known", image_url = "https://www.elegantthemes.com/blog/wp-content/uploads/2017/07/404-error.png", family = "Not known", genus = "Not known", short_description = "No description", wiki_link = "No wikipedia link"): self.common_name = common_name self.species = species self.image_url = image_url From eb22a9582f38f6fd944a447fc33d505219124cbb Mon Sep 17 00:00:00 2001 From: momothereal Date: Fri, 23 Mar 2018 14:02:02 -0400 Subject: [PATCH 15/61] Use aiohttp instead of wikipedia API --- bot/cogs/snakes.py | 2 +- bot/sneks/sneks.py | 88 +++++++++++++++++----------------------------- 2 files changed, 34 insertions(+), 56 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 6d1d916d..88911054 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -4,7 +4,7 @@ import discord from discord.ext.commands import AutoShardedBot, Context, command -from bot.sneks.sneks import SnakeDef, scrape_dbpedia, scrape_itis, Embeddable +from bot.sneks.sneks import SnakeDef, scrape_itis, Embeddable log = logging.getLogger(__name__) diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index 5b168476..9e13b525 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -1,17 +1,16 @@ import json -import re from urllib import parse import aiohttp import discord import requests from bs4 import BeautifulSoup -from wikipedia import wikipedia # the search URL for the ITIS database ITIS_BASE_URL = "https://itis.gov/servlet/SingleRpt/{}" ITIS_SEARCH_URL = ITIS_BASE_URL.format("SingleRpt") ITIS_JSON_SERVICE_URL = "https://itis.gov/ITISWebService/jsonservice/getFullRecordFromTSN?tsn={}" +WIKI_URL = "http://en.wikipedia.org/w/api.php?{}" class Embeddable: @@ -95,6 +94,34 @@ def itis_find_link(soup) -> str: return ITIS_BASE_URL.format(soup.find("a")['href']) +async def wiki_summary(session: aiohttp.ClientSession, name: str) -> str: + search_url = WIKI_URL.format(parse.urlencode({ + 'list': 'search', + 'srprop': '', + 'srlimit': 1, + 'limit': 1, + 'srsearch': name + " snake", + 'format': 'json', + 'action': 'query' + })) + async with session.get(search_url) as res: + j = await res.json() + page_title = j['query']['search'][0]['title'] + page_id = str(j['query']['search'][0]['pageid']) + page_url = WIKI_URL.format(parse.urlencode({ + 'prop': 'extracts', + 'explaintext': '', + 'titles': page_title, + 'exsentences': '3', + 'format': 'json', + 'action': 'query' + })) + print(page_url) + async with session.get(page_url) as page_res: + page_json = await page_res.json() + return page_json['query']['pages'][page_id]['extract'] + + async def scrape_itis_page(url: str) -> Embeddable: tsn = parse.parse_qs(parse.urlparse(url).query)['search_value'][0] json_url = ITIS_JSON_SERVICE_URL.format(tsn) @@ -118,27 +145,12 @@ async def scrape_itis_page(url: str) -> Embeddable: embeddable.family = "Unknown" embeddable.image_url = find_image_url(scientific_name) embeddable.wiki_link = url - try: - embeddable.short_description = wikipedia.summary(scientific_name) - except wikipedia.PageError: - try: - if common_name != "": - embeddable.short_description = wikipedia.summary(common_name) - except wikipedia.PageError: - pass - pass - + summary = await wiki_summary(session, scientific_name) + embeddable.short_description = summary if not None else "" else: embeddable = SnakeGroup() - try: - embeddable.short_description = wikipedia.summary(scientific_name) - except wikipedia.PageError: - try: - if common_name != "": - embeddable.short_description = wikipedia.summary(common_name) - except wikipedia.PageError: - pass - pass + summary = await wiki_summary(session, scientific_name) + embeddable.short_description = summary if not None else "" embeddable.common_name = common_name if common_name != "" else "None" embeddable.scientific_name = scientific_name embeddable.link = url @@ -191,37 +203,3 @@ async def scrape_itis(name: str) -> Embeddable: print(url) return await scrape_itis_page(url) - - -def scrape_dbpedia(name: str) -> SnakeDef: - res = requests.get(url="http://dbpedia.org/page/{}".format(name.replace(" ", "_"))) - html = res.content - soup = BeautifulSoup(html, "html.parser") - - table = soup.find("table", "description table table-striped") - rows = table.find_all("tr", {'class': ['even', 'odd']}) - - snek = SnakeDef() - snek.short_description = wikipedia.summary(name) - snek.wiki_link = "https://en.wikipedia.org/wiki/{}".format(name.replace(" ", "_")) - snek.image_url = find_image_url(name) if not None else "" - - for i in range(1, len(rows)): - row = rows[i] - property = row.find("td", "property").find("a") - val: str = row.find_all("td")[1].find("ul").find("li").find("span").find_all(recursive=False)[0].text - if ":" in val: - val = val.split(":")[-1] - - if property['href'].endswith("/family"): - snek.family = val - elif property['href'].endswith("/genus") and snek.genus is "": - snek.genus = val - elif property['href'].endswith('/binomial'): - snek.species = val - snek.common_name = val - elif property['href'].endswith('/name'): - snek.species = val - snek.common_name = val - - return snek From f650277f1c14aa7a2487a45cf55526e2c82f6c66 Mon Sep 17 00:00:00 2001 From: momothereal Date: Fri, 23 Mar 2018 14:06:48 -0400 Subject: [PATCH 16/61] Remove wikipedia API --- Pipfile | 1 - Pipfile.lock | 38 +------------------------------------- 2 files changed, 1 insertion(+), 38 deletions(-) diff --git a/Pipfile b/Pipfile index 3feb1dec..096fb9b3 100644 --- a/Pipfile +++ b/Pipfile @@ -8,7 +8,6 @@ name = "pypi" aiodns = "*" aiohttp = "<2.3.0,>=2.0.0" websockets = ">=4.0,<5.0" -wikipedia = "*" [dev-packages] "flake8" = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 0399cdb0..4e5214bb 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "738768c7b3fa9b26b2b995f90b9324d0d058394442c75e2407bc3b010d290de3" + "sha256": "d797e580ddcddc99bf058109ab0306ad584c2902752a3d4076ba713fdc580fb7" }, "pipfile-spec": 6, "requires": { @@ -53,21 +53,6 @@ ], "version": "==2.0.1" }, - "beautifulsoup4": { - "hashes": [ - "sha256:11a9a27b7d3bddc6d86f59fb76afb70e921a25ac2d6cc55b40d072bd68435a76", - "sha256:7015e76bf32f1f574636c4288399a6de66ce08fb7b2457f628a8d70c0fbabb11", - "sha256:808b6ac932dccb0a4126558f7dfdcf41710dd44a4ef497a0bb59a77f9f078e89" - ], - "version": "==4.6.0" - }, - "certifi": { - "hashes": [ - "sha256:14131608ad2fd56836d33a71ee60fa1c82bc9d2c8d98b7bdbc631fe1b3cd1296", - "sha256:edbc3f203427eef571f79a7692bb160a2b0f7ccaa31953e99bd17e307cf63f7d" - ], - "version": "==2018.1.18" - }, "chardet": { "hashes": [ "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", @@ -135,20 +120,6 @@ ], "version": "==2.3.0" }, - "requests": { - "hashes": [ - "sha256:6a1b267aa90cac58ac3a765d067950e7dbbf75b1da07e895d1f594193a40a38b", - "sha256:9c443e7324ba5b85070c4a818ade28bfabedf16ea10206da1132edaa6dda237e" - ], - "version": "==2.18.4" - }, - "urllib3": { - "hashes": [ - "sha256:06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b", - "sha256:cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f" - ], - "version": "==1.22" - }, "websockets": { "hashes": [ "sha256:0c31bc832d529dc7583d324eb6c836a4f362032a1902723c112cf57883488d8c", @@ -171,13 +142,6 @@ "index": "pypi", "version": "==4.0.1" }, - "wikipedia": { - "hashes": [ - "sha256:db0fad1829fdd441b1852306e9856398204dc0786d2996dd2e0c8bb8e26133b2" - ], - "index": "pypi", - "version": "==1.4.0" - }, "yarl": { "hashes": [ "sha256:045dbba18c9142278113d5dc62622978a6f718ba662392d406141c59b540c514", From 988e18164471574bfb3c70e5655bfb2fae9fac8d Mon Sep 17 00:00:00 2001 From: momothereal Date: Fri, 23 Mar 2018 14:11:07 -0400 Subject: [PATCH 17/61] Add doctext --- bot/cogs/snakes.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 88911054..6c9b13a9 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -34,6 +34,11 @@ def __init__(self, bot: AutoShardedBot): self.bot = bot async def get_snek(self, name: str = None) -> Embeddable: + """ + Gets information about a snek + :param name: the name of the snek + :return: snek + """ if name is not None and name.lower() == "python": # return info about language return SNEK_PYTHON @@ -45,6 +50,12 @@ async def get_snek(self, name: str = None) -> Embeddable: @command() async def get(self, ctx: Context, name: str = None): + """ + Get info about a snek! + :param ctx: context + :param name: name of snek + :return: snek + """ # fetch data for a snek await ctx.send("Fetching data for " + name + "..." if name is not None else "Finding a random snek!") data = await self.get_snek(name) From 97c954921d48a9803da2d015519153a99d4d997a Mon Sep 17 00:00:00 2001 From: momothereal Date: Fri, 23 Mar 2018 14:13:39 -0400 Subject: [PATCH 18/61] Add todo for family --- bot/sneks/sneks.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index 9e13b525..e0eba22b 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -142,6 +142,8 @@ async def scrape_itis_page(url: str) -> Embeddable: embeddable.common_name = common_name if common_name != "" else "None" embeddable.species = data['scientificName']['combinedName'] embeddable.genus = data['hierarchyUp']['parentName'] + # todo: request the parent to get the family + # or maybe the API has a way to get this recursively embeddable.family = "Unknown" embeddable.image_url = find_image_url(scientific_name) embeddable.wiki_link = url From c6983df8140b42123d354f1594b303be5bb4ddb2 Mon Sep 17 00:00:00 2001 From: momothereal Date: Fri, 23 Mar 2018 14:37:22 -0400 Subject: [PATCH 19/61] Family & geography --- bot/sneks/sneks.py | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index e0eba22b..3690e38a 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -9,7 +9,8 @@ # the search URL for the ITIS database ITIS_BASE_URL = "https://itis.gov/servlet/SingleRpt/{}" ITIS_SEARCH_URL = ITIS_BASE_URL.format("SingleRpt") -ITIS_JSON_SERVICE_URL = "https://itis.gov/ITISWebService/jsonservice/getFullRecordFromTSN?tsn={}" +ITIS_JSON_SERVICE_FULLRECORD = "https://itis.gov/ITISWebService/jsonservice/getFullRecordFromTSN?tsn={}" +ITIS_JSON_SERVICE_FULLHIERARCHY = "https://itis.gov/ITISWebService/jsonservice/getFullHierarchyFromTSN?tsn={}" WIKI_URL = "http://en.wikipedia.org/w/api.php?{}" @@ -24,7 +25,7 @@ class SnakeDef(Embeddable): """ def __init__(self, common_name="", species="", image_url="", family="", genus="", short_description="", - wiki_link=""): + wiki_link="", geo=""): self.common_name = common_name self.species = species self.image_url = image_url @@ -32,6 +33,7 @@ def __init__(self, common_name="", species="", image_url="", family="", genus="" self.genus = genus self.short_description = short_description self.wiki_link = wiki_link + self.geo = geo def as_embed(self): # returns a discord embed with the snek @@ -46,13 +48,15 @@ def as_embed(self): embed.description = self.short_description if len(embed.description) > 1000: embed.description = embed.description[:997] + "..." + if self.geo is not "": + embed.add_field(name="Geography", value=self.geo) return embed class SnakeGroup(Embeddable): def __init__(self, common_name="None", scientific_name="None", image_url="", rank="Unknown", sub=[], - short_description="A snake group", link=""): + short_description="A snake group", link="", geo=""): self.link = link self.common_name = common_name self.scientific_name = scientific_name @@ -60,6 +64,7 @@ def __init__(self, common_name="None", scientific_name="None", image_url="", ran self.rank = rank self.sub = sub self.short_description = short_description + self.geo = geo def as_embed(self): embed = discord.Embed() @@ -73,6 +78,8 @@ def as_embed(self): if self.common_name is not "None": embed.add_field(name="Common Name", value=self.common_name) embed.add_field(name="Taxonomic Rank", value=self.rank) + if self.geo is not "": + embed.add_field(name="Geography", value=self.geo) return embed @@ -124,7 +131,7 @@ async def wiki_summary(session: aiohttp.ClientSession, name: str) -> str: async def scrape_itis_page(url: str) -> Embeddable: tsn = parse.parse_qs(parse.urlparse(url).query)['search_value'][0] - json_url = ITIS_JSON_SERVICE_URL.format(tsn) + json_url = ITIS_JSON_SERVICE_FULLRECORD.format(tsn) async with aiohttp.ClientSession() as session: async with session.get(json_url) as res: @@ -137,18 +144,30 @@ async def scrape_itis_page(url: str) -> Embeddable: common_name = ', '.join(common_names) rank = data['hierarchyUp']['rankName'] scientific_name = data['hierarchyUp']['taxonName'] + geo = [] + for geoDivisions in data['geographicDivisionList']['geoDivisions']: + if geoDivisions is not None: + geo.append(geoDivisions['geographicValue']) if rank == "Species": embeddable = SnakeDef() embeddable.common_name = common_name if common_name != "" else "None" embeddable.species = data['scientificName']['combinedName'] embeddable.genus = data['hierarchyUp']['parentName'] - # todo: request the parent to get the family - # or maybe the API has a way to get this recursively - embeddable.family = "Unknown" + + async with session.get(ITIS_JSON_SERVICE_FULLHIERARCHY.format(tsn)) as hierarchy_res: + hier_j = await hierarchy_res.text(encoding='iso-8859-1') + hier_data = json.JSONDecoder().decode(hier_j) + family = "Unknown" + for hier in hier_data['hierarchyList']: + if hier['rankName'] == 'Family': + family = hier['taxonName'] + embeddable.family = family + embeddable.image_url = find_image_url(scientific_name) embeddable.wiki_link = url summary = await wiki_summary(session, scientific_name) embeddable.short_description = summary if not None else "" + embeddable.geo = ', '.join(geo) else: embeddable = SnakeGroup() summary = await wiki_summary(session, scientific_name) @@ -158,6 +177,7 @@ async def scrape_itis_page(url: str) -> Embeddable: embeddable.link = url embeddable.image_url = find_image_url(scientific_name) embeddable.rank = rank + embeddable.geo = ', '.join(geo) return embeddable From 284593ee07f2b6f31a5b5b890b86e21074f20364 Mon Sep 17 00:00:00 2001 From: momothereal Date: Fri, 23 Mar 2018 14:59:18 -0400 Subject: [PATCH 20/61] Add species suffix --- bot/sneks/sneks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index 3690e38a..bd81c4b1 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -165,7 +165,7 @@ async def scrape_itis_page(url: str) -> Embeddable: embeddable.image_url = find_image_url(scientific_name) embeddable.wiki_link = url - summary = await wiki_summary(session, scientific_name) + summary = await wiki_summary(session, scientific_name + " species") embeddable.short_description = summary if not None else "" embeddable.geo = ', '.join(geo) else: From 5e34e1567b83bee7286c38ed53cde98b945d7e24 Mon Sep 17 00:00:00 2001 From: Kel Date: Fri, 23 Mar 2018 12:57:28 -0700 Subject: [PATCH 21/61] snakeme template --- Pipfile | 1 + Pipfile.lock | 9 ++++++++- bot/cogs/snakes.py | 30 +++++++++++++++++++++++++++--- bot/sneks/sneks.py | 5 +++++ 4 files changed, 41 insertions(+), 4 deletions(-) diff --git a/Pipfile b/Pipfile index 8e597a2f..c205105e 100644 --- a/Pipfile +++ b/Pipfile @@ -9,6 +9,7 @@ aiodns = "*" aiohttp = "<2.3.0,>=2.0.0" websockets = ">=4.0,<5.0" lxml = "*" +pymarkovchain = "*" [dev-packages] "flake8" = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 9dbb02dd..45405632 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "ff93cb1fe80c2b70ba2ec87872b6999325cdd74ac2a30c7410ef629bf4d4bb44" + "sha256": "6ed38e4884b2da0115da985b3106103f6525e64f216eadbc2e572509e1bca2cb" }, "pipfile-spec": 6, "requires": { @@ -154,6 +154,13 @@ ], "version": "==2.3.0" }, + "pymarkovchain": { + "hashes": [ + "sha256:f8a03fba5d9f390b528991f5e3411188b545aa16a7131cea44c5f9cf1814d08a" + ], + "index": "pypi", + "version": "==1.8" + }, "websockets": { "hashes": [ "sha256:0c31bc832d529dc7583d324eb6c836a4f362032a1902723c112cf57883488d8c", diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index e2f9a13d..8c13150d 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -4,8 +4,11 @@ import discord from discord.ext.commands import AutoShardedBot, Context, command -from bot.sneks.sneks import SnakeDef -import bot.sneks.search +from bot.sneks.sneks import SnakeDef, snakify + +from pymarkovchain import MarkovChain + +import bot.sneks.search as search log = logging.getLogger(__name__) @@ -25,6 +28,8 @@ SNEK_SAD.title = "sad snek :(" SNEK_SAD.set_image(url="https://momoperes.ca/files/sadsnek.jpeg") +# max messages per user +MSG_MAX = 100 class Snakes: """ @@ -39,7 +44,7 @@ async def get_snek(self, name: str = None) -> SnakeDef: # return info about language return SNEK_PYTHON - web_search = search(name) + web_search = search.search(name) if(web_search is not None): return web_search # todo: find a random snek online if there name is null @@ -56,6 +61,25 @@ async def get(self, ctx: Context, name: str = None): channel: discord.TextChannel = ctx.channel await channel.send(embed=data.as_embed()) + @command() + # takes your last messages, trains an simple markov chain generator on what you've said, and snakifies it + async def snakeme(self, ctx: Context): + + channel : discord.TextChannel = ctx.channel + msgs = await channel.history(limit=1000).flatten() + + my_msgs = list(filter(lambda msg: msg.author == ctx.message.author, msgs)) + await channel.send("Retrieved " + str(len(my_msgs)) + " messages from me.") + + my_msgs_content = list(map(lambda x:x.content, my_msgs)) + print(my_msgs_content) + + mc = MarkovChain() + mc.generateDatabase("\n".join(my_msgs_content)) + sentence = mc.generateString() + await channel.send(snakify(sentence) if sentence is not None else "Not enough messages.") + + def setup(bot): bot.add_cog(Snakes(bot)) diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index 0d85a0d7..817c3c36 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -1,4 +1,5 @@ import discord +import random class SnakeDef: @@ -28,3 +29,7 @@ def as_embed(self): embed.description = self.short_description return embed + +def snakify(s): + x = random.randint(3,8) + return s.replace("s", x * "s" ) if s is not None else s \ No newline at end of file From acf9c97ec2e9a7f578dc108f587c2bc3084092de Mon Sep 17 00:00:00 2001 From: momothereal Date: Fri, 23 Mar 2018 16:39:33 -0400 Subject: [PATCH 22/61] Command snakes prefix --- bot/cogs/snakes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 6c9b13a9..f55b0857 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -48,7 +48,7 @@ async def get_snek(self, name: str = None) -> Embeddable: if name is not None: return await scrape_itis(name) - @command() + @command(name="snakes.get()", aliases=["snakes.get"]) async def get(self, ctx: Context, name: str = None): """ Get info about a snek! From 3956d483219b46f8e3109fe91d594ee7890cacc9 Mon Sep 17 00:00:00 2001 From: Kel Date: Fri, 23 Mar 2018 14:03:36 -0700 Subject: [PATCH 23/61] snakeme : retrieve messages from all channel --- bot/cogs/snakes.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 8c13150d..aa4c0c11 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -50,7 +50,7 @@ async def get_snek(self, name: str = None) -> SnakeDef: # todo: find a random snek online if there name is null # todo: scrape the web to find the lost sneks - @command() + @command(name="snakes.get()",aliases=["snakes.get"]) async def get(self, ctx: Context, name: str = None): # fetch data for a snek await ctx.send("Fetching data for " + name + "..." if name is not None else "Finding a random snek!") @@ -61,24 +61,24 @@ async def get(self, ctx: Context, name: str = None): channel: discord.TextChannel = ctx.channel await channel.send(embed=data.as_embed()) - @command() + @command(name="snakes.snakeme()",aliases=["snakes.snakeme","snakeme"]) # takes your last messages, trains an simple markov chain generator on what you've said, and snakifies it async def snakeme(self, ctx: Context): channel : discord.TextChannel = ctx.channel - msgs = await channel.history(limit=1000).flatten() - my_msgs = list(filter(lambda msg: msg.author == ctx.message.author, msgs)) - await channel.send("Retrieved " + str(len(my_msgs)) + " messages from me.") + channels = [ channel for channel in ctx.message.guild.channels if isinstance(channel,discord.TextChannel) ] + channels_messages = [ await channel.history(limit=1000).flatten() for channel in channels] + msgs = [msg for channel_messages in channels_messages for msg in channel_messages] + + my_msgs = list(filter(lambda msg: msg.author == ctx.message.author, msgs)) my_msgs_content = list(map(lambda x:x.content, my_msgs)) - print(my_msgs_content) mc = MarkovChain() mc.generateDatabase("\n".join(my_msgs_content)) sentence = mc.generateString() - await channel.send(snakify(sentence) if sentence is not None else "Not enough messages.") - + await channel.send("*{}*".format(snakify(sentence) if sentence is not None else "Not enough messages.")) def setup(bot): From 54f4d9fcc49aa526807e6af849b6352315e2d99a Mon Sep 17 00:00:00 2001 From: momothereal Date: Fri, 23 Mar 2018 17:14:19 -0400 Subject: [PATCH 24/61] Flake and query fixes --- bot/sneks/sneks.py | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index bd81c4b1..b77050c5 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -2,16 +2,20 @@ from urllib import parse import aiohttp + +from bs4 import BeautifulSoup + import discord + import requests -from bs4 import BeautifulSoup # the search URL for the ITIS database -ITIS_BASE_URL = "https://itis.gov/servlet/SingleRpt/{}" +ITIS_BASE_URL = "https://itis.gov/servlet/SingleRpt/{0}" ITIS_SEARCH_URL = ITIS_BASE_URL.format("SingleRpt") -ITIS_JSON_SERVICE_FULLRECORD = "https://itis.gov/ITISWebService/jsonservice/getFullRecordFromTSN?tsn={}" -ITIS_JSON_SERVICE_FULLHIERARCHY = "https://itis.gov/ITISWebService/jsonservice/getFullHierarchyFromTSN?tsn={}" -WIKI_URL = "http://en.wikipedia.org/w/api.php?{}" +ITIS_JSON_SERVICE_FULLRECORD = "https://itis.gov/ITISWebService/jsonservice/getFullRecordFromTSN?tsn={0}" +ITIS_JSON_SERVICE_FULLHIERARCHY = "https://itis.gov/ITISWebService/jsonservice/getFullHierarchyFromTSN?tsn={0}" +WIKI_URL = "http://en.wikipedia.org/w/api.php?{0}" +IMAGE_SEARCH_URL = "https://api.qwant.com/api/search/images?count=1&offset=1&q={0}+snake" class Embeddable: @@ -68,14 +72,15 @@ def __init__(self, common_name="None", scientific_name="None", image_url="", ran def as_embed(self): embed = discord.Embed() - embed.title = self.scientific_name + ((" (" + self.common_name + ")") if self.common_name is not None else "") + embed.title = self.scientific_name + ( + (" (" + self.common_name + ")") if self.common_name is not None and self.common_name is not "None" else "") embed.description = self.short_description if len(embed.description) > 1000: embed.description = embed.description[:997] + "..." embed.colour = discord.Colour.green() embed.url = self.link embed.set_image(url=self.image_url) - if self.common_name is not "None": + if self.common_name is not "None" and self.common_name is not None: embed.add_field(name="Common Name", value=self.common_name) embed.add_field(name="Taxonomic Rank", value=self.rank) if self.geo is not "": @@ -84,7 +89,7 @@ def as_embed(self): def find_image_url(name: str) -> str: - req_url = "https://api.qwant.com/api/search/images?count=1&offset=1&q={}+snake".format(name.replace(" ", "+")) + req_url = IMAGE_SEARCH_URL.format(name.replace(" ", "+")) res = requests.get(url=req_url, headers={"User-Agent": "Mozilla/5.0"}) if res.status_code != 200: return "" @@ -107,12 +112,13 @@ async def wiki_summary(session: aiohttp.ClientSession, name: str) -> str: 'srprop': '', 'srlimit': 1, 'limit': 1, - 'srsearch': name + " snake", + 'srsearch': "deepcat:Snake_genera " + name, 'format': 'json', 'action': 'query' })) async with session.get(search_url) as res: j = await res.json() + print(search_url) page_title = j['query']['search'][0]['title'] page_id = str(j['query']['search'][0]['pageid']) page_url = WIKI_URL.format(parse.urlencode({ @@ -123,13 +129,12 @@ async def wiki_summary(session: aiohttp.ClientSession, name: str) -> str: 'format': 'json', 'action': 'query' })) - print(page_url) async with session.get(page_url) as page_res: page_json = await page_res.json() return page_json['query']['pages'][page_id]['extract'] -async def scrape_itis_page(url: str) -> Embeddable: +async def scrape_itis_page(url: str, initial_query: str) -> Embeddable: tsn = parse.parse_qs(parse.urlparse(url).query)['search_value'][0] json_url = ITIS_JSON_SERVICE_FULLRECORD.format(tsn) @@ -139,6 +144,8 @@ async def scrape_itis_page(url: str) -> Embeddable: data = json.JSONDecoder().decode(j) common_names = [] for common_name_tag in data['commonNameList']['commonNames']: + if common_name_tag is None: + continue if common_name_tag['language'] == "English": common_names.append(common_name_tag['commonName']) common_name = ', '.join(common_names) @@ -165,12 +172,12 @@ async def scrape_itis_page(url: str) -> Embeddable: embeddable.image_url = find_image_url(scientific_name) embeddable.wiki_link = url - summary = await wiki_summary(session, scientific_name + " species") + summary = await wiki_summary(session, scientific_name + " " + initial_query) embeddable.short_description = summary if not None else "" embeddable.geo = ', '.join(geo) else: embeddable = SnakeGroup() - summary = await wiki_summary(session, scientific_name) + summary = await wiki_summary(session, scientific_name + " " + initial_query) embeddable.short_description = summary if not None else "" embeddable.common_name = common_name if common_name != "" else "None" embeddable.scientific_name = scientific_name @@ -192,17 +199,14 @@ async def scrape_itis(name: str) -> Embeddable: 'search_value': name, 'source': 'html' } - print(name.replace(" ", "+")) res = requests.post(url=ITIS_SEARCH_URL, data=form_data) html = res.content.decode('iso-8859-1') if "No Records Found?" in html: # abort, no snek return None soup = BeautifulSoup(html, "html.parser") - # print(soup) tables = soup.find_all("table", {"width": "100%"}) - # print(tables) table_common_name = tables[1] table_scientific = tables[2] @@ -219,9 +223,6 @@ async def scrape_itis(name: str) -> Embeddable: elif is_common_name: url = itis_find_link(table_common_name) if url is None: - return - - # follow link! - print(url) + return None - return await scrape_itis_page(url) + return await scrape_itis_page(url, name) From 80696c6503d62ed3aa936f2fda42979b55fde138 Mon Sep 17 00:00:00 2001 From: momothereal Date: Fri, 23 Mar 2018 17:16:36 -0400 Subject: [PATCH 25/61] Ordering --- bot/cogs/snakes.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index f55b0857..7c5c1cf6 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -4,7 +4,7 @@ import discord from discord.ext.commands import AutoShardedBot, Context, command -from bot.sneks.sneks import SnakeDef, scrape_itis, Embeddable +from bot.sneks.sneks import Embeddable, SnakeDef, scrape_itis log = logging.getLogger(__name__) @@ -64,7 +64,7 @@ async def get(self, ctx: Context, name: str = None): return channel: discord.TextChannel = ctx.channel embed = data.as_embed() - print(data.__dict__) + log.debug("Sending embed: " + str(data.__dict__)) await channel.send(embed=embed) From 2c0347db32126609fd10411988a54ce0cc2ce0a1 Mon Sep 17 00:00:00 2001 From: Kel Date: Fri, 23 Mar 2018 14:43:13 -0700 Subject: [PATCH 26/61] gets all messages in server, embed option --- bot/cogs/snakes.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index aa4c0c11..92538148 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -65,20 +65,25 @@ async def get(self, ctx: Context, name: str = None): # takes your last messages, trains an simple markov chain generator on what you've said, and snakifies it async def snakeme(self, ctx: Context): + author = ctx.message.author if(len(ctx.message.mentions) == 0) else ctx.message.mentions[0] channel : discord.TextChannel = ctx.channel channels = [ channel for channel in ctx.message.guild.channels if isinstance(channel,discord.TextChannel) ] channels_messages = [ await channel.history(limit=1000).flatten() for channel in channels] msgs = [msg for channel_messages in channels_messages for msg in channel_messages] - - my_msgs = list(filter(lambda msg: msg.author == ctx.message.author, msgs)) + my_msgs = list(filter(lambda msg: msg.author == author, msgs)) my_msgs_content = list(map(lambda x:x.content, my_msgs)) mc = MarkovChain() mc.generateDatabase("\n".join(my_msgs_content)) sentence = mc.generateString() - await channel.send("*{}*".format(snakify(sentence) if sentence is not None else "Not enough messages.")) + + snakeme = discord.Embed() + snakeme.set_author(name=author.name + "#" + author.discriminator + " Snake", icon_url = "https://cdn.discordapp.com/avatars/{}/{}".format(author.id,author.avatar)) + snakeme.description = "*{}*".format(snakify(sentence) if sentence is not None else ":question: Not enough messages") + await channel.send(snakeme.description) + def setup(bot): From ad58f53a1d2cafe67051fb939a894cf51b7c9a0e Mon Sep 17 00:00:00 2001 From: momothereal Date: Fri, 23 Mar 2018 21:20:55 -0400 Subject: [PATCH 27/61] Snake rattles! --- Pipfile | 1 + Pipfile.lock | 76 ++++++++++++++++++++++++++++++++++++++++- bot/cogs/snakes.py | 35 +++++++++++++++++++ libopus.dll | Bin 0 -> 261632 bytes res/rattle/rattle1.mp3 | Bin 0 -> 33024 bytes res/rattle/rattle2.mp3 | Bin 0 -> 54528 bytes res/rattle/rattle3.mp3 | Bin 0 -> 69504 bytes res/rattle/rattle4.mp3 | Bin 0 -> 105216 bytes 8 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 libopus.dll create mode 100644 res/rattle/rattle1.mp3 create mode 100644 res/rattle/rattle2.mp3 create mode 100644 res/rattle/rattle3.mp3 create mode 100644 res/rattle/rattle4.mp3 diff --git a/Pipfile b/Pipfile index 096fb9b3..9ae65a95 100644 --- a/Pipfile +++ b/Pipfile @@ -8,6 +8,7 @@ name = "pypi" aiodns = "*" aiohttp = "<2.3.0,>=2.0.0" websockets = ">=4.0,<5.0" +pynacl = "*" [dev-packages] "flake8" = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 4e5214bb..0f80482a 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "d797e580ddcddc99bf058109ab0306ad584c2902752a3d4076ba713fdc580fb7" + "sha256": "a4a590eee2e901cf55134852ad8deb78b472616765b0acb4feddf6390f306eeb" }, "pipfile-spec": 6, "requires": { @@ -53,6 +53,38 @@ ], "version": "==2.0.1" }, + "cffi": { + "hashes": [ + "sha256:151b7eefd035c56b2b2e1eb9963c90c6302dc15fbd8c1c0a83a163ff2c7d7743", + "sha256:1553d1e99f035ace1c0544050622b7bc963374a00c467edafac50ad7bd276aef", + "sha256:1b0493c091a1898f1136e3f4f991a784437fac3673780ff9de3bcf46c80b6b50", + "sha256:2ba8a45822b7aee805ab49abfe7eec16b90587f7f26df20c71dd89e45a97076f", + "sha256:3c85641778460581c42924384f5e68076d724ceac0f267d66c757f7535069c93", + "sha256:3eb6434197633b7748cea30bf0ba9f66727cdce45117a712b29a443943733257", + "sha256:4c91af6e967c2015729d3e69c2e51d92f9898c330d6a851bf8f121236f3defd3", + "sha256:770f3782b31f50b68627e22f91cb182c48c47c02eb405fd689472aa7b7aa16dc", + "sha256:79f9b6f7c46ae1f8ded75f68cf8ad50e5729ed4d590c74840471fc2823457d04", + "sha256:7a33145e04d44ce95bcd71e522b478d282ad0eafaf34fe1ec5bbd73e662f22b6", + "sha256:857959354ae3a6fa3da6651b966d13b0a8bed6bbc87a0de7b38a549db1d2a359", + "sha256:87f37fe5130574ff76c17cab61e7d2538a16f843bb7bca8ebbc4b12de3078596", + "sha256:95d5251e4b5ca00061f9d9f3d6fe537247e145a8524ae9fd30a2f8fbce993b5b", + "sha256:9d1d3e63a4afdc29bd76ce6aa9d58c771cd1599fbba8cf5057e7860b203710dd", + "sha256:a36c5c154f9d42ec176e6e620cb0dd275744aa1d804786a71ac37dc3661a5e95", + "sha256:ae5e35a2c189d397b91034642cb0eab0e346f776ec2eb44a49a459e6615d6e2e", + "sha256:b0f7d4a3df8f06cf49f9f121bead236e328074de6449866515cea4907bbc63d6", + "sha256:b75110fb114fa366b29a027d0c9be3709579602ae111ff61674d28c93606acca", + "sha256:ba5e697569f84b13640c9e193170e89c13c6244c24400fc57e88724ef610cd31", + "sha256:be2a9b390f77fd7676d80bc3cdc4f8edb940d8c198ed2d8c0be1319018c778e1", + "sha256:d5d8555d9bfc3f02385c1c37e9f998e2011f0db4f90e250e5bc0c0a85a813085", + "sha256:e55e22ac0a30023426564b1059b035973ec82186ddddbac867078435801c7801", + "sha256:e90f17980e6ab0f3c2f3730e56d1fe9bcba1891eeea58966e89d352492cc74f4", + "sha256:ecbb7b01409e9b782df5ded849c178a0aa7c906cf8c5a67368047daab282b184", + "sha256:ed01918d545a38998bfa5902c7c00e0fee90e957ce036a4000a88e3fe2264917", + "sha256:edabd457cd23a02965166026fd9bfd196f4324fe6032e866d0f3bd0301cd486f", + "sha256:fdf1c1dc5bafc32bc5d08b054f94d659422b05aba244d6be4ddc1c72d9aa70fb" + ], + "version": "==1.11.5" + }, "chardet": { "hashes": [ "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", @@ -120,6 +152,48 @@ ], "version": "==2.3.0" }, + "pycparser": { + "hashes": [ + "sha256:99a8ca03e29851d96616ad0404b4aad7d9ee16f25c9f9708a11faf2810f7b226" + ], + "version": "==2.18" + }, + "pynacl": { + "hashes": [ + "sha256:04e30e5bdeeb2d5b34107f28cd2f5bbfdc6c616f3be88fc6f53582ff1669eeca", + "sha256:0bfa0d94d2be6874e40f896e0a67e290749151e7de767c5aefbad1121cad7512", + "sha256:11aa4e141b2456ce5cecc19c130e970793fa3a2c2e6fbb8ad65b28f35aa9e6b6", + "sha256:13bdc1fe084ff9ac7653ae5a924cae03bf4bb07c6667c9eb5b6eb3c570220776", + "sha256:14339dc233e7a9dda80a3800e64e7ff89d0878ba23360eea24f1af1b13772cac", + "sha256:1d33e775fab3f383167afb20b9927aaf4961b953d76eeb271a5703a6d756b65b", + "sha256:2a42b2399d0428619e58dac7734838102d35f6dcdee149e0088823629bf99fbb", + "sha256:2dce05ac8b3c37b9e2f65eab56c544885607394753e9613fd159d5e2045c2d98", + "sha256:6453b0dae593163ffc6db6f9c9c1597d35c650598e2c39c0590d1757207a1ac2", + "sha256:73a5a96fb5fbf2215beee2353a128d382dbca83f5341f0d3c750877a236569ef", + "sha256:8abb4ef79161a5f58848b30ab6fb98d8c466da21fdd65558ce1d7afc02c70b5f", + "sha256:8ac1167195b32a8755de06efd5b2d2fe76fc864517dab66aaf65662cc59e1988", + "sha256:8f505f42f659012794414fa57c498404e64db78f1d98dfd40e318c569f3c783b", + "sha256:be71cd5fce04061e1f3d39597f93619c80cdd3558a6c9ba99a546f144a8d8101", + "sha256:cf6877124ae6a0698404e169b3ba534542cfbc43f939d46b927d956daf0a373a", + "sha256:d0eb5b2795b7ee2cbcfcadacbe95a13afbda048a262bd369da9904fecb568975", + "sha256:d795f506bcc9463efb5ebb0f65ed77921dcc9e0a50499dedd89f208445de9ecb", + "sha256:d8aaf7e5d6b0e0ef7d6dbf7abeb75085713d0100b4eb1a4e4e857de76d77ac45", + "sha256:e0d38fa0a75f65f556fb912f2c6790d1fa29b7dd27a1d9cc5591b281321eaaa9", + "sha256:eb2acabbd487a46b38540a819ef67e477a674481f84a82a7ba2234b9ba46f752", + "sha256:eeee629828d0eb4f6d98ac41e9a3a6461d114d1d0aa111a8931c049359298da0", + "sha256:f5ce9e26d25eb0b2d96f3ef0ad70e1d3ae89b5d60255c462252a3e456a48c053", + "sha256:fabf73d5d0286f9e078774f3435601d2735c94ce9e514ac4fb945701edead7e4" + ], + "index": "pypi", + "version": "==1.2.1" + }, + "six": { + "hashes": [ + "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", + "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" + ], + "version": "==1.11.0" + }, "websockets": { "hashes": [ "sha256:0c31bc832d529dc7583d324eb6c836a4f362032a1902723c112cf57883488d8c", diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 7c5c1cf6..2c65a107 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -1,5 +1,7 @@ # coding=utf-8 import logging +import os +import random import discord from discord.ext.commands import AutoShardedBot, Context, command @@ -31,7 +33,15 @@ class Snakes: """ def __init__(self, bot: AutoShardedBot): + discord.opus.load_opus("libopus") self.bot = bot + self.rattles = [ + 'rattle1.mp3', + 'rattle2.mp3', + 'rattle3.mp3', + 'rattle4.mp3' + ] + self.ffmpeg_executable = os.environ.get('FFMPEG') async def get_snek(self, name: str = None) -> Embeddable: """ @@ -67,6 +77,31 @@ async def get(self, ctx: Context, name: str = None): log.debug("Sending embed: " + str(data.__dict__)) await channel.send(embed=embed) + async def on_end_voice(self, voice_client): + await voice_client.disconnect() + + @command(name="snakes.rattle()", aliases=["snakes.rattle"]) + async def rattle(self, ctx: Context): + author: discord.Member = ctx.author + if author.voice is None or author.voice.channel is None: + await ctx.send(author.mention + " You are not in a voice channel!") + return + try: + voice_channel = author.voice.channel + voice_client: discord.VoiceClient = await voice_channel.connect() + # select random rattle + rattle = os.path.join(os.path.dirname(__file__), '..', '..', 'res', 'rattle', random.choice(self.rattles)) + source = discord.FFmpegPCMAudio( + rattle, + executable=self.ffmpeg_executable if not None else 'ffmpeg' + ) + voice_client.play(source, after=lambda x: self.bot.dispatch("end_voice", voice_client)) + + except discord.ClientException as e: + log.error(e) + return + pass + def setup(bot): bot.add_cog(Snakes(bot)) diff --git a/libopus.dll b/libopus.dll new file mode 100644 index 0000000000000000000000000000000000000000..a962869fd53cc473812231b51d3edf31ecfa77d2 GIT binary patch literal 261632 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

SIxr=y^IWcH&?s)J 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 z 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 literal 0 HcmV?d00001 diff --git a/res/rattle/rattle2.mp3 b/res/rattle/rattle2.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..e1342d14703ea98e1b65b44cfa0a9bb9fa1aeaf5 GIT binary patch literal 54528 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 T(7bN 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 literal 0 HcmV?d00001 diff --git a/res/rattle/rattle3.mp3 b/res/rattle/rattle3.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..3053be3475da86ea9b60fe025b32c2277b33c07b GIT binary patch literal 69504 zcmdqoS5y;E{3!5EAtWI{=m7#I5JIR12nYxoddJYaCiEr(q98xigx;kSiW+)Xx}d0` zN)zb{HV{NnRP0@@{_lOdZ};`iIs3Bvu(O{tXXZPz-|ybfA};WMH>-%i6Myds{=K>Z zkRTHP^T7E81ck*g(%5}+1VtrPbq$J+?!iMw#%7i__D39D+`YVy`T7TighxchoR0hN z94j#;JuCM@K{30c@^W=;eN*d|j_%&R8@C3BM#raS?#(Yfc=+h)v&|RVJ8$2A`tt4P zpTF7de(^A(vfCJtA*Ckbb01#yoU|$mffcdW_Pg*1)r@^G^h`f zAk__fgE%IM3|s=>?W!p01AE_aXuujm1~|if8Q)Zs_I?G!1xUDCtaiTaOkSbAy)|99 zBn>C}OPa3dx8ohY_u~W?X=y4ijDRK@;qr(=0IynF&4;?D%$kEZ=A75LF!a&nGa6fa znwCYD0(7CO43qe;JA<5)phR1D5_t_6$NvsvfV30vDVl#kfnMe)Q4Pw@iwR7A-I?W9Hqsmcxit9L=tVa>}q`Z zfAvI&W-UNtF_W2SnolLBS}M4x1HL%O6yarMhlh|0EXR$?RA(^jIocem?lADr{|tZ^ z5>o5G1c-8KpWWAJ2Tb;5+geKqL;5QBKEjfVrIUC9Y|@r@_wD@vA|?~N$Y#m`2eRz6 z!N~>K8+?~!-RZoDd?J}z|3TGntqPJkL$FG~qLKq9$)Fk%7AmVpuL5E8Gl?J0VVD>y zjmfadcE-%`qFSeC!Cv$9f_vgt0?fuFJ1a^fE6B;4s1Ye5vyTjM!V3#4X~-3@x&WU4 z=EP_U6F2O@g?6ukSD`3_ggL?N0rtZS+27IJaof1@B@Rk`iAt?Wp;1Xj%uI|CP}o1H zf$8^XH<1?Zf3Z+G*#Gc=bb3ZZI(v68zqq`;>H2lH<>1H#w!^q6mYW1kL0LX>GJB4gZwCIa-Ty|2C4sG*02)q5=h{d-k@lFk4F;7H6wT-)*bhf%F1ydWzM4ges1(4>3nu`V(CNJRV_)hDN%t>jOzM;f@!|nb3gI9+kP%fXaz)1wxMzx<6Y>QEWU}#d= zlC1MG=g<6p`ugmdOxHF1_ly+_l4Dl!$3)?WRuo#jlOnZ_OY?~ z8avX#WZfY+UsZ0#FZU-t4GYKV!GCFdPWq3ACXPyzO2K}d6fNtN3Z!Y8AnFc0c{0b$ zF}Mc=fYn+cR%-Dol=-D0dB({uhbRnZWnCU0_b}HH5 zNHRV!rT^a1lYc5xho?vUhTALL&3{G>#o#nS!D0sTa)EZ0-MB_#Wq*!$$OB2K^;nC6 zkorS(2@Wc1u62xRn!?D{4Z>jN8WfDgxCoYfkX-7!K$8afz(|-hB(@@_LZZ@68VmZU zH>`agkl4z$YW0OZ@X0ho6}TYa&psHphf36~$SI=aEMc24TQcMF>uY6th`C!{8G7{^ z)2zlAj|HJIUEWs@lCLfXq^|yOCa6TE;8lCJJw!cDkc!+U@A@!C_ghyU^YAyqTF%a8 zBy)|&?HL?#J3iowfK}0WL8c-dcy)ON!pK`dpg^exmPd zYeaX#0#&7&nNsOPu3=)w;7YOqZ_8qVpd+fb>T3y_3~}5q6Dy{h2v?lBpr5ab%%7A4 zfacZ?#5);>p_=2%zn@+G=Z|KJe-~1(KP)g4fB(zoR(mm`2vf%>aT)%qHGkF0;hi1O|kbm8R;o0Y%XA!_^UWy zaq3y`L&?ZO!x&K>_9N${hK6pcm^~s_&^7Zt)XL2NP~yZnz&DIK)S( znsv8qZJ0SX)4x1a;{GJ;Xg;EvI?*gHN_(8^DE?n!b)Kvq057m!f2<(}j9cMwNmnxb z8k3zY56b2$!l;WDN+R~h?0UwNoR2xANy(&88kXAUY;dMO!tZr9>%4t-nzDJ;L2;#K z-1Ww}If?J*z^?)}pE^4BN_D%9h%$ZeHgv`kMN+$D2vcBm0rh)sk=RKU2gBPo4uwts z{0}fCI)q3?(*WNTp)OV<4~YKkQzv6mU<0|S;t$X`x@S~QT~!&0Gos+7oHx$|+;!jK z-;VI-@WO9Iyt-}ip3zuDGMC_2FJD9^Vi;$xUKv};c@VaJ?vD3?)8Nu~a<)dsNa(-C z8~{M4g2P78?@sgpiZDguq#LNlLueO`THQ*HSwWj2+w%om+VCFdHyVHz{9 zTV}dLtq47O{H7SBTkEsxdFvIDe6G2=!_g_5;l%Ea;gc}1xyll<^OC^%$8>CVdC z{3XV7$qx@`&IdFB)6HGzX*HblEP74OOX(z64Y+kU7d_CG;uPptFX}AdeC>Gy-23d< z+bNfRzYJkGYAjjU2*eed)*8ZU)|rfAFwl07<9v^Bk;5(^B0iW-5M|gtUD1BG_hFFd z8ZSvm`n}oSA492*R9AtrlA~YdU;mzVbcy$V6wCzxf+YbmRQ1V-o?x#;54Mhpu{^F* z6;k#AZ@MDM>PLTj?f=hTlquZ7f4H)g3D(93@0J`!c!oIJ*eJVvb+LRDd9B%}rIcUw z&N_4;Te+xHxJ})(@3~3QoM<3z{DjG%CBjGU4*Q+{rbTLNir@!5sp(2jlbzV{nPe%R zS{~23q9T08_{l6!9+Ve_GnhOXzb;kZj4pAzX}sy>742rxdhA@Mt}6#FfX>gxfL-}& zmE^_{DqAJLc$siXc6Tu9QA_I%UL)!lcE(BNFwB zvpwI3-`hGPD}2+w!P#=?^J1)P^l@Gq0C?D(EU;Gh=+XaiMgW)7a>CR$!P=pLOmcUo z2lX_-h9(%^r!)kZk-t22v1!BeMd>3fZ9M|kK17#EvI=N%*-z!y-2J)HFC6mF47wFK zIa50N$8oC;tgszt3Q^>|_WL``iIOe-VQ2Xbv%M>2uI|%K zhjkVV`W*|Tue`K=8t&5=Xu>~A=;1ur>3MLrT13NBttg{0Fo0qOQ2D;ZgFx`a!#5?% zjdlk~NdlLPCPu42W?HBEepOb`?LOjqQwO&Mup>EVyhJ)Qe+%JcUA2Z>Ruk6FWjL7E z*YCfGFNW5>n&jjC&@tFQm>su%ZgeO<2odq1v#lpWpn1lTw~oA+aPtT{>$L~|k}qX( zc#9n8PSEkuvM_UL4pTAZ0_(o7Tsw>%PK}I=$Wd!w?i|$Ge6Kr3PhD{+_!!c7OyqG> zO9QWk#p~LKJ%ijT{ly>$s^={Q80)NTNAB?oSlN|835Xf2H$^!4NBU_&r1VzV*cn)x z0hOgYL>{z%bO824oQg0j4f5>ND@ka2>M*@WyyuGTzN)0zsyLa%T2Id+XunE4E#+jq`gk6&wYpT88X@0(7WFJH3D!}? zN*jUnf4Ycso$SZ7Qn9%2B_$6VZdB#gexp>BlL9*IEtId+z<=JFpZBU$+@4r=htI*` ziHVsv=z#NK)F%TfPdOGy%uLX zvw;_lO;1^9jUXwANQ2gf&Xf1;j1OPWPFcKTA~@n;|6G5|_2EordQ*RT##w(mvRV$k zkC~i4+bmSvyZV*l5B=w#2q2wbr)(f}et1hs;6fzr(O z*K($rx>-K>k`GOq(M#`O8F?J57?>AKPd97k=jye0w*n6|#^ExR=9rTUl^;rrg-)H) z))4Bx;K5%gMBJ#i5gQxi3(uvkBiGMu$~$Fg^z4HnQxUzD!WY-Oezi)qMaOUr*iFHHUB@h>YQtE zGp#1&LW3yYAKEAv_m8T7_)1J0#Vey;+nZOA@+e>5c+2~CEOpoO$CuI6>L0lW?A~G# zSbf@N+H(T7TuU1hbQOiyD%Dm!^D(lB7h`|Yx>lA-&S<58GJp>H`~dixa_ zu!8Sk)UT))$6lD_P>o`Z{J|P@WewV|rF+_Om9_?dh0lo$+!} z+?468?r^p_+0P$|d7X?67M?^EKcYou3}hHgWl`g{UdVQ`NF{9^8L)%Qi<^&9F~+tPHXh6K^` zpZ^}~p^=~}>a~92bXCyWbmulp0-;LjSdzRcshPFSFj63S)wbP5IGYx0J=yQhARbJO z6LxTbvZRoR@#ss!kP1k&|UMRj)GK#2CvDK)MEV zisV{3n1?#WlC*!GmysBY>bP=uA2j)-~SW|&d;T%`t3T975d+{#v1erowO(_ z`K7*yBiUN_-^>YJrNDU(-uj>aTfntS&=C5()OfpU>v-CF++Y*W@fyseKu0)uP}Y5s zChlKj<_L;5Q;g3m$%YDwC8lu>$!6Lw28T4` zbKKj%4H{Dc3zi77Nbln%M^%xFO)fFPZ5B4dn-h9AkvI4}!pS+pn?nocNjG)9Dr`c& zohh$v9miEUIj$b&>x*s~+fY6Rtw{olI@7e8i|b_ zPCYi#r`2yeR7DRO>c%+IcQ2)nd@rL{z{;E0W$CGB!|mEZGXiKuTH(5GDsKTrNd=cxWChW{&Nxw<#Mm6uSTqk@`u&xtOU}bdD$RSnyfWgpk_9i z_H5iz5@a%2Ro%kN2djK}6;w049mfjr{(WF6ogL3+pGl7mTs^vV+NT|`4v0Sg@r-rz zIe#U-LEn8r*4T?=e`NDxc}*UkaEBNpXQ4>T_;}dWebw;|UNMKu7yOuyQcHFWs+f!J zA&44HWRPboY{&8KuSC4~h02uFF;Z$Ufsw6#wrRC4$wsuWk#V0yat>Wk=#Zqz z`OgLc3j&ewbc!`p2Zk$q-*RN;jsRH(H6o^wr<+r)HaIVnd`S_DD3g=UO~d#X!AFK@ zB;2goZ?vojRmg8hX*>^SYSTVm5IhgXYL>Tt9x89lzNl2$O8!qFg|aN2{9NH%U6%LM zcG$erx98AeNdf>c$k5~*Cg!^t;<~)9u10_(T6M~iCxY357ugv$yGhO$%EnGY@{AcG z5F`}jVIm5ZX(xalB#LY0%hHW;=}c2OLawMFba;!e+Ds_#%oB}VBb`)}w4--?j?+HI z%~|m!gm9Rk55E8WKLQc~GOTaEg{9t91v_2N13}KYX^3*iYA7b;r8VV@&U}o%-dsB7 zQ954r^_1<{h;eV^MP55nOzGGuQkcMCI;^Pgq`kRo(W$EB{eh$Ap*i(T1M^2gNFpvW z)PGdj2x^Wh2@XyjvJ6ZJlxq!pPDH&8%_e?AF?e7)`o@((_&_3!kz^iW>VhPLphAL5 zJVPka+M(QOD|slumDCT->EHwtHpPWQSRw&(-xznwi>UH)B3sU3Fjc&&Iqp zPIfvVkLPT`-MQMPbbQ8sCd`Co#9_u|cas8^1I8uSZyO7B%MW4Akm8yMke8%xklkmjYuu2)C?hli+3;3gUrmo*y5w8;? zcGyN$kW@y6Jax>7GX1@)Bv~v0TG`t7zsLV3OGGC7o#*g6{<&Ujh%W9RM$1V+r7P2W zd{moYWRy*Xka2TzROM}Qtu0fWlx{tg8Ohy!-khcgkO22|GT$e!65)HULgM8K$MGxP zp&!K10OZq@gCT0sHNW_2CSJ{{tJv030E~04a^85i3N>O$pitE{vKm5CA7B&+JgjbT zKdw3uZ|-a%+XRHpo)U=cjm#9HeOv<(9@^MC*WNYD=G00%)6EG4)}*nf2)36@bP~$d zi7KQoYP%IyYEzuFtVo(9(p_SgCw98v>H!Y-g@2(NQovqI^X2$9^(0A>zcrK6_;MI= zvatSc=y}S6#W|o0Id1#bkn+-WNzqR*XS%>s>u30~lDtM+c0qf$ta=4U{1eWJP^AkmJQkZYQsz%J)IjV3}UONHIMxna0t%3b5ZsI&CTva_rDwV-} z_K*!F))@l_`J@m7Wgz!I+Mm+=hPsjHEQ*yS~Yf zgs`b>z*L>!zcGfv1Q5p(lfzyz8{~zhWp(+oF?#qC$qI<%HSscX)fq&w(4#SdY3jF! zl@_VCw%B_vIX!s~jwPpNxS(`fmwW_>?l{$FB>T?p_v$ln(e+aoz6NhyxhIX)B5a%x zJcJ${zl*4SSk4u*=$LUthN$0xU?UpF2+gsQ4a_ZpI%QtA!$dbG-8k95o*EqtBQoRZ zM&|y3!8|x-0on+zTnx&|Uep~LDWiImhAonS6p+hsl$s}BDXk~vt~k1i7lEN7{jA#^ z8}@FyPywb{^ac3)X@z^Hkvd7Pv|LuGtlzw*)%TMzQod$zK%@;_DE2vk{637X;Qq2p zThm{wZZEyQIx3yzfDr{hX-LsslNK`rKjkv>Vt*I2^*wq^D>kAx_V?xe^Ctr`ZxpmK zznS1sg7OJTCUB+@-kiq)C4p^XOMzC3pTlRf8WgVNn^+B~8a7<#lJWO~JMWh>1? z)1^Hv0^@IBvmbxo(~_r>{3A5aoc0nI6WQ*u)8 zqFOXRE*a30@LVq2eo{1s#y}|D+wv*t(&6x76<& zv#(bIO8Vz728c<@ANlr`3EHiV+QaN3FBMd;<>G3s)=H?&lbVn9YMCy=>o2|gG><+v zlXN?6dC1=6NUNIaz(aDVGrf5z#lNDRR9=y{jiHU)!2J>V)N?$6V;k5 zlXBXZ z-!K!K;f>`Gtgau0L_FA)OCFMCu;nM56#n_^0utJSW{3t;4)1zVJuF1I}a|d2CSqo;C};mVc(&Xaw1J$d5*JR)s>2s+q3uK z+QfL9!Y$?R{LuX<^CINO6Wb)ckkJt_`Q(z8?C58{6(fzyKHY^~JU~=|wyjv&q)FRq zr@RJ3gSW3S`#>?m#p-&go(-dxe&LyWZ>5ap{T5Ryuhzklj%Sb9N_n-J!WsT2G&eP! zZM`?TdR7ZGJLOK1^Zo9r<>Yg$co2qXb}#5ZxvLa)KqA+#^*Yvcdi+q)mgJgWX{^>F zMcVEfoqUNiDZU<|J@NoEN-Gm5kazYm685L}#xy=a`?^|LAsd%WM#ld6A7qM3@*j-( z%0#&mp1bYi0+A>2^2`0Ip~K8eNUe{JI@3%FPKQZ-Ah_tybuojY#&HZFR+M0W$3; z=WOY)K6xBFD&PK0(_f_v1V#aX6iQQ*CK;W`#RL9#j5frjbHWoe%KU!{RMTgfP*Gk? zf~McPP;w$n2*op64}n%K4syr@AOG}CGX*GMjl%kJA1&yZ`YtJP+}40hK)_7| zkfrkTfCY2xpi**zowAq495Ct2ShJbT&zPiBSuEDhD~+(dU%Hx1FplEU_+szR#hSr< zx*p58nyY(93`e5k;KJBRwnhQ>fV7^)w)yRE{nh3OlcX8VbiL%oimn#>^~;` z&-}v_Ug5Q^Gyo6-R24NK z?~mUSx+VinS~%RKaZgSo{TX!X2ozm6*hFOrfOIeqbuEkBPOSPe+lq(-@4^kmo#$Zm zpEqKqMRU8S?NdXaXC{Qc_`R&Hl6w4!a;UGIc8(}lSNU+Gtg$3M6S7{*%hs_&$l&oJ zlwc@l=j|^96`%Mdd~!*bWTUPpPMBVkk_)K~wCs=!rFSt3oRjaC zWtEy(iFjfMfZX_fC4t0egWs`plEz?97nST>tK6~p{4YnS`H==8+g3qWZqd)LwNc_?~Kg7rpD0+=81f9RRjv`1u5!cb>G| zyQ6~(w}Cn-9>x_5l`g4ypYSJCJJ3hNef%~)OuisE-rVnBd85`#BSR)O0@oqL0d+spz}9`>D=r+h zBVuLx9-%neVh8^|Gb1q!VJJ##xrcYr~S78~?_C3=`phKW7tlU(>d# zk$k5M6Rl-w&5(xglO=r?~0*;c`kNdZuDWAWWkc# zHus&Gn_o;(Q@Ke8&li~c>mxOGpWGzT>y9L;s3oY8EOuDmrX-i!Dbdz=+iXo;KLSr) zgw=$b7nY5{9IIEg?!T1+BVbNB%9u}e_cMEbgmGg;0c;e=%>_`(>@NNr-%+Bh9c{C| z8-+Oe4c-xs#5K>Ub`Qun9r+Y`-+xa0hM7>_i%q%ha!>L#oxFR?bObmGn3FXh$k=B0W<9! zqoIgKM3j(Kano^OktTfo>W%6f{hz4JxVW>eR$QL4vy*7ssFZy- zGf$0Lj|Z;q!>pY|<3vng`1B(Iy4n-Z#LhV`UU$?i+kNeSOs!KY17!_X8#&^S{oVALX%4qMyoi#BHO)rM4?Kw^XFe$No~Z4rXAsH1?Qg3@@@sS9_dhE z!+j!OwQR*7O+pxtfgzFsRcm*5tG_0jX%Vsl=}a?=RGuL{o;nll?7}MQ>`!HPS4$ok z-I4_+QkB7=Y+=@NP15D{h8LD|Em+MWIQ5P^r79;z9;rHc6ngxiAH-6UHh96#)dabj zoRNAo>OR&akX=;<^BqMQ8V1`91#$?MEVx3|3=oLHTniRwrP2CFIpKVzyEDa_ML&gJ zpjzM2SY3-S+2jY-Lp33-DWk(QF}+x+{{%@=)9&7qT?h}ehm3I+JaF>LPw&Kw!OoW+ zc5o&ApZ_Wok^M1clkNBOCjNy+j<0T+POyHY@-Y)1jwpxe=zh~2 z|H8EDB{Nv(0a&<~Uo^EKK;fpN3M0h1JQ~MF@+DBW^Nt?F3KUV~1vzF8;d*@|OMN@X zA|3$5knx~q+ji2zv;|1j1E;oKMEM=mCC;Sx{cMp;H`%$hk?_NX)yNn}_>x~rE=E?| zc(tod+?nv3(ZBCPkXN_vvn|>d7Uk8anfcS33B~)hs=sjQgc7U;aRgsra#1)?mxuf2 z0^xQmNf%d~D%yQ7Fa4RBgGl~rnd8_Gty7xb+u5B<;~zlFa!vu%q&*UmBK2{gU8H-v zFC%8tW_?F8;Gj~>eVfErZN1qK*X_h_r4YKyGr-KhM?hczV(WE5)A}eMLRra;!2YF6 z5*+s7(pmkyB2~$hFJ6Kcm;LV=6TCbG3sNi|dw5>8m2i~F6aOAcJ1hXv3kW?yzu6Sm zydNx#vQ&~Y%^1X;f`F}z6Kmwb^3=?XVug5|qS62Czdiu>ZweanJ})0ytqLr-%mh@V z$gDIBW-T%~=1~ze#Ug703T2L_m;kgMG7Xvv6O}!B<{4c?Ttl-!Ypq_p+K*RE|3!_Z z0F^yUi^Raydd~U8JR%?>NCa}ES$zGh=8Q&_f&?G4zA24a^O+Nwp9o>5BmqVEofn6H z+j%A?*4W5A-TNNzv3fV+in<&?1wde|k4CnhUS6u=S=!qkyN%G%w>~{qf$`@;_lWqf zAId(nUQ?$sGH*KE5xUy+)#ZE*Zd|lK=!$7HOwG%qT4=xTkE%|n$q++|0XcfC$3bo~ zjx!PLE+u%4>6~sOMy4EOR<|&X<`|dqcm{m<;~|dlz`MozY)zQPp&wdMTn;*-~(5v}7> z5}kBI+HSkI1rY&T#cnY2tVy=VeP*pjk6Zq%S+TIPrjq=p1$LK~_lehUM8azDxaNUO z{md)3wm9aOChi?aH0oFg6GYkB;JZYPz~W5xceU}uJ+Fe*9Yk}l(r65tHE+RZP}JWQ`$-g{j&Yi$}ib8_#G`Yo}H_TiGy)O7dQSQ{!Z3k`Br&vr)1 z`#5Z()n(-!PD(WQD}67#wc^<8{_}Zs{;J4pKR27##ku|9MY-#EEZV+rw)f_cRBi4J zAoa%wcwfhyJmv5m=D+#pDIk*1Z(LLfKn@ccZ|}L{;eXRhG<9qtd3%(U2 z6D!;F+T!qtvp>eoK0eg>IPh3aPc&+bgabgo0yIM0EBniR_(K;Hg(j+Ylbft2XNv%@ z#KVRH-L%^?2X{x1eWAhR`&qu`NM!$(!I?VH!J0xkyp1t;b)3OKq_EmH`dVvdAD1w%z!lLxbLVw&!h zUAF~?Qcum#H}YfObWBwB`AS}nsb0K620)}}F~JwFX+`bD!>Rk77M8dD#oF#XzjEw$ z-o75oUu|=l*KK|myQTM(9{PFkyiEUDzL`HpEzIuc%eME`8mcyd+r{7m=*&O0zLq1C zD@<;Rpwv9mC=a>Rs#}TE;t2e|<>P#6b0*{}Vv44B_*u1mH8nzYv{%<*Vb% z4NUaoh;Hhy(d%)_B(%nmNda~{3`$Ltn#daPD^MLiC!nDF@Wa-`!@^s$<&#^N!^qg5 zDxUVfA537pa&h<5+=?LD3QA6Qe~0IoI|2X?Q_J_u84b9CxwvClyPTJNI^8e0z%mC+k9skn~-!n0_`qMzn^-9H$I|g@Nriih3k?l;(x3rTg6NP?KuoW$j4i=*L`dWbkU5j5xoWzO!rlcTyTBlok( z7=H(=Vm_jxUD+Gg@Fs_}Vqzak0Ad3$0O;VFF&&aTW_vD-g1~Z33J+Yg9ot92<4h4+ z;iy%M4ZREZGOudu{#x8j>J>9*?rhWW)ZGIubsol$t%JN-P+S)uq%uYBg$#5aE-U@q z*MGRGz%*b(BiInip`*zlmBO}ndwXbbK8I`E`ChyA_TCf&WBKLMKmQ%3_+x&}?rA0} zi$Lts;(~eUAQRpHcbF|BlJ~;F^4-Z=-uy5ovew z>VwKEU`Q^@RkU7PoZm=V+Wbge%8{bn7?*|6M?MoG1D~g!Ys8s)#mu#~%?G8nto{g} zqR;HU-JP7LP^lt@@2}U}PgovN)zV{yPU1I1PQ-giIo>K-KHs$P>}L4DbaMVj^=o(9 zv_%HEj_x-57bS`4eP!J)+7W7}O;Il1Oh>_Ft<3Bwj>w=6zVDW+JPDQoz`y6rpUN&DM%09--iYjY%>^t*N zbHezFuX>`zjk3MHMlGn#n2g@}z27UIvo>m1mc^cN(O{m{flgO3^|=$@$JZuu)Qf)% z%``PVefac}(3O$krhdD4shXm3zj=KRdrspa$wIUG>ZLE+hrLf%l5P}&$@i`09+gFx znXMFzg*f?E%L>JM8u#cnJO3ex>{qv;W)QS^ZHkXaW3&%?#7YOG)RyPJ|I7+-a(P_7 zTefX?VadStrkd5yzOa&(faa2eapi1w`oGYgUr;B3i^K7hl4{`TA!!C$52^%BVrM5# z3p`xhj0>;M*2?H9x%>0sOp@03orJKnL77?YPal`a-L5DMEuUcT>l?{@w*9$GB$k&5rh>u1NANC>48Wy{ z=R? zy3qmq4~8$cwU%m-gU z;ck;pBmBgwRLC*>T0&d_C{!=aT|hFd>^occTe&@!b;-d?(gCqvy28tzOzWrm0m;rN z0u{GQJ`7EQQcshWfRE7GGh`e}3xZxCpMynlv}Hl^U^-Ze_r5ArJOvEUR|NuP*Tw0N zkf{Jufc}Ly5VWRA2Y6U?j4(1X7@_WQ;-CK;00rVZ`>BX|$dyoY|G*k>{ulQXc!*Ok z1}1sco!tA?V-98}%7M*(-N1kD)VzM2lnnr6=iI~y9_Yag2%!o-xiIJBRqU?Ng{yP1 z6}^WS+HbQ{pB2dkdCyZj*2uv(%xId-F}a7Oq&sHAOw=?&oz}`Vdh(KA4QuWgL?mVh zf{p@^6c8|)KJM$U{KRL0UmPaP_F(0yO64~xIW%VPlZx|S&#cE}DNGlAvWbn`%G zBvsRQ_z1++WWT?r_Acp6BS|_*5c4G6%rk+1^Z9BASkKZceOH@sj=@wRet z4)V$@5>C4DZGG?0HMelh`Kum#d#TSwRC{}2?*s)VGj>skc&V3P$32Gq@hsy8d!ZtM zrxJ|~etrd+t_`i$UA-57{CXMgnySrz3K1cFCv)4i0QpeH@$f(Y2Bw^vg5jBqOt4K= zUEy)Pp->-9z)CF9eg#JWrxz`V8?A9@cgh)t37b$e)2jrIG>S=Qq|%MAs8u};pU}C_Z}H^V7Ph0uwRN*PvEGO^@q4qa7Q}fa!G-tqzrfdN8v4SR!fH9 zWksGHGi^mReSYz47K|?uw<5@n=KT;OV%D=(w8^(MT5AEl#aJ}ha#YQiI3f8wdOb}C z^U8!#xW8OX>04V)ZX16m{L96gAw3<=EtZOx_4eDh^x$;|0UNc3(ENg(nj4oI$F^Qe zY|ZJ9qzVl{H4xKa;Tog_ANS2a|9YnI62iK6?F^WTe@PxQ?7O?=p0{z{a{1|(qs-I9 zTbJFczD78T?@UbPf~CyxrYQsQQ-P+&!j-GX0!i^YEFSMXV3t0Uwr&1>hw zy01D~CWvMCS~t$Omz$Tn8#7lC#!Cg_#I;^8w6EifC4Jul^BYR3UYae@>Rivw z!6?^fK~@_nRi^@!!*6&b8{G1#4+KKug^8l`9@bgfE_B|%bxUrJCC>&uYrHPTd%Jp$ zS6&NwWG6PiYx3^(hk6=Ta(`a>mCH?S@lOtWxjTZme{-H7tnqDWVe*KNnp%s;VyoKZ z$eS-4Mf`tj{B$m3e2)}myk^oB<V?;l{&QZr55=Qu-+^n4t%}TrU?COi zrhZ0njv3Q3QYCrh5+^s~IWP&mZB8XcZepA%Rp|LgROgE>|NO_9^A{23$!jY}EnHJx zr6L}ZdS@07NHJZd{m&GrlzyrrDgR2RewXizMQD)uGc%d8nN8ZFX(9!$2K9;rvo#+- zCC2rpW^|oFD0QrduW-s$lqTF?1?eITk^}4*6UqpT| zrqbL6!S)ZG%_HWG8;>wYOhnSAdTDx^+qGkUCl4X{snMEprc=ShSxcNUzYk%MOQKB@ z^8Wq}83vvyWteS^AH;xzLu!PUp1=4xe=*`T8j~=M6(Kj`bj=yK>+i{A^eFQ=jf}UQ z4PGFzYy)E{p$4NSPAQ}I&hFaJcV`+P%A?aSHPTF2V?t1jDjMLCms<%kX9*;+>JLb< zP1Wm2<`m5FG=Wqf2lmTIe`+62mVsMOOnM{Q4mmvugg1Mgzx{{Z5^zM(`SP)U{%-&Y z9ziY9UjVd|Q1?!Y3+%myo1!d@+if~7rlvQ>2879*as}?tn<&ky@NPS~TsL|3UNO18 zp2qSt*LZRFdT}WdUs1iwQUuo72)mEpV?;>o^rbI1#4zt;7CyfAtsdshz5jYyeV`#< zr=pG-Jz7G;0kDF;i;Zhdd5FU*B2KHf{e9j-PuGtmEcq`66%J=U`Q3w!RwksMznn|1 z^-6;X7Awnzo>IB$rzT)kxKV8CjK3m`QJ7sY&#M}-@em7{_huAsp2;>r%q=^nxwH9q zY2a}@ClEOw;j60ACGxEHRn_M8nlOQT_uolWY+Cn^{-+hAi~PK>Wm0tuYcMh|_BZ7d z0A{l?F?yTh<3>D+?z&03-;vTfV#CO6+@e8Knel)92zqi)I2i{>@fiDJL;yH5Lzfi@ z<}nC&=MMTd@;9-P{02>l7+nF3qEOm2R-CGrHsp_o{0$&2M+cc3<<{&SPq?%sdpt<9 zDv?WT zoCQN6FqARG;kYLgvEpJVxRKSzgL{9d7%5a9uVt#nc*EXzs(~>~otbT%kN!sOSV^vi z3xACR#!`I!kY&im6AekdGttPKmxNhrR z-TR`v<>?dAc6sm1Rj{Mw8)X3O3_zJv*_RnxA&h+Cs;?AVVv@kCl^UH<_x!t*q3=8H za6aiq0$zP{$=Pt>n#I8^>V$!lS~KLcTqffnixQ2bUKjZyU*~)rJ%kJqC3&PDnX2I! zW-t$>teAu1&H=50i2`bCuZR$D706DEfbo+9NeL)aeLvhU;IP|F)%+Dl*-%rj;o^g! ziz)fvKhzv9x-0F)#+pzeymaq{$bhxr=U>nDgsLC;%tAI#L=h}MhFm@+8kjYrG488g z-5*jtx-xX3tG93Y5j-Ha!Q@E8oWF2S{DJ8J3VO*f@ikgQdI_MfBnBQBZSdp+zu`x@ z*WDlpGvqD3vykjp9qpY8*BFETgT@N4DNOlrhs!-LPyh4JWG+bZ>i@0(Li*x^IMZ4< z@tF-#vUaS-qnoEpyEt|p{wGy=Hs;8N#*#KI&C7XIz*mGve^>j`%7JxHL*?)IwW2JGhH7wfa#as95ErDPg*(j3r#*~$(9BZOkhY4;IQg== zC!?LP9vE{V=&D)p&>Pggw8RT#fnE%3vN+GF&sWr+l+WMO{@D6cebg!?WIS2n(Bx8M z7B?@mN;Q)S&o0uFNu+&_tBn$-h7~?g5b?Snzzw3=u&J8Uop;Wxc(==YI$ts9@T=yt zMV9ehc3TnipuuMfo0)kc7R+=j-6ATS*(vXEH#57tsXe3V0WA7#Ngct(1Gu+nH-1&63}G#qo477y~wPquhwmI8xft+X(3rlo%Zn zf?$pwFktjRKt`8HiJ+*ow4{QGl!^t`g>hYe@b$iZfB&9;!u@=n&*M0c=i~7>LX#l? zfRP)EG@4U8DEH<$9@yCWXngkVuW$Wkfo>=N@^1u|PomuV{l3}kg(mGcUH_OU6(55Xs)j-A)j#HNALYqS zuRiQPNHQb>nd$?u;U7bGfchBHoH``T_ug=^zF9+SAy`&ZFA#AXp7JW@aaYcb1-C1; zO9k|z5v^N_c>^E+d+B{DwHx!J%04Em%S2JP$$gCDF~C3GSfMl;n-(M-)H^0j6c8u&~Obez-sZ5iRH` zf_-N?jFm7%t3bn=GXa*ufx_wlFu&K7rOY~4%4VF7SiIbwLPGtD}0{Oj({wBvTLvZY^K*sQb%*lqPtW$4F=fK-knZ zY996n6-eiK(YRa|d$;-_JIu+f{Kklj>)*~Mw-`3Tz%!#NmVWz<2WEo*iixBe*D5dc-)c>}Fo|n72(QYgC>imz zL~KQ3P8ata)LC!tD_nL#P*jMHPxKW;swe=BS?baI@ky)PEUGy}K=&>Au_h6>Q6a*Zy1 zF?Z%7L67zLL}P|Y*=N7|lS&~Ooc2zqG@!iYA;HV!o*Xd8Oyb0=+j(g8lFzil$J1^( zTHQm#>~yLLZL>4q-w=jBt|2J+Zz5QrEXrZ28Md1Ud9xiVanl0-2ZKd9ss``v20lkeL(QtE69V(HXGCpJ8tV(>Wl}QP>cQ^;lJ$5^BC%cQx>P2Wc5pk&L0f<_Jw;o!)RW3zuG33Z z%JJ8eC@Rj&$lt4!SCgtd9cFFZrTqD|qjBe@N9S)fox+ER`3yoGbSl{%#nYxqj&EID z_)Zue+?vL8@8HdsHFq8SmR|hj|AHnhDR*pbmIfBDes_g62+|JjN2QqZH|puC%VMfT z9?mXuS@*6pSi^pMpUlT-(&ai%^?!pB+0mxim$ zOfy0SRn|ibcO-Nf!K z!GUhRsa_+6s{2L5oYxA+{9@8Ewo*4RiL$}2Qp0uwY%H;m>K?Z4ywbA}3r1pUINlFb_ZpsBxdXHs9fXS-%{ze(SPBHGaYNn4}=7NWeXe zKvdhXh}@tT{bG@WLi&>hHu{mj!4(+$mbK)s^-U#fb|U}x{{=YS9PgHQIm_z=Pu((jtw9C?X_w8?cK2h&$sE)C#WLrz0Qz(v*$;9 zZSE~JzYpWReY}ywJRN0JI6!vw0AQii(&3~`aJf&o`;?ptOwY;KBxSnB6qY$(o%SW{ zm9LPy3o$jj1}7a_QAUI|b9WiLOK{2tSi(vq%g5zlVlo&A2%1AGbedm8!_EfqmFZYw z%2vgAfuITWIm>xWC0Yg_h`1qhd1!;?jW$VUis43im<(F+2rmK51$WSM5Rm6e0h!hf zdQ`vDJCy~SWFo&~ZH9%dxu8xZ5^3awrNWynj^pMnfo09j8Qx+bB5MEgeLf{^4WS7e zZJl$E5~8FY#Wa|vM2Sc~h)1^78Sr}5+jiVIGL>X4#r@eau_{Q6w&b1ugtVWKF8Mlk z4WYTub3U~ox+hIi>DBtF$sw$x%-o^j!rO>_aIOlqSg#M+br!dvzfGU;EK2YEpa1bS zjSt0>SXWlzRKniQuMEnxf_rw>6(lQ^9LX$VXf33Y9t@eXP84>n|C{*eq;f7U_}D8!3I+YMc9K4#c4Q zZ1jX|bDps-GV@DM6sKiA_Q8-tgL=h~274$umEsT6ggI;tqJiIBk$E)c@>)X6=b2O+ z@8pd;^&mV8NloBF(vk19?dv@~wVk5`Ljq%-UP0^2=2i#SB%E|Nl8`KYIBkmis9O#( z1pvP7W83i(*SmIVGizV3sV^0fvKHgy6*A>p__(b;)Cwg@JHA>qHa6y4o0?Q<0i5b@ zYhkg@Ntd!s^XJ8SZ!CTh)t&N}V3@fss|PAW!&g382KLmUN zO#+HEhJ_IGyjAjxIFYi45gvtik68zLa9Xo}dXLw~e6(Bt&m()04z}nvF?}c_AkrTj z;Aq(CBz_cA^jd=*-zky?vUF-)^^)KBt$b`L8Kye)E$%gTd-=|j3nHcLtZdbo9~99r z`01=yM?GrJs20tJeCSi^`fgN%6!R^?VJ+NewDX*1%`-RwS^p9v=8tM5$&m}GKsXia zQv$)E{Ru)1`bm$ws)y4Hv z6NKGt6Zn*Qd))#JhfCozRJ97qk;@l?Zk`LS2qwbHB_R0&xE~hXGqE!>LIWYGQ$&eKIa zvA<@hdU_(f2y+2P)-$dx4L-3@!mAWvyOU8m!)ZFH|Kp$Z$d`wh?yoxystNS@z0vgK z5&oTwN8Ey~31iSJuQ_$stMe)H4e~B04?AJ!q#~kVbUq0173jHpr8~0D@raCv&6#yi0?JAn6h&881ex}Cj6X96VcI0 z;vP1I7%@&K*If?egjyq|3>0%fO!%v9pXP>4lI;3WEKvxpAmFLRghh4K({>rusb|Ml z;U)e6dY@SaD1t>%4mV663PQY!_lANMCFp5JZ_IDYo9LYy)Ar3$0YGP^g(riv=T{xz zS!($xY{kL}bm(ajro9>Az3%fW(l68*w2^G(*9#S;p@_3y!riCQw z(9eWj8V^{bG z|KXp1b_*iymB_~gfWcHYw!;=uIw*3RET&|DbKPul=UfY87`5mhZA%7HpJi$`LE&AW z%ye4KVsqg?vu{6~j&Tnx=|5>v$6AO>LeZ+pd(xgogsn)trU_49#I)Ahv0xSUJ3;ah z6H^|92(xqE#`Q1%_cT!xenQW00K6otc14rPQC*q@IUM?@cyZ$b7svW>U5Uz+Uiu86 zUy*#<-*n#szfec$kyi}8WY8g`)6*cOEAl&MIp4Wk+y|+1I&4%g_EqAONFFDqmq{&NwV7kP9wpb}tnJ`xPjvs{#BMkDFJJ1m7!8Xa9tt1)yh zdkM$~R+B?|5{roR8+p+&Y(evhibe_k<-bc4A@h(g&H(Ti?1sf_G!Pl*kp?Zps+U7j zDr{0AVsxWq|E<8RTwfgYl$Y-qKwGls($I=EfNG-#n{YYBWrPE)?$D#zWyZ@&hHc%7 z8J|-Etk)kHd`rak2@_hvQ}dTJl|g#T0x4z+R$2s~ouwz~8ilcUsRS`6BE!ht=}I09 zP~pKUxS+C9h`_KZj*a%XT3&?H!oKe0HswANYr`TqgMyco^z8jPU=EwY7!xNrN=tfh zgQ;%L^Y9OsD;FfCK(LL}tNG_YEZA#UBQ?sc`?*>;60m2EC}HI+@AYipl`Buz0WC~yXcWyl>c;dDXlWkY>QNvD=!J%)qTDWxH%A+0lLB(zZ`K{ zb%Cw<;+$EM3cvI%N1-K%L2)0aQns|Ur4X9`)k~OygjGWktzhJzydh0}6yQ#H4`OUe+c+%wm^ylvYe3HCe;$0dz@LF^2 z;r|zbr;!bER)zDGE+4%5O}j^PG&b_IHA-3%EEL>%RA{Xo()gZwFAr}lZ?r;tGZ{Vg zB3A0`D`z}jxm44v__|OMHWZe$AawQ95uv>aaSTAX=;wsAN%r~qy8ac+5}8`8yReY2 zI~jMrP`krWDQj1SJXP~RGCZQ_vke$Rw4C=R6{_k8E(J}1lOsa=N(?Fe-S32bz6=!4 zMytq5!>_7EhEi)tdv0tSo{0u0JB_-+oGn;JcHcV*$V_Pq=6$x{{v$q9Q}Q57*{ov9 zwiu4YdL ze=6d2KgVSjdZ=8|2CHi#4^O87BqTqz6DH?$bnF7g==&Tlapm)vxV_0pI1DY!y*K4A zzfZL=eH@IIyrZg#;#bo@UX!1j1Y|$$;?rU7(`a>jXlE4-f2wU|A;I$Yq%~ps#Sr#y z{rA)Oe{j0(s0&U}aKQovd!UiCK7?*TaSXH){j+&3z31x;F@{5I9Sva@&5>*uX!`RD z3lBlqA8B@{f)5YdO2UniQ%8}Me86WuI{PD1ixmhj3EgZs&<%R$6WC2tAqaIdWQ@#f zpS?Y1Su3tc$ku$O7RmXQi>vf2llN2XRe$TF9F~Cj%g;{-qINkDHzD(UHn6WlDGUXo zsgwk9)K6)=qXqtNz@Pt8pZJ40c(@6xH~#$a5gIgc^mu-$TnP(s{H)xUSF=01LH0ZM zHY{@Mca59h>=O@{r&>iZber6Gsk>6ez4DT;W2DZ3xlRPGRVrqu*bJ7$I#Z)F)6S6V zipUx$xu50@E&4U4ryvMD;8kY8={j4-&vj2_&#Y3o!Jl+syih9<$=m zmg=HQSr>1=8KppMr#7NP(0}=F({PhA+H2QoU_Y#4VGa$%Xu2cvR2-+$`aSbLGFu^a zL;&RVo~2iongk6dofMncaK2_;=)fZ*>V???+}7j`3J|s+dX8(RFI{;vwMGjeQ0GYZ zs0R7AEnqg(oy+XyUq}%iW|gC4nw>&sBi`#Yh;S85^p(g^L+*Rjsah5S9YVPxUM?SA z+%hbmYf)^`MO3ue%a)vvKr^i6N{>t`pKf5vozzj={Q0j^fAmw1Vvhuo&T@l5!8(cl zN!9XZFf&)2Vc0^4$6{vtxhjEd`@U2j!%A`Msu1zW%KFdRCTPiT1XEg{ZKK6a=LqY2 z9=A9_pFZ!=lPR?CgF|BF2YyKLhf*25B zhmo{n>R?#Mf=~ht25b@WFe{J%QZZSO?@BV%cHa+aTAdk4hxP9Dio`!d{=1wgR(^KC zbbpPHaHr2ff*WFm`lsQGM^|K-IgV@1IL2Di{3}z!lp>$(x3}dXBX6465c^GO)N7{L zaX9t)af#2Z4s3;+WPQCHyjh#uN6S1%4GFlSBWP@X1p^GP|(rne+0vNz!e~U42){A3)}( znCD4op_QTr3Qp!r3P_Vg*g}nhh#lNDRGLerJZi7QSF_A&@-D0Q$691d3_v?N)-iud z%PrVqG|FN4g~WIbBMvsaekspED2nkpYTRqwK^yjDy(;Y|V?qQuVh^EK;6l3R`%Miv zg!#{(Y0qp*%S|z#wyfa%_b{@?aB}@>GvwJ@S5YUG6Hxa%{LIV8ZZTlVkEqfUfBC|n~(Iu)82faN4oRUnkcnNqr)RS zN-R>AACa4W4F6~%mDJH~ey}VBCL2>tPVhjIrNlPUg;)@7Rw^~OQUveAgo$-w&OOL< ze?}N=P{7mzR6v-Y^>#c0)O0a217l7b+@K6{&%y?i8m6MYa-2{RK(0O4p>nVyTZDA= zebQ~dn$!VItg!XC85j%w5Kc&Ky*+pJ@p(vIYwYn$;)VJ8>rO-07dn(V76dvq4dcb=|C|#JXY)d;=1y0$1v@ztJgg44!u%Ir@D?^UY$g zaD?yL3bLO_{M&yGWfn}$corv#-c0i7flm5F2k1~|2HvHhXSD~P z9FgEC&c47z2z2l}$Pe9Q4;wcxQ%+|c>&H^db-)ibF^2CjOJZdGn) z-(L#-()FhG$$u06m*~6KO2fu>^k3C^0Tktx3;v4cfjS+`?Ue&$^3w*zRNPC9(d^^r z&-9)e#XRrhoR*7H0nZq0DX3VNQd{;G7t&1;dNM2x3Id^ zphI<2Y9bzw6Y_n^V)=k;KzOhKi-y+15~}9~Ko~w@IwDH}fhlv>qB=$AKrN4;K_HsF zu2%2|^w&e>;RMYT&84#MBVtHUCtzo*{WXp-@bQGznZeOlK==sziyOnHC4&zKvlu^u zLetf1@s5({aA^4V{6*8of?yV8H%vXh{RkK6JS`26=9Vy;qWWVpoX5?%#2%R^o{GL! zx+7#M0iOxpBIk-jcl=nXQU16l!d^@SKp>oBn_Pd4#~v?FnhLJ@ah2GBJW-*PduB{m z@n;mvA-iK-hXhAZ1}%@mFoX&p^4p^IngLN=!A+#G13z;m@W&m^t+4 zJgFu`SBwuw!8&}TdFY& zs;mE`JqSQSU>j)!H1%ZLBCDmjjFl5k9)yik(`3~x%*o1A{S93Sb@Ya?0=Ynh*pYNEJ1Rzb|`r`0bS7uQsJ zhFq9X$XQJi{7T!IQB}Q><6luAy@>p+%}*G{3QUz!yv!MBSwr@Q;C_Wyg4>%}AAFNs z0djF6eOpo$9^{tSdrMx!^TISbd|)hNC5G%oCg%JXSy0-a8T_AyYvj{`*4+W%1);u> zOP4tfqcSCI>qi_8mY8=XZ$&&{#qM~gmwE`Vc8&T*{Q5bttP-_h>4WbtW%h&?#f4Tp zF1QBT6?lcQy``aWG99+#Y3f=e(t>m5s^mi;6mn7~IL^hap?#7d1cYUZZ(XqFY1RBv zm`0NPU;c;shgt5Fzw;LkTKPvs)#rs9oW+fiKw2d`s2~yS^&A_!&G~g#?n*if zf63}{l6f8m(KXjLi=7eSxTTR}VTLVID0hb7FjNI0$OoNCzPqRJJ%7lG&yOkoUXfw< zoxiF4&GmHH2gbSdpm^8QOeF6n*?l5IvPRY>Zn8jd zbPw-S9K)y@u~;qFq|Rl!E9n#e^8Z0Y-{m(652#3f&z4{R9mEZ{sTj_J7P%z^QvI|* z-A3CVoohKb$6(wj&)pK5iTNN*#o>3(1RFP%Z;4 z2;vzsY?C&>E(-@8GkPeoP%^AvXO#nh(jOq3T4=G|VxtQkx+%QsL+f~N@>NR>dl*r{ zeiaT));39!<26-77u9W)`SX*E+})7hQYsZL(&uAZF0GuL_@VPDjTY_nVXavyeNil} zNkbuPG1#jWoww_X-m>33Z5Ny($0l7JZ^K*+%bjc)ng)`IQDJk|chuO2 zuB84a6a@{={DELN%yAcliEdD&HERgzLM>TRgU~%~i*{m{9PHi&c0LSAA1c@W%tuNs zQxegtK@e-f2@83gie^kN&|`=D4*EME4g+xWibIV;|MLGxJAvcyf6%FXC!hT~u`-CR z<)D{|s3RpSLO8)yN?ifcSt;CC!K`7vHuE)Rf+AGrex zr8P^*DOhC8%zMbn#g6Ne29lyEbusmnI=amwok(;*nY)jA`UR8BliD~p{Dpc*A4!M*O)UoV{o!O-MgWmto3C<9WMJgBjnw!d{>oc&l_FR@8sZ4u2$$a zKN&HIJkv#+SQ}nJgU84wcnzJkS!60M;F^0fq%mytI+)}B`&H+)s*Mw8>(%s)MgQ{u z2CPo<8X>|A!Be<~`QOJqOoYVTr%gsI;(`BQ^Mq85kH3i*B09a>Pjuq}QTrM=w?~VK(pT%bnuxv3(7loUb zuqiqt5@pQELRL8B%)H{VxgD~YIpj~Il_xO}xC^UYF&xYY;)b0njA;tY+mC8;sO+ai zk7yA!cZXkz{Os-On3D9H0+yUmuS@n{c_HGyM!xS%D(#%{kL+ek(#mYZ2vJQRnUyVO z)|iCfQ$mbdgS7KJy1Ni!+Ws?7Ip7uK5(is)MA{ug;!O4T@9L1{O6o{mSi)P2CS!9z zO+RCF%V6UReC9ju{S4m>?d>{FZciqB$-2#RW81W{_^@jsouvX z3$N6jFiUb4ejv6MVa|nucXEp?dd{)!>kX}%MLV3|oikURdGcfT^Ih4tGR7TSFXvH% zFti;F9}FHoflx;XLVmXOHdzY##z?PPaZgbe=!yC|49DQ#&+v`O4%9oc%Ypqb{dV@H z&$O34af)8faDjfQAD+T-AI+hR%jvVr-Uo)>&@{9bTuHC>8YpZk)DRr80}uRX#Sooo zs(In0I6tPMm)3I`Lt+=4;_h}`qI^jd`L`g`JcjYfAS+>q{D@@3QP<`&5UV>aZe-V_ z9T+Hdkm)gX9(!oLdLtN~FpnopQJQG%6ahYnLKNEh!PWQ$>R=Snod*U@qLCCtc#?c+ z;@YJ3Y9tQKFa*(wntYt5%UD_}CqalCgiv%e*GHSmu~gif?${8V!73mNP)91BODbKP ziKpb^Z%B_jR|guFq@O<$__3iuh({Xh^}qiA4iH}9u?P$}n95|oy?40(1PI!zhcP8I z^-42!XGub;3#a4`l3wFB*|S00RsqM^(UtScm2+NZBV;+92u1dU4jxoipeS^lFC#E2 zFYr{_YmpO{t%BobpmZy~@kvF?hPDSfx$-B#jp;q(L-|n4oH7?z!i`z1WVjk}eyCY4-~0 z=Fw5_crNqPwQ^Rj+(`d8B-&53zF1s6*3vbrwg)F|gbe0Cn0V40Y6dVWTa&69KKItq z6$e2*vUhX9;6=G_PYVMgsL`#RW!X9nZ;ijZ-TLABOSm+Ho*94XZ~Y$tir?h$n06XC z2>VvFkOugZ37pxi#N&My0wUU7UvoNFSGV9AZpUys8P&Xm^}FOpc#$2GzUMCDX(39S z55>>ksJaqq)f~_p)&k0<)V;mYW2YlcA)kMKSHm*oj!3a&JYEp8tu{YiWhXMGOcA+K ziz+!b`D2b1KB~R#(J-7|_$ahlkP%iYym>e&aWOyU>Eisb!h6k$lisuT^h5;s73CX& zXgUybT~cV(U_ABf2ni)O`D@&=tB4IB$aSA<}YKRx&m~D5O8Eq16 z9x3*he;*BA#&uzf@$hy7?)72+M*~B0j>#wq`h747otu@+96%(@_o@g>Ux=8%;=nT&ZYT3C^b2vFH5Z7st(6OP=x&1>NhtBSkO? zv~T|GEqpt-fd7 z8`}xsoW%W6f*zUxL0w4~iORJ{i?pSTJ#n^U%7TCBh)62Ml{<%uB@Ou|{!9T))SPu8 z24Fh9UVESRENeatV6BXZ7?i;05#&xpKg5e!mebQlko8Og`5WY)0sku=12tKx`0ElZTP(0<7F|2nx7V~=k!!a zGr{&k3VxPw?0}7Dapk2l@)%}2W1|n@y0p;519hq78L3*va?J#dYl*fZ0Dbm6zJ_bs^)d~ zrwl~j!Ezp=Sod-81Z-BF@YKV$S3(yt2PVStA`)lM$SNlZ0ylo-!|;MJVhUY8-v=|Z zY>%1!IjSd*&YjrA&}V9LHIbz0OidT`Y*nfVwS3`cnApOT^agDK^zX3H)%mRW|$R3{ono*;L+wzIb4{vuH&{HD!*_ea{`H9 zOie#WyPKEU!|_rU0&e*x=fh%-SqVk2NxVCcTv>FLMw2}`fUrQ{e7Iz03CW*F_eE-;-*&5nuPu92 z%n3_S9jccd;qq2{(jL9qRQ;x?$5q+RB7WxJda%uOC|1xEfLQCJTOI3D2~mm;4cXoM z3b7?$6?yS~QfF|yM@1i8UyIFkpWIW&Sg$p-c^;eY+fYQo+=C2+(jm$DlHOS=vseqICtR*Nb7TgT*UZL^l>mO%?N|d5!Oe1M*73|IikvEb z5pZa_(BOZeDyk`xVgdXfPi*+j`{T`u-uPXzdtKL_>->y{G+gm(m-f9)Y;7^2nl3M7 z*3V-U0QF)6MtYD+61Rze3egti+0bq5DB~tDEO+y!I#m^}^Jvaw<~xe#_D+Z2;5aW(iEe6VM^sU?*Q&C8jJ-5QLe<#5rV z=`}-9CPO_9LY_+qhgXbUMp6#$Fv$C=%c8lx7ZS@za#c*JWAjtYRNZ5^&%Syq;U6FX zBN>M&P6Y(WW{mnhZXdp>onkIchCdFCkDF+KYE`2xR~nBAS36ITA)3%jp#JwnBf zJeqYbxa_&3n&&8?3s zT!__je^i}(ww8>i3-$S+v3nEhyl-m-=K{-v4)Dp3DEQ2cmLhC-9^U zfCLS4(k2Iz9sGYJB_W!@MVV8XmbW!o2#I$cU**NT42ec6Z?L@Fp$efM8oobD8R>9t zw1g~_v#Br2h-ZlHgiM;zM?00e4_5o5z}faBN$&Y%^%zXhO%cx=ZFpG>afZd@)H zgu+PWKK33-rsE_ja5{9_;3`rf{559MV*C+YA|_b{Nzm0&Lclp^#DpY)hW>1`KmiVn z?tmY5?V3#k49Rjf4K7{i4G*-b!#o(bj?tp1NKO$B%zGF#Apr>xKX^$}Gr5{T5E>fh z;N(J()Fe5xz|f??e7~~r?;!<=X`~$=-c&9~l5Jd6G7U%D_|%;k^yk3Y#@A;pB{h(n zpJ4U+&+o2@b0L(COnGjR-H(>@01RaR+eIR%rBdVUx6<%;@^&VEF>{UCk|*64e0v?P z5A$soxXRzyFdi44eouF1>9PmqUuGm6O=@WdYtUUuZz8*d2j7k{94a=iu*Jjg@kZ>juGVUZb18c<7=wE|I?rU zp~-)cQ7@YVz}nUCjz;r%dlX@GGJk#r*Le*fk2(e4i)9L3@9jRcn$Ynci+E+a|;;J;f7Y5_a8U*@+ z*9E-j{i(981tAo!gc1>}AHe)X@cOB)h+QGj5&wy7u z%Q7EqgmUW=PTco=H&lLiPWpX93L0$SN!@;HSTR_uH&kcmtU&T$@1n#L5xTrfHN z8CLsEl`&HYpGb=`3L?vpkR~GA*Jji}+?zcXePSSc zZkEMy`Uwpy5oTt|4=6VALz)oo$_v;u9tVfN{NDp^H+f7M0ft%EtKYQ!ZuC$<=yHdE zrCo?%e=`Xnz|q&)C|pnRnT=83?lU6glAf*P@QD!VVV(Go10n;0=$zKFAO6>Xo=KZu zpYI-d;2*Q|pLov8H`TGQ!r{2}vU&Toa6^*}PJRUNCEOKsIE_$vP3Or8ty6J0@!MM65$#wX?Gyw)H3c#8WH5?q% zlQiz|v%?BB z8W!JCEu;3{flbqg80MW}A){h}4wT=Ai}qmIcCzLy*I2cydf>4WsLW~UGXolLrlq4* zit~K|AS7huEvEL}h03=6(Cwyo5lT9@G2i9&>fk~J)Nv8May2!n2PrbIRyiQnmg?5F z!-Pgk=Iz>D_deb55IMHQiCJM`NeWLo{$U4fP#royZFBx;BBq`lP#i^Y0^fZ{k&d1Aa)AmgLL2hU-u zh#=Bwx|OSdP1b^LblN=?3Pp17GYX_S%M%8JObQB4xpU{wcrhD?ZR!l{hsN8b3dzQy zIl*sAkdckZ&8X3*NH@Xl$;*bz_1sN~mFDC636DHDD>s{R=>7AcP}=>Qa2O39)L zONr(-)+a)ziT+}zI3TjE>Y{{v4$|bTOV$G(6-kFAG-mN;YB;_8JbX$H;S6BkZ%y%D zZIJdwTNc7QTD>C;XHEJ?5CTq$m)A>C-$7$%;W?%f^41RrC*1k2)e4>Z@L9kf0!VSW z6NXiA$$R9vZABGQ=`rwsHP9iwqX}vp3li7TevED;a_R2WB-jYrq?LsxuIU>s+iVYL zhgIg6+RlgM84x^~6K_mN2~Ho@;hp-rmD{e)PN5^M`RXrs-gj0F8%J3ZiacLMN_=WXwlrMkGKIrXzO`Q zPkqU!v~jqY1hO8zxHquThBu3)uz82Rm_lR#SX1njm1A&8*_1*g456_0Uc0Vbz}*tP zox~EB6tMMTh37?f)Pb4lN!!)x793K+ zgS>X;Eadm`Guy5OP3^9l%65hSa^On5{FGdgTTh~2w46&gcP=hWTy{`Jf;+Ir_lLql z%iL&|obwl5QdaYJrUW^0Lb2+uYrd7@6nx3I_0KPXE_KbEhWwHI(6ypVHgghSxxKa5 zk|*!~eEIX&8ILA^6+djqRYoT8m;Wc4Xg$9+*WvyX%YGBUxPLg2*sfQfQk1F!-b^6g z+k(FQGDGQU>V|Djk^I&WbD zC!Y^qEO}gO@MaWd=_65KB2WR0O)@Em#=0a`aSmc$o1UC?`GSUst!J<6btY?pdzIXm zd93pN8dN4gi8X|P2jaaXB_WCybC@n|S44_CA$v5G2(Yk{S2;`{R?F&%9j$(&2$pa8)0x{9>!>0nRp@b7tgh3QEL2@Q5{vqw#J$eh+kyO67Qr%h|GauQ zm_N7idEih+yuGhSl~FgL&W$M?3H~U1ByfNBQ_Ia~u*>iDF!i)+tjmO+${#0fTb_H3 z+x%;2bD8+afm;Cv3QeshZt~?KljY1s5I!AU6IrQHMZAD-GV1{s(;>6V_XRo1&c}`` z$rfa_Y^_s{=a@1&K6HZ|TU)eB`*65FcyW{Zjl0kc`S&irN=GFxDbdAtwk;&TF zSd)NRP!UWZVPQu-wJ8HiBnxa$#0z15283@6s9*NB`^PeJxt4w^eY=DHyrrxK@Bsh; zP=~mBLDy#KW23%G|5^UIy3~MHK zdU*e)Oh|tYAn=|2hNFxLAi+gZ4DVXKZqkB1;vY`nEYc470Tau-I3)z@CkBH|1{Eys zsbm763{DQ4jpac^IjLiIblV6yR%Zkmtyi6G*-85SasRxdk$t?4Pgn{V82qiE5L z98DceUcc58I?)%D5T+o^U??Oi2!7u3ui9P{+hLfCx5%P@YdqyHi?>C_c^G)(i-LTk zZA+7Pe2Ym-Ir?>WJ+&wb^zL|+*F^H=5H;b#=K0WV^)m)`1ya?%k;O)bVV6878uQ`> z6b8(+rs-~t3$IPM&S<|3HQZG@S9Wmew7w;?JOX1Qma@wVn;3(5k>>|7Zy1=+WEjrq z3lzo&_)j+0jA?xuw9V-mft{t5WmQ~OK>uh+Yn~PW&>^{pr;1`QpR1noa@<2Pp&}UR zbkl$hlKFC! zRG_Le8e4E(%@k`5pNzSIzziMVb?!Q!^+k|x9dN@*QpWn20z{~>kTFbL> ze|)WV?_CcVg#m~0V@mADiPg%o0xQqb|F8Zfw0U%U{snlR*M;2D?f?fjoTxo`&RnRv z^YCX!Q%j4Cz(_mU6MSTz)==W%BJQoYXbR^OcbzBTGLksWm&iWpY14;M^!`xrJ?J?d zX*Pf=gOn{KHuAFIAVxaNXM(7ALl|>-ACj^-A%DJ(!GkGRTzBS3V)RgcRLHVoLJCzd zSo?U7!qTgqL}IkSy7RKS!u;qc-?%*?fhWl_)<}(?pu@Mc+o@H*D9aH+B`WrlwVh58~i*l=g7H)7Aid`qmYh6TP0Ta=$1UzWD5Cj(tYy+xck3*6dK!yStg`zglriuWCFC*O??PEivdhYc>1VV^;VFN$ttY}#a< z&Q9uxQbwtTEW*%vXv_>Y)6rLsm_tk^&qe{fD%5me6WXi4{O{7Fz2y}8b7&AF*~X)X z{%d~-FQ+aBG+$uSP*jH2cPrQHFD>WbM9fGG69-2hh-3wU1F=4$f!dZSP#)u88MhN! z9fdxoS~8o`FwKH)QJluv%^(r&nmuRKkRZCRY~T}(EBE4J(c{Xjwg)yb{vU|!uew@w z->uRR*P?T6!e83hs)y9lT6i9y{dZo>3u6cyOE3unC{W?R^3>O{U_0&q{`|RPu?b1P z*?;=apZ2f0NSejf4@w?H02ub22piWP8W()>^JUEQoNc%5-c7CBcRZb}g^QkL8l3vs z=lmt_E4ZV@Z-~m^^mS*ro-`;_w8kZ=`p0W(KE#3hj+V|KLz zWUY%*r7MU)X)aPKU1~5Bybw{01DfoqV$m+D?ZRVmG*Cf_Ib)=MX)>Bx8X{&(wl(a^ z6Bm&z+Qbrx<4Z&>ubGmFK(FbLCrd=yGnZo_)mE9=4Wjl@>RQioZjSOpwvGgqA68Bed60WVY$UxZWI`%w2W9Nmc=y#-RgiHk``zOe zuk!rqQit{WCqk6cv}?CgqFi!09~H~zsdD~5#@_oa>GqBPe=!9_ML@-o0ixmz6iv+v zH_mWmt_t@`)6CK)D(;b6T;)zpOUs63-MDAvPD{I8SvECo*X@_ypC7)*=eN&)!0|lJ z*U5FA*YkWnJVeRPSx)8>gxFHXhxFIwmdl^bb$+I|%F4z77F>3kBU1{dCEZh5({Vr# z8^?YFE0a*JeJeib`-nkQ%pDAQTXs3d`&uH{2FY2dr*JpzZ* zYK0^(qo3dR5`q)^uev+j*z1-xaPvssz{Hn=hc|KQ;MTV~$%_H^4wW?_T3be#ltbu) zA%0HrQ!>hWmn|kg|HH}}m3=1cS~KcM&YkC-vE1ypKGyJ>u^tQ5QCG^cWr2>j2CgZ4&`aPE`bycW zS+DL+qbTJ0)o=|lFLmJ1-J7m5PWKQ(h!q)!2m1=#>AnS#Nbav8j4e~yibK3 z4@-i82^1(siI!5aKUS%wyO4yodj(m)&@b(o z{mLu5f8w78I{#aod74B&8?>x%rs$Cczoq+yI6W36c9}_aK78H2{vE@VIsnVtlQEJ4 z2J_HxupAr?IMOrag3tL;Oa@>{DvV-*7sX3TgwMu?yJquBd{j*8(S0@|1n47}1V2a) zgW9#|CMC1j@M(KPV8AgD5DVfjefwMg{{oV-qV`)~0WlFu?F3zzfAt#+5(QUMAX!#H;~@; zDq==c7FPSVH?%cr8D~>u>OQaeaDK+0d?lwT zaH}E6$*BO%;9?5_W~@^M5YxyXRfYCgsc4|lR`?JEz_)6;mMOGrI^J9KVk{@rQK zg3FG~CN~Gu56waphWk>0sP9*qw683T{1Lsu!0G5cUvaS^R>~TYHLHR;>xSMtw)al_ zD*TDi{(SBBkhFPE)lk8WYo-XrRk;zzy@%DZb3jy>F>|VlTSK;UHHdeeLUy7|?l{fm zwC>DnIHWTjr-}8>qVL#UUb|2%^UQ3z@!W@_WIcvM`H{0_m+WP3%46%a*Si#6PyQJf>H7$_$1Eyl&aAKtN19=l5*OeFtqASvx8JkTKuAE1ksqN z?k@-Lh5m2-%Sip~%!F*-WL#te%YopUNwMVVqKI{kzz!m9vSeYDEFDWlP>S*i4wS{=E-6znOdZ z+WPuE`=)gm2pziDZXIJHZNyxMeUg#=RR`^BR9Qn~yx7AXpg*zR-I1(&dlzG_(6INb z;%U189GVCgGj+`(Bs?iNk3Ns#3JlZYexz_%H=BGT2E2hLAO1{eE63Lf9TevmK#=pr zJn})*`4SeuN_K0_b{KcDth5o27&KDN?gku@0+H@969p}c^sX-xJDI`IOG3UuDz{U( z6PysQ;{^xb*njbl@Yo*pxBfqH#rGm(x3;)@2WyrSbVmWODMi^>=i~Oz5dU>15phZ< zt~(E+qOY`Xak$`<`_=hJM_;wOMk_}h*lPUK|MCk3HNUel;9;iH%E;nO82#{-lUEAo zJ6QP}aoMwogp%cJHH z{m}v5)ufD;L}{L5qHRj8bO*j=L>fGL#% zCbR9bgw8AFyoWS%WsQ8j&HDZ)0JAlfge}eh{$~@~6N%E7jV1 zTE|NKp4+MNqiy8HgU;x^AUyc^Z+*Y%r-TL4?5p|3m-?->fS&}UWkq=@UJ}#s;lW_^ z>83q}pVZ>TcUe@oVk-9AUX#sYUqyEx;k}}+jeg(ff7C9E=(#i0mbGl3czYlLSEDUg z1zw3L!k#EM#Yw!FtUM#D#LLg^$>};EHI%QHsOi9?M$~f}_}NRpJu^x7Ra9+#_^oO; z_nHh5D7Q~)Tck(K5AM5Mc}-Wo&ZyR<&FBE05>u^0~*_Lo$vSDi9s*8bKgn5wjU}6&IWAKK{Rk0n#oD+f1gicM>aEdH3jVLe6 zG4Pg@Od9e|UZ<}3w*`>Z26B?pFa-QDzlog7nSEKwvKV1rpD7^lnHqTQT88XbMQ1JD^>ix0sT45%L1tBX1IuCEQ0F%u<&{4SPqGeF&wbL7pmgRBJwG}6 zAJ46-bRbqv#Se2B93)5n4wux?CY?*vCA(ypQEE~&EqXps9=;rhx2Htq`?7x-9a#II zzUCYj_-NwIHC(@Iu)U@9z(&RW=-S3(fx$_Zo&-RE@}ov6Nv8GVy>o7ot<)$=7NuYR z=l|U1s_#(MlD!Uq_g1P$3HN`^a3l3~`6f#7d2&(J3SrL8RGua(TZQ#4R0u}iRf|D( zgErWH5KK0gYvk&tFD}xfhH@o!QNH74waqo{MzJ*C#^XDhd&T=~4yzXqQ9Pmcd{oWG z>S%4%*Snvt-(lERP)+GFTKfz&0JfZyg9kC!cy+@BoU>mUe6EDE_t5c;!I#*|3U~I2nXgfWB3W{)CJTsu;@G*siO~_LzcWc6-NoNokx?u%{8JFT)5iB~~($-Kj zREs}X;)4oND~=p|`2SlYZ2Xq(xV-gA%G;_OQP=#&0AFQty`FV?PZ}XI7s~zQOda-q zV>-(=i}+;KkfPfQ3Hn_t7ePNHHXh@A5Le8>BaA4NF-75tGbp2l2yOz^Sk&6H!zGN3 z%?)KssYC^FT0>^`XoF*CQgqIoOTc^n_-YR7f(+?ELM=!&p&$Ekw~e@3JYuyxHK7T< zKyll^)Bo0g4_87>%<=U@BC@tpYpYvjPxVL(9+z3IYn619kgH^F&vf*yJCBlz6PFXL zKn~|1EMWG6h_;S{G7V1u*nvKIPx+pF5_L^IyKSKN^*C-B$GlU#y~Nw{(LB;y;M zJ@LbDT+=VnmCw>3c$a9RUb$}-J(r83m6*4C)LQOL98{0JT<`s+%6X*5-L-4yP`68B zQMD9W?*L`Zn{|1m;sM4&3Ia>2T^Ho-CGy}$eAGcJmx4UF`Q#w~28(Lg(>UnBlFt{2 z^a%o<8BhS!4R|Fo6O$QOpW!{+Q7F9`hutH892ACyNJvF^eg^(;8{5mOWp+~oP%+t!4Af&I>{@PUNVdQU})1s^0x z($qTDPC9-xs2R83sc_o*lY`1g8x#n%t97oRZvlv#Nr8lX2oV5G#B1&6POdvA=x5H* zi0fQ$_QI(ge!nHaDpoTGlb*i*tN%7vE>g@SaM?9}PMH7vdw=%POFKlo%~WApgt-=5 zv+IGZFJp`+ZO0GjGrhi*(T_Xv$vy;Z%I(C>nE4^;+l*R=a$VvP%`VNiwk5_Bx$oM( zd%bYG`RSF99%9g=Gzb7d;sSvCl>04JGqK{eigk(aSYWdof_XsvU(q>Z`G2B zBS@`StvI8VC&|aLTCL+@1R|B_^|U;r88ayXc0}J^=^jKA*dyYZ?taf@MxNBaqd%Q6 z?yO8S8L7B8m}wI5nmgy0wn}CMQ@T`cX)6k^UH5|1(@JaAs&wO=4(Pa?^^0IlWoBZs zzucGbN$E4ms`x%`;;@IhJeff#o6Z4UMQs7lYYB07HGnm1I?F6W&IaL* zYyt%EBTn8#En`6^aj1g#i`XcS08bN%3pepnzGW4`f4`zAzNO?S^pO88epBnZ@uy#dm_7 zVNijI)Jl)S?#P2gX8`?-ekncVRH}OW*96(Ic%-Ezop0brJD@0Kye7zcOmo>+OsRS{(T=Po6hM)*fFiDaV;o}w3%`JjD*)rODXNlAF>X?#@ zliqa9`|hrU9VzjG2{@O%b&^u0_Hh!aYQ*!*xRr}9x~M92%d z^3O{Fr{3uNyHCl}m`c5KVs(|*Fj_ZsP>kgFMa3(-EuOF!PI^LF9j|EpTmP*9`Ju9| zY!(1^B-KCQuLIIo*T#qNOXAjj1}}`vi8j~;d~fq&-@Yd##yH>W$<6OhxJ`aD{Kth| z@58gUesrA5jd~t@e)&%2`py{o2J7a&=c%37bNeFX z{k}36dU(-MJX5jj%~2(W39Sa2b|;TLevpEsILe)?c2PO?1Xo^1Yko9%HPKwGgNH52`?t(rQ`y+dQa}(vW-=LA1+@Q z`+OL6Z+7zT#rv{hZd;5`wo7#P=${je@gk|-^ZBT`y0+#OZteTp-)@0gCo4DT8MeDX zyp)wh6VoE^TVPHUxG=#@JhvcT?&OUM?Q2>Ck4rxf6WIP? z4Q5K-(vC1~n{FPNo&c&t_A0%<7eq!%L^)$;@Cx}XL}fe#D6ynY+v)9u;KhOS!W2i&y;naXCMvmb~ zMEp#QQ#n7|GB{S?7hTfLBtd%2IU*=o2t1cfM^(~%p*AB%6LJfST*leVm(DIhV?138 z>*6>#0osp`t&u~kyCH(ai(3(M_M`3_>d~ERH1Vs?vdB( zsFAJQN_3+6%@!QDG71IM)2QYcd^h?CoBi%2*4O~)zs(NuV0ClXXJ49~*JCAl*jBo%0^F07M33OslBrZOT zrt6F)((=q`W^#&p5x%k}IvY98xTC?l85kRa8fD1(v4g>o_J}3=+jC}pU7C&Wf)$>2 z{3fw`^L(QI%_wIp+WOLOIh32h+_O}4A7$-g{8Rwz=Sl0j+~;9~eIe4pnMlen_|@uWgp=)?3GE`|tD8dU7y5Jis(6}J;UPjSwo`9J($ zOqAZ%JN?P#=EIF^E(drvlt1>PLP+TILbDL1-7;-MRpRE@o@44Ris222EE{m{fGb}+ zO%*{ltvHkM7>b|>DOGrmcc(I_*#u?9p%o6H+EmE5-8A2J%Gpiyg5yVx2iTl|jO_bt zV>10hmJ)An54FfvZ?Co7?IYKvnw*{-R=OASSAPdCE>gro;TV8COI$yfNBl4Objqo* zHW$#!&`r?-O4;eNVE#AHNQb{t8QPY7z3rD);*pEN#F!@cmR*!6 z=LTyGpoeB6s{r6S?B-(!^|j}o#H1vbKFk0DK3D$Q2&UC~E~!zjss)FnO36j*ux#E- zq4M`!Gg3p}d7pWosS_)9z{}>Vvz8vh^4O~8Sz}#YT@A|_5Refm-31zc_wRmVV{dYI zVsCD)NkCbS88e2Gx=}Vk9f&(PS6%GXZh4hBdSsW&O=Oyb{9!XI<;F4kiGzifY98)> z4O+UQ{ueinpPH`pMp69QUND-M#&~)3QOSEH0i)l_#PZ~`n$whL-sY-w|IdGt#KjgM zZR$9)$Zk^eK7KYF0KkCU3{C!-hz8)Tn@@mBo7a>xBTh23jkRjxnC+`_Nc2Bo?x!WC z8XIg6v-iFB(ig24zTmj(pTVkImExkQfd%n6sLImRF}nuo+_JkX%p^cToMYju;G^ra z@Xl<9hI1{SK&zGPT54PxD2|!! zM&t-gMl$>?iF+@TEg7AVaCNzZH1Y1^s`N9y2_Vz!vv7Amp*s1jGKU9J! z+NROY)02d>r*}q0x`;WsM}@pYh~UM3WO`cKM0C@>fz3MY3 z?}AgR|9Agt2S`Ze-NnNEpQFP3D(d8&z8^81)pU zz#Kmm7t$Bvng2OCzwj0#;`+g`o??oWdEoT*z3gbH7OiwSEm`y6S*^XN=TEp+2cvRL z{M3$koKHHy3BKC-F7#M)ojUx+0Xlep#@^|ed^wf6V>f9N1N?b{4b2?X?n;#GOS|oy zui#%noy@fyf7{N*?&x``)J%Y-g?LgD+-e7$?*1v=eFNeVibTIt|NbuRStYHzS#LKk zrk_Qz(TvH?jy9V;48>FpmE13mw~e8_gwmc z*Vek)(NEIt{~b-uZqvBmDvK4XDv{qz2jKNB|fE?qM1Tv(N>4$XTy0_FApag(%&DJ*Wh!*Oz+SI>t3RH+P^ z7IGXrq1Y2}BTlg1q6q8GpT=9C8`J)mzj_(KNs5^!c^iU=6|~>pX;=BM@q^fgXO7_E z1p$+1>n?ZLAghW^vBf&XfS4X&{5AFe?#e=thbB96kYlZs;u>Q(rZI0x= z6P0i|Y@<_IIo_*)744$D^~y;tJ@@w$vjdC(@%RO`H^I~X8d9&)hA!8gd~)S#Ncp_? zHED=vGnvxupZ3ISloOzq6qBYSgjy-&(Q@(T@;*a z(v8d>8VgpmjL)byw$vxWQ3)v`cA1ENC@i(lRxIdVmsdu;Cf4$A|6c~iQ(?An&MfLr z<<;>k*?{-5dW);i7xLg>aZ<#BYQ1!t7D8Ixb9cK zw0dvsnp!wgeisq%?=xrSE>CN_f2Z-IM&)konVm%o=l4qWnl}ywIz=*pIP>#b1!U`n8{ZMHB+lWw7?+#@;r@&vvvCwh_#VF=!Omk8=AR6&N~r zvHh?9AGu2QN-D+WT+la?#(us47#QDgnZ3A2G)7c}B%$8bajJZQo_;TrJ7W)sqass8 z0R>paJSaojXPRLpt9w*h_iq8pAC%vh;aW=LD z=~Z3(m@R#W1iF~6Ia3K8atXCCoGQCtU$z`?YS0!6T_47Dk#c@5_$e{nh}=u@lnRul zW*e?lv+%K|h|Kp}8W{%6DI(|&CV$9Wm11FlMf(kg}Z||5LhBbMVJ;`xa8NnZ}-pN^5lcts5GpkL5M; z17(i~dK!?gVJzcoE$c!){?=~|@K_j=@lB~hy{wt+FbJBQ-r*{DD+zVvRKRm3VLRj& z$Zu)pRsz@cW<)vliR^%gzxqGpVh=-XlZ%&)QF-ajK;QBs2crQ8?r1+SGRG*swH zVs+~D1Oe#a*IR~9LeyVeN`%OjE$E*tGsWaYIceY$nO35{6HvSNe%L8@iqrezN>*>A zv5sV*FY%&i3K1(u9oMfwa|6bCv>YV|7Np~;vK5J7o)OkC<^L0!kpr+4I!?t6zzcH- z0wq`iRXV%S#Pg7MM8)_POmlU&8rG#I1;K4Q!U#pt4S;Kk>}=7NqzZNxpNJ|iruBV% zNI8(uI2&dQA=F6n6{tG1SRoUoi9)VF6PF#PuR;Y^=2J|bdybBakxuM>EP4N^ zZ3Y~de=i+XE6%W|Q2*O!GyZj#b>vXCTB(=v0o>K^Rx620qi zV#=#M*{vT3N$ASyMUZ+{$*QMCW!c>K{tL)AC>AK9a~%G6%Ii&b*4@166%4 zwZ4z{)&sZkfv{<>^xhp(hflVr)wpA;Yz0?>{@o)V&~oOHA~+6_jJ~gi8Y)!8HV;dU zCM&T+rTptrrw(m8`h5MD_vp~btM@D_oHl*sUXO=|9}T4&E2?LU8C01V_`K2H#Vpw3MhU^qB9b#-Vp#V1id z8H!nXz$W9QQF5m4@oPivNkQfT5Lh82-`HqBUu*DWr$u3A`UB$X$cL<};u(MS{{Z0W zVuxNo)a?dHbsI%X#a!1?^^)+oJl2HWI>x)Zx}olE-|-(Euiwf^hZ&w4t~d&MqmuteHPB;6h5lY5DnA;P@h}kNj!O{KBA^*o_922#eNAoW7 zq8*x%ek0?cMA7hZbnk!(gbMW|Rs?gH=vrGKg@JBAUY=QzshMfnlc+N|K3IfC!g<1%RvWK?_CR1Ewy*_M5*} zxxXXGVox^lo7uH^=5Wr}YKI8?ixoyL!X+sSQ5&^*Xa0&=#O9-4v^%XbajUOnkir2h z$zAo@$nfcjR&|1EWnP=hI@0R9@fA*Vx zReZ+~u_lW;xZm7R;^MO9w_<4(V$lTV|t258Ph3Vw)!wTciHRui>*dI6&Q3`o605S!@(SjT}XmPVoNHQif!S_LOj-4h%4=N$4Wn7kxAvJKp+;rx%$&P_?fm*;ZhaH!FNW{^5vXd4`MqhV_2#vGnmEMBX z^R~Bt9p#qFt0&*oK6>nY4<8B`IHgqVbT#Q1kz8B{`r94OyUuh3oX__NNL58g69mpc*WK)M*(sOLtKoqwzdRJf%gXJd)=V; zP8GOR2ay8v3Ax z{+%ZAa0Ti45oTCYrXC-`#h)ay@(BWP=cvj#PGDCb%NWBB*8>X#AHR4Dc~( z|KqR4afySL=X``yZWaN{jf!5PRb>W z7-Qh3-0vT3P?h-RKphJ%OzFoUW)nb!E>JBvu4H6j%^N36J<1ce-NcB9K)F}!!Y2h{ zS-|@{tKn7QgLP1Yh>*aa=j`-3i(ED)h#p@+V4>1sNxbrrwv%1`5S}R1QjTEe8u$br zvlR5s`po&dRhm~$TvvMJ8MRv-KeQ7h+<}ZtM50-?+;Fu`PY5I_LfpHj%L-1xc=jNT z)D|%gBK|#}wtuB`6{VA6Pj7Fx{XTjp?5l~i&}GJostt-l)*%cz>Dn*#^^UT?*eU1E z%xl`5eS7Ngjwgymdv9!oyQ|x)+{n|;?i78lIbFV*zipG=lNYL{jib4kMBIvZQi<3T zglK_rQ-){3$Ovo4=l|Qk(*|&`_ zqVMglXF&9Z>3dBj305NU*+lsOcV{Y&a^{e^1LVq7`q67UwXP{XNlN$Z>$>po_MPW_ zxm<&sXvTW1o`xuA)l9y>?u!wrow8Hb9a~nBV7+U0^CoqvW=D zxdu&Fj+{Q)QRB!T?uCi#)D_(>NoN%N8+{>v`+=it@Gh8mQ(9q+??D{~6JWyXl?FEN z4TZ4t3@6-l%n_Hbe0XOuh24OTxA2XuUCU$#Y+vp2Ro49A5aSu>#kZDnij_M}c20@e zQe0b9#H>%MSbwg0snz=Y$w4>S@#-dB*c>b_MPj2d5<{#u>bx`OqgNqizVL{|btj>4 zf+}fK^SE)0*q1n#osQy-U(mhGd9}mfVfff3NxW1^8CcDyE9dir2i>=BHn-y4L}sxR zw^ub$QZ9v;Pum7~y5+w<)1dWwGdWD**AYKu?BrVXp}+mdpNs1iaTcCG2c35w|Lt9B z#U)W+VQsGcw@LAIZtU20b+B0%&$hYDS!sS#eaJ-0>_4JDmuTp0~lUwLqBhkad-g|pK<&Hu@$ z>v(%)p3U{JCp&|6sIZc``NCFg>cD(GxqDO0rZ)f6W~$ah>QJEkI{{Vr9BKz(FfRsK z=GU&Um&;qe)l(q)Th$?r)qXqO6lPK^HJbnMt_g49DwQfC@LBTBO!!EED2+D0(@ihc zw0Rfm7A$^MOSaJ^kTZqqOuVWNDNf~f1w@#_5|ean<-X^V4f!($9s({0s-U2z0TdG= z0=gwrAv_aZH7L3VCs~g6GTmLln_TVI$V0QY4azW3YlN7rf(K_5;{q5XX%YXMzg2Q^ ziDG;4WdJ&?rp{SU01Tqc4#;MP$1!a3M_=Pyc4d@#>HhluByiOC*mM+5O&wmXB9P0C z!_KCvI)}G87Pw>>$k7cod&sv$5}cS!f?qE?_S$%W_J00vH@u`Qk;efBm_Y)f)KUqT z4T?G#y?g(E$V2wt@!_AgfBK4oj=nzQSSv|n0^F#~&|~L$cXDDL&V7`LF4xj-z1r1u zmHoJV@6Z|a=8BJue2Q(&+nPT_q<2}Ma^~&6m{&M8w9J`n`|82=CTKGvV#uwqrlSiZ z!YKCb-Q^x4Sx_qGM~+hknLx&8EHNoEhn-d0Hjp{x$LNl}xrU%{^j6}P>xq;%W~0xC zIT>HU8AG+YGH(~@1!Wf%Ha@mrl&!3N>0dm-RRAyp@t)W$+j_GHiOI=PymcuI^6E+o z3!c8z+SeU;Uxn2}oy{50ulD%a|F3z1MdRgTy;WnEEb|XYT65oOrjl~JU{XAE9pjv z{O)%%hWCg(-liQU{t|cJsYjpQI7(8v#}Pefgs6)Bxvh^2yikAA$0g+BX-yd>5q6k$ zspqp(xn_^~EcgOd9x!kOGaxu=8dF2~gbBc}Sm&;dy4V z+f(vni8DdgehR~!?eNG|xTt88KR#&we&3(r8RGrbsd}oT!}%judF#Vau-Ck?A8daM$M@I)l>><$}^@3)l}v!QE;u zk=v>Ia9&Hp_)q0}Wy=;-rz2c!cx-)xTU*Ynzxr2kQJU{k|L$M7R;p!>NDvwBjRW+B zcL}lSTV1wI6E}8KTrC3H=1t=N!^|AoJY?|~Y+?>pr>ON<9vmr{ zoU|}E4<*|GN{M3?{CYQv&f;u|&g`ydYqU?VY#3t&*%>4M?$OnHH@vU;pLY}gT)%M? zwe8l@DKC;2rE_*F{J)+%TlDv#;$+<&FODp}_%wfJOXuGYPgiUedS44Mpzr?ObL3L- zgVUF%3z~GP*E>Ro!&L4s58x61Z#gvC?YR`&7f}5D^7^(qQC=f2WJ&?Vj$$TEG4__|&a_1qXH=2q$^ zuxUQFWcy^iyGm8dzSF$giB+HGeyw0-U`EqHccw<=l>dJ#jYr#>5R+Xl;nsmA!YyCIYBg%&BQu))9`m!lh(&qBF=fpc>7=?h2Cs;}CD~WT9 zx9c)~T|Em=YJBu5KhB`A`+(nV&sRFyn;-|*w=ZuQpsf5w4&{;(0SG}V4n+jj3`f+$ zax7B~HaRY6ThNG3o_aMZ>QRIf+~Ai%q3+neIjc(UU;Tytt4ax@jCaPSDV4#$zwR4* zG0q-kC>Z@4WDYKxs{;Q>8L(?*^L-w0Y&UFhkgkdFOsp6qEq=i;7K zyFqe$WI$c8mZ$~*$bgbCG|zOJC3>rMR3kCb@=LzglT%hw?hAgoiAIWnm+ox&ROHl& zdt~#-=Jz8$x>hcQ=NvBW8XEFqmd#AV#1-)K~}-75?KWuzcW-*-QC} zgW92#vvWHq{vBr>|WGs^}QMtE!5@yhEi^Kv9(DUk(&B>mL8 zsljTWA zFKB+a`SnqG5=k%ckL>jQbtwb6V^!ZJQNUZgQ=JO#u#9iFhs!1oK!H`reTv_q6S+KeyB@7?P42iNRa1->CDHp1;lux9V zs;SC6wow%+a!^li)n{MLDjLk|UHp0TIXm6X_neuB_1S_<5ho~CG7CI?RNZ4kI#!j9 zIx<1b{Vsw=?>oT3!tM(SN zs(LD(bZmL~FJz3wGcBvEtK!cVAw$i&h=-~k9lcgSbGzk!%B@H4i;uJ{4L@e&CaIuT$+r2S#_09M5QE{U;QEdJdk@3SFjn7} zV@b7l`6q5`I@}x}n3BFuJul8d+Tq@`OiEcnFStDhbjFYja6y9hDKHop%9617a*T{Z zrNyOpGAl5n2=_#=pbt)|CXNCv#ldmR3LyWL)h%I$4FDtzt6+=@DoB9iViGJx63sFg zu(aza^Gj(-)TFH>-~b&8X_4!wvn*OB0WPj2Ri+lRIT}H|bs3n7Wo1PAfcSX*FnY>u z(A1u4Jj8p<`zf5ufnEKp}~}z1icpFBHc9-&0Hy+ zppYEe*=zDd$KBvlSXfa)fH1+zSY~X_t#S75&pEfloi53Af$3OtnnG2sx!;W4_1x~c zqiMfVp$@c^>WURdeBuN1hX@0x9`TGO%=(XlDPru5Q5MlZy;ai=iw!amhqC9imVfh0 zgFy=yz25lUygat};qhJ9$9|Wr{yTp}K`XxcmPL0%DVJc1jaOR_eLbbEFF70=OeB= z<_wQow6hy=(d#0%g~9|UWeEwbLNq16ni1 z!?WVX(?TrYF0lj&uBzvdOsZ@aT%F#Yh+Eum1PASQzr) zTt62@s0@keFU{tSnTifP4^(|S<3HLeZ6lIY8cH%h+u(i>1veP*{=U_5-OJV8MF?}I zGc+J3E8txBITJ@wC|t+KnhgF=6Z#|Rw5*8FkCMLQwF5?r+|k{0j%nDJzNF;EtvdC* z+}pTs6lTc|krlrmNe8l1ZDRIW&W|2;6M*Pe6%j6;bT~X|wujCu^N0Ea_9WSbw_K*& z`5aCETxrBO;cW|zU1bts*U^`SxePTBTdL6YM@>r@x9^(mPjLolD!2M>`Yy=Z%Djp! zY3ZA&H^_E=jpD$QK?tu0J#232srlAk;5in>u1XfP2V%9)kgWZ>)u`& zNMY-WrIOzY%`3GQ*Yhi9h%GveRf%8|y0e%$O;cPP)8byQ9)$*n%;@n=`wCU!d10l3 z5*k+VfAjw(ZmtE=EMTwEFzRpq?NuUcmUh3PUdZ$@USbH$r)l44FFPbz^6|-;i9HdJ zJl(j%h%nh`=i5%&TR>w~t`GJ3=uZ7{h+p$rcdxfzw3+lo)*;U48{tFyKxR4f(p_mN z{f(syI_IwJ-S>TeZt}QX!9OzdHU#HCcQfPlbCL^Rl!A`r8>ON*R7!jqfZCXMCkE87 zZG%-P;Go@-SRWteblmG}13^xLiYB4ivvGnZl1nMqpPGT#m)h;_Uh92yt=?D!;SxfC z5`Y@2og>ru`cLV)Yct)`Vt|B4w^7z`%F$=3mAjy`VU_*Yk%^2w_P0)leoQyHc*v~g z$uiUAfU zuB1GAFT2W2O%!lOex({w(gKhxkw4sPdIMQ>a9?z z@S=D}t>wD*Ro9fPTZS!FwhgQNya4oADIL0e%=M&Yi&WR$e}1O%R(4i?lr zvTB>#J%;FQNH9}_W+y3<5D6A-bbvYIy{TH5Ss$Sjd#=a(7CI%vSQ-`o{7k-eexl0G z?S)ZRh6)L$c@O?{`#Z;<2m#qyG`O_oKIc`jLG)pVGb!LVBLz0EJl5MmS6kb1zM9rG zF7_OGqZI9|yqleCEbi|RkwM^KTyCfD4|cVKl0~kXL9noRi;T?HN=jeXgxn<*Hwp!g zub3wKE;PzP!6RS=w#pHLTtsc3Hj+OVj)D?`8-rID3lV(>5wcWQc(j~5Ci-(uQB5T~ zq=mp%(+rSC8os-k73DNW2{epmBGoP7Ht%Zb2z2l-xno_bd?mR@>3-WfOm{O#!S%m{vZa z4VE$jNdZnN(0Bmk>E%x$QZaE~N13+kBa)lO)!^?%De7os1kaD81y&=|R21+SDN39! ziU?)*qCg@$*1NAK-XOq>NvwdzizN2vdFa(- z5NgyVE9i*icrF)Ik{r*_vqwvUZhF_T)&_jS-Vtg8=8#+l5`gauVA`k8hRnm=`aoBlF#9o zLlb8qHehS1gNP|Yl}bB1UdN0-W#VKCdBZr`jmoTQX2<=X`2&|MsY)#_2f+EHdL^O% z*<46u?G@pV!2}M430D7ZBM5l`8P&~utR}g_^b}r{1xS(%O-%*nx=cdmN?wQB4SyP5 zo|M)eVeiYGk^NKT8t2q}X`rc(?eO5)NuVIwsq&b5x~iGp+vJe{kFfKKYC8Mg{x^k? zgn%Ig4Amrr5}FBwDr$fLp&F`mLob2?A|g6Y=p6&nMGRG{f`EcG^p14FiZnqP$3E(y z{Nwzt-m5ovSt}P=d+oK)KKtzF^9ZDJ{VtnRNyEa&vqRl3wOnpi547MaqQa=6pxRrq z?pVfy{92Ijt43RKA;%Eq_q;Bs5-tNhX8a@VG{RcNUN`o_6QhRg(g^K?_*k{akt>eJ zqv7`(-kd$3DOlA5+P@oreulU@;}g2gqJEURJWMX#iz8eM1-2L$m@ zy)2=e|15aF4EZ*8l=I+_-DpZ#;Jq>Xht9>c?`z0Ybu7h1p?o=WTmOK=AdOP1mwIJm~a1$~Xyt z7@UaO-i#I(x<;%Xd_aeqj6gb=LU&&7ht`LuLd8n(jVF3N6%+5t&ZVWf?DYEH`0BQE z>)ra8Q!dH%q0pNRM_T!VTA^O>hH#F4uJONr?tW!*K^z9XO4|{?kXZ_{$wx3o`?Y%m z!f&=dO+T_=-;s6Cw9aE-A#~F4g7tHAE0|bHg6EBW1s?(+;M-P`4P&A27*awNFWi>! zXFu{B3rZy4{kdxu7(ON{Z8HGRN2oI9eWY!ZodFZ1L-iiTGDWI#;$4s9PDHGsmA;GX zSn=rF*5Rk3-ZCeyoyfS&oquEBo!6GA6&N01qh=rQ$FuScvjuF>_XTe;;=3o`u3ip` ziq@~-9Ke49>7lfJl0iVNO(SfTiliNr_X{~)q4caoEJdb#_i$c%JJ~1u!nHqAzTJ@1 z{%`;4G=M4<7Wls#8ad%N?^L`8os2%7c*ob-@LDCU{cx(cIl@T7uEs&AMK=R+F-rtc zHjI%*JQ9|P`sRhmfI)B0Ob|UC?AE@C1C{-E-zI3kh-T+=1ctdl`SERvvj&tm0J^;t zCZbbtUIS3Rtm@_ffM+Ol-RPu@h0c`ZnYlU99O~2@7*&A7i23#$kGn0D&}Vea6AU;^ zX*;Y!<eHu6-=CEK zm@qO^W@SZ9c=_rwc_djbNg(`8sO;(0SVW7b< zRpkk%grTX{qZ9r)hE$*a(F~oU<@C@M7jOd4bMV@dY-E$@sU(F=F;tdg(NP7Kr=!vD__|f?jaRH znegUh2NKf9#U+n;8-uhI5(4sitq_Q!W^*))#VW8PVe{~nb1xb{9p0|G+wRd;pZMr6 z4gm^?d1MwGlerSz@*;OT%ICf1-|iB}W!$)12)8fm(cg7j3vNa-9l2f>`!Y=8WO4OR ztjUgj9jVOwV-J39SQNm>rmW)iA9TpU#48)0)qn`}2(g%j7DMKe&t3S4NLCdOXoU6z z+D6fw3QE8;~FyGowl+rZr)~PWJyz~0c~y{-Bp-}Bj&Sd&PC`H zOIF!cX1c(&C*D-z)salHW~V+wNZ9W$UE86Hv_>W-R<;QH&MY9g^GEDZx26mfu4fy`>~sSXq=8d~MiG0hv7mPra#*k* zRWk6S_w>&m!38!KYkfD5VVz5|&Kajk0+``E#+t{5wJeHTc4?5=X)tYAmb{O$0i#egBEMLr6rdz6` z>yI5Ym2Q-`{J>u$?Mdt5TZt(I_}G#=4;)Ep{&vH0$9^vwgHg_--AKvQym<=;D&f^F zDKhUU0>h{QZh*uQe|n0P>J+r?0aEp{)|GyIL8Mb48x!P)Ul_j)V-e-*(UfWxbmg+5 zKod9slc`V|fCtF6ok+7fcAP;CeooETEWgWr`iJnIz7M83OqD_{WKc@S$FA;)ZvT0q zbUHvA?2NE*U_1^EytveT1}h(2-fDinBscx|QYr49U@3dg5k~Kc? zawtO9dEP9m6VzClC}m9J=ZcZoh!Oyn%p+K}YEc+th~&yGUTkC;NAA!!+JK%LtSVX? z<@R$?@^}5&0hV0EwXUriIDRAqPmMpsM~X`@KQ7>UxTL6IaTX;~yeZ_4Dd3cTx6wF| z%iW-CN3)RHfF< z_H{6{hyQ_fE!@=`4|J{|gL7l2%8NGI3V1r8~{`G5HW|G#f^0Q9lHG$_zf zm91J}^Uu+yiK>njnGIgrM+XPl06iEA5hdsCdFDy9df8Crf7S2Cd{S@_OiyeanC@BR0)Um6J~>A_G; z7Jp^#5pUHLThPM^2^Pg!)E$z}W(B1t6y-Rh^VRs`J-_4s7e^{X)F}C_-bf@b@_bL3 zu$kcPOM#=-9~XKBt?josRexL2`!xAPo z^Eo$Yt|k0}D*LCh>5^xQSYksi!co;VCD;A0tQu|&de6V^E3up-6;V-!M-=6e z`mVA#w@WAG>t#iH)&j4I##Z?Rp%=`sKgDi`>C_BgIj%m>S_Xi$C0nBGiBsquKY4DO zt6hA5=M0yB(%&X@B1j=%&&vAQa%AICwBt#X35W5#&f{u!f= zd_^=WYmC&qepkiG#*czhZnpMB*ER376@6&2U>~&;c25dl4f<<;LDUIy^arJzrn195 z6#|Ugh-yk|2u?iU7G|;4#FXO2hfE|?!yV5=;!~%^N&R-fRv-8 z(2e!$YyiYQiqQm?p(P~0_g0+VWnMxer%GEqnZJRAm)N3w>7X>G1p!>b3HSSIB`_5y z1<1rz;9`W0CP^7Oq!I#9)=OccjeY4nx8ZN>&jYPRMHu zdfilBB2wnh`JQDPgwiVce0^qION0W15Bj2P) z)f;tr$}$e={`JyHd@zL>MK{2u_*d#e*vhWjGEso)UJ4vO0{F7y9qO0rWrbQ1@mWtF0}Ts4j-sN6KcH9}|Oy{XI0Fi|4xeOGh0r^j0_dUVMx6$`QBj`iD7g9YPHZa)ux`QqTu zr){JkOHVlf7)Zxv=!hZ%3Ii%EqW87EktkR^IHywDrS&4lgTR>No=UZRYe!(>7xHcA~m3%{g{79}H zk@7Sj@7^<`3jc2PsZVIVv!%5&aYsEdcs)r+ z?3=ERP~O`}&v|G#@y6mQ-6z0*GD2QirJ*rlG3w>N8f{C*-+Ogi|Cj$Q9L!H)>+*5{ zY))vP4YlL$D610AOOEb3S*(096piVX@&d#Y=v9WIjYVkeBzDF_EJW!w>$-|zgCe1! z2X5-2@&rI@zxlov!xF10QiR6S0W&Lq|A=R4(X1b%p5-n7Zrl6379r@xXSr(^XGk{j z3Yd72+;?-Db|1G4mi!M5DX4pU&&}!2PxaTmW=THYSBy=6n+{FW3Z0B?kjD{h%9Yc@~e*xO?S znPDwtrOK2vMN?0N00uz3Cc>rz|7yOWAw8}5k8mqG zAZWVlDQ3j&#s=+cImZlWCDL130j2Gp%`)a$mcCd=Y(?0~O|RLo+*6liO}vLoP^CCz z6A=@pTJr$qj%IP$t$FVM{M{gfidW8q$z?WfjNK?a4#^kQ06kI7z5*pYv$bEI27m+D zoP?3z`9BHFm>?{YmzThHyoRaqJ%s%`v)rv_qw%!YZqS6S3l+4OsK>;l&M%+){OiA# z2d+Aq@G29>F38yiK>T8!SXH}*Oyq+oujsuKGLcq_F(n%8NsNIA{8r9k3IfQ?nem51 zpUP3~a`Ha~qu!1fw@vE$V?WQ=P*&^=OANkEN{W#qhf(&hfaRlh&T~)S*_o%mNfB*X zL*q}L4ARF&*<6ze${p-5_SdNE?mv+{=xpFm-WbgcM5jh~gfLV4H2`VdId0}){d7)m ztlMQjCi7(#;EtkxuI2Gw7(PRXSThWyh0vPB4?6skf|j(;~9} zMy<|p*yz+u$}!i#A0acOa!%W;O9!QlIPnH^pO?Q&jt$+YxJr_w;pu-52u9H3FN}zlP5e31+oz*+@U0)jd(&p<#|CrKHHg%y;f!SpA*) z)=PMi2WpfC#(BdYXO6i;@_+n+_Z-n_kw4Z-jdsKd>n<&CvxurPK|%@6asepqsXt7s zPb`Cu$n2PTyR z?_J{Fj0H(Aq)3OHog}SY*|UF@R?K&!c%n=xWBW3~hHgOGZ;PhgI(s~F`+jqi2CVL+ zYov^*aqB5r+phNOWy8PPB#Ao4qm)c|Kt9=^L@gl2tR7%W)#9V+_aN{W zE6Zgv(4|E|kk&uyB zJ^sluph!~M@k}qe_@?gd$VO#~nm^y4KM2?M>*L`&0w@>|f}D9rb$ANT_Z1(#oel0< zURmGpPZ%haF%5$OKGH}(Q)Onl8YWOJl~i>c{Ga}Do8vLG2AxX#UXAyE*l%pGxcf2kKCN20{jq$N?hu_sHS#J4R|UpfJ=#$Gq$ zs300q7#e?-qC>6o*B96C=qa8p%%?CVA`Nwq>9Azc%H{P|T^L-;hlh7jHFBP>^aO2Z zX{FU=Sxha&5}G*9HF)fvFcXxj!EPV|I(Q`to=st{Iq)u~Gr^p2ghxL;5C}@NmA(_E z0prk-FwdX6@8M>urt_S%eMBs9$UDh#tS{4 z(ragV2m67$DZ?q6CG3g=lV+LJLw@>M`LZ%oGtg&lHc^g~*++;&AOdtg5ahB;V#{b@3=I0*AB?^hFd`I`_{ypMGCr)DI0&h3s5t0W~ zZXoz5_4G*Sj8*@2(cWp?Wf6X^Dp5gn{nt?);@(nbotX&dmavhL8KFmHU%>riqE~#Z z7nd%V`$nvZ#+4kNTnkk{6@EVXwhp;y?ysxudgH$zpz88`z9hdpT8BOUmzt!Fc-0TX zC~uvvDnPPcT4o7$7T ziSMYk9hDXjI7<7Yx9?j_n+adLul%NnBd4rI6)BSwTs#QN)^mYQrXkmEVmHD%4_(y4 zNwm4=NPN%RJxZaf<4I=ugEau%nq`<094V)ukT1+w?Y@)G6_D0Xp1PX$dNd{FbHu51 zCile?^FWoXxx*Pb=>E1!Kp%_RFdWV~Qa#4*Zl`u$=?6|+sp>+u`B_Rtias`BEnujr zLNVwVh%xlTTNMP`RwM~=@?ct}fss7f(csYRkXp&Mqsos?*U5jflo_@}W2=dr)ZQ;@ zVDyY`gQB`Q9sUDO$TPH;lUh4qr*@S2__Bo8nZQX|;cR`l?^O1Yo)+oQ`z;d=+P9zU z@9!KK{!6ELD_W(0rGPMDh^304-OrQnu4HpoQ_SJxav7(`UnPXX>WQ}eE)DUUl}WIG zJZUzw?&L^`Zx9r2{+^Vi;WoI3@}K|0GzU{FWCHX3k!e>M(kkFTkGD=o(@Axu(&^)uO%%yG!g}~BC?e8I~zl{hRn&b&;LZ8xq6nCnWRS?yK#3+_0G7wTO#jB z)h^!fPEqph#ww6_A!x?osM2(BX83yN#`3XxX~Tl0(cnhEmSN+}G3j6IiJdop{n1eS zyyAAxD7q{lf^fc8PCY-M5e)!tw0a4~Un8rFStpm(&|hR~Gi9aM&NECg1C3|#URa8> z4fI(1cxCLt0@TD~pGJ>Pm)@WQGv*b>We+{;?`V`pB+0r|Gjnt67lh_5s-C8g>3O3m z@g${$>)#w=Q^C$^q1hZZAk=rAWPE>3R8B}9f3xa2VXBo4zw|r*KXN?g_Z$v?D`$F$ zKt`9#;?d&jOG|ZX5+Yr8aBk(9WO?(k2Qca6)nnf2eh}%%(c$9s1&RqsvW2kNctsWL zuVLkMo_E45YU4jhDnJ+QEL<(O975A<%4{2mDaLDVI;qx1 z=*}Ce5DN5Dp25jd=E`EgHO6>_2>6ejxaTHmKqP0wNuqaL5-QJcGOv3uXD|RvT@Fpg zg)pG!%XtnU4j7;~5lBNdl16a({5Mw(QZHyWgk_&$IvOY_Mh>Ah>ec*BE3cs%5#=Ep z<-W6fUs=qWgQ03bAwcoR!k~QxH*NcSfqvd7mZv>?`*f1#6qf|hYTF?Ct|M};h~tb@ zIh7^;GkX<5b_6M*C&E0wPM?mejWLr4@Z|MiH^WLfrc>tqtsgid^5)2#740TbVoVb| zpqM;%$K;bsR=w0A@+s9$R>KM&RmF*tkWe`>V@IlqzdW6nF?@H=2hkYC+U1wZiSobW z|Cxhp5T{&wEoo*{Sx?ys28d@#hB}cjV>uM%%DXyZh`pt&kihB(0XtEh?-?FR1Ku)x=onkVH(b9n=F0VrGR#w*QU};h?Djo&y11p;JgToi5CKqf)cw zl(gzngN++xp?mjbHr#a;3M3M7z8$q9@hCkAv`eU7(+*rA^x+5kQu2 z={x8RY?|>UYWuArH(%R>)S~D{ZChO+7kvt3tp)vgC|-xnLhKxqoXdEN$HKqRMG|{E zKQZ~%gHCIT>b_M7$;~%Ga9TIRl1Lzf@T8rUY z_MoTU2T|>*izco?v=6D;d&{+k)jl)Zvg)MAQxM?=^CdWcj?*%}zn>j+^r_b8Li<3f zhSDjg>|Wbz5t`>89=SiJiwMKRVL4cCnDyEUqoE@D=EDOvmeB>)xiF;U)x>d|EL&U{a#+ zJd9zOXoG`e$r25+VoKIeG&TV!aWi|*drvNqh|*R)JTT>k38Hp++1^?^ERLG)@~pTz zis7e<&Uo!hO;AR^3ipzU=*Rz5_M117LUb%w$^@#0i09`U6mic+%sIS77UE~8Uow+V zIy3pIG$(CoiT-3swRI!hj6-k{XD-H(e!$sU;&=Xk0-l8KF%W+3niy0WG8JC7*=((h zU1qr5%uk#G?^RPQ&DI!5LU{nw;KkEfjSH$WqrNw9<@4RjtQgLjQ;mO?2TMeq(}!a* zd{eX;Z^)}vQ5@}c2ALb48e{$w1@AH)+!h4G>l2HQ=MiC{9 zwSRQ*-8tVj#d)_gm`3MRt^EV*@sXMUdw(7;w?XB3KTC|rX#UI+uT=JZol-(BclULX zUAP!QKGApcyu#7we$^1Q7T?79OPDTKWyzOXb-jN*e^XkT9(P8--sX$00iU7hXQp$1 zFF2j*3={c2XKfmb0vp`g6GsbEDmuod zhP%hqMNdmRRVcz-Y=3^-XMTOzeLJ<@E_OnV6w3SiQs%+iEr00zeWU$TgqiJs^&i-K ze~)3>s~^3Cm78%pI(PsCMk7IP(ty!>G80PkhBxAqg3l(B)+?oh`LkW)FJ091;07t& z2y}&zRk9ylQUrNWT(+MHVuV_Z5~4e(Y_?pbvurs#k%I#zSwRH44z(;25Oh)6(jq!< z;6!qgLC9lk-E`Cvwbdj>(R)xV)l{1^ajv~6;CK|^w3o3wpfi?BO=?Z=S7S;%-uZXl zXw&3~=v$p6)@r!E7z7XZD(Ms^d?>eN(=R7mM1{7S!n}l_1R7V_h1?q;hLiLD84H+m zOl?D2*`&!Jq^mDr)D)KvikB#@!%JpfyVD9c!9ves{Cq0kwh#hG-ytt3nKlA^060meuc2uHOcZ96fMsl>{@wF^yFul73;y_8g~dJf_z824U@FN7ow zd-Ojm9K9|r?iRUfqiJ$oBHj&4Niv-K2Mo_e%tj>2)Zf%0hDJ39<^Gb{oBN5ZaueFE>*Vgbd9^oyED@D zy`TNXdbg`>(L>HZkxw)oL+g_2-a2-y(byK3Ys0K45Xgm`*rPAaV_ZM1Ea6ZrJB!aqBkr--b~u|HhW2?YG(^DNRGo5^xloAk9> z)7{+U`)<)abZ_7zvD55vhxuqZ5oOO$k`i*WUNlHLN2{{l_ofU2k_b=clgm;rx!7vVYRPvAPyS#0ACpDQh1W}wk1DUBcMiMHDz$DTG$p!V&Of3} zsa>%}08qdb=NERx4g;V8H-9|Lns@yE4U*#L*8CD9(3!_zD(_mf{R4KxtrvcV<2e`l z|E#ZwnDWUVRybz7V^e>sD6stI<(ucY51gYE^nUrS=iF|I_!OzsJ!8-yBr-b#ZT~l4K&$=f&ES z7|fnkp}mwXQAH=Wwb>y+qliz)s8d&Z;o}AmmHU^res9%ZuK8UORHy>)-F+p?VG6+BMNi5dQTuaNzC^Rt)eaSrL}IXf}z zBN1zS4$is99TkXH%?}xTK>=0`)r_tBl6>?M`t$@C^;r=M&_3yetZ20kbO9~!Eky?%xquphBD9EA1vB1RVCM+IZA=_MUU$xpK>mz zoc>sOHc3)?0N;offj<^8sRj4fl}+jf2!@{&sZiTGt<>`qL7Eyt1~4Dv07Bg*Rz%MB z++*uuj6EDa+k;w$k7s0m3;l-@Nzz0Dgsv?_nqtzCo`f5ObFzUaFvT=ee+3mPeud*G zo@#JoMweaovA{Z9pioCxOSq~~U+#W&{M(?d^a$t(;#0X2q3vOF7be4V2%TB%{18*P z3#03DqxTx8)Mp;SKLn=`0>o`Nma8CUYc;k^9$ZY#e{n)OtP*f-MF1zBvV#r05jP$4d0R~8wip53k8<&iJ*kIIUi6JQnQV8 zpcx0IpO+KW7_Cg;3?~ZXwGy(y?8Kz3BA0z^XS`1`m_tMviYJ;UPDE)s)%54-f^CFs znaP?`?_!^(B=22(E}~l_YC@mm)N$Uz$cP#!ERNkP?KjBnd2ir5h+9|EoftbskDFIL zpgvIuDzShVR!RlX>#Wq!`jx-yzY9RHQc@G_e?lrqArkv|fTYfw^OM8+=6j%h2fP61 zC1a|M)UaDVS!Qie6^xWhp375p!^#O6;f+-Z{v{vqtWKySrjYI7XY=VA#o4B66VuHVtSuaHEbqm(^L4mus1`n)C6E z-an&?C;x2`@yLY#ODoiAQgd@%Zp-Ac-f;r=xa=j{4VVaxqbez|qzW8$kn#jq!ZA&7 z?4+RW%Q-6J1;>bxt%2_BB9Xb=}O82J84J=c5qf3 zoNIH5@%|-1LG+Zs+sa13KTtnsVa@ZV&|)E9QA|*pY|SzY7D>oJ4$X<;N<`?#mG#IM z<&@z4nHZV3#TO_jqd#AyaD-BB^`y;^jR+^c)LZP^-PODr`zrg--Cy7WpUyu3v_SU? z0N6yOeJIA}sKJmStZUuZ^T3T4Hn%DWe)ov?{@cG5=j{EUWLgpdfV*l!PEiE>=f94) zcOE$)Y0H8OM`)ujOICz7w~WSLR?F4yj1h%spj%{0z-!TOwYB-IR&1c%ySr*43aQfM z_|$z@EYsMAkIIfWN&E65YD{g>NeYxZ5m9!MPcnG$WSNlS5EPz{9=M`^JEI%kFFoK# zrSq@9xv07n!Yx{(6er%jSHOC@v(vgIctmH-?-Q6c?WP4zIwSskxcfdm=-#DvMJMjM!Ww^UpsBYV7eCSyZ9^P`7Ej^k_S@WcJfu}j%Et;=|4B!*Z#Zzq5*6J z!S~xZ2O>iXncc?)pos_fUoBwh`x(aHKlAe++wb1zzqbJ^Dns%8lyz);qBG79mxAJz>4m!7^jgk!7g+ zg*Ng-RYf)Jr`KfPQADbS3E#^Kj()maRf@a}P%p%ZTLDns=O? z5Q?dhY8&PvBWHO$d=F3LJrb~{J+~*|b5Zm$W7q*@9Kh=<2-9#yT)b`R5@{~o7klNN zKV~mTb$b1*{+U#nYZsIQ1%Lj1_}cvO-Q8cmT(W1v++6_Zk;Yixs~djQi9)q#P5J$k zRepb};cs6l?GqLKU4Qm)iaJFt<#qt@eC6xqop$^VyCIvaj@*6doV!-}IfMc=lnHMu zF11*CcBtHq{FN=B3IO6Cs&osB7Iw~2tSLB%{g)B zY3TO#KZcT4atCh&9}q7H#!Y$_Zaz|T*+j#EBh>|J5`|7u;rcoz@h#!mEu(9*5e|j$Us~1y`S*#(ypD=FmRX1Mv$DPFjWvw+XfM}ihX2HWL?xya zJZucB(NNk1E?Gsc99yp`#e;1J>5D~TI+L1tX9`@%9>ZRWQ0Qw~!+|EfJZL)4dej+u zuYN___b%b3N&i-VX-$Y4W^>RrA9MMiH;2XVlWxl$rXEtcxK@e#VTzRSwszOBl%03= zj3~00A#=_or6;Q7^GlScjkg;|o$5+xoiGdx^1t|tT|s!)No&b?^Fn#$dk9JFtKq)z znKV&iqwU2D8Ya1VpVm&PsAJv@eddHC~63l-s9j9-e7|CcDQX+}xuoT`)LRre zWmVS~&Wrc}RnE2v;mNsJCp2X`ul}YU8hzVaQ{)Hfiw66Z2@c4z>mPOb{A`QBVF;I5 zyK1e}zE2O)_*(3sBfiZ@wC3E(2!i2aL7;9Ej4mAcML`5^4Y(#%+=$x;g#wAnyCD3Ip1R(&BNI2!bYbvQa* zj`Y=gY^nT?U3!Ne*6`nGPevicImM!;$v2tl+;$oAVxxft1Wt2Ant#Xt5NB2iVJYCR zf&(g*=LQc(c?N2o_#2EVxJ6A$d>nSD|B{jitck>son8&;$OKg5*`KWC(vAiGt1tjA zCVJH=Wn^rcUz)`?oWsw3m{Vr7tsOpHP4_tM=sm4%DKGZ4)=6KOJ|R8q_9#Pc%p@i5 z#3cxwEW}p9^3F?vj?48vfi;{F)*ks~n~;cf3{zn%C1^#8YRlP;l#B@(oXAIKb)Vl4 zZT72JPoB~md!0TmHDd(|X_C#^BaGO?*6^;xp4K(^N2!ql07707GMUwu+NL&=sb7@_ zf)o~WWK9zkrPE)^V1)$a+-xvZN~}q)A{x8ZY=PI+u{H2`>lQN<8u$pDqWdrX82BC0 zde#yG$wYclbO!B15d~!D-QlI_dciJ|?StsszU*h_kr&0G8uS2}u}f2`LbQ(cA?ZIG zp>rW<2tGvWDzmQ*Wj|^)Et*7hLUyPZ2^ClEt=6lkiw;tH{xwetAWaVk>fpm{-E2Qe zW&GvlWBNP(9vlgG5!0Gih6ta_)bpQ9_WnJ%H~EN~9WgAeqh6}XySaDWKGPp#hne!z z>~?LI6Xu?UIGP|Tb;GLD-_5C31=l|x6n(8V@^60MtxY9r@u(yw-0A(CU6=Z)yHMxjIe8~< z!FvC_jquBYGtxeXL?t|D_KllHPt{Q`95p>>mBDz+50|ddnE6*|Dn%W+t_q4%Atb(P z@JdO(uhDq-Uorc>TNQDVOSz+)>JvsWH%l}pujCrH8T~P>Bh%6uZ~`xo*GX>HAGdv; z{=#bTPV=)2QFFNf3;D6>$1DFt9M+uo>-$=9t#-QRZczKTzdKVnS!Q|N@_H{r{7SDh zr7%5{UcFCAply1hRMbfWs}pz8 znh@&|@qJV#C^4rA^J6Sw2$&p4`{M~99??RmC-FMg+%{YQ1PZ2;cp#x*k$c!^0PBm` zBOwzhN0SMU>~X=7Taow?QxkS|1JRpHhbjELtMi`ji(XYt#F^{(+=j(r!v_l}Nedrk zI=Ai?Y0SP9v{g^rbo>Q} znl?e;244@ku?@`z9G9K35|gN`XO{;St`~ijO1;LcDV%WpkH31AgNq>8mI(A; z5ro&pf@k=D`6rzZ8tpvzTkskIKHz>V<-yHw5VhF8h=szzP)(QTg4=e6fIJhyH)IfI z^==8H#{&@du46t+fiM2L-1;*5YU#Jb*8e_myX&<&{>=RaAvl;A$m^$b6cp0Ljh~XQ zmK9z#=(Fw|G;r}tReQ+vjQG6& zn}BkqS=+#To`&XAVqTc|7li?qxukySzg!sLuU-_+$9U%F!QLNI|1`h zq)$X5iBunTrk!E7oUvy9^38&BE$efg%L$pYyv2d9`R^WNLf;&ks%ePYr~9U__EFZI zU)SBtJWf{kaY~4U(g5$22z%%5*nAg*8GH{eCPr0zh4R?wvKrGNqk{X2SYD*X^ zznFr?O#PkyyZ+R2;N#!ZR-rLQ?)XrAxy%;1Va=)?P*VhHrvQqWRCGf%9=R&h?hcuN z*sx+#djngEI6&rpaK`!`$2ni8PdeALmgI}{74Clibn%%*^x7TE(a&9DwAAe3F}3u1 z)1Y2}tcofV&hgB&-uHFJ>z`ifzOHfJ**G)-naX6%A;zN-c`sTIWPSTnaYEviX%{UU z<7zP!8A)i=eph+eeduQS#sTcf<;wp0Rot*6?N(*uuqWxwtwBG|rZbumvPj!kI6ytc z8lBoMxue7#<7r3Jhgaice%3OEfWubf5PJ%b#GN2;qLtPAWlC?zzkvU6Mf4E1oCEHy-aJQn55kKa*>82(l|7U$ zj8n953ynhD0hyOY*Epi26RH5rhFo3X2e{uB z%HRJaR!SV>#+O$Ry#-FIg`>Hr>aNq3QR2*6xK-z=1fe_(?^a@ZhT6~CWs~6_gO@~4 zs~7a1IGJ=?Y|6gddFsZW7o=+oCPo#6V->P|1FZ!o7hjb0x$*wM>3{*0CE810O8UAy z6mSa((rD?AE_-gd^vkDZrtr$3E2vJ}Ih>{J&n!{TJ0dmjM9%xeF=fNf9s5UklV9#0 zJUqctSLuWa{FQLWKXr?9$s)0m;4>;FTq0Qau?C8S7iZpAnh41K9sj>Ui}Iqz_XPE) zvGN+XJZS03;kwcY$(oq@^DJCdN@bQET*8=Ia(uWsJzO-dIAO)A=q9)RW_Gr?wo7-g zs;0$<;{I|*yd4xl`+6p%ee~5wKk~qY^K-KUG%GY5R8HOV>8n}H-|ALpqrFkY&X2s| zBlt9YfDvA7m_ac*fSHr(=hLiaxG>^f#K`$r$1TRrEo5fjT7ds>ntR=|9M;~%!mW*9 zIK8!Aoarck(vfvNuKSdhb={_BUDEn_*Ld?IM6r;FSZ|Nvj}DL{i)gDD-^r;A1Fpcj z;Jkjh#2t5*n)BwR%@rNXAA~EuCSbicXO{fQs9dQBd8!!Q3@IhmTR;S<=)s(m#NnfiSM(q;)Km#!HLgc zNz+q2j&ZAB#@=B=yKx-^RE&RUqgO&BzBY==`Gcn`&h_eF7I1<30Wf1LrImYa2rt*2 zY_F#9JO1xDQUf9yHSNM4F;%KNUk`TJdiTp3)3w?ib84LliVWY@6h7WCx~Mcv*g6l+ zOM0`oPL?+1w=J}bs$?o#xwnfPt0J@vI9m#ZIPd?Qs&hsNn`bah6>G1=o0Qtm5oY2x z;z{9T$n)rW0!s7VGTZNHz23R<*J?7Ax=w_-;e)DS4N^J2X0=S=>Qpe;bMI-{;+08O zBp_sZrzA_{M8-#09BoArqM*j>d{j%rxi;1m9w)VL-5U@$0k-L89g9M^2g-L!laXPk ziur2TKque15>xR!_9e+SV%8DI!24{?c}KkRp%nGXYh5Dno}-=%lc-3i4Bu=XIg!!q z4LmU(_|}X^rqyZTj|kc$_k1&>qoT^J>~aT|qF3TY)XSxB;LxY1HJ!5ueZ{2@bZzyr z^U>C^bg*I_WcM@H{1AXquDHdqn>?eiSS6q8F>=0lJ0vaLYI zKx;-(Fg%gcHViVzM`{^=1b)Z=2e4$dM=Sdt9s!8Qg zi*WEy2Cu)s(-O=b3LU=JQ^9|$LdBjRU5#`MO@8#`v+qQr`{=p8F{vDN$v5%*cYZbp z&~m>#ZgD{X0AxyL#~@WhC4>U%Z&fW%X?1$B6R(4DjnSO0zy&x=t9r!`wCrCkCKd-l zfJ~I(YW@~=46UL;Iii>zS_mQ-q^k;cCTjW1e(1JW`NV1gg~&wl=wW+Zd_Y8ys)e>& zAh@=|H0s$qd$*KB?K4_ZGqlpm5<~j%=0r1hvB=h- zbto-+U1JQHbFZF28h~WmMm`ctrUz67x#Gh7p!10^9lW_t!X=_EWflN@uZoo&cW6$Q zF2x(MQPCkO#NkB7dqVbN=+JT)h?+ouxtov z1x0a!z)|!N_uX%}^C*p03P%HF`kWP>_OX2z z5-24A2}aV?vPFry!iIl7P2k$|f*sPOOVVMgVgQeWk|PR6w;EC)9tYQDESe9PQmAM+ z#N^LiUQY_YcX^5gIRsPK14`kT9)M_}9}0fVgi8VxCJiM8lK3{!ZFY6{42@tK@|E}X zq?c79nXCNST0*IG`~2S7x@%TB;vW-C`^OKX2S5Lg{|!JQ2ejwAH3u9^di9Si3wRY? zRfN43bj;2G8tDQ`y%;mdFBG@V$WikMTCCL|ifh1nMTd68~@oW1%amn84vD z_5f`AHJU%BA;%telvJXD@$&^#c?#p4B#Kle6%tzEU_7I~RT@%xiO=!sqmX%!D$>4TLG~s{CXp1S-1(q2mr8VmKj^ zdl+NrxohwOh76i&!0heEhr;<)IwDdcg{WnH$z92Y$P^75l9-3Mt8z@n@k=2R!XP}93;DnH&Md0wE05#< z1PFm7PQscXbP^IsSPdyqK$L{d5KzJ%MK~k`iZCdkZKb1!kif8ovW6rW+Q=rGNDG!C zE(8z|*&+yv3t<^Wk&XftaU3$CFZ0xM=3yS^?Vfw?)92oEf9KxcIp0s^>y}qtt8KSe z^YbihX`tz?r*5~BxHeX-o-(Y&R?&c#J{IA(SsNmRE%%>uy#B^;{%o4K4|2gXF|HBJ zOulb@myzgSq7vpfj}#>K9-JFc4BH5h}lvt~|rFXz55B~Wnu zL($u}n%Nn!((ho}9@G2~A!~5yp+;6+rEuBL=aIc9h=QdUW&eQ=#d5Uc@($7Gofai8 zq*uJh|0?gZ0KCIa4G&yQxbnq*9&i!CgiBv#Fhb-7k?kI>C0fnpwg_l`sWkiMD6_Xd?B3W}JY$%6$+9Ih~DWhKKogEi|AbS@7W_xdmkJIJB~ykZujam~j%A z%Yq=fDg@9Zo%?N2wX=;?Q+P-13`L$vLNNL#|F|CoBmm7RBzjyX`$2>DHxEo9roys3 zPwm`kXEP*JqJ>mgX|biyBQwSpH_v!Z_#N|M%0~$R!fSmDsGH5Pg(FyRxQD7`Ku-mv zZRVOA@fd3=n)mrnQyQI-#>9GrF0sOfzsN5rG>9k4Hmn~hMMe}Wj6%0KB%XuR4IfjG zuIj`t>|C?Nk&;-@5PPxdpViK8lOCI;A6^rnCfx@k3=f39v;TDxu{;07^^QvGXIEn= zT{$}Yf)(s6^ECTCe?S7@{zWv$6a!#VeY^UzxB7F!+4et8>SmfY zdV3<(F*sqSBi(#W`274Kb`1L<`13a(j)!%=j#{&CdFEGrE$f3Cp8jZII3-HtIeP7*8<>MeGx^{zdk z6_~7iydkbSx$WGOW>9H_!-T!*hKs67bb~h*O-8`Z3ZnxX10t}Yo({sqRmYKAlpTx$ z$dGaB)LEay0P}LCS>k=P_YgCnfXvOkWCg5Rg)I+{+m&Jc-cb~RFs-)Sd_kcEL|yS6 z033y94f7?FwV?g*dYOOnsryXN(teB~l0je7Gt+jU-ZOV81vQpL3BrA!xFbsfnK{5< zqXVjfq!{CI?6o2A^19Ndr8XTWS9z{jsxMfj9f3>n1VScF!ac4~t-yV`!gX>Io^C(g zXYsWu^OGsYAyi^5oMjNuLD|mk6?s9tu3&9;_ zlF;VK`!LSrz8i`wH>Am#SNbnuam8hr*5>&ZbT3;KtNEm=KbAc>m>b5G1jKZ1$DvKk z-Quz#tH@#F(tF-TEjU9>UVzA6_1B4Y0q? z^uZIdIs15IC)ecST5J;yia;Ip6P8Zoym_#E28H7h%-%QJ(Iid{U_Y)Y-Paf8LJ@r& z3CM#on*94J(&Vb_uAE|@E*7w{LTtr_i5H)TBv$@FRn--iH{D`w_A9AAF10}w0Y+GK z2PFKxei^8iR@158T_-ZYU=Ug(c8^%5Mq*Jh$Pe6?>Y)<7XV$yFfUrL<(066miK>H8Y{(t&^PvGCb Ck6beV literal 0 HcmV?d00001 diff --git a/res/rattle/rattle4.mp3 b/res/rattle/rattle4.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..768d17a0f23d49ccf8df0d22b0e8ea91f3bd4913 GIT binary patch literal 105216 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

*?@%NFA1z*p;-Y#i4i;sLnPVprqBDR%s(k}?U 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 B0o4Ei literal 0 HcmV?d00001 From b1f78e219941359efccdbd3e0ca1650c24f8019a Mon Sep 17 00:00:00 2001 From: momothereal Date: Fri, 23 Mar 2018 21:25:59 -0400 Subject: [PATCH 28/61] Cleanup and comments --- bot/cogs/snakes.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 2c65a107..4c9e1de5 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -77,11 +77,13 @@ async def get(self, ctx: Context, name: str = None): log.debug("Sending embed: " + str(data.__dict__)) await channel.send(embed=embed) - async def on_end_voice(self, voice_client): - await voice_client.disconnect() - @command(name="snakes.rattle()", aliases=["snakes.rattle"]) async def rattle(self, ctx: Context): + """ + Play a snake rattle in your voice channel + :param ctx: context + :return: nothing + """ author: discord.Member = ctx.author if author.voice is None or author.voice.channel is None: await ctx.send(author.mention + " You are not in a voice channel!") @@ -95,6 +97,7 @@ async def rattle(self, ctx: Context): rattle, executable=self.ffmpeg_executable if not None else 'ffmpeg' ) + # plays the sound, then dispatches the end_voice event to close the voice client voice_client.play(source, after=lambda x: self.bot.dispatch("end_voice", voice_client)) except discord.ClientException as e: @@ -102,6 +105,10 @@ async def rattle(self, ctx: Context): return pass + # event handler for voice client termination + async def on_end_voice(self, voice_client): + await voice_client.disconnect() + def setup(bot): bot.add_cog(Snakes(bot)) From df7399893b8c7e2ddea88637f6efb98cf6bf0ccb Mon Sep 17 00:00:00 2001 From: momothereal Date: Fri, 23 Mar 2018 21:34:17 -0400 Subject: [PATCH 29/61] Simplify rattle file location --- bot/cogs/snakes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 4c9e1de5..f1c88e2b 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -92,7 +92,7 @@ async def rattle(self, ctx: Context): voice_channel = author.voice.channel voice_client: discord.VoiceClient = await voice_channel.connect() # select random rattle - rattle = os.path.join(os.path.dirname(__file__), '..', '..', 'res', 'rattle', random.choice(self.rattles)) + rattle = os.path.join('res', 'rattle', random.choice(self.rattles)) source = discord.FFmpegPCMAudio( rattle, executable=self.ffmpeg_executable if not None else 'ffmpeg' From c011b73cd2357dc608793a88475028784fb26b88 Mon Sep 17 00:00:00 2001 From: momothereal Date: Fri, 23 Mar 2018 23:14:51 -0400 Subject: [PATCH 30/61] CGI sneks using perlin noise --- Pipfile | 1 + bot/cogs/snakes.py | 73 ++++++++++++++++++++ bot/sneks/perlin.py | 158 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 232 insertions(+) create mode 100644 bot/sneks/perlin.py diff --git a/Pipfile b/Pipfile index 096fb9b3..cae327ad 100644 --- a/Pipfile +++ b/Pipfile @@ -8,6 +8,7 @@ name = "pypi" aiodns = "*" aiohttp = "<2.3.0,>=2.0.0" websockets = ">=4.0,<5.0" +pillow = "*" [dev-packages] "flake8" = "*" diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 7c5c1cf6..4e9f4cfe 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -1,9 +1,15 @@ # coding=utf-8 +import io import logging +import math +import random import discord +from PIL import Image +from PIL.ImageDraw import ImageDraw from discord.ext.commands import AutoShardedBot, Context, command +import bot.sneks.perlin as perlin from bot.sneks.sneks import Embeddable, SnakeDef, scrape_itis log = logging.getLogger(__name__) @@ -67,6 +73,73 @@ async def get(self, ctx: Context, name: str = None): log.debug("Sending embed: " + str(data.__dict__)) await channel.send(embed=embed) + @command(name="snakes.draw()", aliases=["snakes.draw"]) + async def draw(self, ctx: Context): + stream = self.generate_snake_image() + file = discord.File(stream, filename='snek.png') + await ctx.send(file=file) + pass + + def generate_snake_image(self) -> bytes: + """ + Generate a CGI snek using perlin noise + :return: the binary data of the PNG image + """ + fac = perlin.PerlinNoiseFactory(dimension=1, octaves=2) + img_size = 200 + margins = 50 + start_x = random.randint(margins, img_size - margins) + start_y = random.randint(margins, img_size - margins) + points = [(start_x, start_y)] + snake_length = 12 + snake_color = 0x15c7ea + text_color = 0xf2ea15 + background_color = 0x0 + + for i in range(0, snake_length): + angle = math.radians(fac.get_plain_noise((1 / (snake_length + 1)) * (i + 1)) * 360) + curr_point = points[i] + segment_length = random.randint(15, 20) + next_x = curr_point[0] + segment_length * math.cos(angle) + next_y = curr_point[1] + segment_length * math.sin(angle) + points.append((next_x, next_y)) + + # normalize bounds + min_dimensions = [start_x, start_y] + max_dimensions = [start_x, start_y] + for p in points: + if p[0] < min_dimensions[0]: + min_dimensions[0] = p[0] + if p[0] > max_dimensions[0]: + max_dimensions[0] = p[0] + if p[1] < min_dimensions[1]: + min_dimensions[1] = p[1] + if p[1] > max_dimensions[1]: + max_dimensions[1] = p[1] + + # shift towards middle + dimension_range = (max_dimensions[0] - min_dimensions[0], max_dimensions[1] - min_dimensions[1]) + shift = ( + img_size / 2 - (dimension_range[0] / 2 + min_dimensions[0]), + img_size / 2 - (dimension_range[1] / 2 + min_dimensions[1]) + ) + + img = Image.new(mode='RGB', size=(img_size, img_size), color=background_color) + draw = ImageDraw(img) + for i in range(1, len(points)): + p = points[i] + prev = points[i - 1] + draw.line( + (shift[0] + prev[0], shift[1] + prev[1], shift[0] + p[0], shift[1] + p[1]), + width=8, + fill=snake_color + ) + draw.multiline_text((img_size - margins, img_size - margins), text="snek\nit\nup", fill=text_color) + del draw + stream = io.BytesIO() + img.save(stream, format='PNG') + return stream.getvalue() + def setup(bot): bot.add_cog(Snakes(bot)) diff --git a/bot/sneks/perlin.py b/bot/sneks/perlin.py new file mode 100644 index 00000000..ea9a7d30 --- /dev/null +++ b/bot/sneks/perlin.py @@ -0,0 +1,158 @@ +""" +Perlin noise implementation. +Taken from: https://gist.github.com/eevee/26f547457522755cb1fb8739d0ea89a1 +Licensed under ISC +""" +import math +import random +# Licensed under ISC +from itertools import product + + +def smoothstep(t): + """Smooth curve with a zero derivative at 0 and 1, making it useful for + interpolating. + """ + return t * t * (3. - 2. * t) + + +def lerp(t, a, b): + """Linear interpolation between a and b, given a fraction t.""" + return a + t * (b - a) + + +class PerlinNoiseFactory(object): + """Callable that produces Perlin noise for an arbitrary point in an + arbitrary number of dimensions. The underlying grid is aligned with the + integers. + There is no limit to the coordinates used; new gradients are generated on + the fly as necessary. + """ + + def __init__(self, dimension, octaves=1, tile=(), unbias=False): + """Create a new Perlin noise factory in the given number of dimensions, + which should be an integer and at least 1. + More octaves create a foggier and more-detailed noise pattern. More + than 4 octaves is rather excessive. + ``tile`` can be used to make a seamlessly tiling pattern. For example: + pnf = PerlinNoiseFactory(2, tile=(0, 3)) + This will produce noise that tiles every 3 units vertically, but never + tiles horizontally. + If ``unbias`` is true, the smoothstep function will be applied to the + output before returning it, to counteract some of Perlin noise's + significant bias towards the center of its output range. + """ + self.dimension = dimension + self.octaves = octaves + self.tile = tile + (0,) * dimension + self.unbias = unbias + + # For n dimensions, the range of Perlin noise is ยฑsqrt(n)/2; multiply + # by this to scale to ยฑ1 + self.scale_factor = 2 * dimension ** -0.5 + + self.gradient = {} + + def _generate_gradient(self): + # Generate a random unit vector at each grid point -- this is the + # "gradient" vector, in that the grid tile slopes towards it + + # 1 dimension is special, since the only unit vector is trivial; + # instead, use a slope between -1 and 1 + if self.dimension == 1: + return (random.uniform(-1, 1),) + + # Generate a random point on the surface of the unit n-hypersphere; + # this is the same as a random unit vector in n dimensions. Thanks + # to: http://mathworld.wolfram.com/SpherePointPicking.html + # Pick n normal random variables with stddev 1 + random_point = [random.gauss(0, 1) for _ in range(self.dimension)] + # Then scale the result to a unit vector + scale = sum(n * n for n in random_point) ** -0.5 + return tuple(coord * scale for coord in random_point) + + def get_plain_noise(self, *point): + """Get plain noise for a single point, without taking into account + either octaves or tiling. + """ + if len(point) != self.dimension: + raise ValueError("Expected {} values, got {}".format( + self.dimension, len(point))) + + # Build a list of the (min, max) bounds in each dimension + grid_coords = [] + for coord in point: + min_coord = math.floor(coord) + max_coord = min_coord + 1 + grid_coords.append((min_coord, max_coord)) + + # Compute the dot product of each gradient vector and the point's + # distance from the corresponding grid point. This gives you each + # gradient's "influence" on the chosen point. + dots = [] + for grid_point in product(*grid_coords): + if grid_point not in self.gradient: + self.gradient[grid_point] = self._generate_gradient() + gradient = self.gradient[grid_point] + + dot = 0 + for i in range(self.dimension): + dot += gradient[i] * (point[i] - grid_point[i]) + dots.append(dot) + + # Interpolate all those dot products together. The interpolation is + # done with smoothstep to smooth out the slope as you pass from one + # grid cell into the next. + # Due to the way product() works, dot products are ordered such that + # the last dimension alternates: (..., min), (..., max), etc. So we + # can interpolate adjacent pairs to "collapse" that last dimension. Then + # the results will alternate in their second-to-last dimension, and so + # forth, until we only have a single value left. + dim = self.dimension + while len(dots) > 1: + dim -= 1 + s = smoothstep(point[dim] - grid_coords[dim][0]) + + next_dots = [] + while dots: + next_dots.append(lerp(s, dots.pop(0), dots.pop(0))) + + dots = next_dots + + return dots[0] * self.scale_factor + + def __call__(self, *point): + """Get the value of this Perlin noise function at the given point. The + number of values given should match the number of dimensions. + """ + ret = 0 + for o in range(self.octaves): + o2 = 1 << o + new_point = [] + for i, coord in enumerate(point): + coord *= o2 + if self.tile[i]: + coord %= self.tile[i] * o2 + new_point.append(coord) + ret += self.get_plain_noise(*new_point) / o2 + + # Need to scale n back down since adding all those extra octaves has + # probably expanded it beyond ยฑ1 + # 1 octave: ยฑ1 + # 2 octaves: ยฑ1ยฝ + # 3 octaves: ยฑ1ยพ + ret /= 2 - 2 ** (1 - self.octaves) + + if self.unbias: + # The output of the plain Perlin noise algorithm has a fairly + # strong bias towards the center due to the central limit theorem + # -- in fact the top and bottom 1/8 virtually never happen. That's + # a quarter of our entire output range! If only we had a function + # in [0..1] that could introduce a bias towards the endpoints... + r = (ret + 1) / 2 + # Doing it this many times is a completely made-up heuristic. + for _ in range(int(self.octaves / 2 + 0.5)): + r = smoothstep(r) + ret = r * 2 - 1 + + return ret From f77e0dcac75e567d26b357f96dd839c79301efcc Mon Sep 17 00:00:00 2001 From: Kel Date: Fri, 23 Mar 2018 20:21:10 -0700 Subject: [PATCH 31/61] before merge --- bot/cogs/snakes.py | 20 +++++++------ bot/sneks/search.py | 69 --------------------------------------------- bot/sneks/sneks.py | 5 +++- 3 files changed, 15 insertions(+), 79 deletions(-) delete mode 100644 bot/sneks/search.py diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 92538148..e44ad65b 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -28,7 +28,7 @@ SNEK_SAD.title = "sad snek :(" SNEK_SAD.set_image(url="https://momoperes.ca/files/sadsnek.jpeg") -# max messages per user +# max messages to train on per user MSG_MAX = 100 class Snakes: @@ -61,30 +61,32 @@ async def get(self, ctx: Context, name: str = None): channel: discord.TextChannel = ctx.channel await channel.send(embed=data.as_embed()) + @command(name="snakes.snakeme()",aliases=["snakes.snakeme","snakeme"]) - # takes your last messages, trains an simple markov chain generator on what you've said, and snakifies it async def snakeme(self, ctx: Context): - + # takes your last messages, trains a simple markov chain generator on what you've said, snakifies your response author = ctx.message.author if(len(ctx.message.mentions) == 0) else ctx.message.mentions[0] channel : discord.TextChannel = ctx.channel channels = [ channel for channel in ctx.message.guild.channels if isinstance(channel,discord.TextChannel) ] channels_messages = [ await channel.history(limit=1000).flatten() for channel in channels] - msgs = [msg for channel_messages in channels_messages for msg in channel_messages] + msgs = [msg for channel_messages in channels_messages for msg in channel_messages][:MSG_MAX] my_msgs = list(filter(lambda msg: msg.author == author, msgs)) - my_msgs_content = list(map(lambda x:x.content, my_msgs)) + my_msgs_content = "\n".join(list(map(lambda x:x.content, my_msgs))) mc = MarkovChain() - mc.generateDatabase("\n".join(my_msgs_content)) + mc.generateDatabase(my_msgs_content) sentence = mc.generateString() snakeme = discord.Embed() - snakeme.set_author(name=author.name + "#" + author.discriminator + " Snake", icon_url = "https://cdn.discordapp.com/avatars/{}/{}".format(author.id,author.avatar)) + snakeme.set_author(name="{}#{} Snake".format(author.name,author.discriminator), icon_url = "https://cdn.discordapp.com/avatars/{}/{}".format(author.id,author.avatar)) snakeme.description = "*{}*".format(snakify(sentence) if sentence is not None else ":question: Not enough messages") - await channel.send(snakeme.description) - + await channel.send(snakeme) + @command(name="snakes.hatch()", aliases=["snakes.hatch"]) + async def hatch(self,ctx: Context): + def setup(bot): bot.add_cog(Snakes(bot)) diff --git a/bot/sneks/search.py b/bot/sneks/search.py deleted file mode 100644 index 237e4712..00000000 --- a/bot/sneks/search.py +++ /dev/null @@ -1,69 +0,0 @@ -import urllib -from bs4 import BeautifulSoup as BS - -from .sneks import SnakeDef - -DBPEDIA_BASE_URL = "http://dbpedia.org/page/" -WIKI_BASE_URL = "http://wikipedia.org/wiki/page/" - -def fc(s): - return s[0].upper() + s[1:] if (s is not None and len(s) > 0) else None - -def query_url(query): - return DBPEDIA_BASE_URL + fc("_".join(query.split(" "))) - - -def add_oc(ocs,oc_raw): - if oc_raw["rel"][0] in ocs: - ocs[oc_raw["rel"][0]].append(oc_raw.getText()) - else: - ocs[oc_raw["rel"][0]] = [oc_raw.getText()] - - -def db_strip(s): - return s.replace("dbo:","").replace("dbr:","") - - -def search(query): - - snake = SnakeDef() - # already assume query is not None, not checking - snake_query_url = query_url(query) - - - try: - html = urllib.request.urlopen(snake_query_url).read() - except urllib.error.HTTPError: - return None - - soup = BS(html, "lxml") - - oc_raws = soup.findAll("a",{ "class": "uri", "rel": True}) - ocs = {} - for oc_raw in oc_raws: - add_oc(ocs,oc_raw) - - - # result has a valid dbpedia page but not a snake - if("dbr:Snake" not in ocs["dbo:order"]): - return None - - # reformat, messily written - - snake.family = ",".join(list(map(db_strip,ocs["dbo:family"]))) - snake.genus = ",".join(list(map(db_strip,ocs["dbo:genus"]))) - snake.species = " ".join(list(map(fc, query.split(" ")))) - snake.wiki_link = WIKI_BASE_URL + fc("_".join(query.split(" "))) - - return snake - - - - - - - - - - - diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index 817c3c36..3c8ff0ec 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -32,4 +32,7 @@ def as_embed(self): def snakify(s): x = random.randint(3,8) - return s.replace("s", x * "s" ) if s is not None else s \ No newline at end of file + y = random.randint(3,8) + ss = s.replace("s", x * "s" ).replace("e", y * "e") if s is not None else s + + From 81d9327d62541085820def1cf445dfea5b5a84a1 Mon Sep 17 00:00:00 2001 From: Kel Date: Fri, 23 Mar 2018 20:28:55 -0700 Subject: [PATCH 32/61] accidentally commited in progress command --- bot/cogs/snakes.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 6ea1065c..303a9071 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -95,9 +95,6 @@ async def snakeme(self, ctx: Context): snakeme.set_author(name="{}#{} Snake".format(author.name,author.discriminator), icon_url = "https://cdn.discordapp.com/avatars/{}/{}".format(author.id,author.avatar)) snakeme.description = "*{}*".format(snakify(sentence) if sentence is not None else ":question: Not enough messages") await channel.send(snakeme) - - @command(name="snakes.hatch()", aliases=["snakes.hatch"]) - async def hatch(self,ctx: Context): def setup(bot): From abd48a4e1ebe9d88d23979d188ea08801a5afedb Mon Sep 17 00:00:00 2001 From: momothereal Date: Fri, 23 Mar 2018 23:39:29 -0400 Subject: [PATCH 33/61] Sync piplock --- Pipfile.lock | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/Pipfile.lock b/Pipfile.lock index d1bf3b0b..6cd06000 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "6ed38e4884b2da0115da985b3106103f6525e64f216eadbc2e572509e1bca2cb" + "sha256": "9b332f45744c325bbee7e0e66ce665d9021c62b4c26e181f335f1474bfd972fc" }, "pipfile-spec": 6, "requires": { @@ -186,6 +186,12 @@ ], "version": "==2.3.0" }, + "pycparser": { + "hashes": [ + "sha256:99a8ca03e29851d96616ad0404b4aad7d9ee16f25c9f9708a11faf2810f7b226" + ], + "version": "==2.18" + }, "pymarkovchain": { "hashes": [ "sha256:f8a03fba5d9f390b528991f5e3411188b545aa16a7131cea44c5f9cf1814d08a" @@ -193,6 +199,42 @@ "index": "pypi", "version": "==1.8" }, + "pynacl": { + "hashes": [ + "sha256:04e30e5bdeeb2d5b34107f28cd2f5bbfdc6c616f3be88fc6f53582ff1669eeca", + "sha256:0bfa0d94d2be6874e40f896e0a67e290749151e7de767c5aefbad1121cad7512", + "sha256:11aa4e141b2456ce5cecc19c130e970793fa3a2c2e6fbb8ad65b28f35aa9e6b6", + "sha256:13bdc1fe084ff9ac7653ae5a924cae03bf4bb07c6667c9eb5b6eb3c570220776", + "sha256:14339dc233e7a9dda80a3800e64e7ff89d0878ba23360eea24f1af1b13772cac", + "sha256:1d33e775fab3f383167afb20b9927aaf4961b953d76eeb271a5703a6d756b65b", + "sha256:2a42b2399d0428619e58dac7734838102d35f6dcdee149e0088823629bf99fbb", + "sha256:2dce05ac8b3c37b9e2f65eab56c544885607394753e9613fd159d5e2045c2d98", + "sha256:6453b0dae593163ffc6db6f9c9c1597d35c650598e2c39c0590d1757207a1ac2", + "sha256:73a5a96fb5fbf2215beee2353a128d382dbca83f5341f0d3c750877a236569ef", + "sha256:8abb4ef79161a5f58848b30ab6fb98d8c466da21fdd65558ce1d7afc02c70b5f", + "sha256:8ac1167195b32a8755de06efd5b2d2fe76fc864517dab66aaf65662cc59e1988", + "sha256:8f505f42f659012794414fa57c498404e64db78f1d98dfd40e318c569f3c783b", + "sha256:be71cd5fce04061e1f3d39597f93619c80cdd3558a6c9ba99a546f144a8d8101", + "sha256:cf6877124ae6a0698404e169b3ba534542cfbc43f939d46b927d956daf0a373a", + "sha256:d0eb5b2795b7ee2cbcfcadacbe95a13afbda048a262bd369da9904fecb568975", + "sha256:d795f506bcc9463efb5ebb0f65ed77921dcc9e0a50499dedd89f208445de9ecb", + "sha256:d8aaf7e5d6b0e0ef7d6dbf7abeb75085713d0100b4eb1a4e4e857de76d77ac45", + "sha256:e0d38fa0a75f65f556fb912f2c6790d1fa29b7dd27a1d9cc5591b281321eaaa9", + "sha256:eb2acabbd487a46b38540a819ef67e477a674481f84a82a7ba2234b9ba46f752", + "sha256:eeee629828d0eb4f6d98ac41e9a3a6461d114d1d0aa111a8931c049359298da0", + "sha256:f5ce9e26d25eb0b2d96f3ef0ad70e1d3ae89b5d60255c462252a3e456a48c053", + "sha256:fabf73d5d0286f9e078774f3435601d2735c94ce9e514ac4fb945701edead7e4" + ], + "index": "pypi", + "version": "==1.2.1" + }, + "six": { + "hashes": [ + "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", + "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" + ], + "version": "==1.11.0" + }, "websockets": { "hashes": [ "sha256:0c31bc832d529dc7583d324eb6c836a4f362032a1902723c112cf57883488d8c", From 16c4a366ffe0943241a5b05983ce796095e2ec64 Mon Sep 17 00:00:00 2001 From: momothereal Date: Sat, 24 Mar 2018 02:35:37 -0400 Subject: [PATCH 34/61] Snakes and Ladders - Initial work --- bot/cogs/snakes.py | 57 +++++++++++++++++-- bot/sneks/sal.py | 122 +++++++++++++++++++++++++++++++++++++++++ res/ladders/banner.jpg | Bin 0 -> 17928 bytes res/ladders/board.jpg | Bin 0 -> 80264 bytes 4 files changed, 175 insertions(+), 4 deletions(-) create mode 100644 bot/sneks/sal.py create mode 100644 res/ladders/banner.jpg create mode 100644 res/ladders/board.jpg diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index f1581421..85a97984 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -2,10 +2,12 @@ import logging import os import random +from typing import Dict import discord from discord.ext.commands import AutoShardedBot, Context, command +from bot.sneks.sal import SnakeAndLaddersGame from bot.sneks.sneks import Embeddable, SnakeDef, scrape_itis, snakify from pymarkovchain import MarkovChain @@ -45,6 +47,7 @@ def __init__(self, bot: AutoShardedBot): 'rattle4.mp3' ] self.ffmpeg_executable = os.environ.get('FFMPEG') + self.active_sal: Dict[discord.TextChannel, SnakeAndLaddersGame] = {} async def get_snek(self, name: str = None) -> Embeddable: """ @@ -56,9 +59,9 @@ async def get_snek(self, name: str = None) -> Embeddable: # return info about language return SNEK_PYTHON - web_search = search.search(name) - if(web_search is not None): - return web_search + # web_search = search.search(name) + # if(web_search is not None): + # return web_search # todo: find a random snek online if there name is null # todo: scrape the web to find the lost sneks if name is not None: @@ -115,6 +118,52 @@ async def rattle(self, ctx: Context): async def on_end_voice(self, voice_client): await voice_client.disconnect() + @command(name="sal.create()", aliases=["sal.create"]) + async def create_sal(self, ctx: Context): + # check if there is already a game in this channel + channel: discord.TextChannel = ctx.channel + if channel in self.active_sal: + await ctx.send(ctx.author.mention + " A game is already in progress in this channel.") + return + game = SnakeAndLaddersGame(snakes=self, channel=channel, author=ctx.author) + self.active_sal[channel] = game + await game.open_game() + + @command(name="sal.join()", aliases=["sal.join"]) + async def join_sal(self, ctx: Context): + channel: discord.TextChannel = ctx.channel + if channel not in self.active_sal: + await ctx.send(ctx.author.mention + " There is not Snakes & Ladders game in this channel.") + return + game = self.active_sal[channel] + await game.player_join(ctx.author) + + @command(name="sal.leave()", aliases=["sal.leave", "sal.quit"]) + async def leave_sal(self, ctx: Context): + channel: discord.TextChannel = ctx.channel + if channel not in self.active_sal: + await ctx.send(ctx.author.mention + " There is not Snakes & Ladders game in this channel.") + return + game = self.active_sal[channel] + await game.player_leave(ctx.author) + + @command(name="sal.cancel()", aliases=["sal.cancel"]) + async def cancel_sal(self, ctx: Context): + channel: discord.TextChannel = ctx.channel + if channel not in self.active_sal: + await ctx.send(ctx.author.mention + " There is not Snakes & Ladders game in this channel.") + return + game = self.active_sal[channel] + await game.cancel_game(ctx.author) + + @command(name="sal.start()", aliases=["sal.start"]) + async def start_sal(self, ctx: Context): + channel: discord.TextChannel = ctx.channel + if channel not in self.active_sal: + await ctx.send(ctx.author.mention + " There is not Snakes & Ladders game in this channel.") + return + game = self.active_sal[channel] + await game.start_game(ctx.author) @command(name="snakes.snakeme()",aliases=["snakes.snakeme","snakeme"]) async def snakeme(self, ctx: Context): @@ -137,7 +186,7 @@ async def snakeme(self, ctx: Context): snakeme.set_author(name="{}#{} Snake".format(author.name,author.discriminator), icon_url = "https://cdn.discordapp.com/avatars/{}/{}".format(author.id,author.avatar)) snakeme.description = "*{}*".format(snakify(sentence) if sentence is not None else ":question: Not enough messages") await channel.send(snakeme) - + def setup(bot): bot.add_cog(Snakes(bot)) diff --git a/bot/sneks/sal.py b/bot/sneks/sal.py new file mode 100644 index 00000000..5b1948f3 --- /dev/null +++ b/bot/sneks/sal.py @@ -0,0 +1,122 @@ +import io +import math +import os +from typing import List, Dict + +import aiohttp +import discord +from PIL import Image + +BOARD_TILE_SIZE = 56 # pixels +BOARD_PLAYER_SIZE = 20 + + +class SnakeAndLaddersGame: + def __init__(self, snakes, channel: discord.TextChannel, author: discord.Member): + self.snakes = snakes + self.channel = channel + self.state = 'booting' + self.author = author + self.players: List[discord.Member] = [] + self.player_tiles: Dict[int, int] = {} + self.avatar_images: Dict[int, Image] = {} + + async def open_game(self): + await self._add_player(self.author) + await self.channel.send( + '**Snakes and Ladders**: A new game is about to start!\nMention me and type **sal.join** to participate.', + file=discord.File(os.path.join('res', 'ladders', 'banner.jpg'), filename='Snakes and Ladders.jpg')) + self.state = 'waiting' + + async def _add_player(self, user: discord.Member): + self.players.append(user) + self.player_tiles[user.id] = 1 + avatar_url = user.avatar_url_as(format='jpeg', size=32) + async with aiohttp.ClientSession() as session: + async with session.get(avatar_url) as res: + avatar_bytes = await res.read() + im = Image.open(io.BytesIO(avatar_bytes)).resize((20, 20)) + self.avatar_images[user.id] = im + + async def player_join(self, user: discord.Member): + for p in self.players: + if user == p: + await self.channel.send(user.mention + " You are already in the game.") + return + if self.state != 'waiting': + await self.channel.send(user.mention + " You cannot join at this time.") + return + if len(self.players) is 4: + await self.channel.send(user.mention + " The game is full!") + return + + await self._add_player(user) + + await self.channel.send( + "**Snake and Ladders**: " + user.mention + " has joined the game.\nThere are now " + str( + len(self.players)) + " players in the game.") + pass + + async def player_leave(self, user: discord.Member): + if user == self.author: + await self.channel.send(user.mention + " You are the author, and cannot leave the game. Execute " + "`sal.cancel` to cancel the game.") + return + for p in self.players: + if user == p: + self.players.remove(p) + del self.player_tiles[p.id] + await self.channel.send(user.mention + " You left the game.") + return + await self.channel.send(user.mention + " You are not in the match.") + + async def cancel_game(self, user: discord.Member): + if not user == self.author: + await self.channel.send(user.mention + " Only the author of the game can cancel it.") + return + await self.channel.send("**Snakes and Ladders**: Game has been canceled.") + del self.snakes.active_sal[self.channel] + + async def start_game(self, user: discord.Member): + if not user == self.author: + await self.channel.send(user.mention + " Only the author of the game can start it.") + return + # todo: minimum players = 2, max players = 4 + if not self.state == 'waiting': + await self.channel.send(user.mention + " The game cannot be started at this time.") + return + self.state = 'starting' + player_list = ', '.join(user.mention for user in self.players) + await self.channel.send("**Snake and Ladders**: The game is starting!\nPlayers: " + player_list) + await self.start_round() + return + + async def start_round(self): + board_img = Image.open(os.path.join('res', 'ladders', 'board.jpg')) + for i, player in enumerate(self.players): + tile = self.player_tiles[player.id] + tile_coordinates = self._board_coordinate_from_index(tile) + x_offset = 8 + tile_coordinates[0] * BOARD_TILE_SIZE + y_offset = (10 * BOARD_TILE_SIZE) - (9 - tile_coordinates[1]) * BOARD_TILE_SIZE - BOARD_PLAYER_SIZE + if i % 2 != 0: + x_offset += BOARD_PLAYER_SIZE + if i > 1: + y_offset -= BOARD_PLAYER_SIZE + board_img.paste(self.avatar_images[player.id], + box=(x_offset, y_offset)) + stream = io.BytesIO() + board_img.save(stream, format='JPEG') + board_file = discord.File(stream.getvalue(), filename='Board.jpg') + await self.channel.send("**Snakes and Ladders**: A new round has started! Current board:", file=board_file) + player_list = '\n'.join((user.mention + ": Tile " + str(self.player_tiles[user.id])) for user in self.players) + await self.channel.send( + "**Current positions**:\n" + player_list + "\n\nMention me with **roll** to roll the dice!") + + def _board_coordinate_from_index(self, index: int): + # converts the tile number to the x/y coordinates for graphical purposes + y_level = 9 - math.floor((index - 1) / 10) + is_reversed = math.floor((index - 1) / 10) % 2 != 0 + x_level = (index - 1) % 10 + if is_reversed: + x_level = 9 - x_level + return x_level, y_level diff --git a/res/ladders/banner.jpg b/res/ladders/banner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..69eaaf129e66d8d6cfa03a5af18acf66de284ef8 GIT binary patch literal 17928 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

`r literal 0 HcmV?d00001 diff --git a/res/ladders/board.jpg b/res/ladders/board.jpg new file mode 100644 index 0000000000000000000000000000000000000000..20032e3915a3d690221ce79005f277d0421cb3be GIT binary patch literal 80264 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 Date: Fri, 23 Mar 2018 23:41:32 -0700 Subject: [PATCH 35/61] fixed snakeme, added hatching --- Pipfile | 1 + Pipfile.lock | 12 ++++++++++- bot/cogs/snakes.py | 50 +++++++++++++++++++++++++++++++++++++------ bot/sneks/hatching.py | 47 ++++++++++++++++++++++++++++++++++++++++ bot/sneks/sneks.py | 2 +- 5 files changed, 104 insertions(+), 8 deletions(-) create mode 100644 bot/sneks/hatching.py diff --git a/Pipfile b/Pipfile index c205105e..7a2c2cba 100644 --- a/Pipfile +++ b/Pipfile @@ -10,6 +10,7 @@ aiohttp = "<2.3.0,>=2.0.0" websockets = ">=4.0,<5.0" lxml = "*" pymarkovchain = "*" +asyncio = "*" [dev-packages] "flake8" = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 45405632..da00c4d8 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "6ed38e4884b2da0115da985b3106103f6525e64f216eadbc2e572509e1bca2cb" + "sha256": "435b1967b17f4d0a8572f939a25d66525e1752653baf041c4ec44763740dfc31" }, "pipfile-spec": 6, "requires": { @@ -53,6 +53,16 @@ ], "version": "==2.0.1" }, + "asyncio": { + "hashes": [ + "sha256:83360ff8bc97980e4ff25c964c7bd3923d333d177aa4f7fb736b019f26c7cb41", + "sha256:b62c9157d36187eca799c378e572c969f0da87cd5fc42ca372d92cdb06e7e1de", + "sha256:c46a87b48213d7464f22d9a497b9eef8c1928b68320a2fa94240f969f6fec08c", + "sha256:c4d18b22701821de07bd6aea8b53d21449ec0ec5680645e5317062ea21817d2d" + ], + "index": "pypi", + "version": "==3.4.3" + }, "chardet": { "hashes": [ "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 303a9071..767a15f1 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -6,6 +6,9 @@ from bot.sneks.sneks import Embeddable, SnakeDef, scrape_itis, snakify from pymarkovchain import MarkovChain +from bot.sneks.hatching import hatching,hatching_snakes +import asyncio +import random log = logging.getLogger(__name__) @@ -76,15 +79,20 @@ async def get(self, ctx: Context, name: str = None): @command(name="snakes.snakeme()",aliases=["snakes.snakeme","snakeme"]) async def snakeme(self, ctx: Context): - # takes your last messages, trains a simple markov chain generator on what you've said, snakifies your response - author = ctx.message.author if(len(ctx.message.mentions) == 0) else ctx.message.mentions[0] + """ + How would I talk if I were a snake? + :param ctx: context + :return: you, snakified based on your Discord message history + """ + mentions = list(filter(lambda m:m.id != self.bot.user.id,ctx.message.mentions)) + author = ctx.message.author if(len(mentions) == 0) else ctx.message.mentions[0] channel : discord.TextChannel = ctx.channel channels = [ channel for channel in ctx.message.guild.channels if isinstance(channel,discord.TextChannel) ] - channels_messages = [ await channel.history(limit=1000).flatten() for channel in channels] + channels_messages = [ await channel.history(limit=10000).flatten() for channel in channels] msgs = [msg for channel_messages in channels_messages for msg in channel_messages][:MSG_MAX] - my_msgs = list(filter(lambda msg: msg.author == author, msgs)) + my_msgs = list(filter(lambda msg: msg.author.id == author.id, msgs)) my_msgs_content = "\n".join(list(map(lambda x:x.content, my_msgs))) mc = MarkovChain() @@ -92,9 +100,39 @@ async def snakeme(self, ctx: Context): sentence = mc.generateString() snakeme = discord.Embed() - snakeme.set_author(name="{}#{} Snake".format(author.name,author.discriminator), icon_url = "https://cdn.discordapp.com/avatars/{}/{}".format(author.id,author.avatar)) + snakeme.set_author(name="{}#{}".format(author.name,author.discriminator), icon_url = "https://cdn.discordapp.com/avatars/{}/{}".format(author.id,author.avatar) if author.avatar is not None else "https://img00.deviantart.net/eee3/i/2017/168/3/4/discord__app__avatar_rev1_by_nodeviantarthere-dbd2tp9.png") snakeme.description = "*{}*".format(snakify(sentence) if sentence is not None else ":question: Not enough messages") - await channel.send(snakeme) + await channel.send(embed=snakeme) + + + @command(name="snakes.hatch()",aliases=["snakes.hatch","hatch"]) + async def hatch(self,ctx: Context): + """ + Hatches your personal snake + :param ctx: context + :return: baby snake + """ + channel: discord.TextChannel = ctx.channel + + my_snake = list(hatching_snakes.keys())[random.randint(0,3)] + my_snake_img = hatching_snakes[my_snake] + print(my_snake_img) + + m = await channel.send(embed=discord.Embed(description="Hatching your snake :snake:...")) + await asyncio.sleep(1) + + for i in range(len(hatching)): + hatch_embed = discord.Embed(description = hatching[i]) + await m.edit(embed = hatch_embed) + await asyncio.sleep(1) + # await m.edit(embed = discord.Embed().set_thumbnail(url="https://i.imgur.com/5QHH4If.jpg")) + await asyncio.sleep(1) + await m.delete() + + my_snake_embed = discord.Embed(description=":tada: Congrats!! You hatched: **{}**".format(my_snake)) + my_snake_embed.set_thumbnail(url=my_snake_img) + my_snake_embed.set_footer(text=" Owner: {}#{}".format(ctx.message.author.name,ctx.message.author.discriminator)) + await channel.send(embed=my_snake_embed) def setup(bot): diff --git a/bot/sneks/hatching.py b/bot/sneks/hatching.py new file mode 100644 index 00000000..454b0e83 --- /dev/null +++ b/bot/sneks/hatching.py @@ -0,0 +1,47 @@ +import os + +h1='''``` + ---- + ------ + /--------\\ + |--------| + |--------| + \------/ + ----```''' + +h2='''``` + ---- + ------ + /---\\-/--\\ + |-----\\--| + |--------| + \------/ + ----```''' + +h3='''``` + ---- + ------ + /---\\-/--\\ + |-----\\--| + |-----/--| + \----\\-/ + ----```''' + +h4='''``` + ----- + ----- \\ + /--| /---\\ + |--\\ -\\---| + |--\\--/-- / + \------- / + ------```''' + +hatching = [h1,h2,h3,h4] +hatching_snakes = { + "Baby Python": "https://i.imgur.com/SYOcmSa.png", + "Baby Rattle Snake": "https://i.imgur.com/i5jYA8f.png", + "Baby Dragon Snake": "https://i.imgur.com/SuMKM4m.png", + "Baby Garden Snake": "https://i.imgur.com/5vYx3ah.png", + "Baby Cobra": "https://i.imgur.com/jk14ryt.png" +} + diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index 3a5ad57f..8c26f5b8 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -230,4 +230,4 @@ async def scrape_itis(name: str) -> Embeddable: def snakify(s): x = random.randint(3,8) y = random.randint(3,8) - ss = s.replace("s", x * "s" ).replace("e", y * "e") if s is not None else s + return s.replace("s", x * "s" ).replace("e", y * "e") if s is not None else s From d779f22272edcbaa327940e70ae4348b175c4d44 Mon Sep 17 00:00:00 2001 From: momothereal Date: Sat, 24 Mar 2018 03:30:30 -0400 Subject: [PATCH 36/61] S&L rolling --- bot/cogs/snakes.py | 9 ++++++++ bot/sneks/sal.py | 57 ++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 61 insertions(+), 5 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 85a97984..a625d994 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -165,6 +165,15 @@ async def start_sal(self, ctx: Context): game = self.active_sal[channel] await game.start_game(ctx.author) + @command(name="sal.roll()", aliases=["sal.roll", "roll"]) + async def roll_sal(self, ctx: Context): + channel: discord.TextChannel = ctx.channel + if channel not in self.active_sal: + await ctx.send(ctx.author.mention + " There is not Snakes & Ladders game in this channel.") + return + game = self.active_sal[channel] + await game.player_roll(ctx.author) + @command(name="snakes.snakeme()",aliases=["snakes.snakeme","snakeme"]) async def snakeme(self, ctx: Context): # takes your last messages, trains a simple markov chain generator on what you've said, snakifies your response diff --git a/bot/sneks/sal.py b/bot/sneks/sal.py index 5b1948f3..59fb533f 100644 --- a/bot/sneks/sal.py +++ b/bot/sneks/sal.py @@ -1,6 +1,7 @@ import io import math import os +import random from typing import List, Dict import aiohttp @@ -19,6 +20,7 @@ def __init__(self, snakes, channel: discord.TextChannel, author: discord.Member) self.author = author self.players: List[discord.Member] = [] self.player_tiles: Dict[int, int] = {} + self.round_has_rolled: Dict[int, bool] = {} self.avatar_images: Dict[int, Image] = {} async def open_game(self): @@ -55,7 +57,6 @@ async def player_join(self, user: discord.Member): await self.channel.send( "**Snake and Ladders**: " + user.mention + " has joined the game.\nThere are now " + str( len(self.players)) + " players in the game.") - pass async def player_leave(self, user: discord.Member): if user == self.author: @@ -66,7 +67,10 @@ async def player_leave(self, user: discord.Member): if user == p: self.players.remove(p) del self.player_tiles[p.id] - await self.channel.send(user.mention + " You left the game.") + await self.channel.send(user.mention + " has left the game.") + if self.state != 'waiting' and len(self.players) == 1: + await self.channel.send("**Snake and Ladders**: The game has been surrendered!") + self._destruct() return await self.channel.send(user.mention + " You are not in the match.") @@ -75,13 +79,15 @@ async def cancel_game(self, user: discord.Member): await self.channel.send(user.mention + " Only the author of the game can cancel it.") return await self.channel.send("**Snakes and Ladders**: Game has been canceled.") - del self.snakes.active_sal[self.channel] + self._destruct() async def start_game(self, user: discord.Member): if not user == self.author: await self.channel.send(user.mention + " Only the author of the game can start it.") return - # todo: minimum players = 2, max players = 4 + if len(self.players) < 2: + await self.channel.send(user.mention + " A minimum of 2 players is required to start the game.") + return if not self.state == 'waiting': await self.channel.send(user.mention + " The game cannot be started at this time.") return @@ -89,9 +95,11 @@ async def start_game(self, user: discord.Member): player_list = ', '.join(user.mention for user in self.players) await self.channel.send("**Snake and Ladders**: The game is starting!\nPlayers: " + player_list) await self.start_round() - return async def start_round(self): + self.state = 'roll' + for user in self.players: + self.round_has_rolled[user.id] = False board_img = Image.open(os.path.join('res', 'ladders', 'board.jpg')) for i, player in enumerate(self.players): tile = self.player_tiles[player.id] @@ -112,6 +120,45 @@ async def start_round(self): await self.channel.send( "**Current positions**:\n" + player_list + "\n\nMention me with **roll** to roll the dice!") + async def player_roll(self, user: discord.Member): + if user.id not in self.player_tiles: + await self.channel.send(user.mention + " You are not in the match.") + return + if self.state != 'roll': + await self.channel.send(user.mention + " You may not roll at this time.") + return + if self.round_has_rolled[user.id]: + await self.channel.send(user.mention + " You have already rolled this round, please be patient.") + return + roll = random.randint(1, 6) + next_tile = self.player_tiles[user.id] + roll + # todo: apply snakes and ladders + self.player_tiles[user.id] = min(100, next_tile) + self.round_has_rolled[user.id] = True + await self.channel.send(user.mention + " rolled a **{0}**!".format(roll)) + if self._check_all_rolled(): + winner = self._check_winner() + if winner is not None: + await self.channel.send("**Snake and Ladders**: " + user.mention + " has won the game! :tada:") + self._destruct() + return + await self.start_round() + + def _check_winner(self) -> discord.Member: + for p in self.players: + if self.player_tiles[p.id] == 100: + return p + return None + + def _check_all_rolled(self): + for k, v in self.round_has_rolled.items(): + if not v: + return False + return True + + def _destruct(self): + del self.snakes.active_sal[self.channel] + def _board_coordinate_from_index(self, index: int): # converts the tile number to the x/y coordinates for graphical purposes y_level = 9 - math.floor((index - 1) / 10) From ff0c19e51a7e8b0e6ff10d14f4f014bd2481c5be Mon Sep 17 00:00:00 2001 From: momothereal Date: Sat, 24 Mar 2018 03:46:33 -0400 Subject: [PATCH 37/61] S&L with snakes and ladders --- bot/cogs/snakes.py | 10 +++++----- bot/sneks/sal.py | 50 +++++++++++++++++++++++++++++++++++++++------- 2 files changed, 48 insertions(+), 12 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index a625d994..cb296080 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -133,7 +133,7 @@ async def create_sal(self, ctx: Context): async def join_sal(self, ctx: Context): channel: discord.TextChannel = ctx.channel if channel not in self.active_sal: - await ctx.send(ctx.author.mention + " There is not Snakes & Ladders game in this channel.") + await ctx.send(ctx.author.mention + " There is no active Snakes & Ladders game in this channel.") return game = self.active_sal[channel] await game.player_join(ctx.author) @@ -142,7 +142,7 @@ async def join_sal(self, ctx: Context): async def leave_sal(self, ctx: Context): channel: discord.TextChannel = ctx.channel if channel not in self.active_sal: - await ctx.send(ctx.author.mention + " There is not Snakes & Ladders game in this channel.") + await ctx.send(ctx.author.mention + " There is no active Snakes & Ladders game in this channel.") return game = self.active_sal[channel] await game.player_leave(ctx.author) @@ -151,7 +151,7 @@ async def leave_sal(self, ctx: Context): async def cancel_sal(self, ctx: Context): channel: discord.TextChannel = ctx.channel if channel not in self.active_sal: - await ctx.send(ctx.author.mention + " There is not Snakes & Ladders game in this channel.") + await ctx.send(ctx.author.mention + " There is no active Snakes & Ladders game in this channel.") return game = self.active_sal[channel] await game.cancel_game(ctx.author) @@ -160,7 +160,7 @@ async def cancel_sal(self, ctx: Context): async def start_sal(self, ctx: Context): channel: discord.TextChannel = ctx.channel if channel not in self.active_sal: - await ctx.send(ctx.author.mention + " There is not Snakes & Ladders game in this channel.") + await ctx.send(ctx.author.mention + " There is no active Snakes & Ladders game in this channel.") return game = self.active_sal[channel] await game.start_game(ctx.author) @@ -169,7 +169,7 @@ async def start_sal(self, ctx: Context): async def roll_sal(self, ctx: Context): channel: discord.TextChannel = ctx.channel if channel not in self.active_sal: - await ctx.send(ctx.author.mention + " There is not Snakes & Ladders game in this channel.") + await ctx.send(ctx.author.mention + " There is no active Snakes & Ladders game in this channel.") return game = self.active_sal[channel] await game.player_roll(ctx.author) diff --git a/bot/sneks/sal.py b/bot/sneks/sal.py index 59fb533f..48f731a3 100644 --- a/bot/sneks/sal.py +++ b/bot/sneks/sal.py @@ -11,6 +11,34 @@ BOARD_TILE_SIZE = 56 # pixels BOARD_PLAYER_SIZE = 20 +# board definition (from, to) +BOARD = { + # ladders + 2: 38, + 7: 14, + 8: 31, + 15: 26, + 21: 42, + 28: 84, + 36: 44, + 51: 67, + 71: 91, + 78: 98, + 87: 94, + + # snakes + 99: 80, + 95: 75, + 92: 88, + 89: 68, + 74: 53, + 64: 60, + 62: 19, + 49: 11, + 46: 26, + 16: 6 +} + class SnakeAndLaddersGame: def __init__(self, snakes, channel: discord.TextChannel, author: discord.Member): @@ -131,17 +159,25 @@ async def player_roll(self, user: discord.Member): await self.channel.send(user.mention + " You have already rolled this round, please be patient.") return roll = random.randint(1, 6) + await self.channel.send(user.mention + " rolled a **{0}**!".format(roll)) next_tile = self.player_tiles[user.id] + roll - # todo: apply snakes and ladders + # apply snakes and ladders + if next_tile in BOARD: + target = BOARD[next_tile] + if target < next_tile: + await self.channel.send(user.mention + " slips on a snake and falls back to **{0}**".format(target)) + else: + await self.channel.send(user.mention + " climbs a ladder to **{0}**".format(target)) + next_tile = target + self.player_tiles[user.id] = min(100, next_tile) self.round_has_rolled[user.id] = True - await self.channel.send(user.mention + " rolled a **{0}**!".format(roll)) + winner = self._check_winner() + if winner is not None: + await self.channel.send("**Snake and Ladders**: " + user.mention + " has won the game! :tada:") + self._destruct() + return if self._check_all_rolled(): - winner = self._check_winner() - if winner is not None: - await self.channel.send("**Snake and Ladders**: " + user.mention + " has won the game! :tada:") - self._destruct() - return await self.start_round() def _check_winner(self) -> discord.Member: From 80a8c0e64faf1e934e9bf07b9cbd0b97f46d36e6 Mon Sep 17 00:00:00 2001 From: momothereal Date: Sat, 24 Mar 2018 03:50:46 -0400 Subject: [PATCH 38/61] Fix prefixes --- bot/sneks/sal.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bot/sneks/sal.py b/bot/sneks/sal.py index 48f731a3..df23e6cb 100644 --- a/bot/sneks/sal.py +++ b/bot/sneks/sal.py @@ -83,7 +83,7 @@ async def player_join(self, user: discord.Member): await self._add_player(user) await self.channel.send( - "**Snake and Ladders**: " + user.mention + " has joined the game.\nThere are now " + str( + "**Snakes and Ladders**: " + user.mention + " has joined the game.\nThere are now " + str( len(self.players)) + " players in the game.") async def player_leave(self, user: discord.Member): @@ -97,7 +97,7 @@ async def player_leave(self, user: discord.Member): del self.player_tiles[p.id] await self.channel.send(user.mention + " has left the game.") if self.state != 'waiting' and len(self.players) == 1: - await self.channel.send("**Snake and Ladders**: The game has been surrendered!") + await self.channel.send("**Snakes and Ladders**: The game has been surrendered!") self._destruct() return await self.channel.send(user.mention + " You are not in the match.") @@ -121,7 +121,7 @@ async def start_game(self, user: discord.Member): return self.state = 'starting' player_list = ', '.join(user.mention for user in self.players) - await self.channel.send("**Snake and Ladders**: The game is starting!\nPlayers: " + player_list) + await self.channel.send("**Snakes and Ladders**: The game is starting!\nPlayers: " + player_list) await self.start_round() async def start_round(self): @@ -174,7 +174,7 @@ async def player_roll(self, user: discord.Member): self.round_has_rolled[user.id] = True winner = self._check_winner() if winner is not None: - await self.channel.send("**Snake and Ladders**: " + user.mention + " has won the game! :tada:") + await self.channel.send("**Snakes and Ladders**: " + user.mention + " has won the game! :tada:") self._destruct() return if self._check_all_rolled(): From 8d6b0c9a80969f2ddcf91db8d76d0fefe31998b9 Mon Sep 17 00:00:00 2001 From: momothereal Date: Sat, 24 Mar 2018 15:15:35 -0400 Subject: [PATCH 39/61] Export board configuration to res, fixes. --- bot/cogs/snakes.py | 56 ++++++++++++++++++++++++++++++++++---------- bot/sneks/sal.py | 44 +++++++--------------------------- res/ladders/board.py | 32 +++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 48 deletions(-) create mode 100644 res/ladders/board.py diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index cb296080..6e229806 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -5,7 +5,7 @@ from typing import Dict import discord -from discord.ext.commands import AutoShardedBot, Context, command +from discord.ext.commands import AutoShardedBot, Context, command, group from bot.sneks.sal import SnakeAndLaddersGame from bot.sneks.sneks import Embeddable, SnakeDef, scrape_itis, snakify @@ -71,9 +71,6 @@ async def get_snek(self, name: str = None) -> Embeddable: async def get(self, ctx: Context, name: str = None): """ Get info about a snek! - :param ctx: context - :param name: name of snek - :return: snek """ # fetch data for a snek await ctx.send("Fetching data for " + name + "..." if name is not None else "Finding a random snek!") @@ -90,8 +87,6 @@ async def get(self, ctx: Context, name: str = None): async def rattle(self, ctx: Context): """ Play a snake rattle in your voice channel - :param ctx: context - :return: nothing """ author: discord.Member = ctx.author if author.voice is None or author.voice.channel is None: @@ -118,8 +113,30 @@ async def rattle(self, ctx: Context): async def on_end_voice(self, voice_client): await voice_client.disconnect() - @command(name="sal.create()", aliases=["sal.create"]) + @group() + async def sal(self, ctx: Context): + """ + Command group for Snakes and Ladders + + - Create a S&L game: sal create + - Join a S&L game: sal join + - Leave a S&L game: sal leave + - Cancel a S&L game (author): sal cancel + - Start a S&L game (author): sal start + - Roll the dice: sal roll OR roll + """ + if ctx.invoked_subcommand is None: + # alias for 'sal roll' -> roll() + if ctx.subcommand_passed is not None and ctx.subcommand_passed.lower() == "roll": + await self.bot.get_command("roll()").invoke(ctx) + return + await ctx.send(ctx.author.mention + ": Unknown S&L command.") + + @sal.command(name="create()", aliases=["create"]) async def create_sal(self, ctx: Context): + """ + Create a Snakes and Ladders in the channel. + """ # check if there is already a game in this channel channel: discord.TextChannel = ctx.channel if channel in self.active_sal: @@ -129,8 +146,11 @@ async def create_sal(self, ctx: Context): self.active_sal[channel] = game await game.open_game() - @command(name="sal.join()", aliases=["sal.join"]) + @sal.command(name="join()", aliases=["join"]) async def join_sal(self, ctx: Context): + """ + Join a Snakes and Ladders game in the channel. + """ channel: discord.TextChannel = ctx.channel if channel not in self.active_sal: await ctx.send(ctx.author.mention + " There is no active Snakes & Ladders game in this channel.") @@ -138,8 +158,11 @@ async def join_sal(self, ctx: Context): game = self.active_sal[channel] await game.player_join(ctx.author) - @command(name="sal.leave()", aliases=["sal.leave", "sal.quit"]) + @sal.command(name="leave()", aliases=["leave", "quit"]) async def leave_sal(self, ctx: Context): + """ + Leave the Snakes and Ladders game. + """ channel: discord.TextChannel = ctx.channel if channel not in self.active_sal: await ctx.send(ctx.author.mention + " There is no active Snakes & Ladders game in this channel.") @@ -147,8 +170,11 @@ async def leave_sal(self, ctx: Context): game = self.active_sal[channel] await game.player_leave(ctx.author) - @command(name="sal.cancel()", aliases=["sal.cancel"]) + @sal.command(name="cancel()", aliases=["cancel"]) async def cancel_sal(self, ctx: Context): + """ + Cancel the Snakes and Ladders game (author only). + """ channel: discord.TextChannel = ctx.channel if channel not in self.active_sal: await ctx.send(ctx.author.mention + " There is no active Snakes & Ladders game in this channel.") @@ -156,8 +182,11 @@ async def cancel_sal(self, ctx: Context): game = self.active_sal[channel] await game.cancel_game(ctx.author) - @command(name="sal.start()", aliases=["sal.start"]) + @sal.command(name="start()", aliases=["start"]) async def start_sal(self, ctx: Context): + """ + Start the Snakes and Ladders game (author only). + """ channel: discord.TextChannel = ctx.channel if channel not in self.active_sal: await ctx.send(ctx.author.mention + " There is no active Snakes & Ladders game in this channel.") @@ -165,8 +194,11 @@ async def start_sal(self, ctx: Context): game = self.active_sal[channel] await game.start_game(ctx.author) - @command(name="sal.roll()", aliases=["sal.roll", "roll"]) + @command(name="roll()", aliases=["sal roll", "roll"]) async def roll_sal(self, ctx: Context): + """ + Roll the dice in Snakes and Ladders. + """ channel: discord.TextChannel = ctx.channel if channel not in self.active_sal: await ctx.send(ctx.author.mention + " There is no active Snakes & Ladders game in this channel.") diff --git a/bot/sneks/sal.py b/bot/sneks/sal.py index df23e6cb..b54554c5 100644 --- a/bot/sneks/sal.py +++ b/bot/sneks/sal.py @@ -8,36 +8,7 @@ import discord from PIL import Image -BOARD_TILE_SIZE = 56 # pixels -BOARD_PLAYER_SIZE = 20 - -# board definition (from, to) -BOARD = { - # ladders - 2: 38, - 7: 14, - 8: 31, - 15: 26, - 21: 42, - 28: 84, - 36: 44, - 51: 67, - 71: 91, - 78: 98, - 87: 94, - - # snakes - 99: 80, - 95: 75, - 92: 88, - 89: 68, - 74: 53, - 64: 60, - 62: 19, - 49: 11, - 46: 26, - 16: 6 -} +from res.ladders.board import * class SnakeAndLaddersGame: @@ -54,18 +25,18 @@ def __init__(self, snakes, channel: discord.TextChannel, author: discord.Member) async def open_game(self): await self._add_player(self.author) await self.channel.send( - '**Snakes and Ladders**: A new game is about to start!\nMention me and type **sal.join** to participate.', + '**Snakes and Ladders**: A new game is about to start!\nMention me and type **sal join** to participate.', file=discord.File(os.path.join('res', 'ladders', 'banner.jpg'), filename='Snakes and Ladders.jpg')) self.state = 'waiting' async def _add_player(self, user: discord.Member): self.players.append(user) self.player_tiles[user.id] = 1 - avatar_url = user.avatar_url_as(format='jpeg', size=32) + avatar_url = user.avatar_url_as(format='jpeg', size=PLAYER_ICON_IMAGE_SIZE) async with aiohttp.ClientSession() as session: async with session.get(avatar_url) as res: avatar_bytes = await res.read() - im = Image.open(io.BytesIO(avatar_bytes)).resize((20, 20)) + im = Image.open(io.BytesIO(avatar_bytes)).resize((BOARD_PLAYER_SIZE, BOARD_PLAYER_SIZE)) self.avatar_images[user.id] = im async def player_join(self, user: discord.Member): @@ -89,7 +60,7 @@ async def player_join(self, user: discord.Member): async def player_leave(self, user: discord.Member): if user == self.author: await self.channel.send(user.mention + " You are the author, and cannot leave the game. Execute " - "`sal.cancel` to cancel the game.") + "`sal cancel` to cancel the game.") return for p in self.players: if user == p: @@ -132,8 +103,9 @@ async def start_round(self): for i, player in enumerate(self.players): tile = self.player_tiles[player.id] tile_coordinates = self._board_coordinate_from_index(tile) - x_offset = 8 + tile_coordinates[0] * BOARD_TILE_SIZE - y_offset = (10 * BOARD_TILE_SIZE) - (9 - tile_coordinates[1]) * BOARD_TILE_SIZE - BOARD_PLAYER_SIZE + x_offset = BOARD_MARGIN[0] + tile_coordinates[0] * BOARD_TILE_SIZE + y_offset = BOARD_MARGIN[1] + ( + (10 * BOARD_TILE_SIZE) - (9 - tile_coordinates[1]) * BOARD_TILE_SIZE - BOARD_PLAYER_SIZE) if i % 2 != 0: x_offset += BOARD_PLAYER_SIZE if i > 1: diff --git a/res/ladders/board.py b/res/ladders/board.py new file mode 100644 index 00000000..39578847 --- /dev/null +++ b/res/ladders/board.py @@ -0,0 +1,32 @@ +BOARD_TILE_SIZE = 56 # the size of each board tile +BOARD_PLAYER_SIZE = 20 # the size of each player icon +BOARD_MARGIN = (10, 0) # margins, in pixels (for player icons) +PLAYER_ICON_IMAGE_SIZE = 32 # the size of the image to download, should a power of 2 and higher than BOARD_PLAYER_SIZE + +# board definition (from, to) +BOARD = { + # ladders + 2: 38, + 7: 14, + 8: 31, + 15: 26, + 21: 42, + 28: 84, + 36: 44, + 51: 67, + 71: 91, + 78: 98, + 87: 94, + + # snakes + 99: 80, + 95: 75, + 92: 88, + 89: 68, + 74: 53, + 64: 60, + 62: 19, + 49: 11, + 46: 26, + 16: 6 +} From 125b0ee1505dec2e15f6202dd89383075b550829 Mon Sep 17 00:00:00 2001 From: momothereal Date: Sat, 24 Mar 2018 15:38:32 -0400 Subject: [PATCH 40/61] Sync piplock --- Pipfile | 2 +- Pipfile.lock | 55 ++++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/Pipfile b/Pipfile index aeb51d0f..d4fde320 100644 --- a/Pipfile +++ b/Pipfile @@ -11,7 +11,7 @@ websockets = ">=4.0,<5.0" pynacl = "*" lxml = "*" pymarkovchain = "*" - +pillow = "*" [dev-packages] "flake8" = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 6cd06000..fcb26827 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "9b332f45744c325bbee7e0e66ce665d9021c62b4c26e181f335f1474bfd972fc" + "sha256": "cfe54eccce1395753c26e1b757c18c52dd076388dff9363112915833d9ba9a4c" }, "pipfile-spec": 6, "requires": { @@ -160,6 +160,53 @@ ], "version": "==4.1.0" }, + "pillow": { + "hashes": [ + "sha256:0013f590a8f260df60bcfd65db19d18efc04e7f046c3c82a40e2e2b3292a937c", + "sha256:0b899ee80920bb533f26581af9b4660bc12aff4562555afe74e429101ebf3c94", + "sha256:12f29d6c23424f704c66b5b68c02fe0b571504459605cfe36ab8158359b0e1bb", + "sha256:135e9aa65150c53f7db85bf2bebb8a0e1a48ea850e80cf66e16dd04fa09d309c", + "sha256:153ec6f18f7b61641e0e6e502acfaf4a06c9aba2ea11c0b4b3578ea9f13a4a4a", + "sha256:17fe25efc785194d48c38fad85dce470013ba19d2fb66639e149f14bccf1327f", + "sha256:1912b7230459fd53682dae32b83cbd8e5d642ba36d4be18566f00a9c063aa13d", + "sha256:1a5b93084e01328a1cb1ecdad99d11d75e881e89a95f88d85b523646553b36c2", + "sha256:25193f934d37d836a6b1f4c062ce574a96cbca7c6d9dc8ddfbbac7f9c54deaa4", + "sha256:2c042352b430d678db50c78c5214e19638eff8b688941271da2de21fd298dfe5", + "sha256:2e818dbe445e86fc6c266973fe540c35125c42eb2cf13a6095e9adaa89c0deb5", + "sha256:2fcde9954c8882d1c7f93bb828caa34a4c5e3ee69dbc7895dc8652ad972b455a", + "sha256:35f7d998b8e82fb3fb51ff88b30485eb81cd7dd56ec7e1a8deba23eb88532d44", + "sha256:37cc0339abfa9e295c75d9a7f227d35cb44716feb95057f9449c4a9e9a17daf7", + "sha256:43334f9581cd067945b8898cef9eb5714ee4883f8de0304c011f1dbdb1d4e2aa", + "sha256:4bd4a71501b6d51db4abc07e1f43f5a6fed0a1a9583cca0b401d6af50284b0db", + "sha256:57aa6198ba8acba1313c3b743e267d821a60cac77e6026caf0b55ca58d3d23be", + "sha256:5b0d657460d9f3615876fec6306e97ca15a471f6169b622d76a47e270998acf1", + "sha256:5cd36804f9f06a914a883fe682df5711d16d7b4f44d43189c5f013e7cd91e149", + "sha256:6977cf073d83358b34f93abf5c1f1193b88675fe0e4441e0e28318bc3dcba7a0", + "sha256:718ec7a122b28d64afc5fbc3a9b99bb0545ef511373cac06fe7624520e82cb20", + "sha256:7dfbefdb3fb911ca9faed307bf309861e9995e36cca6b761c7ba6d9b77a9744a", + "sha256:801cca8923508311bf5d6d0f7da5362552e8208ebd8ec0d7b9f2cd2ff5705734", + "sha256:82b172e3264e62372c01b5b009b5b1a02fbb9276cbe5cc57ab00a6d6e5ed9a18", + "sha256:82d1ff571489765df2816785d532e243bde213752156c227fca595723ec5ff42", + "sha256:8580fc58074a16b749905b26cf8363f7b628dd167ba0130f5382cdc91c86b509", + "sha256:931030d1d6282b7900e6b0a7ff9ecdb503b5e1e6781800dab2b71a9f39405bff", + "sha256:9525cd680a6f9e80c6c0af03cf973e6505c59f60b4745f682cd1a449e54b31bb", + "sha256:a224651a81e45ef4f1d0164e256c5f6b4abb49f2ae8f22ba2f3a9d0ff338e608", + "sha256:a370d1c570f1d72e877099651e752332444b1c5009381f043c9da5fd47f3ebae", + "sha256:b1d33c63a55d0d85df0ad02b2c16158fb4d8153afa7b908f1a67330fac694cd6", + "sha256:b2240f298482f823576f397bb9f32ea913ad9456c526e141bc6f0a022b37a3e8", + "sha256:b85f703c2ffe539313e39ce0676bed0f355cec45a16e58c9ab7417445843047c", + "sha256:b9f63451084a718eccdeb1e382768c94647915653af4d6019f64560d9e98642b", + "sha256:c793dfaa130847ccff958492b76ae8b9304e60b8a79a92962cb19e368276a22b", + "sha256:d60c1625b108432ace8b1fa1a584017e5efa73f107d0f493c7f39c79bebf1d41", + "sha256:dc4b018d5c9b636f7546583c5591b9ea00c328c3e5871992ef5b95bac353f097", + "sha256:ddd16ab250b4fc97db1c47407e78c25216a75c29d29d10ad37e51b7a2ec7b2c3", + "sha256:e126ff4fed71e78333840c07279e1617f63cfca76d63ad5b27d65a7277206a3d", + "sha256:f8d49be8c282df8d2e1ab6ab53ab8abd859b1fa6fed384457ee85c9eff64ef97", + "sha256:fcf64c91fd44485100a2965d23bb0e227d093e91f7e776c5ca3b32574766eb56" + ], + "index": "pypi", + "version": "==5.0.0" + }, "pycares": { "hashes": [ "sha256:0e81c971236bb0767354f1456e67ab6ae305f248565ce77cd413a311f9572bf5", @@ -397,10 +444,10 @@ }, "gitpython": { "hashes": [ - "sha256:ad61bc25deadb535b047684d06f3654c001d9415e1971e51c9c20f5b510076e9", - "sha256:b8367c432de995dc330b5b146c5bfdc0926b8496e100fda6692134e00c0dcdc5" + "sha256:05069e26177c650b3cb945dd543a7ef7ca449f8db5b73038b465105673c1ef61", + "sha256:c47cc31af6e88979c57a33962cbc30a7c25508d74a1b3a19ec5aa7ed64b03129" ], - "version": "==2.1.8" + "version": "==2.1.9" }, "idna": { "hashes": [ From e421513cf453328ed41ce088b3c9156613508cfe Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 00:50:51 -0400 Subject: [PATCH 41/61] Sync piplock --- Pipfile.lock | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Pipfile.lock b/Pipfile.lock index fcb26827..1bf9192f 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "cfe54eccce1395753c26e1b757c18c52dd076388dff9363112915833d9ba9a4c" + "sha256": "ff22acd6853d5f4560288b3395a57fa3f6990c010157368faaf38479a4f6d41c" }, "pipfile-spec": 6, "requires": { @@ -53,6 +53,16 @@ ], "version": "==2.0.1" }, + "asyncio": { + "hashes": [ + "sha256:83360ff8bc97980e4ff25c964c7bd3923d333d177aa4f7fb736b019f26c7cb41", + "sha256:b62c9157d36187eca799c378e572c969f0da87cd5fc42ca372d92cdb06e7e1de", + "sha256:c46a87b48213d7464f22d9a497b9eef8c1928b68320a2fa94240f969f6fec08c", + "sha256:c4d18b22701821de07bd6aea8b53d21449ec0ec5680645e5317062ea21817d2d" + ], + "index": "pypi", + "version": "==3.4.3" + }, "cffi": { "hashes": [ "sha256:151b7eefd035c56b2b2e1eb9963c90c6302dc15fbd8c1c0a83a163ff2c7d7743", From dd8e80d15a4553754d1b0cbd7ddd3a574f60e004 Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 01:06:37 -0400 Subject: [PATCH 42/61] Flake fixes --- bot/cogs/snakes.py | 63 ++++++++++++++++++++++++------------------- bot/sneks/hatching.py | 15 +++++------ bot/sneks/perlin.py | 2 +- bot/sneks/sal.py | 11 +++++--- bot/sneks/sneks.py | 10 ++++--- 5 files changed, 55 insertions(+), 46 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index e1fb73e6..6389ca7f 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -1,4 +1,5 @@ # coding=utf-8 +import asyncio import io import logging import math @@ -6,19 +7,18 @@ import random from typing import Dict +from PIL import Image +from PIL.ImageDraw import ImageDraw + import discord from discord.ext.commands import AutoShardedBot, Context, command, group -from bot.sneks.sal import SnakeAndLaddersGame -from PIL import Image -from PIL.ImageDraw import ImageDraw +from pymarkovchain import MarkovChain -import bot.sneks.perlin as perlin +from bot.sneks import perlin +from bot.sneks.hatching import hatching, hatching_snakes +from bot.sneks.sal import SnakeAndLaddersGame from bot.sneks.sneks import Embeddable, SnakeDef, scrape_itis, snakify -from pymarkovchain import MarkovChain -from bot.sneks.hatching import hatching,hatching_snakes -import asyncio -import random log = logging.getLogger(__name__) @@ -38,9 +38,10 @@ SNEK_SAD.title = "sad snek :(" SNEK_SAD.set_image(url="https://momoperes.ca/files/sadsnek.jpeg") -# max messages to train on per user +# max messages to train on per user MSG_MAX = 100 + class Snakes: """ Snake-related commands @@ -92,7 +93,6 @@ async def get(self, ctx: Context, name: str = None): log.debug("Sending embed: " + str(data.__dict__)) await channel.send(embed=embed) - @command(name="snakes.draw()", aliases=["snakes.draw"]) async def draw(self, ctx: Context): stream = self.generate_snake_image() @@ -223,43 +223,48 @@ async def roll_sal(self, ctx: Context): game = self.active_sal[channel] await game.player_roll(ctx.author) - @command(name="snakes.snakeme()",aliases=["snakes.snakeme","snakeme"]) + @command(name="snakes.snakeme()", aliases=["snakes.snakeme", "snakeme"]) async def snakeme(self, ctx: Context): """ - How would I talk if I were a snake? + How would I talk if I were a snake? :param ctx: context :return: you, snakified based on your Discord message history """ - mentions = list(filter(lambda m:m.id != self.bot.user.id,ctx.message.mentions)) - author = ctx.message.author if(len(mentions) == 0) else ctx.message.mentions[0] - channel : discord.TextChannel = ctx.channel + mentions = list(filter(lambda m: m.id != self.bot.user.id, ctx.message.mentions)) + author = ctx.message.author if (len(mentions) == 0) else ctx.message.mentions[0] + channel: discord.TextChannel = ctx.channel - channels = [ channel for channel in ctx.message.guild.channels if isinstance(channel,discord.TextChannel) ] - channels_messages = [ await channel.history(limit=10000).flatten() for channel in channels] + channels = [channel for channel in ctx.message.guild.channels if isinstance(channel, discord.TextChannel)] + channels_messages = [await channel.history(limit=10000).flatten() for channel in channels] msgs = [msg for channel_messages in channels_messages for msg in channel_messages][:MSG_MAX] my_msgs = list(filter(lambda msg: msg.author.id == author.id, msgs)) - my_msgs_content = "\n".join(list(map(lambda x:x.content, my_msgs))) + my_msgs_content = "\n".join(list(map(lambda x: x.content, my_msgs))) mc = MarkovChain() mc.generateDatabase(my_msgs_content) sentence = mc.generateString() snakeme = discord.Embed() - snakeme.set_author(name="{}#{}".format(author.name,author.discriminator), icon_url = "https://cdn.discordapp.com/avatars/{}/{}".format(author.id,author.avatar) if author.avatar is not None else "https://img00.deviantart.net/eee3/i/2017/168/3/4/discord__app__avatar_rev1_by_nodeviantarthere-dbd2tp9.png") - snakeme.description = "*{}*".format(snakify(sentence) if sentence is not None else ":question: Not enough messages") + snakeme.set_author(name="{0}#{1}".format(author.name, author.discriminator), + icon_url="https://cdn.discordapp.com/avatars/{0}/{1}".format( + author.id, author.avatar) if author.avatar is not None else + "https://img00.deviantart.net/eee3/i/2017/168/3/4/" + "discord__app__avatar_rev1_by_nodeviantarthere-dbd2tp9.png") + snakeme.description = "*{0}*".format( + snakify(sentence) if sentence is not None else ":question: Not enough messages") await channel.send(embed=snakeme) - @command(name="snakes.hatch()",aliases=["snakes.hatch","hatch"]) - async def hatch(self,ctx: Context): - """ + @command(name="snakes.hatch()", aliases=["snakes.hatch", "hatch"]) + async def hatch(self, ctx: Context): + """ Hatches your personal snake :param ctx: context :return: baby snake """ channel: discord.TextChannel = ctx.channel - my_snake = list(hatching_snakes.keys())[random.randint(0,3)] + my_snake = list(hatching_snakes.keys())[random.randint(0, 3)] my_snake_img = hatching_snakes[my_snake] print(my_snake_img) @@ -267,16 +272,17 @@ async def hatch(self,ctx: Context): await asyncio.sleep(1) for i in range(len(hatching)): - hatch_embed = discord.Embed(description = hatching[i]) - await m.edit(embed = hatch_embed) + hatch_embed = discord.Embed(description=hatching[i]) + await m.edit(embed=hatch_embed) await asyncio.sleep(1) # await m.edit(embed = discord.Embed().set_thumbnail(url="https://i.imgur.com/5QHH4If.jpg")) await asyncio.sleep(1) await m.delete() - my_snake_embed = discord.Embed(description=":tada: Congrats!! You hatched: **{}**".format(my_snake)) + my_snake_embed = discord.Embed(description=":tada: Congrats! You hatched: **{0}**".format(my_snake)) my_snake_embed.set_thumbnail(url=my_snake_img) - my_snake_embed.set_footer(text=" Owner: {}#{}".format(ctx.message.author.name,ctx.message.author.discriminator)) + my_snake_embed.set_footer( + text=" Owner: {0}#{1}".format(ctx.message.author.name, ctx.message.author.discriminator)) await channel.send(embed=my_snake_embed) def generate_snake_image(self) -> bytes: @@ -339,6 +345,7 @@ def generate_snake_image(self) -> bytes: img.save(stream, format='PNG') return stream.getvalue() + def setup(bot): bot.add_cog(Snakes(bot)) log.info("Cog loaded: Snakes") diff --git a/bot/sneks/hatching.py b/bot/sneks/hatching.py index 454b0e83..aa15772c 100644 --- a/bot/sneks/hatching.py +++ b/bot/sneks/hatching.py @@ -1,6 +1,4 @@ -import os - -h1='''``` +h1 = '''``` ---- ------ /--------\\ @@ -9,7 +7,7 @@ \------/ ----```''' -h2='''``` +h2 = '''``` ---- ------ /---\\-/--\\ @@ -18,7 +16,7 @@ \------/ ----```''' -h3='''``` +h3 = '''``` ---- ------ /---\\-/--\\ @@ -27,7 +25,7 @@ \----\\-/ ----```''' -h4='''``` +h4 = '''``` ----- ----- \\ /--| /---\\ @@ -36,12 +34,11 @@ \------- / ------```''' -hatching = [h1,h2,h3,h4] -hatching_snakes = { +hatching = [h1, h2, h3, h4] +hatching_snakes = { "Baby Python": "https://i.imgur.com/SYOcmSa.png", "Baby Rattle Snake": "https://i.imgur.com/i5jYA8f.png", "Baby Dragon Snake": "https://i.imgur.com/SuMKM4m.png", "Baby Garden Snake": "https://i.imgur.com/5vYx3ah.png", "Baby Cobra": "https://i.imgur.com/jk14ryt.png" } - diff --git a/bot/sneks/perlin.py b/bot/sneks/perlin.py index ea9a7d30..19eafe6a 100644 --- a/bot/sneks/perlin.py +++ b/bot/sneks/perlin.py @@ -76,7 +76,7 @@ def get_plain_noise(self, *point): either octaves or tiling. """ if len(point) != self.dimension: - raise ValueError("Expected {} values, got {}".format( + raise ValueError("Expected {0} values, got {1}".format( self.dimension, len(point))) # Build a list of the (min, max) bounds in each dimension diff --git a/bot/sneks/sal.py b/bot/sneks/sal.py index b54554c5..92534f7e 100644 --- a/bot/sneks/sal.py +++ b/bot/sneks/sal.py @@ -2,13 +2,15 @@ import math import os import random -from typing import List, Dict +from typing import Dict, List + +from PIL import Image import aiohttp + import discord -from PIL import Image -from res.ladders.board import * +from res.ladders.board import BOARD, BOARD_MARGIN, BOARD_PLAYER_SIZE, BOARD_TILE_SIZE, PLAYER_ICON_IMAGE_SIZE class SnakeAndLaddersGame: @@ -104,7 +106,8 @@ async def start_round(self): tile = self.player_tiles[player.id] tile_coordinates = self._board_coordinate_from_index(tile) x_offset = BOARD_MARGIN[0] + tile_coordinates[0] * BOARD_TILE_SIZE - y_offset = BOARD_MARGIN[1] + ( + y_offset = \ + BOARD_MARGIN[1] + ( (10 * BOARD_TILE_SIZE) - (9 - tile_coordinates[1]) * BOARD_TILE_SIZE - BOARD_PLAYER_SIZE) if i % 2 != 0: x_offset += BOARD_PLAYER_SIZE diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index 8c26f5b8..9f85cdac 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -1,4 +1,5 @@ import json +import random from urllib import parse import aiohttp @@ -6,7 +7,6 @@ from bs4 import BeautifulSoup import discord -import random import requests @@ -28,6 +28,7 @@ class SnakeDef(Embeddable): """ Represents a snek species """ + def __init__(self, common_name="", species="", image_url="", family="", genus="", short_description="", wiki_link="", geo=""): self.common_name = common_name @@ -227,7 +228,8 @@ async def scrape_itis(name: str) -> Embeddable: return await scrape_itis_page(url, name) + def snakify(s): - x = random.randint(3,8) - y = random.randint(3,8) - return s.replace("s", x * "s" ).replace("e", y * "e") if s is not None else s + x = random.randint(3, 8) + y = random.randint(3, 8) + return s.replace("s", x * "s").replace("e", y * "e") if s is not None else s From 73dbd635f84149bb7468f82679e3f763eed4d9fe Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 12:18:21 -0400 Subject: [PATCH 43/61] Make S&L max players configurable --- bot/sneks/sal.py | 12 ++++++------ res/ladders/board.py | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/bot/sneks/sal.py b/bot/sneks/sal.py index 92534f7e..ef05678c 100644 --- a/bot/sneks/sal.py +++ b/bot/sneks/sal.py @@ -10,7 +10,8 @@ import discord -from res.ladders.board import BOARD, BOARD_MARGIN, BOARD_PLAYER_SIZE, BOARD_TILE_SIZE, PLAYER_ICON_IMAGE_SIZE +from res.ladders.board import BOARD, BOARD_MARGIN, BOARD_PLAYER_SIZE, BOARD_TILE_SIZE, MAX_PLAYERS, \ + PLAYER_ICON_IMAGE_SIZE class SnakeAndLaddersGame: @@ -49,7 +50,7 @@ async def player_join(self, user: discord.Member): if self.state != 'waiting': await self.channel.send(user.mention + " You cannot join at this time.") return - if len(self.players) is 4: + if len(self.players) is MAX_PLAYERS: await self.channel.send(user.mention + " The game is full!") return @@ -102,6 +103,7 @@ async def start_round(self): for user in self.players: self.round_has_rolled[user.id] = False board_img = Image.open(os.path.join('res', 'ladders', 'board.jpg')) + player_row_size = math.ceil(MAX_PLAYERS / 2) for i, player in enumerate(self.players): tile = self.player_tiles[player.id] tile_coordinates = self._board_coordinate_from_index(tile) @@ -109,10 +111,8 @@ async def start_round(self): y_offset = \ BOARD_MARGIN[1] + ( (10 * BOARD_TILE_SIZE) - (9 - tile_coordinates[1]) * BOARD_TILE_SIZE - BOARD_PLAYER_SIZE) - if i % 2 != 0: - x_offset += BOARD_PLAYER_SIZE - if i > 1: - y_offset -= BOARD_PLAYER_SIZE + x_offset += BOARD_PLAYER_SIZE * (i % player_row_size) + y_offset -= BOARD_PLAYER_SIZE * math.floor(i / player_row_size) board_img.paste(self.avatar_images[player.id], box=(x_offset, y_offset)) stream = io.BytesIO() diff --git a/res/ladders/board.py b/res/ladders/board.py index 39578847..61e74c58 100644 --- a/res/ladders/board.py +++ b/res/ladders/board.py @@ -2,6 +2,7 @@ BOARD_PLAYER_SIZE = 20 # the size of each player icon BOARD_MARGIN = (10, 0) # margins, in pixels (for player icons) PLAYER_ICON_IMAGE_SIZE = 32 # the size of the image to download, should a power of 2 and higher than BOARD_PLAYER_SIZE +MAX_PLAYERS = 4 # depends on the board size/quality, 4 is for the default board # board definition (from, to) BOARD = { From 6bebf632f0f464b9612bc3418e780757ed49265b Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 12:46:56 -0400 Subject: [PATCH 44/61] Add libopus env variable --- bot/cogs/snakes.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 6389ca7f..51c3fac1 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -48,7 +48,10 @@ class Snakes: """ def __init__(self, bot: AutoShardedBot): - discord.opus.load_opus("libopus") + libopus = os.environ.get('LIBOPUS') + if libopus is None: + libopus = "libopus" + discord.opus.load_opus(libopus) self.bot = bot self.rattles = [ 'rattle1.mp3', @@ -57,6 +60,9 @@ def __init__(self, bot: AutoShardedBot): 'rattle4.mp3' ] self.ffmpeg_executable = os.environ.get('FFMPEG') + if self.ffmpeg_executable is None: + self.ffmpeg_executable = 'ffmpeg' + print(self.ffmpeg_executable) self.active_sal: Dict[discord.TextChannel, SnakeAndLaddersGame] = {} async def get_snek(self, name: str = None) -> Embeddable: @@ -116,7 +122,7 @@ async def rattle(self, ctx: Context): rattle = os.path.join('res', 'rattle', random.choice(self.rattles)) source = discord.FFmpegPCMAudio( rattle, - executable=self.ffmpeg_executable if not None else 'ffmpeg' + executable=self.ffmpeg_executable ) # plays the sound, then dispatches the end_voice event to close the voice client voice_client.play(source, after=lambda x: self.bot.dispatch("end_voice", voice_client)) From 16dd8c210c801c1eddc45668067012faa9f86c01 Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 12:48:01 -0400 Subject: [PATCH 45/61] Make a fresh new readme file --- README.md | 87 +++++++++++++++++-------------------------------------- 1 file changed, 27 insertions(+), 60 deletions(-) diff --git a/README.md b/README.md index 4d18d99e..8819b03d 100644 --- a/README.md +++ b/README.md @@ -1,71 +1,38 @@ -# Code Jam 1 - Team 23 +# snek it up -**This is the code jam entry for Momo & kel** +**[Python-Discord code jam 1](https://github.com/discord-python/code-jam-1) entry by Momo and kel/qrie** (Team 23) -This is the repository for all code relating to our first code jam, in March 2018. Participants should fork this repository, and submit their code in a pull request. -**This code jam runs from the 23rd of March to the 25th of March, measured using the UTC timezone.** Make sure you open your pull request by then. Once the deadline is up, stop pushing commits - we will not accept any submissions made after this date. +## what is it -## How To Participate +A Discord bot that: -First things first - set up your repository. Read [this guide on our site](https://pythondiscord.com/info/jams) for information on how to set yourself up for a code jam. -Remember, only one teammate needs to fork the repository - everyone else should be granted access to that fork as a contributor, so that they can work on it directly. +- Finds snek species on the [ITIS database](https://itis.gov/) ๐Ÿ +- Hosts Snakes and Ladders games in concurrent channels ๐ŸŽฒ +- Imitates your chat history, but with 105% more snekin ๐Ÿ’ฌ +- Lets you hatch snek eggs for your very own snek collection โ‰งโ—กโ‰ฆ +- Draws random sneks using Perlin noise ๐Ÿ–Œ๏ธ +- Plays snek rattles in your voice channel, on demand ๐Ÿ”Š -Make sure you have the following things installed: +## how u do that -* Python 3.6 or later (installed with the PATH option enabled if you're on Windows) -* Pip - make sure you can run `pip` in a terminal or command prompt -* Pipenv - you can install this by running `pip install pipenv` in a terminal or command prompt - * Like before, make sure you can run `pipenv` in a terminal or command prompt +- Snek lookup: `bot.snakes.get('snek name here')` +- Snakes and Ladders: + - Create a game using `bot.sal create` (the author can cancel the game using `bot.sal cancel`) + - Others join the game using `bot.sal join` (players can leave using `bot.sal leave`) + - The author starts the match using `bot.sal start` + - When a round begins, players use `bot.roll` to roll the dice + - glhf -Next up, set up your project with `pipenv`. We've [compiled some documentation](./doc) for you to read over if you get stuck - you can find it in the `doc/` folder, -and you absolutely should read all of it, and it will likely answer some of the questions that you have. +- Snake imitation: `bot.snakes.snakeme` +- Egg hatching: `bot.snakes.hatch` +- Snek drawing: `bot.snakes.draw` +- Rattle-up your voice channel: `bot.snakes.rattle` -Use `pipenv run run.py` to start your project. You can press `CTRL+C` with the bot window selected to stop it. +## environment variables -Remember, if you need help, you can always ask on the server! +You will need these environment variables to setup mr bot: -## The Task - -This month's theme is: **Snakes**. - -For this code jam, your task will be to create a Snake cog for a [Discord.py rewrite bot](https://github.com/Rapptz/discord.py/tree/rewrite). -You can find the [documentation for Discord.py rewrite here](https://discordpy.readthedocs.io/en/rewrite/). The best cog commands will be -added to the official Python Discord bot and made available to everyone on the server. The overall best cog will be awarded custom Code Jam -Champion roles, but the best commands from the teams who did not win will also be added to our bot, and any users who write something that -ends up in the bot will be awarded Contributor roles on the server. - -We have prepared some Discord.py rewrite boilerplate for you in this repo. Fork the repo and work in the file called **snakes.py**, in **bot/cogs**. - -This means you won't have to write the basic bot itself, you'll just have to write the stuff that goes in the cog. For those of you with no -discord.py experience, cogs are like little modules that the bot can load, and contain a class with methods that are hooked up to bot commands -(like **bot.tags.get**). That way, when you type `bot.snakes.get('python')`, it will run the method inside the cog that corresponds to this command. - -Your initial task will be to write **get_snek**. This is the minimum requirement for this contest, and everyone must do it. **get_snek** will be a -method that goes online and fetches information about a snake. If you run it without providing an argument, it should fetch information about a -random snake, including the name of the snake, a picture of the snake, and various information about it. Is it venomous? Where can it be found? -What information you choose to get is up to you. - -`get_snek()` should also take an optional argument `name`, which should be a string that contains the name of a snake. For example, if you do -`get_snek('cobra')`, it should get information about a cobra. `name` should be case insensitive. - -If `get_snek('Python')` is called, the method should instead return information about the programming language, but making sure to return the -same type of information as for all the other snakes. Fill in this information in any way you want, try to have some fun with it. - -The information should be returned as a dictionary, so that other methods in the Snake class can call it and make use of it. - -Once you have finished `get_snek()`, you should make at least two bot commands. The first command, `get()`, should simply call `get_snek()` -with whatever arguments the user provided, and then make a nice embed that it returns to Discord. For example, if the user in the Discord -channel says `bot.snakes.get('anaconda')`, the bot should post an embed that shows a picture of an anaconda and some information about the -snake. - -The second command is entirely up to you. You can choose to use `get_snek` for this command as well, or you can come up with something entirely -different. The only requirement is that it is snake related in some way or other. Here is your chance to be creative. It is these commands that -will win or lose you this code jam. The best original ideas for these commands will probably walk away with the victory. - -You are allowed to make as many additional commands as you want, but try to keep it a reasonable amount. The team that writes the most commands is -not automatically going to win. One really excellent command is much better than 10 mediocre ones. - ---- - -Have fun, and don't be afraid to ask for help in the usual places if you need it! +- `BOT_TOKEN`: The Discord API token for the bot. +- `FFMPEG`: A direct path to a `ffmpeg` executable. If not provided, it will assume the `ffmpeg` command is in your path. +- `LIBOPUS` The name of the `libopus` library file, located in the project folder. If not provided, defaults to `libopus`. From 03aee1467cebd11591f729a7b9e93aeda5980970 Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 12:52:23 -0400 Subject: [PATCH 46/61] Add note about libopus in readme --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 8819b03d..3f587c2e 100644 --- a/README.md +++ b/README.md @@ -36,3 +36,8 @@ You will need these environment variables to setup mr bot: - `BOT_TOKEN`: The Discord API token for the bot. - `FFMPEG`: A direct path to a `ffmpeg` executable. If not provided, it will assume the `ffmpeg` command is in your path. - `LIBOPUS` The name of the `libopus` library file, located in the project folder. If not provided, defaults to `libopus`. + - ffmpeg and libopus are only used for snek rattling (voice comms) + +## note about libopus + +The `libopus.dll` is compiled for 64-bit Windows only. If you're using a different OS/architecture, you will need to find/compile the library for your system. If the name of the file changes, you will need to provide the `LIBOPUS` env variable, as described above. From 2a3074715f60abdc524ec88fb047d4c9b4d6ad69 Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 13:27:17 -0400 Subject: [PATCH 47/61] Simplify some for loops using iterators Also fixed an incorrect snake in the board file --- bot/sneks/sal.py | 10 ++-------- res/ladders/board.py | 2 +- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/bot/sneks/sal.py b/bot/sneks/sal.py index ef05678c..acb1e04f 100644 --- a/bot/sneks/sal.py +++ b/bot/sneks/sal.py @@ -156,16 +156,10 @@ async def player_roll(self, user: discord.Member): await self.start_round() def _check_winner(self) -> discord.Member: - for p in self.players: - if self.player_tiles[p.id] == 100: - return p - return None + return next((p for p in self.players if self.player_tiles[p.id] == 100), None) def _check_all_rolled(self): - for k, v in self.round_has_rolled.items(): - if not v: - return False - return True + return all(rolled for rolled in self.round_has_rolled.values()) def _destruct(self): del self.snakes.active_sal[self.channel] diff --git a/res/ladders/board.py b/res/ladders/board.py index 61e74c58..d197bacd 100644 --- a/res/ladders/board.py +++ b/res/ladders/board.py @@ -28,6 +28,6 @@ 64: 60, 62: 19, 49: 11, - 46: 26, + 46: 25, 16: 6 } From 1f0e8621f525955538983ecf8747362e36898bce Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 13:31:01 -0400 Subject: [PATCH 48/61] Fix hanging when player leaves --- bot/sneks/sal.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bot/sneks/sal.py b/bot/sneks/sal.py index acb1e04f..0b7e8496 100644 --- a/bot/sneks/sal.py +++ b/bot/sneks/sal.py @@ -68,8 +68,9 @@ async def player_leave(self, user: discord.Member): for p in self.players: if user == p: self.players.remove(p) - del self.player_tiles[p.id] - await self.channel.send(user.mention + " has left the game.") + self.player_tiles.pop(p.id, None) + self.round_has_rolled.pop(p.id, None) + await self.channel.send("**Snakes and Ladders**: " + user.mention + " has left the game.") if self.state != 'waiting' and len(self.players) == 1: await self.channel.send("**Snakes and Ladders**: The game has been surrendered!") self._destruct() From 181fc4b62ef6e2f8b55cd4edcdb82fa2c995b55d Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 14:18:01 -0400 Subject: [PATCH 49/61] Extract rattle config to res folder delet print --- bot/cogs/snakes.py | 11 +++-------- res/rattle/rattleconfig.py | 7 +++++++ 2 files changed, 10 insertions(+), 8 deletions(-) create mode 100644 res/rattle/rattleconfig.py diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 51c3fac1..eec2b704 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -15,6 +15,8 @@ from pymarkovchain import MarkovChain +from res.rattle.rattleconfig import RATTLES + from bot.sneks import perlin from bot.sneks.hatching import hatching, hatching_snakes from bot.sneks.sal import SnakeAndLaddersGame @@ -53,16 +55,9 @@ def __init__(self, bot: AutoShardedBot): libopus = "libopus" discord.opus.load_opus(libopus) self.bot = bot - self.rattles = [ - 'rattle1.mp3', - 'rattle2.mp3', - 'rattle3.mp3', - 'rattle4.mp3' - ] self.ffmpeg_executable = os.environ.get('FFMPEG') if self.ffmpeg_executable is None: self.ffmpeg_executable = 'ffmpeg' - print(self.ffmpeg_executable) self.active_sal: Dict[discord.TextChannel, SnakeAndLaddersGame] = {} async def get_snek(self, name: str = None) -> Embeddable: @@ -119,7 +114,7 @@ async def rattle(self, ctx: Context): voice_channel = author.voice.channel voice_client: discord.VoiceClient = await voice_channel.connect() # select random rattle - rattle = os.path.join('res', 'rattle', random.choice(self.rattles)) + rattle = os.path.join('res', 'rattle', random.choice(RATTLES)) source = discord.FFmpegPCMAudio( rattle, executable=self.ffmpeg_executable diff --git a/res/rattle/rattleconfig.py b/res/rattle/rattleconfig.py new file mode 100644 index 00000000..2d65d842 --- /dev/null +++ b/res/rattle/rattleconfig.py @@ -0,0 +1,7 @@ +# list of possible files to play +RATTLES = [ + 'rattle1.mp3', + 'rattle2.mp3', + 'rattle3.mp3', + 'rattle4.mp3' +] From 2355f5ef294d5a4ebfcec6a5a9073b1752c2c05a Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 14:28:12 -0400 Subject: [PATCH 50/61] Readme: configuration for s&l and rattles --- README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/README.md b/README.md index 3f587c2e..6f7e9caf 100644 --- a/README.md +++ b/README.md @@ -41,3 +41,20 @@ You will need these environment variables to setup mr bot: ## note about libopus The `libopus.dll` is compiled for 64-bit Windows only. If you're using a different OS/architecture, you will need to find/compile the library for your system. If the name of the file changes, you will need to provide the `LIBOPUS` env variable, as described above. + +## extra configuration + +#### snakes and ladders + +It is possible to configure Snakes and Ladders to use your own board. Simply overwrite the `res/ladders/board.jpg` file and adjust the `res/ladders/board.py` file accordingly: + + - `BOARD_TILE_SIZE`: The size (width/height) of each tile on the board, in pixels + - `BOARD_PLAYER_SIZE`: The size of each player icon on the board, in pixels + - `BOARD_MARGIN`: Tuple (x, y) for extra margins on the board, relative to top-left corner + - `PLAYER_ICON_IMAGE_SIZE`: The size of the user avatars to request from Discord. This should be a power of 2 (e.g. `32`, `64`, `128`...) and should be higher or equal to `BOARD_PLAYER_SIZE`. + - `MAX_PLAYERS`: The maximum amount of players this board can support (i.e. how many players can you fit in each tile, at maximum capacity) + - `BOARD`: Dictionary[int, int] that defines the "shortcuts" in the board (the snakes and the ladders), in the form `from: to`. + +#### rattles + +To change the rattle sounds, put audio files in the `res/rattle` directory and modify the `RATTLES` list inside `res/rattle/rattleconfig.py`. From c3c9cd6a174b5b7c00d3427d6f5cb700252379ce Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 14:39:55 -0400 Subject: [PATCH 51/61] Store some common (yet scientifically incorrect) snek names in a file --- bot/cogs/snakes.py | 9 ++++----- res/snakes/common_snakes.py | 7 +++++++ 2 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 res/snakes/common_snakes.py diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index eec2b704..c9a6b7f3 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -15,6 +15,7 @@ from pymarkovchain import MarkovChain +import res.snakes.common_snakes from res.rattle.rattleconfig import RATTLES from bot.sneks import perlin @@ -70,13 +71,11 @@ async def get_snek(self, name: str = None) -> Embeddable: # return info about language return SNEK_PYTHON - # web_search = search.search(name) - # if(web_search is not None): - # return web_search # todo: find a random snek online if there name is null - # todo: scrape the web to find the lost sneks if name is not None: - return await scrape_itis(name) + if name.lower() in res.snakes.common_snakes.COMMON_SNAKES: + name = res.snakes.common_snakes.COMMON_SNAKES[name.lower()] + return await scrape_itis(name.lower()) @command(name="snakes.get()", aliases=["snakes.get"]) async def get(self, ctx: Context, name: str = None): diff --git a/res/snakes/common_snakes.py b/res/snakes/common_snakes.py new file mode 100644 index 00000000..b9d510bb --- /dev/null +++ b/res/snakes/common_snakes.py @@ -0,0 +1,7 @@ +# some common snake categories that don't need the extensive ITIS database lookup + +COMMON_SNAKES = { + 'cobra': 'naja', + 'cobras': 'naja', + 'anaconda': 'anacondas' +} From e82a9d1d0a29f360047537525376fd7b50c787eb Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 15:54:43 -0400 Subject: [PATCH 52/61] Random snakes! - Add tool to fetch a collection of sneks on Wikipedia - Use pickle to store/load said list - Add exception for pickle in tox.ini --- .gitignore | 3 +++ bot/cogs/snakes.py | 31 +++++++++++++++++++++++++++---- bot/sneks/sneks.py | 30 ++++++++++++++++++++---------- res/snakes/common_snakes.py | 5 ++--- tools/snekfetcher.py | 30 ++++++++++++++++++++++++++++++ tox.ini | 2 +- 6 files changed, 83 insertions(+), 18 deletions(-) create mode 100644 tools/snekfetcher.py diff --git a/.gitignore b/.gitignore index 2895fff3..c3ae245c 100644 --- a/.gitignore +++ b/.gitignore @@ -102,3 +102,6 @@ ENV/ # PyCharm .idea/ + +# pickle files (tool output) +*.pickle diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index c9a6b7f3..a04211f5 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -4,6 +4,7 @@ import logging import math import os +import pickle import random from typing import Dict @@ -51,16 +52,32 @@ class Snakes: """ def __init__(self, bot: AutoShardedBot): + self.bot = bot + + # libopus libopus = os.environ.get('LIBOPUS') if libopus is None: libopus = "libopus" discord.opus.load_opus(libopus) - self.bot = bot + + # ffmpeg self.ffmpeg_executable = os.environ.get('FFMPEG') if self.ffmpeg_executable is None: self.ffmpeg_executable = 'ffmpeg' + + # snakes and ladders self.active_sal: Dict[discord.TextChannel, SnakeAndLaddersGame] = {} + # check if the snake list pickle-file exists + pickle_file_path = 'sneks.pickle' + if not os.path.isfile(pickle_file_path): + log.warning("No \'sneks.pickle\' file could be found, random snakes are disabled!") + self.snake_list = [] + else: + # load pickle + with open(pickle_file_path, 'rb') as data: + self.snake_list = pickle.load(data) + async def get_snek(self, name: str = None) -> Embeddable: """ Gets information about a snek @@ -71,10 +88,16 @@ async def get_snek(self, name: str = None) -> Embeddable: # return info about language return SNEK_PYTHON - # todo: find a random snek online if there name is null + if name is None: + # check if the pickle file is there + if len(self.snake_list) is 0: + return None + # random snake + name = random.choice(self.snake_list).lower() + if name is not None: - if name.lower() in res.snakes.common_snakes.COMMON_SNAKES: - name = res.snakes.common_snakes.COMMON_SNAKES[name.lower()] + if name.lower() in res.snakes.common_snakes.REWRITES: + name = res.snakes.common_snakes.REWRITES[name.lower()] return await scrape_itis(name.lower()) @command(name="snakes.get()", aliases=["snakes.get"]) diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index 9f85cdac..68cfca35 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -15,7 +15,8 @@ ITIS_SEARCH_URL = ITIS_BASE_URL.format("SingleRpt") ITIS_JSON_SERVICE_FULLRECORD = "https://itis.gov/ITISWebService/jsonservice/getFullRecordFromTSN?tsn={0}" ITIS_JSON_SERVICE_FULLHIERARCHY = "https://itis.gov/ITISWebService/jsonservice/getFullHierarchyFromTSN?tsn={0}" -WIKI_URL = "http://en.wikipedia.org/w/api.php?{0}" +WIKI_API_URL = "http://en.wikipedia.org/w/api.php?{0}" +WIKI_URL = "http://en.wikipedia.org/wiki/{0}" IMAGE_SEARCH_URL = "https://api.qwant.com/api/search/images?count=1&offset=1&q={0}+snake" @@ -46,14 +47,16 @@ def as_embed(self): embed.title = self.species + " (" + self.common_name + ")" embed.colour = discord.Colour.green() embed.url = self.wiki_link - embed.add_field(name="Family", value=self.family) - embed.add_field(name="Genus", value=self.genus) + if self.family is not None and self.family != "": + embed.add_field(name="Family", value=self.family) + if self.genus is not None and self.genus != "": + embed.add_field(name="Genus", value=self.genus) embed.add_field(name="Species", value=self.species) embed.set_image(url=self.image_url) embed.description = self.short_description if len(embed.description) > 1000: embed.description = embed.description[:997] + "..." - if self.geo is not "": + if self.geo != "" and self.geo is not None: embed.add_field(name="Geography", value=self.geo) return embed @@ -107,13 +110,13 @@ def itis_find_link(soup) -> str: return ITIS_BASE_URL.format(soup.find("a")['href']) -async def wiki_summary(session: aiohttp.ClientSession, name: str) -> str: - search_url = WIKI_URL.format(parse.urlencode({ +async def wiki_summary(session: aiohttp.ClientSession, name: str, use_deepcat=True) -> str: + search_url = WIKI_API_URL.format(parse.urlencode({ 'list': 'search', 'srprop': '', 'srlimit': 1, 'limit': 1, - 'srsearch': "deepcat:Snake_genera " + name, + 'srsearch': ("deepcat:Snake_genera " + name) if use_deepcat else name, 'format': 'json', 'action': 'query' })) @@ -122,7 +125,7 @@ async def wiki_summary(session: aiohttp.ClientSession, name: str) -> str: print(search_url) page_title = j['query']['search'][0]['title'] page_id = str(j['query']['search'][0]['pageid']) - page_url = WIKI_URL.format(parse.urlencode({ + page_url = WIKI_API_URL.format(parse.urlencode({ 'prop': 'extracts', 'explaintext': '', 'titles': page_title, @@ -203,8 +206,15 @@ async def scrape_itis(name: str) -> Embeddable: res = requests.post(url=ITIS_SEARCH_URL, data=form_data) html = res.content.decode('iso-8859-1') if "No Records Found?" in html: - # abort, no snek - return None + async with aiohttp.ClientSession() as session: + # no snek, maybe wikipedia? + snake = SnakeDef() + snake.species = name.title() + snake.common_name = snake.species + snake.short_description = await wiki_summary(session, name, use_deepcat=False) + snake.wiki_link = WIKI_URL.format(name.title()) + snake.image_url = find_image_url(name) + return snake soup = BeautifulSoup(html, "html.parser") tables = soup.find_all("table", {"width": "100%"}) diff --git a/res/snakes/common_snakes.py b/res/snakes/common_snakes.py index b9d510bb..823d6dfb 100644 --- a/res/snakes/common_snakes.py +++ b/res/snakes/common_snakes.py @@ -1,6 +1,5 @@ -# some common snake categories that don't need the extensive ITIS database lookup - -COMMON_SNAKES = { +# some common snake categories need to be rewritten because they aren't scientifically accurate +REWRITES = { 'cobra': 'naja', 'cobras': 'naja', 'anaconda': 'anacondas' diff --git a/tools/snekfetcher.py b/tools/snekfetcher.py new file mode 100644 index 00000000..03fcdb00 --- /dev/null +++ b/tools/snekfetcher.py @@ -0,0 +1,30 @@ +# a tool to fetch some sneks +# should be run in the same pipenv as the bot (using pipenv shell) + +import asyncio +import pickle + +import aiohttp + +OUTPUT_FILE = "sneks.pickle" +FETCH_URL = "https://en.wikipedia.org/w/api.php?action=query&list=categorymembers" \ + "&cmtitle=Category:Snake_genera&cmlimit=500&cmtype=page&format=json" + + +async def fetch(session): + async with session.get(FETCH_URL) as res: + return await res.json() + + +loop = asyncio.get_event_loop() + +with aiohttp.ClientSession(loop=loop) as session: + result = loop.run_until_complete( + fetch(session) + ) + snake_names = [r['title'] for r in result['query']['categorymembers']] + with open(OUTPUT_FILE, 'wb') as out: + pickle.dump(snake_names, out) + print('done output of ' + str(len(snake_names)) + ' sneks') + +loop.close() diff --git a/tox.ini b/tox.ini index c9de86ca..0cde4f83 100644 --- a/tox.ini +++ b/tox.ini @@ -2,4 +2,4 @@ max-line-length=120 application_import_names=bot exclude=.venv -ignore=B311,W503,E226 +ignore=B311,W503,E226,B403 From db3d329b566b78ace19fab4d10466707704f9112 Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 15:55:14 -0400 Subject: [PATCH 53/61] Another tox exception --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index 0cde4f83..317b50bb 100644 --- a/tox.ini +++ b/tox.ini @@ -2,4 +2,4 @@ max-line-length=120 application_import_names=bot exclude=.venv -ignore=B311,W503,E226,B403 +ignore=B311,W503,E226,B403,B301 From f2b4c9ae213917b8afe5b3e1774af40eb923e2f4 Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 16:00:21 -0400 Subject: [PATCH 54/61] Document random snakes/pickle-file in readme --- README.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6f7e9caf..d114aaf0 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ A Discord bot that: ## how u do that -- Snek lookup: `bot.snakes.get('snek name here')` +- Snek lookup: `bot.snakes.get('snek name here')`, use `bot.snakes.get` for a random snek type - Snakes and Ladders: - Create a game using `bot.sal create` (the author can cancel the game using `bot.sal cancel`) - Others join the game using `bot.sal join` (players can leave using `bot.sal leave`) @@ -38,6 +38,19 @@ You will need these environment variables to setup mr bot: - `LIBOPUS` The name of the `libopus` library file, located in the project folder. If not provided, defaults to `libopus`. - ffmpeg and libopus are only used for snek rattling (voice comms) +## random snek database + +In order to be able to find random snakes, you need to use the provided tool to fetch a list of snake names. That list is stored inside a pickle-file that has to be in the project directory when starting the bot. + +To generate the pickle-file, you use the `tools/snekfetcher.py` file inside the Pipenv shell: + +``` +pipenv shell +python tools\snekfetcher.py +``` + +The output file will be `sneks.pickle`. + ## note about libopus The `libopus.dll` is compiled for 64-bit Windows only. If you're using a different OS/architecture, you will need to find/compile the library for your system. If the name of the file changes, you will need to provide the `LIBOPUS` env variable, as described above. From 0a1367aca551ef3aa2f04fa844d5c2db23e3a464 Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 16:05:55 -0400 Subject: [PATCH 55/61] Fix wiki link (underscores) --- bot/sneks/sneks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index 68cfca35..38fbfd39 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -212,7 +212,7 @@ async def scrape_itis(name: str) -> Embeddable: snake.species = name.title() snake.common_name = snake.species snake.short_description = await wiki_summary(session, name, use_deepcat=False) - snake.wiki_link = WIKI_URL.format(name.title()) + snake.wiki_link = WIKI_URL.format(name.title()).replace(' ', '_') snake.image_url = find_image_url(name) return snake soup = BeautifulSoup(html, "html.parser") From 7b8d5a6ed6f08655e3b67c997033aceb1c30906e Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 17:49:28 -0400 Subject: [PATCH 56/61] More adjustments and fixes to snek querying --- bot/sneks/sneks.py | 17 +++++++++++------ res/snakes/common_snakes.py | 3 ++- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index 38fbfd39..d37c995f 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -110,19 +110,20 @@ def itis_find_link(soup) -> str: return ITIS_BASE_URL.format(soup.find("a")['href']) -async def wiki_summary(session: aiohttp.ClientSession, name: str, use_deepcat=True) -> str: +async def wiki_summary(session: aiohttp.ClientSession, name: str, deepcat: str) -> str: search_url = WIKI_API_URL.format(parse.urlencode({ 'list': 'search', 'srprop': '', 'srlimit': 1, - 'limit': 1, - 'srsearch': ("deepcat:Snake_genera " + name) if use_deepcat else name, + 'srsearch': ("deepcat:" + deepcat + " " + name) if deepcat is not None else name, 'format': 'json', 'action': 'query' })) async with session.get(search_url) as res: j = await res.json() print(search_url) + if len(j['query']['search']) is 0: + return None page_title = j['query']['search'][0]['title'] page_id = str(j['query']['search'][0]['pageid']) page_url = WIKI_API_URL.format(parse.urlencode({ @@ -176,12 +177,12 @@ async def scrape_itis_page(url: str, initial_query: str) -> Embeddable: embeddable.image_url = find_image_url(scientific_name) embeddable.wiki_link = url - summary = await wiki_summary(session, scientific_name + " " + initial_query) + summary = await wiki_summary(session, scientific_name + " " + initial_query, deepcat='Snake_genera') embeddable.short_description = summary if not None else "" embeddable.geo = ', '.join(geo) else: embeddable = SnakeGroup() - summary = await wiki_summary(session, scientific_name + " " + initial_query) + summary = await wiki_summary(session, scientific_name + " " + initial_query, deepcat='Snake_genera') embeddable.short_description = summary if not None else "" embeddable.common_name = common_name if common_name != "" else "None" embeddable.scientific_name = scientific_name @@ -209,9 +210,13 @@ async def scrape_itis(name: str) -> Embeddable: async with aiohttp.ClientSession() as session: # no snek, maybe wikipedia? snake = SnakeDef() + snake.short_description = await wiki_summary(session, name, deepcat='Snakes_by_common_name') + if snake.short_description is None: + snake.short_description = await wiki_summary(session, name, deepcat='Snake_genera') + if snake.short_description is None: + return None snake.species = name.title() snake.common_name = snake.species - snake.short_description = await wiki_summary(session, name, use_deepcat=False) snake.wiki_link = WIKI_URL.format(name.title()).replace(' ', '_') snake.image_url = find_image_url(name) return snake diff --git a/res/snakes/common_snakes.py b/res/snakes/common_snakes.py index 823d6dfb..bcd9f2cf 100644 --- a/res/snakes/common_snakes.py +++ b/res/snakes/common_snakes.py @@ -2,5 +2,6 @@ REWRITES = { 'cobra': 'naja', 'cobras': 'naja', - 'anaconda': 'anacondas' + 'anaconda': 'anacondas', + 'viper': 'viperidae' } From 679abc14a4a2aa719d5894f8b6cbd24a4e44fcdd Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 18:44:27 -0400 Subject: [PATCH 57/61] Remove pass's, replace prints with logger, more documentation in sneks file --- bot/cogs/snakes.py | 4 +--- bot/sneks/sneks.py | 49 ++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index a04211f5..1126bb93 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -121,7 +121,6 @@ async def draw(self, ctx: Context): stream = self.generate_snake_image() file = discord.File(stream, filename='snek.png') await ctx.send(file=file) - pass @command(name="snakes.rattle()", aliases=["snakes.rattle"]) async def rattle(self, ctx: Context): @@ -147,7 +146,6 @@ async def rattle(self, ctx: Context): except discord.ClientException as e: log.error(e) return - pass # event handler for voice client termination async def on_end_voice(self, voice_client): @@ -289,7 +287,7 @@ async def hatch(self, ctx: Context): my_snake = list(hatching_snakes.keys())[random.randint(0, 3)] my_snake_img = hatching_snakes[my_snake] - print(my_snake_img) + log.debug(my_snake_img) m = await channel.send(embed=discord.Embed(description="Hatching your snake :snake:...")) await asyncio.sleep(1) diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index d37c995f..07c362be 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -1,4 +1,5 @@ import json +import logging import random from urllib import parse @@ -19,10 +20,16 @@ WIKI_URL = "http://en.wikipedia.org/wiki/{0}" IMAGE_SEARCH_URL = "https://api.qwant.com/api/search/images?count=1&offset=1&q={0}+snake" +log = logging.getLogger(__name__) + class Embeddable: + """ + Represents an object that can be serialized to a :class:`discord.Embed` + """ + def as_embed(self) -> discord.Embed: - pass + raise NotImplementedError() class SnakeDef(Embeddable): @@ -93,6 +100,11 @@ def as_embed(self): def find_image_url(name: str) -> str: + """ + Searches an image on the Qwant search engine API + :param name: the name of the image + :return: a direct URL to the image, or an empty string if the search was unsuccessful + """ req_url = IMAGE_SEARCH_URL.format(name.replace(" ", "+")) res = requests.get(url=req_url, headers={"User-Agent": "Mozilla/5.0"}) if res.status_code != 200: @@ -103,14 +115,31 @@ def find_image_url(name: str) -> str: def is_itis_table_empty(soup) -> bool: + """ + Checks whether an ITIS search result table is empty + :param soup: the soup to search in + :return: true if the search table is empty + """ return "No Records Found." in str(soup) def itis_find_link(soup) -> str: + """ + Finds the first link in an ITIS search result table + :param soup: the soup to search in + :return: a direct URL + """ return ITIS_BASE_URL.format(soup.find("a")['href']) async def wiki_summary(session: aiohttp.ClientSession, name: str, deepcat: str) -> str: + """ + Finds the summary of the given Wikipedia article + :param session: the aiohttp HTTP session + :param name: the title to search + :param deepcat: (optional) category to search in, recursively + :return: + """ search_url = WIKI_API_URL.format(parse.urlencode({ 'list': 'search', 'srprop': '', @@ -121,7 +150,7 @@ async def wiki_summary(session: aiohttp.ClientSession, name: str, deepcat: str) })) async with session.get(search_url) as res: j = await res.json() - print(search_url) + log.debug(search_url) if len(j['query']['search']) is 0: return None page_title = j['query']['search'][0]['title'] @@ -140,6 +169,12 @@ async def wiki_summary(session: aiohttp.ClientSession, name: str, deepcat: str) async def scrape_itis_page(url: str, initial_query: str) -> Embeddable: + """ + Scrapes an ITIS page from the direct URL + :param url: the URL of the ITIS page + :param initial_query: the initial query submitted in the search + :return: an Embeddable object to be output + """ tsn = parse.parse_qs(parse.urlparse(url).query)['search_value'][0] json_url = ITIS_JSON_SERVICE_FULLRECORD.format(tsn) @@ -194,6 +229,11 @@ async def scrape_itis_page(url: str, initial_query: str) -> Embeddable: async def scrape_itis(name: str) -> Embeddable: + """ + Searches and scrapes the ITIS database from the given animal name + :param name: the name of the animal + :return: an Embeddable object to be output + """ form_data = { 'categories': 'All', 'Go': 'Search', @@ -245,6 +285,11 @@ async def scrape_itis(name: str) -> Embeddable: def snakify(s): + """ + "Snakifies" a string, by randomly elongating s's and e's + :param s: the string to "snakify" + :return: the "snakified" string + """ x = random.randint(3, 8) y = random.randint(3, 8) return s.replace("s", x * "s").replace("e", y * "e") if s is not None else s From 54e2dcbda395990db79e04fcb9ef08312de95a7e Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 18:46:14 -0400 Subject: [PATCH 58/61] Simplify snekfetcher instructions --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index d114aaf0..a6dc0df7 100644 --- a/README.md +++ b/README.md @@ -45,8 +45,7 @@ In order to be able to find random snakes, you need to use the provided tool to To generate the pickle-file, you use the `tools/snekfetcher.py` file inside the Pipenv shell: ``` -pipenv shell -python tools\snekfetcher.py +pipenv run tools\snekfetcher.py ``` The output file will be `sneks.pickle`. From e59546ca6729f7b5d4b37f6227d36af2892181f6 Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 19:27:12 -0400 Subject: [PATCH 59/61] Change max sentences count to 2 --- bot/sneks/sneks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index 07c362be..5ea99f51 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -159,7 +159,7 @@ async def wiki_summary(session: aiohttp.ClientSession, name: str, deepcat: str) 'prop': 'extracts', 'explaintext': '', 'titles': page_title, - 'exsentences': '3', + 'exsentences': '2', 'format': 'json', 'action': 'query' })) From 75bd290bc43aa081266009f2f3c4d8e4ab324475 Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 19:34:35 -0400 Subject: [PATCH 60/61] Add docstring for draw command --- bot/cogs/snakes.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bot/cogs/snakes.py b/bot/cogs/snakes.py index 1126bb93..3bbaecf9 100644 --- a/bot/cogs/snakes.py +++ b/bot/cogs/snakes.py @@ -118,6 +118,9 @@ async def get(self, ctx: Context, name: str = None): @command(name="snakes.draw()", aliases=["snakes.draw"]) async def draw(self, ctx: Context): + """ + Draws a random snek using Perlin noise + """ stream = self.generate_snake_image() file = discord.File(stream, filename='snek.png') await ctx.send(file=file) From 9af1e83217fd95052869323a5e2b835503e7ce72 Mon Sep 17 00:00:00 2001 From: momothereal Date: Sun, 25 Mar 2018 19:41:00 -0400 Subject: [PATCH 61/61] Capitalize instead of titling --- bot/sneks/sneks.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bot/sneks/sneks.py b/bot/sneks/sneks.py index 5ea99f51..34ba2d26 100644 --- a/bot/sneks/sneks.py +++ b/bot/sneks/sneks.py @@ -255,9 +255,9 @@ async def scrape_itis(name: str) -> Embeddable: snake.short_description = await wiki_summary(session, name, deepcat='Snake_genera') if snake.short_description is None: return None - snake.species = name.title() + snake.species = name.capitalize() snake.common_name = snake.species - snake.wiki_link = WIKI_URL.format(name.title()).replace(' ', '_') + snake.wiki_link = WIKI_URL.format(name.capitalize()).replace(' ', '_') snake.image_url = find_image_url(name) return snake soup = BeautifulSoup(html, "html.parser")