diff --git a/hangman/__init__.py b/hangman/__init__.py index aee87e2..8b6ec76 100644 --- a/hangman/__init__.py +++ b/hangman/__init__.py @@ -4,4 +4,4 @@ from .hangman import Hangman def setup(bot): n = Hangman(bot) bot.add_cog(n) - bot.add_listener(n._on_react, "on_reaction_add") \ No newline at end of file + bot.add_listener(n._on_react, "on_reaction_add") diff --git a/hangman/hangman.py b/hangman/hangman.py index 2b3776e..7e6376d 100644 --- a/hangman/hangman.py +++ b/hangman/hangman.py @@ -1,11 +1,9 @@ -import discord -import os - from collections import defaultdict -from discord.ext import commands from random import randint -from redbot.core import Config, checks, RedContext +import discord +from discord.ext import commands +from redbot.core import Config, checks class Hangman: @@ -20,7 +18,8 @@ class Hangman: self.config.register_guild(**default_guild) - self.the_data = defaultdict(lambda:{"running": False, "hangman": 0, "guesses": [], "trackmessage": False, "answer": ''}) + self.the_data = defaultdict( + lambda: {"running": False, "hangman": 0, "guesses": [], "trackmessage": False, "answer": ''}) self.answer_path = "hangman/data/hanganswers.txt" self.winbool = defaultdict(lambda: False) @@ -58,7 +57,7 @@ class Hangman: """> \_________ |/ | - | """+theface+""" + | """ + theface + """ | | | @@ -69,7 +68,7 @@ class Hangman: """> \________ |/ | - | """+theface+""" + | """ + theface + """ | | | | | @@ -77,11 +76,10 @@ class Hangman: |\___ HAN""", - """> \_________ |/ | - | """+theface+""" + | """ + theface + """ | /| | | | @@ -89,11 +87,10 @@ class Hangman: |\___ HANG""", - """> \_________ |/ | - | """+theface+""" + | """ + theface + """ | /|\ | | | @@ -101,12 +98,10 @@ class Hangman: |\___ HANGM""", - - """> \________ |/ | - | """+theface+""" + | """ + theface + """ | /|\ | | | / @@ -114,11 +109,10 @@ class Hangman: |\___ HANGMA""", - """> \________ |/ | - | """+theface+""" + | """ + theface + """ | /|\ | | | / \ @@ -136,7 +130,7 @@ class Hangman: @hangset.command(pass_context=True) async def face(self, ctx: commands.Context, theface): message = ctx.message - #Borrowing FlapJack's emoji validation (https://github.com/flapjax/FlapJack-Cogs/blob/master/smartreact/smartreact.py) + # Borrowing FlapJack's emoji validation (https://github.com/flapjax/FlapJack-Cogs/blob/master/smartreact/smartreact.py) if theface[:2] == "<:": theface = [r for r in self.bot.emojis if r.id == theface.split(':')[2][:-1]][0] @@ -150,9 +144,9 @@ class Hangman: await self.config.guild(ctx.guild).theface.set(theface) await self._update_hanglist() await ctx.send("Face has been updated!") - + @commands.command(aliases=['hang'], pass_context=True) - async def hangman(self, ctx, guess: str=None): + async def hangman(self, ctx, guess: str = None): """Play a game of hangman against the bot!""" if guess is None: if self.the_data[ctx.guild]["running"]: @@ -167,10 +161,9 @@ class Hangman: await ctx.send("Game of hangman is not yet running!\nStarting a game of hangman!") self._startgame(ctx.guild) await self._printgame(ctx.channel) - else: + else: await self._guessletter(guess, ctx.channel) - def _startgame(self, guild): """Starts a new game of hangman""" self.the_data[guild]["answer"] = self._getphrase().upper() @@ -179,7 +172,7 @@ class Hangman: self.winbool[guild] = False self.the_data[guild]["running"] = True self.the_data[guild]["trackmessage"] = False - + def _stopgame(self, guild): """Stops the game in current state""" self.the_data[guild]["running"] = False @@ -189,47 +182,47 @@ class Hangman: await channel.send("You Win!") self._stopgame(channel.guild) return - + if self.the_data[channel.guild]["hangman"] >= 7: - await channel.send("You Lose!\nThe Answer was: **"+self.the_data[channel.guild]["answer"]+"**") + await channel.send("You Lose!\nThe Answer was: **" + self.the_data[channel.guild]["answer"] + "**") self._stopgame(channel.guild) - + def _getphrase(self): """Get a new phrase for the game and returns it""" phrasefile = open(self.answer_path, 'r') phrases = phrasefile.readlines() - + outphrase = "" while outphrase == "": - outphrase = phrases[randint(0, len(phrases)-1)].partition(" (")[0] + outphrase = phrases[randint(0, len(phrases) - 1)].partition(" (")[0] return outphrase - + def _hideanswer(self): """Returns the obscured answer""" out_str = "" - + self.winbool = True for i in self.the_data["answer"]: if i == " " or i == "-": - out_str += i*2 + out_str += i * 2 elif i in self.the_data["guesses"] or i not in "ABCDEFGHIJKLMNOPQRSTUVWXYZ": - out_str += "__"+i+"__ " + out_str += "__" + i + "__ " else: out_str += "**\_** " self.winbool = False - + return out_str - + def _guesslist(self): """Returns the current letter list""" out_str = "" for i in self.the_data["guesses"]: out_str += str(i) + "," out_str = out_str[:-1] - + return out_str - + async def _guessletter(self, guess, channel): """Checks the guess on a letter and prints game if acceptable guess""" if guess.upper() not in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" or len(guess) != 1: @@ -241,73 +234,68 @@ class Hangman: return if guess.upper() not in self.the_data[channel.guild]["answer"]: self.the_data["hangman"] += 1 - + self.the_data[channel.guild]["guesses"].append(guess.upper()) - + await self._printgame(channel) - + async def _on_react(self, reaction, user): """ Thanks to flapjack reactpoll for guidelines https://github.com/flapjax/FlapJack-Cogs/blob/master/reactpoll/reactpoll.py""" - - - + if not self.the_data["trackmessage"]: return - + if user == self.bot.user: return # Don't remove bot's own reactions message = reaction.message emoji = reaction.emoji - + if not message.id == self.the_data["trackmessage"]: return - + if str(emoji) in self.letters: letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[self.letters.index(str(emoji))] await self._guessletter(letter, message.channel) - - + if str(emoji) in self.navigate: if str(emoji) == self.navigate[0]: await self._reactmessage_am(message) - + if str(emoji) == self.navigate[-1]: await self._reactmessage_nz(message) - - + async def _reactmessage_menu(self, message): """React with menu options""" await message.clear_reactions() - + await message.add_reaction(self.navigate[0]) await message.add_reaction(self.navigate[-1]) - + async def _reactmessage_am(self, message): await message.clear_reactions() for x in range(len(self.letters)): - if x in [i for i,b in enumerate("ABCDEFGHIJKLM") if b not in self._guesslist()]: + if x in [i for i, b in enumerate("ABCDEFGHIJKLM") if b not in self._guesslist()]: await message.add_reaction(self.letters[x]) - + await message.add_reaction(self.navigate[-1]) async def _reactmessage_nz(self, message): await self.bot.clear_reactions(message) for x in range(len(self.letters)): - if x in [i for i,b in enumerate("NOPQRSTUVWXYZ") if b not in self._guesslist()]: - await message.add_reaction(self.letters[x+13]) - - await message.add_reaction(self.navigate[0]) + if x in [i for i, b in enumerate("NOPQRSTUVWXYZ") if b not in self._guesslist()]: + await message.add_reaction(self.letters[x + 13]) + await message.add_reaction(self.navigate[0]) async def _printgame(self, channel): """Print the current state of game""" cSay = ("Guess this: " + str(self._hideanswer()) + "\n" + "Used Letters: " + str(self._guesslist()) + "\n" + self.hanglist[self.the_data["hangman"]] + "\n" - + self.navigate[0]+" for A-M, "+self.navigate[-1]+" for N-Z") + + self.navigate[0] + " for A-M, " + self.navigate[-1] + " for N-Z") message = await channel.send(cSay) @@ -315,10 +303,9 @@ class Hangman: await self._reactmessage_menu(message) await self._checkdone(channel) - + def setup(bot): n = Hangman(bot) bot.add_cog(n) bot.add_listener(n._on_react, "on_reaction_add") - diff --git a/hangman/info.json b/hangman/info.json index d845d0f..655f00c 100644 --- a/hangman/info.json +++ b/hangman/info.json @@ -14,7 +14,7 @@ "short": "Play Hangman", "tags": [ "game", - "fun", + "fun", "bobloy" ] } \ No newline at end of file