diff options
| author | 2019-05-11 04:51:30 +1000 | |
|---|---|---|
| committer | 2019-05-11 04:51:30 +1000 | |
| commit | 0e2c6a1b0daef5b569da7652801b5725bf1ed95b (patch) | |
| tree | c3d57e50f2ba07cb2d9e7476d3b9441c1f671bd9 /bot/seasons/evergreen/snakes/snakes_cog.py | |
| parent | not importing aiohttp now (diff) | |
| parent | Merge pull request #198 from Suhail6inkling/constants_fix (diff) | |
Merge branch 'master' into hanukkah_embed_iceman
Diffstat (limited to 'bot/seasons/evergreen/snakes/snakes_cog.py')
| -rw-r--r-- | bot/seasons/evergreen/snakes/snakes_cog.py | 95 | 
1 files changed, 53 insertions, 42 deletions
diff --git a/bot/seasons/evergreen/snakes/snakes_cog.py b/bot/seasons/evergreen/snakes/snakes_cog.py index 74d2ab4f..3ffdf1bf 100644 --- a/bot/seasons/evergreen/snakes/snakes_cog.py +++ b/bot/seasons/evergreen/snakes/snakes_cog.py @@ -134,12 +134,11 @@ CARD = {  class Snakes(Cog):      """ -    Commands related to snakes. These were created by our -    community during the first code jam. +    Commands related to snakes, created by our community during the first code jam.      More information can be found in the code-jam-1 repo. -    https://gitlab_bot_repo.com/discord-python/code-jams/code-jam-1 +    https://github.com/python-discord/code-jam-1      """      wiki_brief = re.compile(r'(.*?)(=+ (.*?) =+)', flags=re.DOTALL) @@ -156,9 +155,8 @@ class Snakes(Cog):      # region: Helper methods      @staticmethod      def _beautiful_pastel(hue): -        """ -        Returns random bright pastels. -        """ +        """Returns random bright pastels.""" +          light = random.uniform(0.7, 0.85)          saturation = 1 @@ -178,6 +176,7 @@ class Snakes(Cog):          Written by juan and Someone during the first code jam.          """ +          snake = Image.open(buffer)          # Get the size of the snake icon, configure the height of the image box (yes, it changes) @@ -254,9 +253,8 @@ class Snakes(Cog):      @staticmethod      def _snakify(message): -        """ -        Sssnakifffiesss a sstring. -        """ +        """Sssnakifffiesss a sstring.""" +          # Replace fricatives with exaggerated snake fricatives.          simple_fricatives = [              "f", "s", "z", "h", @@ -278,9 +276,8 @@ class Snakes(Cog):          return message      async def _fetch(self, session, url, params=None): -        """ -        Asyncronous web request helper method. -        """ +        """Asynchronous web request helper method.""" +          if params is None:              params = {} @@ -290,11 +287,11 @@ class Snakes(Cog):      def _get_random_long_message(self, messages, retries=10):          """ -        Fetch a message that's at least 3 words long, -        but only if it is possible to do so in retries -        attempts. Else, just return whatever the last -        message is. +        Fetch a message that's at least 3 words long, if possible to do so in retries attempts. + +        Else, just return whatever the last message is.          """ +          long_message = random.choice(messages)          if len(long_message.split()) < 3 and retries > 0:              return self._get_random_long_message( @@ -306,14 +303,16 @@ class Snakes(Cog):      async def _get_snek(self, name: str) -> Dict[str, Any]:          """ -        Goes online and fetches all the data from a wikipedia article -        about a snake. Builds a dict that the .get() method can use. +        Fetches all the data from a wikipedia article about a snake. + +        Builds a dict that the .get() method can use.          Created by Ava and eivl.          :param name: The name of the snake to get information for - omit for a random snake          :return: A dict containing information on a snake          """ +          snake_info = {}          async with aiohttp.ClientSession() as session: @@ -412,20 +411,21 @@ class Snakes(Cog):      async def _get_snake_name(self) -> Dict[str, str]:          """          Gets a random snake name. +          :return: A random snake name, as a string.          """          return random.choice(self.snake_names)      async def _validate_answer(self, ctx: Context, message: Message, answer: str, options: list):          """ -        Validate the answer using a reaction event loop +        Validate the answer using a reaction event loop. +          :return:          """          def predicate(reaction, user): -            """ -            Test if the the answer is valid and can be evaluated. -            """ +            """Test if the the answer is valid and can be evaluated.""" +              return (                  reaction.message.id == message.id                  # The reaction is attached to the question we asked.                  and user == ctx.author                             # It's the user who triggered the quiz. @@ -465,7 +465,7 @@ class Snakes(Cog):      @locked()      async def antidote_command(self, ctx: Context):          """ -        Antidote - Can you create the antivenom before the patient dies? +        Antidote! Can you create the antivenom before the patient dies?          Rules:  You have 4 ingredients for each antidote, you only have 10 attempts                  Once you synthesize the antidote, you will be presented with 4 markers @@ -480,9 +480,7 @@ class Snakes(Cog):          """          def predicate(reaction_: Reaction, user_: Member): -            """ -            Make sure that this reaction is what we want to operate on -            """ +            """Make sure that this reaction is what we want to operate on."""              return (                  all(( @@ -610,7 +608,7 @@ class Snakes(Cog):      @snakes_group.command(name='draw')      async def draw_command(self, ctx: Context):          """ -        Draws a random snek using Perlin noise +        Draws a random snek using Perlin noise.          Written by Momo and kel.          Modified by juan and lemon. @@ -652,12 +650,14 @@ class Snakes(Cog):      async def get_command(self, ctx: Context, *, name: Snake = None):          """          Fetches information about a snake from Wikipedia. +          :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          Created by Ava and eivl.          """ +          with ctx.typing():              if name is None:                  name = await Snake.random() @@ -702,11 +702,12 @@ class Snakes(Cog):      @locked()      async def guess_command(self, ctx):          """ -        Snake identifying game! +        Snake identifying game.          Made by Ava and eivl.          Modified by lemon.          """ +          with ctx.typing():              image = None @@ -736,10 +737,11 @@ class Snakes(Cog):      @snakes_group.command(name='hatch')      async def hatch_command(self, ctx: Context):          """ -        Hatches your personal snake +        Hatches your personal snake.          Written by Momo and kel.          """ +          # Pick a random snake to hatch.          snake_name = random.choice(list(utils.snakes.keys()))          snake_image = utils.snakes[snake_name] @@ -772,6 +774,7 @@ class Snakes(Cog):          Written by Samuel.          Modified by gdude.          """ +          url = "http://www.omdbapi.com/"          page = random.randint(1, 27) @@ -842,6 +845,7 @@ class Snakes(Cog):          This was created by Mushy and Cardium,          and modified by Urthas and lemon.          """ +          # Prepare a question.          question = random.choice(self.snake_quizzes)          answer = question["answerkey"] @@ -862,6 +866,8 @@ class Snakes(Cog):      @snakes_group.command(name='name', aliases=('name_gen',))      async def name_command(self, ctx: Context, *, name: str = None):          """ +        Snakifies a username. +          Slices the users name at the last vowel (or second last if the name          ends with a vowel), and then combines it with a random snake name,          which is sliced at the first vowel (or second if the name starts with @@ -880,6 +886,7 @@ class Snakes(Cog):          This was written by Iceman, and modified for inclusion into the bot by lemon.          """ +          snake_name = await self._get_snake_name()          snake_name = snake_name['name']          snake_prefix = "" @@ -932,11 +939,12 @@ class Snakes(Cog):      @locked()      async def sal_command(self, ctx: Context):          """ -        Play a game of Snakes and Ladders! +        Play a game of Snakes and Ladders.          Written by Momo and kel.          Modified by lemon.          """ +          # check if there is already a game in this channel          if ctx.channel in self.active_sal:              await ctx.send(f"{ctx.author.mention} A game is already in progress in this channel.") @@ -949,10 +957,8 @@ class Snakes(Cog):      @snakes_group.command(name='about')      async def about_command(self, ctx: Context): -        """ -        A command that shows an embed with information about the event, -        it's participants, and its winners. -        """ +        """Show an embed with information about the event, its participants, and its winners.""" +          contributors = [              "<@!245270749919576066>",              "<@!396290259907903491>", @@ -996,10 +1002,11 @@ class Snakes(Cog):      @snakes_group.command(name='card')      async def card_command(self, ctx: Context, *, name: Snake = None):          """ -        Create an interesting little card from a snake! +        Create an interesting little card from a snake.          Created by juan and Someone during the first code jam.          """ +          # Get the snake data we need          if not name:              name_obj = await self._get_snake_name() @@ -1034,11 +1041,12 @@ class Snakes(Cog):      @snakes_group.command(name='fact')      async def fact_command(self, ctx: Context):          """ -        Gets a snake-related fact +        Gets a snake-related fact.          Written by Andrew and Prithaj.          Modified by lemon.          """ +          question = random.choice(self.snake_facts)["fact"]          embed = Embed(              title="Snake fact", @@ -1049,9 +1057,8 @@ class Snakes(Cog):      @snakes_group.command(name='help')      async def help_command(self, ctx: Context): -        """ -        This just invokes the help command on this cog. -        """ +        """Invokes the help command for the Snakes Cog.""" +          log.debug(f"{ctx.author} requested info about the snakes cog")          return await ctx.invoke(self.bot.get_command("help"), "Snakes") @@ -1059,6 +1066,7 @@ class Snakes(Cog):      async def snakify_command(self, ctx: Context, *, message: str = None):          """          How would I talk if I were a snake? +          :param ctx: context          :param message: If this is passed, it will snakify the message.                          If not, it will snakify a random message from @@ -1067,6 +1075,7 @@ class Snakes(Cog):          Written by Momo and kel.          Modified by lemon.          """ +          with ctx.typing():              embed = Embed()              user = ctx.message.author @@ -1100,13 +1109,14 @@ class Snakes(Cog):      @snakes_group.command(name='video', aliases=('get_video',))      async def video_command(self, ctx: Context, *, search: str = None):          """ -        Gets a YouTube video about snakes +        Gets a YouTube video about snakes.          :param ctx: Context object passed from discord.py          :param search: Optional, a name of a snake. Used to search for videos with that name          Written by Andrew and Prithaj.          """ +          # Are we searching for anything specific?          if search:              query = search + ' snake' @@ -1141,12 +1151,12 @@ class Snakes(Cog):      @snakes_group.command(name='zen')      async def zen_command(self, ctx: Context):          """ -        Gets a random quote from the Zen of Python, -        except as if spoken by a snake. +        Gets a random quote from the Zen of Python, except as if spoken by a snake.          Written by Prithaj and Andrew.          Modified by lemon.          """ +          embed = Embed(              title="Zzzen of Pythhon",              color=SNAKE_COLOR @@ -1168,6 +1178,7 @@ class Snakes(Cog):      @card_command.error      @video_command.error      async def command_error(self, ctx, error): +        """Local error handler for the Snake Cog."""          embed = Embed()          embed.colour = Colour.red()  |