private string GetChannelsOf(MiunieUser user) { var channelNames = _discordServers .GetChannelNamesFromServer(user.GuildId); return(string.Join(Separator, channelNames)); }
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 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); } }
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); }
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); }
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); }
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)); }
public Task <MiunieGuild> FromAsync(MiunieUser user) { Assert.Equal(_acceptedId, user.GuildId); return(Task.FromResult(new MiunieGuild { Name = _returnedName, Id = user.GuildId, ChannelNames = _returnedChannelNames })); }
public void EmptyShouldOutputRoot() { string expected = $"Data\n{TestServerName}"; var inputUser = new MiunieUser { GuildId = TestServerId }; var actual = _ls.Of(inputUser); Assert.Equal(expected, actual); }
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); } }
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)); }
public string Of(MiunieUser user) { if (!user.NavCursor.Any()) { return(GetRootOf(user)); } if (user.NavCursor.Count == 1) { return(GetChannelsOf(user)); } return(string.Empty); }
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); }
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); }
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); }
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); }
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)); }
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()); }
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); }
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()); }
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); }
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); }
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); }
private string GetRootOf(MiunieUser user) { var serverName = _discordServers.GetServerNameById(user.GuildId); return($"Data{Separator}{serverName}"); }
public async Task ShowProfile(CommandContext ctx, MiunieUser m) { var channel = _entityConvertor.ConvertChannel(ctx.Channel); await _profileService.ShowProfile(m, channel); }
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); }
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); }
public void RemoveReputation(MiunieUser invoker, MiunieUser target) { target.Reputation.Value--; target.Reputation.MinusRepLog.TryAdd(invoker.Id, _dateTime.Now); _userProvider.StoreUser(target); }
public bool CanAddReputation(MiunieUser invoker, MiunieUser target) => HasTimeout(target.Reputation.PlusRepLog, invoker);
public bool CanRemoveReputation(MiunieUser invoker, MiunieUser target) => HasTimeout(target.Reputation.MinusRepLog, invoker);