/// <summary>
        /// 個人が予約しているデータの取得
        /// </summary>
        /// <returns></returns>
        private ReservationData MessageToUserReservationData()
        {
            var splitMessageContent = m_userMessage.Content
                                      .Split(new[] { " ", " " }, StringSplitOptions.RemoveEmptyEntries);

            if (splitMessageContent.Length != 4 ||
                !ulong.TryParse(splitMessageContent[1], out ulong userID) ||
                !(byte.TryParse(splitMessageContent[2], out byte battleLap) && battleLap > 0) ||
                !(byte.TryParse(splitMessageContent[3], out byte bossNumber) && bossNumber <= MaxBossNumber && bossNumber >= MinBossNumber))
            {
                return(null);
            }

            var playerData = new MySQLPlayerDataController()
                             .LoadPlayerData(m_userClanData.ServerID, userID);

            if (playerData == null)
            {
                return(null);
            }

            return(new MySQLReservationController()
                   .LoadReservationData(playerData)
                   .FirstOrDefault(d => d.BattleLap == battleLap && d.BossNumber == bossNumber));
        }
        private IEnumerable <DeclarationData> DeclareDataOnSQL(ulong userID)
        {
            var userRole = m_userRole;

            var playerData = new MySQLPlayerDataController().LoadPlayerData(
                userRole.Guild.Id, userID);

            var declarationData = new MySQLDeclarationController()
                                  .LoadDeclarationData(playerData);

            return(declarationData);
        }
        /// <summary>
        /// userID情報からDeclarationDataを作成します。
        /// ボス情報はclanDataから読み出して使用します。
        /// </summary>
        /// <param name="userID"></param>
        /// <returns></returns>
        private DeclarationData UserToDeclareData(ulong userID)
        {
            var userClanData = m_userClanData;
            var userRole     = m_userRole;

            var playerData = new MySQLPlayerDataController().LoadPlayerData(
                userRole.Guild.Id, userID);

            return(new DeclarationData()
            {
                PlayerID = playerData.PlayerID,
                BattleLap = userClanData.BattleLap,
                BossNumber = userClanData.BossNumber,
                FinishFlag = false
            });
        }
Esempio n. 4
0
        /// <summary>
        /// SQLサーバー側とDiscord側のプレイヤーデータ同期
        /// </summary>
        /// <param name="guild"></param>
        public void UpdatePlayerData(SocketGuild guild)
        {
            var playerDataControler = new MySQLPlayerDataController();

            // サーバー上のクランメンバー
            var usersOnDiscord = GetServerClanMember(guild);

            // テーブル上のプレイヤーデータ
            var usersOnSQLServer = new MySQLPlayerDataController().LoadPlayerData(guild.Id);

            #region テーブルにユーザを追加・更新
            var createUserData = new List <PlayerData>();
            var updateUserData = new List <PlayerData>();

            foreach (PlayerData discordUser in usersOnDiscord)
            {
                var sameNameFlag = false;
                var existFlag    = false;

                foreach (PlayerData mySQLUser in usersOnSQLServer)
                {
                    if (mySQLUser.UserID == discordUser.UserID &&
                        mySQLUser.ClanData.ClanRoleID == discordUser.ClanData.ClanRoleID)
                    {
                        existFlag = true;

                        if (mySQLUser.GuildUserName == discordUser.GuildUserName)
                        {
                            sameNameFlag = true;
                        }
                    }
                }

                if (!existFlag)
                {
                    createUserData.Add(discordUser);
                }
                else if (!sameNameFlag)
                {
                    updateUserData.Add(discordUser);
                }
            }

            playerDataControler.CreatePlayerData(createUserData);
            playerDataControler.UpdatePlayerData(updateUserData);
        /// <summary>
        /// 本戦が終了した際のコード
        /// </summary>
        /// <returns></returns>
        private bool UserFinishBattleCommand()
        {
            var userRole     = m_userRole;
            var userClanData = m_userClanData;
            var userReaction = m_userReaction;

            // すでに宣言しているか判定
            var sqlData = DeclareDataOnSQL(userReaction.UserId)
                          .Count(d => d.FinishFlag == false);

            if (sqlData != 1)
            {
                return(false);
            }

            // 宣言終了
            var declarationData = UserToDeclareData(userReaction.UserId);

            declarationData.FinishFlag = true;
            var result = new MySQLDeclarationController()
                         .UpdateDeclarationData(declarationData);

            // 予約の削除
            var playerData = new MySQLPlayerDataController().LoadPlayerData(
                userRole.Guild.Id, userReaction.UserId);

            var mySQLReservationController = new MySQLReservationController();
            var reservationData            = mySQLReservationController.LoadReservationData(playerData);
            var finishReservationData      = reservationData
                                             .FirstOrDefault(d => d.BattleLap == userClanData.BattleLap && d.BossNumber == userClanData.BossNumber);

            if (finishReservationData != null)
            {
                mySQLReservationController.DeleteReservationData(finishReservationData);
            }

            return(result);
        }