diff options
| -rw-r--r-- | bot/exts/evergreen/connect_four.py | 67 | 
1 files changed, 44 insertions, 23 deletions
diff --git a/bot/exts/evergreen/connect_four.py b/bot/exts/evergreen/connect_four.py index 38647f8e..6ae14f53 100644 --- a/bot/exts/evergreen/connect_four.py +++ b/bot/exts/evergreen/connect_four.py @@ -6,7 +6,7 @@ from functools import partial  import discord  from discord.ext import commands -EMOJIS = [":white_circle:", ":blue_circle:", ":red_circle:"] +EMOJIS = None  NUMBERS = [      ":one:",      ":two:", @@ -38,12 +38,12 @@ class Game:      """A Connect 4 Game."""      def __init__( -        self, -        bot: commands.Bot, -        channel: discord.TextChannel, -        player1: discord.Member, -        player2: typing.Optional[discord.Member], -        size: int = 7, +            self, +            bot: commands.Bot, +            channel: discord.TextChannel, +            player1: discord.Member, +            player2: typing.Optional[discord.Member], +            size: int = 7,      ) -> None:          self.bot = bot @@ -293,20 +293,20 @@ class ConnectFour(commands.Cog):          return True      def get_player( -        self, -        ctx: commands.Context, -        announcement: discord.Message, -        reaction: discord.Reaction, -        user: discord.Member +            self, +            ctx: commands.Context, +            announcement: discord.Message, +            reaction: discord.Reaction, +            user: discord.Member      ) -> bool:          """Predicate checking the criteria for the announcement message."""          if self.already_playing(ctx.author):  # If they've joined a game since requesting a player 2              return True  # Is dealt with later on          if ( -            user.id not in (ctx.me.id, ctx.author.id) -            and str(reaction.emoji) == HAND_RAISED_EMOJI -            and reaction.message.id == announcement.id +                user.id not in (ctx.me.id, ctx.author.id) +                and str(reaction.emoji) == HAND_RAISED_EMOJI +                and reaction.message.id == announcement.id          ):              if self.already_playing(user):                  self.bot.loop.create_task(ctx.send(f"{user.mention} You're already playing a game!")) @@ -323,9 +323,9 @@ class ConnectFour(commands.Cog):              return True          if ( -            user.id == ctx.author.id -            and str(reaction.emoji) == CROSS_EMOJI -            and reaction.message.id == announcement.id +                user.id == ctx.author.id +                and str(reaction.emoji) == CROSS_EMOJI +                and reaction.message.id == announcement.id          ):              return True          return False @@ -334,9 +334,18 @@ class ConnectFour(commands.Cog):          """Check if someone is already in a game."""          return any(player in (game.player1, game.player2) for game in self.games) -    async def _play_game(self, ctx: commands.Context, user: typing.Optional[discord.Member], board_size: int) -> None: +    async def _play_game( +            self, +            ctx: commands.Context, +            user: typing.Optional[discord.Member], +            board_size: int, +            emoji1: str, +            emoji2: str +    ) -> None:          """Helper for playing a game of connect four."""          try: +            global EMOJIS +            EMOJIS = [":white_circle:", str(emoji1), str(emoji2)]              game = Game(self.bot, ctx.channel, ctx.author, user, size=board_size)              self.games.append(game)              await game.start_game() @@ -352,7 +361,13 @@ class ConnectFour(commands.Cog):          invoke_without_command=True,          aliases=["4inarow", "connect4", "connectfour", "c4"]      ) -    async def connect_four(self, ctx: commands.Context, board_size: int = 7) -> None: +    async def connect_four( +            self, +            ctx: commands.Context, +            board_size: int = 7, +            emoji1: str = ":blue_circle:", +            emoji2: str = ":red_circle:" +    ) -> None:          """          Play the classic game of Connect Four with someone! @@ -399,16 +414,22 @@ class ConnectFour(commands.Cog):          if self.already_playing(ctx.author):              return -        await self._play_game(ctx, user, board_size) +        await self._play_game(ctx, user, board_size, emoji1, emoji2)      @connect_four.command(aliases=["bot", "computer", "cpu"]) -    async def ai(self, ctx: commands.Context, board_size: int = 7) -> None: +    async def ai( +            self, +            ctx: commands.Context, +            board_size: int = 7, +            emoji1: str = ":blue_circle:", +            emoji2: str = ":red_circle:" +    ) -> None:          """Play Connect Four against a computer player."""          check_author_result = await self.check_author(ctx, board_size)          if not check_author_result:              return -        await self._play_game(ctx, user=None, board_size=board_size) +        await self._play_game(ctx, None, board_size, emoji1, emoji2)  def setup(bot: commands.Bot) -> None:  |