public async Task IgniteAsync() { _karma = new KarmaService(_client); _client.MessageReceived += HandleMessageCreatedAsync; _client.UserJoined += HandleMemberJoinedAsync; _client.Ready += async() => { await _client.SetGameAsync("the fireworks", type : ActivityType.Watching); _poller = new Poller(this, _client); }; _client.Log += LogAsync; _commands.Log += LogAsync; await _commands.AddModulesAsync(Assembly.GetEntryAssembly(), _services); await _client.LoginAsync(TokenType.Bot, Configuration.Get <string>("token")); await _client.StartAsync(); await Task.Delay(-1, _cts.Token) .ContinueWith(async task => { await _client.StopAsync(); await _client.LogoutAsync(); _client.Dispose(); }); }
public async Task ViewProfileAsync([Summary("@user"), Remainder] SocketGuildUser member = null) { if (member?.IsBot ?? false) { return; } var targetId = member?.Id ?? Context.User.Id; var users = DbCtx.Users.ToList(); var userData = users.First(u => u.Id == Convert.ToInt64(targetId)); (int karmaRank, int karmaCount) = KarmaService.GetKarmaRank(targetId); int moderatedKarma = 0; var giverList = new List <(ulong, int)>(); var giverEvents = DbCtx.KarmaEvents.Where(e => e.RecipientId == Convert.ToInt64(targetId)).ToList(); var sparkyEvent = giverEvents.FirstOrDefault(e => e.Id == KarmaEvent.GetId(Context.Client.CurrentUser.Id, member?.Id ?? Context.User.Id)); if (sparkyEvent != null) { giverEvents.Remove(sparkyEvent); moderatedKarma = sparkyEvent.Amount; } var giverGroups = giverEvents .GroupBy(e => e.GiverId) .OrderByDescending(g => g.Sum(e => e.Amount)) .Take(5); foreach (var giver in giverGroups) { giverList.Add(((ulong)giver.Key, giver.Sum(e => e.Amount))); } var messageRank = users.OrderByDescending(u => u.Points).ToList().IndexOf(userData) + 1; var eb = new EmbedBuilder() .WithTitle($"Profile of: {(member ?? Context.User as SocketGuildUser).Nickname ?? member?.Username ?? Context.User.Username}") .AddField($"Karma (Rank {karmaRank})", karmaCount, true) .AddField($"Message Count (Rank {messageRank})", userData.Points, true) .AddField("Top 5 Karma Givers", string.Join(", ", giverList.Count == 0 ? new[] { "None" } : giverList.Select(tuple => $"<@{tuple.Item1}> {((tuple.Item2 / (double)karmaCount) * 100):.0}%"))) .AddField("Moderated Karma", moderatedKarma.ToString(), true) .WithColor(Color.DarkBlue) .WithCurrentTimestamp() .Build(); await ReplyAsync(embed : eb); }
public void RefreshKarmaStatistics() { var karmaService = new KarmaService(); RecurringJob.AddOrUpdate(() => karmaService.RefreshKarmaStatistics(), Cron.MinuteInterval(10)); }
public KarmaController() { _karmaService = new KarmaService(); }
public async Task GiveKarma() { var channel = Context.Guild.GetChannel(Context.Channel.Id); if (channel.PermissionOverwrites.Count > 0) { await ReplyAsync("Sorry. This channel is too exclusive for me."); return; } _karmaService = new KarmaService(Context, _db); _userService = new UserService(Context); var text = Context.Message.Content; var fromUser = Context.Guild.GetUser(Context.Message.Author.Id); var karmaPoints = KarmaExtensions.RemoveKarmaFromText(ref text); if (text.Contains(' ')) { return; } _phraseService.AddReplacement("<from>", fromUser.Nickname); _phraseService.AddReplacement("<karma>", karmaPoints.ToString()); _phraseService.AddReplacement("<thing>", _userService.GetNicknameIfUser(text)); _phraseService.AddReplacement("<bot>", Context.Client.CurrentUser.Username); if (HasGivenKarmaRecently(text, maxKarma: 3, minutes: 5)) { await ReplyAsync(_phraseService.GetPhrase(KeyPhrases.SlowDown)); return; } if (fromUser.IsBot) { await ReplyAsync("Nice try"); return; } var user = _userService.TryGetUserFromText(text); if (user != null) { if (user.Id == fromUser.Id) { await ManipulatingOwnKarma(fromUser, karmaPoints); return; } if (user.Id == Context.Client.CurrentUser.Id) { await GivingAppDevBotKarma(fromUser, karmaPoints); return; } _karmaService.SaveKarma(user.Id, karmaPoints, fromUser.Id); var totalPoints = _karmaService.GetTotalKarmaPoints(user.Id); _phraseService.AddReplacement("<totalkarma>", totalPoints.ToString()); if (karmaPoints > 0) { await ReplyAsync(_phraseService.GetPhrase(KeyPhrases.KarmaIncreased)); } else { await ReplyAsync(_phraseService.GetPhrase(KeyPhrases.KarmaDecreased)); } return; } else if (Regex.IsMatch(text, @"^[a-zA-Z0-9]+$")) { return; _karmaService.SaveKarma(text, karmaPoints, fromUser.Id); var totalPoints = _karmaService.GetTotalKarmaPoints(text); _phraseService.AddReplacement("<totalkarma>", totalPoints.ToString()); if (karmaPoints > 0) { await ReplyAsync(_phraseService.GetPhrase(KeyPhrases.KarmaIncreased)); } else { await ReplyAsync(_phraseService.GetPhrase(KeyPhrases.KarmaDecreased)); } return; } }