aboutsummaryrefslogtreecommitdiffstats
path: root/bot/exts/evergreen/tic_tac_toe.py
diff options
context:
space:
mode:
authorGravatar decorator-factory <[email protected]>2021-08-07 05:23:03 +0300
committerGravatar Xithrius <[email protected]>2021-08-31 13:08:51 -0700
commit745cd1d6d3d6227d2a1e82cf25611d76221c40cd (patch)
tree6d653668fe1bbfd237b4c87890e0c67a36e2c7f5 /bot/exts/evergreen/tic_tac_toe.py
parentMerge pull request #835 from python-discord/discord-2.0 (diff)
Fix type annotations
Diffstat (limited to 'bot/exts/evergreen/tic_tac_toe.py')
-rw-r--r--bot/exts/evergreen/tic_tac_toe.py24
1 files changed, 12 insertions, 12 deletions
diff --git a/bot/exts/evergreen/tic_tac_toe.py b/bot/exts/evergreen/tic_tac_toe.py
index 164e056d..5c4f8051 100644
--- a/bot/exts/evergreen/tic_tac_toe.py
+++ b/bot/exts/evergreen/tic_tac_toe.py
@@ -1,6 +1,6 @@
import asyncio
import random
-import typing as t
+from typing import Callable, Optional, Union
import discord
from discord.ext.commands import Cog, Context, check, group, guild_only
@@ -15,7 +15,7 @@ CONFIRMATION_MESSAGE = (
)
-def check_win(board: t.Dict[int, str]) -> bool:
+def check_win(board: dict[int, str]) -> bool:
"""Check from board, is any player won game."""
return any(
(
@@ -42,7 +42,7 @@ class Player:
self.ctx = ctx
self.symbol = symbol
- async def get_move(self, board: t.Dict[int, str], msg: discord.Message) -> t.Tuple[bool, t.Optional[int]]:
+ async def get_move(self, board: dict[int, str], msg: discord.Message) -> tuple[bool, Optional[int]]:
"""
Get move from user.
@@ -75,7 +75,7 @@ class AI:
def __init__(self, symbol: str):
self.symbol = symbol
- async def get_move(self, board: t.Dict[int, str], _: discord.Message) -> t.Tuple[bool, int]:
+ async def get_move(self, board: dict[int, str], _: discord.Message) -> tuple[bool, int]:
"""Get move from AI. AI use Minimax strategy."""
possible_moves = [i for i, emoji in board.items() if emoji in list(Emojis.number_emojis.values())]
@@ -104,7 +104,7 @@ class AI:
class Game:
"""Class that contains information and functions about Tic Tac Toe game."""
- def __init__(self, players: t.List[t.Union[Player, AI]], ctx: Context):
+ def __init__(self, players: list[Union[Player, AI]], ctx: Context):
self.players = players
self.ctx = ctx
self.board = {
@@ -122,13 +122,13 @@ class Game:
self.current = self.players[0]
self.next = self.players[1]
- self.winner: t.Optional[t.Union[Player, AI]] = None
- self.loser: t.Optional[t.Union[Player, AI]] = None
+ self.winner: Optional[Union[Player, AI]] = None
+ self.loser: Optional[Union[Player, AI]] = None
self.over = False
self.canceled = False
self.draw = False
- async def get_confirmation(self) -> t.Tuple[bool, t.Optional[str]]:
+ async def get_confirmation(self) -> tuple[bool, Optional[str]]:
"""
Ask does user want to play TicTacToe against requester. First player is always requester.
@@ -227,14 +227,14 @@ class Game:
self.over = True
-def is_channel_free() -> t.Callable:
+def is_channel_free() -> Callable:
"""Check is channel where command will be invoked free."""
async def predicate(ctx: Context) -> bool:
return all(game.channel != ctx.channel for game in ctx.cog.games if not game.over)
return check(predicate)
-def is_requester_free() -> t.Callable:
+def is_requester_free() -> Callable:
"""Check is requester not already in any game."""
async def predicate(ctx: Context) -> bool:
return all(
@@ -247,13 +247,13 @@ class TicTacToe(Cog):
"""TicTacToe cog contains tic-tac-toe game commands."""
def __init__(self):
- self.games: t.List[Game] = []
+ self.games: list[Game] = []
@guild_only()
@is_channel_free()
@is_requester_free()
@group(name="tictactoe", aliases=("ttt", "tic"), invoke_without_command=True)
- async def tic_tac_toe(self, ctx: Context, opponent: t.Optional[discord.User]) -> None:
+ async def tic_tac_toe(self, ctx: Context, opponent: Optional[discord.User]) -> None:
"""Tic Tac Toe game. Play against friends or AI. Use reactions to add your mark to field."""
if opponent == ctx.author:
await ctx.send("You can't play against yourself.")