def startNewGame(self, stdout):
     
     if self.__gameTimer:
         self.__gameTimer.setRunning(False)
     
     self.__clientGame = TriviaGame()
     while not self.__clientGame.isReady():
         # wait
         time.sleep(1)
         
     nextQuestion = self.getNextQuestion()
     if nextQuestion:
         stdout.write("New game ready!\n")
         stdout.write(nextQuestion)
         stdout.flush()    
         self.startNewGameTimer(stdout)
class TriviaBot(threading.Thread):

    __ircClient = False
    __ircStdout = False
    __clientGame = False
    __curCategory = ""
    __curQuestion = ""
    __curAnswer = ""
    __gameTimer = False
    
    def __init__(self, ircClient):
        self.__ircClient = ircClient
        self.__ircStdout = ircClient.getStdout()
        
    def run(self):
        
        while True:
            line = ircClient.readClient()
            self.reason(line, self.__ircStdout)

    def reason(self, readLine, stdout):
        
        if self.checkAnswer(readLine):
            stdout.write("correct!")
            stdout.flush()
            return
        
        command = self.isCommand(readLine)
        if (command == 'newgame'):
            self.startNewGame(stdout)
        
        elif (command == 'repeat'):
            if len(self.__curQuestion) > 0:
                stdout.write(self.__curQuestion)
                stdout.flush()
                
        elif (command == 'channel'):
            self.__ircClient.joinChannel("jtest")
                
    def checkAnswer(self, readLine):
        
        if len(self.__curAnswer) == 0:
            return False
        
        answerChecker = AnswerChecker()
        return answerChecker.check(readLine, self.__curAnswer)

    def isCommand(self, readLine):
        
        readLine = readLine.strip().lower()
        
        if len(readLine) <= 0:
			return False
        
        if (readLine[0] == commandPrefix):
            command = str(readLine[1:len(readLine)])
            return command
        else:
            return False

    def startNewGame(self, stdout):
        
        if self.__gameTimer:
            self.__gameTimer.setRunning(False)
        
        self.__clientGame = TriviaGame()
        while not self.__clientGame.isReady():
            # wait
            time.sleep(1)
            
        nextQuestion = self.getNextQuestion()
        if nextQuestion:
            stdout.write("New game ready!\n")
            stdout.write(nextQuestion)
            stdout.flush()    
            self.startNewGameTimer(stdout)
        
    def startNextQuestion(self, stdout):
        
        if self.__gameTimer.isRunning():
            nextQuestion = self.getNextQuestion()
            if nextQuestion:
                stdout.write(nextQuestion)
                stdout.flush()
                self.startNewGameTimer(stdout)
            else:
                self.__curQuestion = "No more questions! Please start a new game.\n"
                stdout.write(self.__curQuestion)
                stdout.flush()

    def getNextQuestion(self):
        
        response = ""
        
        newTrivia = self.__clientGame.getRandomTrivia()
        
        if not newTrivia:
            # have to start a new game
            return False
        
        self.__curCategory = newTrivia[0]
        self.__curQuestion = newTrivia[1]
        self.__curAnswer = newTrivia[2]
        
        response += "The category is: " + self.__curCategory + "\n"
        response += self.__curQuestion + "\n"
        
        return response
        
    def startNewGameTimer(self, stdout):
        
        self.__gameTimer = GameTimer()
        self.__gameTimer.setup(stdout, roundTime, self.__curAnswer, self.startNextQuestion)
        self.__gameTimer.start()