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) } } }