public IEnumerable <ReputationEntry> GetReputation(MiunieUser invoker)
        {
            var rep = new List <ReputationEntry>();

            if (invoker is null || invoker.Reputation is null)
            {
                return(rep);
            }

            foreach (MiunieUser user in _userProvider.GetAllUsers().Where(x => x.Id != invoker.Id))
            {
                if (user.Reputation.PlusRepLog.ContainsKey(invoker.UserId))
                {
                    rep.Add(new ReputationEntry(user.UserId, user.Name, user.Reputation.PlusRepLog[invoker.UserId], ReputationType.Plus, true));
                }
                if (user.Reputation.MinusRepLog.ContainsKey(invoker.UserId))
                {
                    rep.Add(new ReputationEntry(user.UserId, user.Name, user.Reputation.PlusRepLog[invoker.UserId], ReputationType.Minus, true));
                }
            }

            foreach (KeyValuePair <ulong, DateTime> entry in invoker.Reputation.PlusRepLog)
            {
                var user = _userProvider.GetById(entry.Key, invoker.GuildId);
                rep.Add(new ReputationEntry(user.UserId, user.Name, entry.Value, ReputationType.Plus));
            }

            foreach (KeyValuePair <ulong, DateTime> entry in invoker.Reputation.MinusRepLog)
            {
                var user = _userProvider.GetById(entry.Key, invoker.GuildId);
                rep.Add(new ReputationEntry(user.UserId, user.Name, entry.Value, ReputationType.Minus));
            }

            return(rep.OrderByDescending(x => x.GivenAt));
        }
        public void NonExistentUserGetsCreated()
        {
            var actual = _provider.GetById(100, 200);

            Assert.NotNull(actual);
            _persistentStorageMock
            .Verify(s => s.Store(It.IsAny <MiunieUser>(), It.IsAny <string>(), It.IsAny <string>()), Times.Once());
        }
        public MiunieUser DiscordMemberToMiunieUser(DiscordMember user)
        {
            var mUser = _userProvider.GetById(user.Id, user.Guild.Id);

            mUser.Name      = user.Nickname ?? user.Username;
            mUser.AvatarUrl = user.AvatarUrl;
            mUser.JoinedAt  = user.JoinedAt.UtcDateTime;
            mUser.IsBot     = user.IsBot;
            mUser.Roles     = user.Roles.Select(r => r.DiscordRoleToMiunieRole());
            _userProvider.StoreUser(mUser);
            return(mUser);
        }
        public MiunieUser DiscordMemberToMiunieUser(SocketGuildUser user)
        {
            if (user is null)
            {
                throw new ArgumentNullException(nameof(user));
            }

            var mUser = _userProvider.GetById(user.Id, user.Guild.Id);

            mUser.Name      = user.Nickname ?? user.Username;
            mUser.AvatarUrl = user.GetAvatarUrl();
            mUser.JoinedAt  = user.JoinedAt?.UtcDateTime ?? default;
            mUser.CreatedAt = user.CreatedAt.UtcDateTime;
            mUser.IsBot     = user.IsBot;
            mUser.Roles     = user.Roles.Select(r => r.DiscordRoleToMiunieRole());
            _userProvider.StoreUser(mUser);
            return(mUser);
        }