Beispiel #1
0
def processMessageDefenseNumber(game, message, author):
	numberMessage = None
	resultMessage = None
	log.debug("Processing defense number message")
	if message.find(globals.intFoul) > -1:
		log.debug('defense will commit an intentional foul')
		game['status']['ifoul'] = True
	else:
		number, resultMessage = utils.extractPlayNumber(message)
	if resultMessage is not None and not game['status']['ifoul']:
		return False, resultMessage
	elif resultMessage is None  and not game['status']['ifoul']:
		log.debug("Saving defense number: {}".format(number))
		database.saveDefensiveNumber(game['dataID'], number)
	else:
		log.debug('saving defesive number as 0 due to an intentional foul')
		database.saveDefensiveNumber(game['dataID'],0)


	log.debug("offense is currently {}".format(game['play']['offensiveNumber']))

	log.debug("we were waiting on {}".format(game['waitingOn']))
	if game['status']['techFoul']:
		game['waitingOn'] = game['status']['possession']
		game['play']['defensiveNumber'] = False
		game['play']['offensiveNumber'] =  True
		game['play']['playResult'] = ''
		log.debug('we are currently awiting on {}'.format(game['waitingOn']))
	else:
		state.setWaitingOn(game)
	log.debug("we are now waiting on {}".format(game['waitingOn']))
	log.debug("offene is is {}".format(game['play']['offensiveNumber']))
	game['dirty'] = True

	log.debug("Sending offense play comment")
	if  not game['status']['free']:
		resultMessage = "{} has submitted their number. {} you're up\
		.\n\n{}\n\n{} reply with {} and your number. [Play list]({})".format(
			game[utils.reverseHomeAway(game['waitingOn'])]['name'],
			game[game['waitingOn']]['name'],
			utils.getCurrentPlayString(game),
			utils.getCoachString(game, game['waitingOn']),
			utils.listSuggestedPlays(game),
			"https://www.reddit.com/r/TestFakeCBB/wiki/refbot"
			)
	else:
		resultMessage = "{} has submitted their number for your free throw. {} you're up\
		.\n\n{}\n\n{} reply with a free throw number between **1** and **{}**".format(
			game[utils.reverseHomeAway(game['waitingOn'])]['name'],
			game[game['waitingOn']]['name'],
			utils.getCurrentPlayString(game),
			utils.getCoachString(game, game['waitingOn']),
			globals.maxRange
			)
	utils.sendGameComment(game, resultMessage, {'action': 'play'})
	if not game['status']['ifoul']:
		result = ["I've got {} as your number.".format(number)]
	else:
		result = ["You called an intentional foul"]
	return True, '\n\n'.join(result)
Beispiel #2
0
def processMessageCoin(game, isHeads, author):
    log.debug("Processing coin toss message: {}".format(str(isHeads)))

    utils.setGamePlayed(game)
    if isHeads == utils.coinToss():
        log.debug("User won coin toss, asking if they want to defer")
        game.status.waitingAction = Action.DEFER
        game.status.waitingOn.set(False)
        utils.setWaitingId(game, 'return')
        game.dirty = True

        if utils.isGameOvertime(game):
            questionString = "do you want to **defend** or **attack**?"
        else:
            questionString = "do you want to **receive** or **defer**?"
        message = "{}, {} won the toss, {}".format(
            utils.getCoachString(game, False), game.away.name, questionString)
        return True, utils.embedTableInMessage(
            message, utils.getActionTable(game, Action.DEFER))
    else:
        log.debug(
            "User lost coin toss, asking other team if they want to defer")
        game.status.waitingAction = Action.DEFER
        game.status.waitingOn.set(True)
        utils.setWaitingId(game, 'return')
        game.dirty = True

        if utils.isGameOvertime(game):
            questionString = "do you want to **defend** or **attack**?"
        else:
            questionString = "do you want to **receive** or **defer**?"
        message = "{}, {} won the toss, {}".format(
            utils.getCoachString(game, True), game.home.name, questionString)
        return True, utils.embedTableInMessage(
            message, utils.getActionTable(game, Action.DEFER))
Beispiel #3
0
def processMessageAcceptGame(dataTable, author):
    log.debug("Processing accept game message")
    if 'opponent' not in dataTable:
        log.warning("Couldn't find opponent in datatable")
        return False, "I couldn't figure out which opponent you were accepting. This shouldn't happen, please let /u/Watchful1 know"

    coachNum, result = utils.verifyCoaches([author, dataTable['opponent']])
    if coachNum != -1:
        log.debug("Coaches not verified, {} : {}".format(coachNum, result))
        return False, "Something went wrong, someone is no longer an acceptable coach. Please try to start the game again"

    homeTeam = wiki.getTeamByCoach(dataTable['opponent'].lower())
    awayTeam = wiki.getTeamByCoach(author.lower())
    for team in [homeTeam, awayTeam]:
        team['yardsPassing'] = 0
        team['yardsRushing'] = 0
        team['yardsTotal'] = 0
        team['turnoverInterceptions'] = 0
        team['turnoverFumble'] = 0
        team['fieldGoalsScored'] = 0
        team['fieldGoalsAttempted'] = 0
        team['posTime'] = 0

    game = utils.newGameObject(homeTeam, awayTeam)

    gameThread = utils.getGameThreadText(game)
    gameTitle = "[GAME THREAD] {} @ {}".format(game['away']['name'],
                                               game['home']['name'])

    threadID = str(
        reddit.submitSelfPost(globals.SUBREDDIT, gameTitle, gameThread))
    game['thread'] = threadID
    log.debug("Game thread created: {}".format(threadID))

    gameID = database.createNewGame(threadID)
    game['dataID'] = gameID
    log.debug("Game database record created: {}".format(gameID))

    for user in game['home']['coaches']:
        database.addCoach(gameID, user, True)
        log.debug("Coach added to home: {}".format(user))
    for user in game['away']['coaches']:
        database.addCoach(gameID, user, False)
        log.debug("Coach added to away: {}".format(user))

    log.debug("Game started, posting coin toss comment")
    message = "The game has started! {}, you're away, call **heads** or **tails** in the air.".format(
        utils.getCoachString(game, 'away'))
    comment = utils.sendGameComment(game, message, {'action': 'coin'})
    game['waitingId'] = comment.fullname
    log.debug("Comment posted, now waiting on: {}".format(game['waitingId']))
    utils.updateGameThread(game)

    log.debug("Returning game started message")
    return True, "Game started. Find it [here]({}).".format(
        utils.getLinkToThread(threadID))
Beispiel #4
0
def processMessageCoin(game, isHeads, author):
    log.debug("Processing coin toss message: {}".format(str(isHeads)))

    if isHeads == utils.coinToss():
        log.debug("User won coin toss, asking if they want to defer")
        game['waitingAction'] = 'defer'
        game['waitingOn'] = 'home'
        game['waitingId'] = 'return'
        game['dirty'] = True

        message = "{}, {} won the toss, do you want to **receive** or **defer**?".format(
            utils.getCoachString(game, 'home'), game['home']['name'])
        return True, utils.embedTableInMessage(message, {'action': 'defer'})
    else:
        log.debug(
            "User lost coin toss, asking other team if they want to defer")
        game['waitingAction'] = 'defer'
        game['waitingOn'] = 'away'
        game['waitingId'] = 'return'
        game['dirty'] = True

        message = "{}, {} won the toss, do you want to **receive** or **defer**?".format(
            utils.getCoachString(game, 'away'), game['away']['name'])
        return True, utils.embedTableInMessage(message, {'action': 'defer'})
Beispiel #5
0
def processMessageDefenseNumber(game, message, author):
    log.debug("Processing defense number message")

    number, resultMessage = utils.extractPlayNumber(message)
    if resultMessage is not None:
        return False, resultMessage

    log.debug("Saving defense number: {}".format(number))
    game.status.defensiveNumber = number

    timeoutMessage = None
    if "timeout" in message:
        if game.status.state(game.status.possession.negate()).timeouts > 0:
            game.status.state(game.status.possession.negate()
                              ).requestedTimeout = TimeoutOption.REQUESTED
            timeoutMessage = "Timeout requested successfully"
        else:
            timeoutMessage = "You requested a timeout, but you don't have any left"

    game.status.waitingOn.reverse()
    game.dirty = True
    utils.setGamePlayed(game)

    log.debug("Sending offense play comment")
    resultMessage = "{} has submitted their number. {} you're up. You have until {}.\n\n{}\n\n{} reply with {} and your number. [Play list]({}){}".format(
        game.team(game.status.waitingOn.negate()).name,
        game.team(game.status.waitingOn).name,
        utils.renderDatetime(game.playclock), utils.getCurrentPlayString(game),
        utils.getCoachString(game, game.status.waitingOn),
        utils.listSuggestedPlays(game),
        "https://www.reddit.com/r/FakeCollegeFootball/wiki/refbot",
        "\n\nThe clock has stopped" if not game.status.timeRunoff else "")
    utils.sendGameComment(
        game, resultMessage,
        utils.getActionTable(game, game.status.waitingAction))

    result = ["I've got {} as your number.".format(number)]
    if timeoutMessage is not None:
        result.append(timeoutMessage)
    return True, '\n\n'.join(result)
Beispiel #6
0
def processMessageDefenseNumber(game, message, author):
    log.debug("Processing defense number message")

    number, resultMessage = utils.extractPlayNumber(message)
    if resultMessage is not None:
        return False, resultMessage

    log.debug("Saving defense number: {}".format(number))
    database.saveDefensiveNumber(game['dataID'], number)

    timeoutMessage = None
    if message.find("timeout") > 0:
        if game['status']['timeouts'][utils.reverseHomeAway(
                game['status']['possession'])] > 0:
            game['status']['requestedTimeout'][utils.reverseHomeAway(
                game['status']['possession'])] = 'requested'
            timeoutMessage = "Timeout requested successfully"
        else:
            timeoutMessage = "You requested a timeout, but you don't have any left"

    game['waitingOn'] = utils.reverseHomeAway(game['waitingOn'])
    game['dirty'] = True

    log.debug("Sending offense play comment")
    resultMessage = "{} has submitted their number. {} you're up.\n\n{}\n\n{} reply with {} and your number. [Play list]({})".format(
        game[utils.reverseHomeAway(game['waitingOn'])]['name'],
        game[game['waitingOn']]['name'], utils.getCurrentPlayString(game),
        utils.getCoachString(game, game['waitingOn']),
        utils.listSuggestedPlays(game),
        "https://www.reddit.com/r/FakeCollegeFootball/wiki/refbot")
    utils.sendGameComment(game, resultMessage, {'action': 'play'})

    result = ["I've got {} as your number.".format(number)]
    if timeoutMessage is not None:
        result.append(timeoutMessage)
    return True, '\n\n'.join(result)
Beispiel #7
0
					game['away']['playclockPenalties'] += 1
					game['home']['playclockPenalties'] += 1
					techFoul = False
					penaltyMessage = "You two souls both got a DOG at the same time. Please send your tip message."
				elif not game['tip']['homeTip'] and game['tip']['awayTip'] and game['waitingAction'] == 'tip':
					game['home']['playclockPenalties'] += 1
					game['waitingOn'] = 'home'
					game['status']['possession'] = 'away'
				elif game['tip']['homeTip'] and not game['tip']['awayTip'] and game['waitingAction'] == 'tip':
					game['away']['playclockPenalties'] += 1
					game['waitingOn'] = 'away'
					game['status']['possession'] = 'home'
				else:
					game[game['waitingOn']]['playclockPenalties'] += 1
					penaltyMessage = "{} has not sent their number in over {} hours, playclock penalty. This is their {} penalty.".format(
					utils.getCoachString(game, game['waitingOn']),globals.delayHours, utils.getNthWord(game[game['waitingOn']]['playclockPenalties']))
				if game['home']['playclockPenalties'] == 3 and game['away']['playclockPenalties'] == 3:
					## This needs to be where we do something if both players hit 3
					utils.endGameBothDelay(game,threadId)
				elif game[game['waitingOn']]['playclockPenalties'] >= 3:
					log.debug("3 penalties, game over")
					game['status']['halfType'] = 'end'
					game['waitingAction'] = 'end'
					resultMessage = "They forfeit the game. {} has won!".format(utils.flair(game[utils.reverseHomeAway(game['waitingOn'])]))
					utils.endGameDelayOfGame(game, threadId)


				elif techFoul:
					state.technicalFouls(game)
				else:
					utils.sendGameComment(game, penaltyMessage, {'action': 'death'})
Beispiel #8
0
def processMessageOffensePlay(game, message, author):
	##set some information for later.
	current = game['status']['possession']
	other = utils.reverseHomeAway(current)
	game['play']['ocoach'] = game[current]['coaches'][0]
	game['play']['dcoach'] = game[other]['coaches'][0]
	game['play']['playMessage'] = message

	log.debug("Processing offense number message")

	if game['status']['ifoul']:
		numberMessage = ''
		number = 0
	else:
		number, numberMessage = utils.extractPlayNumber(message)


	playOptions = ['chew', 'average', 'push', 'regular']
	if not game['status']['ifoul']:
		playSelected = utils.findKeywordInMessage(playOptions, message)
		play = "default"
		if game['status']['free']:
			play = 'free'
		elif playSelected == "chew":
			play = "chew"
		elif playSelected == "average":
			play = "average"
		elif playSelected == "push":
			play = "push"
		elif playSelected == "mult":
			log.debug("Found multiple plays")
			return False, "I found multiple plays in your message. Please repost it with just the play and number."
		else:
			log.debug("Didn't find any plays")
			return False, "I couldn't find a play in your message. Please reply to this one with a play and a number."
	else:
		play = 'foul'
		numberMessage = 'intentional foul'
		playSelected = 'foul'
	game['play']['playType'] = play

	success, resultMessage = state.executePlay(game, play, number, numberMessage)



	result = [resultMessage]
	if playSelected != 'default' and success:
		state.setWaitingOn(game)

		game['dirty'] = True
	if game['waitingAction'] == 'play' and playSelected != 'default' and success:
		log.debug('going to set the play data up, save it, then remove it')
		utils.insertPlayData(game)
		game['status']['sendDef'] = True
	elif game['waitingAction'] == 'overtime':
		log.debug("Starting overtime, posting coin toss comment")
		message = "Overtime has started! {}, you're away, call **heads** or **tails** in the air.".format(
			utils.getCoachString(game, 'away'))
		comment = utils.sendGameComment(game, message, {'action': 'tip'})
		game['waitingId'] = comment.fullname
		game['waitingAction'] = 'tip'

	return success, utils.embedTableInMessage('\n\n'.join(result), {'action': game['waitingAction']})
Beispiel #9
0
def processMessageOffensePlay(game, message, author):
    log.debug("Processing offense number message")

    timeoutMessageOffense = None
    timeoutMessageDefense = None
    if "timeout" in message:
        if game.status.state(game.status.possession).timeouts > 0:
            game.status.state(game.status.possession
                              ).requestedTimeout = TimeoutOption.REQUESTED
        else:
            timeoutMessageOffense = "The offense requested a timeout, but they don't have any left"

    if game.forceChew:
        timeOption = TimeOption.CHEW
    else:
        timeOption = TimeOption.NORMAL
    if any(x in message
           for x in ['chew the clock', 'milk the clock', 'chew clock']):
        timeOption = TimeOption.CHEW
    elif any(x in message for x in ['hurry up', 'no huddle', 'no-huddle']):
        timeOption = TimeOption.HURRY
    elif any(x in message for x in ['normal']):
        timeOption = TimeOption.NORMAL

    normalOptions = ["run", "pass", "punt", "field goal", "kneel", "spike"]
    conversionOptions = ["two point", "pat"]
    kickoffOptions = ["normal", "squib", "onside"]
    if game.status.waitingAction == Action.PLAY:
        playSelected = utils.findKeywordInMessage(normalOptions, message)
    elif game.status.waitingAction == Action.CONVERSION:
        playSelected = utils.findKeywordInMessage(conversionOptions, message)
    elif game.status.waitingAction == Action.KICKOFF:
        playSelected = utils.findKeywordInMessage(kickoffOptions, message)
    else:
        return False, "Something went wrong, invalid waiting action: {}".format(
            game.status.waitingAction)

    if playSelected == "run":
        play = Play.RUN
    elif playSelected == "pass":
        play = Play.PASS
    elif playSelected == "punt":
        play = Play.PUNT
    elif playSelected == "field goal":
        play = Play.FIELD_GOAL
    elif playSelected == "kneel":
        play = Play.KNEEL
    elif playSelected == "spike":
        play = Play.SPIKE
    elif playSelected == "two point":
        play = Play.TWO_POINT
    elif playSelected == "pat":
        play = Play.PAT
    elif playSelected == "normal":
        play = Play.KICKOFF_NORMAL
    elif playSelected == "squib":
        play = Play.KICKOFF_SQUIB
    elif playSelected == "onside":
        play = Play.KICKOFF_ONSIDE
    elif playSelected == "mult":
        log.debug("Found multiple plays")
        return False, "I found multiple plays in your message. Please repost it with just the play and number."
    else:
        log.debug("Didn't find any plays")
        return False, "I couldn't find a play in your message"

    number, numberMessage = utils.extractPlayNumber(message)
    if play not in classes.timePlays and number == -1:
        log.debug(
            "Trying to execute a {} play, but didn't have a number".format(
                play))
        return False, numberMessage

    success, resultMessage = state.executePlay(game, play, number, timeOption)

    if game.status.state(
            game.status.possession).requestedTimeout == TimeoutOption.USED:
        timeoutMessageOffense = "The offense is charged a timeout"
    elif game.status.state(game.status.possession
                           ).requestedTimeout == TimeoutOption.REQUESTED:
        timeoutMessageOffense = "The offense requested a timeout, but it was not used"
    game.status.state(
        game.status.possession).requestedTimeout = TimeoutOption.NONE

    if game.status.state(game.status.possession.negate()
                         ).requestedTimeout == TimeoutOption.USED:
        timeoutMessageDefense = "The defense is charged a timeout"
    elif game.status.state(game.status.possession.negate()
                           ).requestedTimeout == TimeoutOption.REQUESTED:
        timeoutMessageDefense = "The defense requested a timeout, but it was not used"
    game.status.state(
        game.status.possession.negate()).requestedTimeout = TimeoutOption.NONE

    result = [resultMessage]
    if timeoutMessageOffense is not None:
        result.append(timeoutMessageOffense)
    if timeoutMessageDefense is not None:
        result.append(timeoutMessageDefense)

    if not game.status.timeRunoff:
        result.append("The clock is stopped.")

    game.status.waitingOn.reverse()
    game.dirty = True
    utils.setGamePlayed(game)
    if game.status.waitingAction in classes.playActions:
        utils.sendDefensiveNumberMessage(game)
    elif game.status.waitingAction == Action.OVERTIME:
        log.debug("Starting overtime, posting coin toss comment")
        message = "Overtime has started! {}, you're away, call **heads** or **tails** in the air.".format(
            utils.getCoachString(game, False))
        comment = utils.sendGameComment(
            game, message, utils.getActionTable(game, Action.COIN))
        utils.setWaitingId(game, comment.fullname)
        game.status.waitingAction = Action.COIN
        game.status.waitingOn = classes.HomeAway(False)

    return success, utils.embedTableInMessage(
        '\n\n'.join(result),
        utils.getActionTable(game, game.status.waitingAction))