Example #1
0
        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));
        }
Example #4
0
 public KarmaController()
 {
     _karmaService = new KarmaService();
 }
Example #5
0
        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;
            }
        }