コード例 #1
0
        public Task SaveSettings(ulong guildId, LeaderboardSettings settings)
        {
            // Don't let clients change this!
            settings.Guild = guildId;

            return(SaveSettings(settings));
        }
コード例 #2
0
    void Start()
    {
        for (int i = 0; i < highscoreText.Length; i++)
        {
            highscoreText [i].text = i + 1 + ". Fetching...";
        }

        highscoreManager = GetComponent <LeaderboardSettings> ();

        StartCoroutine("RefreshHighscores");
    }
コード例 #3
0
        private async void UpdateLastRunTime(CurrencyGame gameType, ulong userId, ulong guildId)
        {
            this.LastRunTimeForType(gameType).UpdateOrAdd(guildId, DateTime.Now);

            // Update game count if restricted
            LeaderboardSettings settings = await LeaderboardSettingsService.GetSettings <LeaderboardSettings>(guildId);

            if (settings.CurrencyGamesAllowedPerDay > 0 && settings.CurrencyGamesAllowedPerDay < 2880)
            {
                if (!this.userDailyGameCount.TryGetValue(userId, out uint gameCount))
                {
                    gameCount = 0;
                }

                this.userDailyGameCount.UpdateOrAdd(userId, ++gameCount);
            }
        }
コード例 #4
0
        private async Task <bool> ValidateDailyCurrencyGameAllowance(CommandMessage message)
        {
            // Get settings and user
            LeaderboardSettings settings = await LeaderboardSettingsService.GetSettings <LeaderboardSettings>(message.Guild.Id);

            // No games allowed
            if (settings.CurrencyGamesAllowedPerDay == 0)
            {
                IUserMessage response = await message.Channel.SendMessageAsync("Currency games have been disabled by Server Admin.");

                await Task.Delay(2000);

                await message.Channel.DeleteMessageAsync(message.Id);

                await response.DeleteAsync();

                return(false);
            }

            // Get count of games played for user
            if (!this.userDailyGameCount.TryGetValue(message.Author.Id, out uint gameCount))
            {
                gameCount = 0;
            }

            if (settings.CurrencyGamesAllowedPerDay <= 0 || gameCount >= settings.CurrencyGamesAllowedPerDay)
            {
                // User has reached max games allowed today
                IUserMessage response = await message.Channel.SendMessageAsync("You cannot play any more games today, _kupo!_");

                await Task.Delay(2000);

                await message.Channel.DeleteMessageAsync(message.Id);

                await response.DeleteAsync();

                return(false);
            }

            return(true);
        }
コード例 #5
0
        public static void Start()
        {
            if (!File.Exists(LEADERBOARD_JSON))
            {
                return;
            }

            var leaderboardData = JsonConvert.DeserializeObject <LeaderboardData>(
                File.ReadAllText(LEADERBOARD_JSON)
                );

            LeaderboardSettings leaderboardSettings;

            if (File.Exists(LEADERBOARD_SETTINGS_JSON))
            {
                leaderboardSettings = JsonConvert.DeserializeObject <LeaderboardSettings>(
                    File.ReadAllText(LEADERBOARD_SETTINGS_JSON)
                    );
            }
            else
            {
                leaderboardSettings = new LeaderboardSettings();
            }

            var members = GetMemberInfo(leaderboardData, leaderboardSettings);

            var result = PrintAllMemberInfo(members);

            Logger.Debug(result);

            members = members
                      //.Where(x => !x.IsAnonymous)
                      .ToList();

            result = ExportLocalScoreboardOriginal(members);

            File.WriteAllText("leaderboard-original.csv", result);
        }
コード例 #6
0
        private static List <Member> GetMemberInfo(
            LeaderboardData leaderboardData,
            LeaderboardSettings leaderboardSettings
            )
        {
            List <Member> members = new List <Member>();

            foreach (var leaderboardMember in leaderboardData.Members.Values)
            {
                if (!leaderboardSettings.IdMapping.TryGetValue(leaderboardMember.Id, out var name))
                {
                    name = leaderboardMember.Name ?? "#" + leaderboardMember.Id;
                }

                var member = new Member
                {
                    Id   = leaderboardMember.Id,
                    Name = name,

                    IsAnonymous = leaderboardMember.Name == null
                };

                members.Add(member);

                for (var i = 1; i <= 25; i++)
                {
                    var day = new Day();

                    member.Days.Add(day);

                    if (leaderboardMember.CompletionDayLevels == null || !leaderboardMember.CompletionDayLevels.TryGetValue(i.ToString(), out var completionDayKVP))
                    {
                        continue;
                    }

                    if (completionDayKVP.TryGetValue("1", out var day1))
                    {
                        var date = DateTimeOffset.FromUnixTimeSeconds(long.Parse(day1.TimeStamp));
                        day.Part1 = date.DateTime;
                    }

                    if (completionDayKVP.TryGetValue("2", out var day2))
                    {
                        var date = DateTimeOffset.FromUnixTimeSeconds(long.Parse(day2.TimeStamp));
                        day.Part2 = date.DateTime;
                    }
                }
            }

            foreach (var merge in leaderboardSettings.MergeMapping)
            {
                var member1 = members.FirstOrDefault(x => x.Id == merge.Key);
                var member2 = members.FirstOrDefault(x => x.Id == merge.Value);

                if (member1 == null || member2 == null)
                {
                    continue;
                }

                var newMember = new Member
                {
                    Name = member1.Name,
                    Id   = member1.Id
                };

                for (var i = 0; i < 25; i++)
                {
                    var day1 = member1.Days[i];
                    var day2 = member2.Days[i];

                    double minutes1 = double.MaxValue;
                    double minutes2 = double.MaxValue;

                    if (day1.Part1.HasValue && day1.Part2.HasValue)
                    {
                        minutes1 = (day1.Part2.Value - day1.Part1.Value).TotalMinutes;
                    }

                    if (day2.Part1.HasValue && day2.Part2.HasValue)
                    {
                        minutes2 = (day2.Part2.Value - day2.Part1.Value).TotalMinutes;
                    }

                    if (minutes1 > minutes2)
                    {
                        newMember.Days.Add(member1.Days[i]);
                    }
                    else
                    {
                        newMember.Days.Add(member2.Days[i]);
                    }
                }

                members.Remove(member1);
                members.Remove(member2);
                members.Add(newMember);
            }

            return(members);
        }
コード例 #7
0
        public async Task RemoveReputation(CommandMessage message, IGuildUser user)
        {
            // Handle bots
            if (user.IsBot)
            {
                await message.Channel.SendMessageAsync("Bots cannot gain reputation.", messageReference : message.MessageReference);

                return;
            }

            // Get leaderboard settings
            LeaderboardSettings settings = await LeaderboardSettingsService.GetSettings <LeaderboardSettings>(message.Guild.Id);

            if (settings.ReputationRemoveRole == "0")
            {
                // Rep disabled on server
                await message.Channel.SendMessageAsync("Rep Removal has been disabled by Server Admin", messageReference : message.MessageReference);

                return;
            }
            else if (settings.ReputationRemoveRole != "1")
            {
                // Rep role required to remove
                if (ulong.TryParse(settings.ReputationRemoveRole, out ulong repRole) && !message.Author.RoleIds.Contains(repRole))
                {
                    // Rep Role required to remove not assigned to user
                    await message.Channel.SendMessageAsync("You do not have permission to remove Rep.", messageReference : message.MessageReference);

                    return;
                }
            }

            // Get sending user information
            User fromUser = await UserService.GetUser(message.Author);

            string fromUserName = message.Author.GetName();

            // Get receiving user information
            User toUser = await UserService.GetUser(user);

            string toUserName = user.GetName();

            // Message for return
            string postBackMessage;

            if (fromUser.Id == toUser.Id)
            {
                postBackMessage = "You can't remove your own rep, _kupo!_";
            }
            else
            {
                // Update user information
                toUser.Reputation -= 1;
                _ = UserService.SaveUser(toUser);

                postBackMessage = $"Hey {toUserName}, {fromUserName} thinks you've done bad, _kupo!_\nYour rep is now: {toUser.Reputation}";
            }

            await message.Channel.SendMessageAsync(postBackMessage, messageReference : message.MessageReference);

            return;
        }
コード例 #8
0
        public async Task GiveReputation(CommandMessage message, IGuildUser user)
        {
            // Handle bots
            if (user.IsBot)
            {
                // Thank user if trying to rep Kupo Nuts or tell them no if repping a different bot
                string botMessage = user.Id == Program.DiscordClient.CurrentUser.Id
                                        ? string.Format("I think you're pretty neat too, _kupo!_")
                                        : string.Format("They wouldn't understand...");

                await message.Channel.SendMessageAsync(botMessage, messageReference : message.MessageReference);

                return;
            }

            // Get leaderboard settings
            LeaderboardSettings settings = await LeaderboardSettingsService.GetSettings <LeaderboardSettings>(message.Guild.Id);

            if (settings.ReputationAddRole == "0")
            {
                // Rep disabled on server
                await message.Channel.SendMessageAsync("Rep has been disabled by Server Admin", messageReference : message.MessageReference);

                return;
            }
            else if (settings.ReputationAddRole != "1")
            {
                // Rep role required to add
                if (ulong.TryParse(settings.ReputationAddRole, out ulong repRole) && !message.Author.RoleIds.Contains(repRole))
                {
                    // Rep Role required to add not assigned to user
                    await message.Channel.SendMessageAsync("You do not have permission to add Rep.", messageReference : message.MessageReference);

                    return;
                }
            }

            // Get sending user information
            User fromUser = await UserService.GetUser(message.Author);

            string fromUserName = message.Author.GetName();

            // Get receiving user information
            User toUser = await UserService.GetUser(user);

            string toUserName = user.GetName();

            // Daily reset at 8AM
            DateTime dailyReset = DateTime.Now.Date.AddHours(8);

            // Check if it's too early
            if (DateTime.Now < dailyReset)
            {
                dailyReset = dailyReset.AddDays(-1);
            }

            // Message for return
            string postBackMessage;

            // If rep limit is disabled or user has not repped today
            if (!settings.LimitReputationPerDay || !fromUser.LastRepGiven.HasValue || fromUser.LastRepGiven < dailyReset)
            {
                if (fromUser.Id == toUser.Id)
                {
                    postBackMessage = "You can't rep yourself, _kupo!_";
                }
                else
                {
                    // Update user information
                    fromUser.LastRepGiven = DateTime.Now;
                    _ = UserService.SaveUser(fromUser);

                    toUser.Reputation += 1;
                    _ = UserService.SaveUser(toUser);

                    postBackMessage = $"Hey {toUserName}, {fromUserName} thinks you're pretty neat, _kupo!_\nYour rep is now: {toUser.Reputation}";
                }
            }
            else
            {
                postBackMessage = "You have already given your rep today!";
            }

            await message.Channel.SendMessageAsync(postBackMessage, messageReference : message.MessageReference);

            return;
        }