Example #1
0
        private Player GetPlayerFromReactionEventOrNull(
            IReadOnlyTournamentState currentTournament,
            IGuildUser user,
            ulong messageId,
            string emojiName,
            out string errorMessage)
        {
            errorMessage = null;

            if (currentTournament == null ||
                !currentTournament.IsJoinTeamMessage(messageId) ||
                !currentTournament.TryGetTeamFromSymbol(emojiName, out Team team))
            {
                // Ignore reactions added/removed from non-team messages.
                return(null);
            }

            // TODO: since we have the message ID it's unlikely we need to verify the guild, but we should double check.
            if (user.Id == this.Client.CurrentUser.Id)
            {
                errorMessage = BotStrings.BotCannotJoinAsPlayer;
                return(null);
            }

            ulong userId = user.Id;

            if (currentTournament.IsDirector(userId))
            {
                errorMessage = BotStrings.TournamentDirectorCannotJoinAsPlayer;
                return(null);
            }

            if (currentTournament.IsReader(userId))
            {
                errorMessage = BotStrings.ReaderCannotJoinAsPlayer;
                return(null);
            }

            Player player = new Player()
            {
                Id   = userId,
                Team = team
            };

            return(player);
        }