Exemplo n.º 1
0
        private string GetChannelsOf(MiunieUser user)
        {
            var channelNames = _discordServers
                               .GetChannelNamesFromServer(user.GuildId);

            return(string.Join(Separator, channelNames));
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
 public void RemoveUser(MiunieUser user)
 {
     if (_persistentStorage.Exists <MiunieUser>(u => u.UserId == user.UserId && u.GuildId == user.GuildId))
     {
         _persistentStorage.Remove <MiunieUser>(u => u.UserId == user.UserId && u.GuildId == user.GuildId);
     }
 }
Exemplo n.º 4
0
 public async Task ShowProfileAsync(CommandContext ctx, MiunieUser m = null)
 {
     if (m is null)
     {
         m = _entityConvertor.ConvertUser(ctx.Member);
     }
     var channel = _entityConvertor.ConvertChannel(ctx.Channel);
     await _profileService.ShowProfileAsync(m, channel);
 }
Exemplo n.º 5
0
 public async Task ShowProfileAsync(MiunieUser user = null)
 {
     if (user is null)
     {
         user = _entityConvertor.ConvertUser(Context.User as SocketGuildUser);
     }
     var channel = _entityConvertor.ConvertChannel(Context.Channel as SocketGuildChannel);
     await _profileService.ShowProfileAsync(user, channel);
 }
Exemplo n.º 6
0
        public async Task SendDirectFileMessageAsync(MiunieUser mu, string userAsJson)
        {
            var dmChannel = await _discord.Client.GetUser(mu.UserId).GetOrCreateDMChannelAsync();

            var msg = _lang.GetPhrase(PhraseKey.USER_PRIVACY_FILE_MESSAGE.ToString(), mu.Name);

            using var fileStream = GenerateStreamFromString(userAsJson);
            _ = await dmChannel.SendFileAsync(fileStream, $"{mu.Name}.json", msg);
        }
Exemplo n.º 7
0
        public async Task SendMessageAsync(MiunieChannel mc, MiunieUser mu)
        {
            if (!(_discord.Client.GetChannel(mc.ChannelId) is SocketTextChannel channel))
            {
                LogSocketTextChannelCastFailed();
                return;
            }

            _ = await channel.SendMessageAsync(embed : mu.ToEmbed(_lang));
        }
Exemplo n.º 8
0
 public Task <MiunieGuild> FromAsync(MiunieUser user)
 {
     Assert.Equal(_acceptedId, user.GuildId);
     return(Task.FromResult(new MiunieGuild
     {
         Name = _returnedName,
         Id = user.GuildId,
         ChannelNames = _returnedChannelNames
     }));
 }
Exemplo n.º 9
0
        public void EmptyShouldOutputRoot()
        {
            string expected  = $"Data\n{TestServerName}";
            var    inputUser = new MiunieUser
            {
                GuildId = TestServerId
            };
            var actual = _ls.Of(inputUser);

            Assert.Equal(expected, actual);
        }
Exemplo n.º 10
0
 public void StoreUser(MiunieUser user)
 {
     if (_persistentStorage.Exists <MiunieUser>(u => u.Id == user.Id && u.GuildId == user.GuildId))
     {
         _persistentStorage.Update(user);
     }
     else
     {
         _persistentStorage.Store(user);
     }
 }
Exemplo n.º 11
0
        public async Task EmptyShouldOutputRoot()
        {
            const string expectedData = "Data";

            var inputUser = new MiunieUser
            {
                GuildId = TestServerId
            };
            var actual = await _ls.OfAsync(inputUser);

            Assert.Equal(expectedData, actual.Result.First());
            Assert.Equal(TestServerName, actual.Result.ElementAt(1));
        }
Exemplo n.º 12
0
        public string Of(MiunieUser user)
        {
            if (!user.NavCursor.Any())
            {
                return(GetRootOf(user));
            }
            if (user.NavCursor.Count == 1)
            {
                return(GetChannelsOf(user));
            }

            return(string.Empty);
        }
Exemplo n.º 13
0
        private bool HasTimeout(ConcurrentDictionary <ulong, DateTime> log, MiunieUser invoker)
        {
            log.TryGetValue(invoker.Id, out var lastRepDateTime);

            if ((_dateTime.Now - lastRepDateTime).TotalSeconds <= TimeoutInSeconds)
            {
                return(true);
            }

            log.TryRemove(invoker.Id, out _);
            _userProvider.StoreUser(invoker);
            return(false);
        }
Exemplo n.º 14
0
        public void InServerShouldOutputChannels()
        {
            const string expected  = "ChannelA\nChannelB\nChannelC";
            var          inputUser = new MiunieUser
            {
                GuildId   = TestServerId,
                NavCursor = new List <ulong> {
                    TestServerId
                }
            };
            var actual = _ls.Of(inputUser);

            Assert.Equal(expected, actual);
        }
Exemplo n.º 15
0
        public void GetById_ShouldStoreAndReturnNewUser_IfUserNotFound(ulong userId, ulong guildID)
        {
            MiunieUser nullUser = null;

            _ = _storageMock.Setup(s => s.RestoreSingle(It.IsAny <Expression <Func <MiunieUser, bool> > >()))
                .Returns(nullUser);
            _ = _storageMock.Setup(s => s.Store(nullUser));

            var newUser = _userProvider.GetById(userId, guildID);

            _storageMock.Verify(s => s.RestoreSingle(It.IsAny <Expression <Func <MiunieUser, bool> > >()), Times.Once);
            _storageMock.Verify(s => s.Store(It.Is <MiunieUser>(u => u.UserId == userId && u.GuildId == guildID)), Times.Once);
            Assert.True(newUser.UserId == userId && newUser.GuildId == guildID);
        }
Exemplo n.º 16
0
        public DateTime?GetDateTimeLocalToUser(DateTime?utcDateTime, MiunieUser user)
        {
            if (!utcDateTime.HasValue)
            {
                return(utcDateTime);
            }

            if (user.UtcTimeOffset.HasValue)
            {
                return(utcDateTime.Value.Add(user.UtcTimeOffset.Value));
            }

            return(utcDateTime);
        }
Exemplo n.º 17
0
        public async Task InServerShouldOutputChannels()
        {
            var inputUser = new MiunieUser
            {
                GuildId   = TestServerId,
                NavCursor = new List <ulong> {
                    TestServerId
                }
            };
            var actual = await _ls.OfAsync(inputUser);

            Assert.Equal("ChannelA", actual.Result.ElementAt(0));
            Assert.Equal("ChannelB", actual.Result.ElementAt(1));
            Assert.Equal("ChannelC", actual.Result.ElementAt(2));
        }
Exemplo n.º 18
0
        public static DiscordEmbed ToEmbed(this MiunieUser mUser, ILanguageProvider lang)
        {
            var realnessPhrase = lang.GetPhrase((mUser.IsBot ? PhraseKey.USER_EMBED_IS_BOT : PhraseKey.USER_EMBED_IS_HUMAN).ToString());

            return(new DiscordEmbedBuilder()
                   .WithColor(new DiscordColor("#EC407A"))
                   .WithTitle(lang.GetPhrase(PhraseKey.USER_EMBED_TITLE.ToString()))
                   .WithThumbnailUrl(mUser.AvatarUrl)
                   .AddField(lang.GetPhrase(PhraseKey.USER_EMBED_NAME_TITLE.ToString()), mUser.Name)
                   .AddField(lang.GetPhrase(PhraseKey.USER_EMBED_REALNESS_TITLE.ToString()), realnessPhrase, true)
                   .AddField(lang.GetPhrase(PhraseKey.USER_EMBED_REP_TITLE.ToString()), mUser.Reputation.Value.ToString(), true)
                   .AddField(lang.GetPhrase(PhraseKey.USER_EMBED_ROLES_TITLE.ToString()), string.Join("\n", mUser.Roles.Select(r => r.Name)), true)
                   .AddField(lang.GetPhrase(PhraseKey.USER_EMBED_JOINED_AT_TITLE.ToString()), $"{mUser.JoinedAt:d} at {mUser.JoinedAt:t} UTC")
                   .Build());
        }
Exemplo n.º 19
0
        public async Task <DirectoryListing> OfAsync(MiunieUser user)
        {
            _currentGuild = await _discordGuilds.FromAsync(user);

            if (!user.NavCursor.Any())
            {
                return(GetRootOf());
            }

            if (user.NavCursor.Count == 1)
            {
                return(GetChannelsOf());
            }

            return(null);
        }
Exemplo n.º 20
0
        public static Embed ToEmbed(this MiunieUser mUser, ILanguageProvider lang)
        {
            var realnessPhrase = lang.GetPhrase((mUser.IsBot ? PhraseKey.USER_EMBED_IS_BOT : PhraseKey.USER_EMBED_IS_HUMAN).ToString());

            return(new EmbedBuilder()
                   .WithColor(new Color(236, 64, 122))
                   .WithTitle(lang.GetPhrase(PhraseKey.USER_EMBED_TITLE.ToString()))
                   .WithThumbnailUrl(mUser.AvatarUrl)
                   .AddField(lang.GetPhrase(PhraseKey.USER_EMBED_NAME_TITLE.ToString()), mUser.Name)
                   .AddField(lang.GetPhrase(PhraseKey.USER_EMBED_REALNESS_TITLE.ToString()), realnessPhrase, true)
                   .AddField(lang.GetPhrase(PhraseKey.USER_EMBED_REP_TITLE.ToString()), mUser.Reputation.Value.ToString(), true)
                   .AddField(lang.GetPhrase(PhraseKey.USER_EMBED_ROLES_TITLE.ToString()), string.Join("\n", mUser.Roles.Select(r => r.Name)), true)
                   .AddField(lang.GetPhrase(PhraseKey.USER_EMBED_JOINED_AT_TITLE.ToString()), $"{mUser.JoinedAt:d} at {mUser.JoinedAt:t} UTC")
                   .AddField(lang.GetPhrase(PhraseKey.USER_EMBED_CREATED_AT_TITLE.ToString()), $"{mUser.CreatedAt:d} at {mUser.CreatedAt:t} UTC", true)
                   .AddField(lang.GetPhrase(PhraseKey.USER_EMBED_TIME_TITLE.ToString()), mUser.UtcTimeOffset.HasValue ? lang.GetPhrase(PhraseKey.USER_EMBED_TIME.ToString(), DateTime.UtcNow + mUser.UtcTimeOffset) : lang.GetPhrase(PhraseKey.USER_EMBED_TIME_NOSET.ToString()), true)
                   .Build());
        }
Exemplo n.º 21
0
        private MiunieUser EnsureExistence(
            MiunieUser user,
            ulong userId,
            ulong guildId)
        {
            if (user is null)
            {
                user = new MiunieUser
                {
                    GuildId    = guildId,
                    Id         = userId,
                    Reputation = new Reputation()
                };
                StoreUser(user);
            }

            return(user);
        }
Exemplo n.º 22
0
        public void StoreUser_ShouldStoreUser_IfUserDoesntExist()
        {
            var user = new MiunieUser
            {
                GuildId    = 0,
                UserId     = 0,
                Reputation = new Reputation()
            };

            _ = _storageMock.Setup(s => s.Store(It.IsAny <MiunieUser>()));
            _ = _storageMock.Setup(s => s.Update(It.IsAny <MiunieUser>()));
            _ = _storageMock.Setup(s => s.Exists(It.IsAny <Expression <Func <MiunieUser, bool> > >()))
                .Returns(false);

            _userProvider.StoreUser(user);

            _storageMock.Verify(s => s.Exists(It.IsAny <Expression <Func <MiunieUser, bool> > >()), Times.Once);
            _storageMock.Verify(s => s.Store(It.IsAny <MiunieUser>()), Times.Once);
            _storageMock.Verify(s => s.Update(It.IsAny <MiunieUser>()), Times.Never);
        }
Exemplo n.º 23
0
 public async Task ShowReputationLogAsync(MiunieUser user, int page = 1)
 {
     var source  = _entityConvertor.ConvertUser(Context.User as SocketGuildUser);
     var channel = _entityConvertor.ConvertChannel(Context.Channel as SocketGuildChannel);
     await _profileService.ShowReputationLogAsync(source, user, page, channel);
 }
Exemplo n.º 24
0
        private string GetRootOf(MiunieUser user)
        {
            var serverName = _discordServers.GetServerNameById(user.GuildId);

            return($"Data{Separator}{serverName}");
        }
Exemplo n.º 25
0
 public async Task ShowProfile(CommandContext ctx, MiunieUser m)
 {
     var channel = _entityConvertor.ConvertChannel(ctx.Channel);
     await _profileService.ShowProfile(m, channel);
 }
Exemplo n.º 26
0
 public async Task RemoveReputationAsync(CommandContext ctx, MiunieUser m)
 {
     var source  = _entityConvertor.ConvertUser(ctx.Member);
     var channel = _entityConvertor.ConvertChannel(ctx.Channel);
     await _profileService.RemoveReputationAsync(source, m, channel);
 }
Exemplo n.º 27
0
 public async Task RemoveReputationAsync(MiunieUser user)
 {
     var source  = _entityConvertor.ConvertUser(Context.User as SocketGuildUser);
     var channel = _entityConvertor.ConvertChannel(Context.Channel as SocketGuildChannel);
     await _profileService.RemoveReputationAsync(source, user, channel);
 }
Exemplo n.º 28
0
 public void RemoveReputation(MiunieUser invoker, MiunieUser target)
 {
     target.Reputation.Value--;
     target.Reputation.MinusRepLog.TryAdd(invoker.Id, _dateTime.Now);
     _userProvider.StoreUser(target);
 }
Exemplo n.º 29
0
 public bool CanAddReputation(MiunieUser invoker, MiunieUser target)
 => HasTimeout(target.Reputation.PlusRepLog, invoker);
Exemplo n.º 30
0
 public bool CanRemoveReputation(MiunieUser invoker, MiunieUser target)
 => HasTimeout(target.Reputation.MinusRepLog, invoker);