func (avalon *AvalonCommand) DoStart(bot *models.Bot, msg *irc.Message) { err := avalon.IssuedByLobbyLeaderInGameChannel(msg) if err != nil { bot.Connection.RespondTo(msg, err.Error()) return } if avalon.game.GamePhase == cmodels.PhaseWaitingForPlayers { err := avalon.game.StartConfig() if err != nil { bot.Connection.RespondTo(msg, err.Error()) return } resp := fmt.Sprintf(closingLobbyFormatString, avalon.game.NumPlayers()) bot.Connection.RespondTo(msg, resp) bot.Connection.RespondTo(msg, configurationHelpString) } else if avalon.game.GamePhase == cmodels.PhaseConfiguration { resp := fmt.Sprintf(startingGameFormatString, avalon.game.ListPlayers(), avalon.game.ConfigStatus()) bot.Connection.Say(msg.Channel(), resp) avalon.game.AssignPlayers() avalon.Reveal(bot, msg) avalon.StartFirstQuest() } }
func (avalon *AvalonCommand) DoImplode(bot *models.Bot, msg *irc.Message) { err := avalon.IssuedByLobbyLeaderInGameChannel(msg) if err != nil { bot.Connection.RespondTo(msg, err.Error()) return } resp := fmt.Sprintf("%s: %s", avalon.game.ListPlayers(), gameImplodedString) bot.Connection.Say(msg.Channel(), resp) avalon.channel = "" avalon.game = nil }
func (avalon *AvalonCommand) DoInit(bot *models.Bot, msg *irc.Message) { if msg.IsDirectMessage() { bot.Connection.RespondTo(msg, noDMCommandString) return } if avalon.game != nil { bot.Connection.RespondTo(msg, gameInProgressString) return } avalon.channel = msg.Channel() avalon.lobbyLeader = msg.SenderNick() avalon.game = cmodels.NewAvalonGame() avalon.game.AddPlayer(avalon.lobbyLeader) bot.Connection.RespondTo(msg, newGameString) }
func (avalon *AvalonCommand) IssuedByLobbyLeaderInGameChannel(msg *irc.Message) error { if msg.IsDirectMessage() { return errors.New(noDMCommandString) } if avalon.game == nil { return errors.New(noActiveGameString) } if avalon.lobbyLeader != msg.SenderNick() { return errors.New(onlyLobbyLeaderCanDoThatString) } if avalon.channel != msg.Channel() { resp := fmt.Sprintf(correctChannelFormatString, avalon.channel) return errors.New(resp) } return nil }
func (avalon *AvalonCommand) DoJoin(bot *models.Bot, msg *irc.Message) { if msg.IsDirectMessage() { bot.Connection.RespondTo(msg, noDMCommandString) return } if avalon.game == nil { bot.Connection.RespondTo(msg, noActiveGameString) return } if avalon.game.GamePhase != cmodels.PhaseWaitingForPlayers { bot.Connection.RespondTo(msg, lobbyClosedString) return } if avalon.channel == msg.Channel() { err := avalon.game.AddPlayer(msg.SenderNick()) if err != nil { if err == cmodels.ErrPlayerExists { bot.Connection.RespondTo(msg, alreadyJoinedString) } else if err == cmodels.ErrTooManyPlayers { bot.Connection.RespondTo(msg, tooManyPlayersString) } return } bot.Connection.RespondTo(msg, playerAddedString) joinProgress := fmt.Sprintf(joinProgressFormatString, avalon.game.NumPlayers()) bot.Connection.Say(msg.Channel(), joinProgress) if avalon.game.CanStartConfig() { resp := fmt.Sprintf(readyToConfigFormatString, avalon.lobbyLeader) bot.Connection.Say(msg.Channel(), resp) } } }