|  | @@ -41,6 +41,7 @@ class ChessSession:
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          self.game_over = None
 |  |          self.game_over = None
 | 
											
												
													
														|  |          self.checkmate = False
 |  |          self.checkmate = False
 | 
											
												
													
														|  | 
 |  | +        self.draw = False
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      def parse_move(self, move):
 |  |      def parse_move(self, move):
 | 
											
												
													
														|  |          move = move.strip()
 |  |          move = move.strip()
 | 
											
										
											
												
													
														|  | @@ -63,6 +64,8 @@ class ChessSession:
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |              if outcome.termination == chess.Termination.CHECKMATE:
 |  |              if outcome.termination == chess.Termination.CHECKMATE:
 | 
											
												
													
														|  |                  self.checkmate = True
 |  |                  self.checkmate = True
 | 
											
												
													
														|  | 
 |  | +            elif outcome.termination in (chess.Termination.THREEFOLD_REPETITION, chess.Termination.FIFTY_MOVES):
 | 
											
												
													
														|  | 
 |  | +                self.draw = True
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |              raise self.game_over
 |  |              raise self.game_over
 | 
											
												
													
														|  |          elif self.board.status() & chess.STATUS_NO_WHITE_KING:
 |  |          elif self.board.status() & chess.STATUS_NO_WHITE_KING:
 | 
											
										
											
												
													
														|  | @@ -222,6 +225,15 @@ class ChessManager:
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          await session.move(move)
 |  |          await session.move(move)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    def clear(self, id):
 | 
											
												
													
														|  | 
 |  | +        session = self.sessions.get(id)
 | 
											
												
													
														|  | 
 |  | +        if not session:
 | 
											
												
													
														|  | 
 |  | +            raise KeyError(id)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        session.game_over = None
 | 
											
												
													
														|  | 
 |  | +        session.checkmate = False
 | 
											
												
													
														|  | 
 |  | +        session.draw = False    
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      def undo(self, id):
 |  |      def undo(self, id):
 | 
											
												
													
														|  |          session = self.sessions.get(id)
 |  |          session = self.sessions.get(id)
 | 
											
												
													
														|  |          if not session:
 |  |          if not session:
 | 
											
										
											
												
													
														|  | @@ -231,6 +243,7 @@ class ChessManager:
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          session.game_over = None
 |  |          session.game_over = None
 | 
											
												
													
														|  |          session.checkmate = False
 |  |          session.checkmate = False
 | 
											
												
													
														|  | 
 |  | +        session.draw = False
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          session.check_game_over()
 |  |          session.check_game_over()
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -248,6 +261,13 @@ class ChessManager:
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          return session.checkmate
 |  |          return session.checkmate
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    def is_draw(self, id):
 | 
											
												
													
														|  | 
 |  | +        session = self.sessions.get(id)
 | 
											
												
													
														|  | 
 |  | +        if not session:
 | 
											
												
													
														|  | 
 |  | +            raise KeyError(id)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +        return session.draw
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      async def skip(self, id):
 |  |      async def skip(self, id):
 | 
											
												
													
														|  |          session = self.sessions.get(id)
 |  |          session = self.sessions.get(id)
 | 
											
												
													
														|  |          if not session:
 |  |          if not session:
 |