public Task SaveSettings(ulong guildId, LeaderboardSettings settings) { // Don't let clients change this! settings.Guild = guildId; return(SaveSettings(settings)); }
void Start() { for (int i = 0; i < highscoreText.Length; i++) { highscoreText [i].text = i + 1 + ". Fetching..."; } highscoreManager = GetComponent <LeaderboardSettings> (); StartCoroutine("RefreshHighscores"); }
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); } }
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); }
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); }
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); }
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; }
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; }