public static EnumerableNode CreateNode(IValue value, Options options = null, Mode mode = Mode.Deserialize, Type type = null, CachedMember member = null) { return(new EnumerableNode(new Context(options ?? Options.Create(), mode, "xml"), null, value, member, null)); }
public MemberDefinition(CachedMember member, string name, IValue value) { Name = name; Value = value; Member = member; IsNodeType = value.SpecifiedType.Type.CanBeCastTo<INode>(); }
public override ValueTask <MemberUpdatedEventArgs> HandleDispatchAsync(IGatewayApiClient shard, GuildMemberUpdateJsonModel model) { CachedMember oldMember = null; IMember newMember = null; if (CacheProvider.TryGetMembers(model.GuildId, out var memberCache)) { if (memberCache.TryGetValue(model.User.Value.Id, out var member)) { newMember = member; var oldUser = member.SharedUser.Clone() as CachedSharedUser; oldMember = member.Clone() as CachedMember; oldMember.SharedUser = oldUser; newMember.Update(model); } else if (CacheProvider.TryGetUsers(out var userCache)) { newMember = Dispatcher.GetOrAddMember(userCache, memberCache, model.GuildId, model); } } newMember ??= new TransientMember(Client, model.GuildId, model); var e = new MemberUpdatedEventArgs(oldMember, newMember); return(new(e)); }
public async Task MuteAsync(CachedMember member, [Remainder] string?reason = null) { if (member.Id == Context.User.Id) { Context.Command.ResetCooldowns(); return; } if (member.Id == Context.Guild !.OwnerId) { await ReplyErrorAsync(Localization.AdministrationCannotMuteOwner); return; } if (Context.CurrentMember !.CheckHierarchy(member) <= 0) { await ReplyErrorAsync(Localization.AdministrationUserAboveMe); return; } if (((CachedMember)Context.User).CheckHierarchy(member) <= 0) { await ReplyErrorAsync(Localization.AdministrationUserAbove); return; } await Service.MuteUserAsync(Context.Channel, (CachedMember)Context.User, member, reason); }
public AdminCommandResult GetNickname([Remainder] CachedMember target) { return(string.IsNullOrWhiteSpace(target.Nick) ? CommandSuccessLocalized("user_no_nickname", args: Markdown.Bold(target.Tag.Sanitize())) : CommandSuccessLocalized("user_nickname", args: new object[] { Markdown.Bold(target.Tag.Sanitize()), Markdown.Bold(target.Nick.Sanitize()) })); }
public MemberContext(CachedMember member, Context context) { Member = member; Format = context.Format; Mode = context.Mode; Type = member.Type.Type; }
public async Task ListCharactersAsync(CachedMember user) { var characters = DbContext.Database.Users.FirstOrDefault(u => u.Id == user.Id)?.Characters; var embed = new LocalEmbedBuilder() .WithTitle($"{user.DisplayName}'s characters:"); if (characters is null || !characters.Any()) { embed.WithDescription($"They have no characters."); await ReplyAsync(embed : embed.Build()); return; } var sb = new StringBuilder(); foreach (var character in characters) { sb.AppendLine($"{character.CharacterName} | {character.Class} | {character.Role}"); } embed.WithDescription(sb.ToString()); await ReplyAsync(embed : embed.Build()); }
public void should_indicate_if_is_a_field(CachedMember cachedMember, MemberInfo memberInfo) { var isField = memberInfo.MemberType == MemberTypes.Field; cachedMember.IsField.ShouldEqual(isField); cachedMember.IsProperty.ShouldEqual(!isField); }
public static EnumerableNode CreateNode(object enumerable, Options options = null, Mode mode = Mode.Deserialize, Type type = null, CachedMember member = null) { return(CreateNode(new SimpleValue(enumerable, (type ?? enumerable.GetType()).ToCachedType()), options, mode, type, member)); }
public MemberDefinition(CachedMember member, string name, IValue value) { Name = name; Value = value; Member = member; IsNodeType = value.SpecifiedType.Type.CanBeCastTo <INode>(); }
public async Task AddAssignableRoleAsync(CachedMember member) { var currentMember = member.Guild.CurrentMember; if (!currentMember.Permissions.ManageRoles) { return; } if (member.Roles.Count > 1) { return; } using var scope = RiasBot.CreateScope(); var db = scope.ServiceProvider.GetRequiredService <RiasDbContext>(); var guildDb = await db.Guilds.FirstOrDefaultAsync(x => x.GuildId == member.Guild.Id); if (guildDb is null) { return; } var aar = member.Guild.GetRole(guildDb.AutoAssignableRoleId); if (aar is null) { return; } if (currentMember.CheckRoleHierarchy(aar) > 0 && !aar.IsManaged && member.GetRole(aar.Id) is null) { await member.GrantRoleAsync(aar.Id); } }
public async Task HugAsync([Remainder] CachedMember member) { if (string.IsNullOrEmpty(Credentials.WeebServicesToken)) { await ReplyErrorAsync(Localization.ReactionsNoWeebApi); return; } var embed = new LocalEmbedBuilder { Color = RiasUtilities.ConfirmColor, ImageUrl = await Service.GetReactionUrlAsync("hug"), Footer = new LocalEmbedFooterBuilder().WithText($"{GetText(Localization.ReactionsPoweredBy)} weeb.sh") }; if (member.Id == Context.User.Id) { await Context.Channel.SendMessageAsync(GetText(Localization.ReactionsHugYou, Context.User.Mention), embed : embed.Build()); } else { var user = ((CachedMember)Context.User).Nick ?? Context.User.Name; await Context.Channel.SendMessageAsync(GetText(Localization.ReactionsHuggedBy, member.Mention, user), embed : embed.Build()); } }
private static string GetName(CachedMember member, Action<NamingConventions<ArrayItemContext>> config) { var convention = ArrayItemConventions.Create(); config(convention); return convention.GetName(new ArrayItemContext(ModelType, member, new Context(Options, Mode.Deserialize, "xml"))); }
public async Task SetNicknameAsync(CachedMember user, [Remainder] string?nickname = null) { if (user.Id == Context.Guild !.OwnerId) { await ReplyErrorAsync(Localization.AdministrationNicknameOwner); return; } if (Context.CurrentMember !.CheckHierarchy(user) <= 0) { await ReplyErrorAsync(Localization.AdministrationUserAboveMe); return; } if (((CachedMember)Context.User).CheckHierarchy(user) <= 0) { await ReplyErrorAsync(Localization.AdministrationUserAbove); return; } await user.ModifyAsync(x => x.Nick = nickname); if (string.IsNullOrEmpty(nickname)) { await ReplyConfirmationAsync(Localization.AdministrationNicknameRemoved, user); } else { await ReplyConfirmationAsync(Localization.AdministrationNicknameChanged, user, nickname); } }
public async Task SoftBanAsync(CachedMember member, [Remainder] string?reason = null) { if (member.Id == Context.User.Id) { return; } if (member.Id == Context.Guild !.OwnerId) { await ReplyErrorAsync(Localization.AdministrationCannotSoftbanOwner); return; } if (Context.CurrentMember !.CheckHierarchy(member) <= 0) { await ReplyErrorAsync(Localization.AdministrationUserAboveMe); return; } if (((CachedMember)Context.User).CheckHierarchy(member) <= 0) { await ReplyErrorAsync(Localization.AdministrationUserAbove); return; } await SendMessageAsync(member, Localization.AdministrationUserSoftBanned, Localization.AdministrationKickedFrom, reason); await member.BanAsync(reason, 7); await member.UnbanAsync(); }
public async ValueTask <AdminCommandResult> SetNicknameAsync([RequireHierarchy] CachedMember target, [Remainder, MustBe(StringLength.ShorterThan, 33)] string newNickname) { await target.ModifyAsync(x => x.Nick = newNickname); return(CommandSuccessLocalized("user_nickname_updated")); }
public static ObjectNodeBase CreateDeserializable(string name, IValue @object, INode parent, Context context, CachedMember member = null) { var type = @object.SpecifiedType; var kind = GetTypeKind(type, context.Options); if (kind == TypeKind.Simple) { if (parent == null) throw new TypeNotSupportedException("simple type", @object.SpecifiedType, Mode.Deserialize, "complex types"); return new ValueNode(context, name, @object, member, parent); } Func<object> factory = () => ObjectFactory.CreateInstance(type, context.Options.Deserialization.ObjectFactory, parent.MapOrDefault(x => x.Value)); if (member == null || parent == null) @object.Instance = factory(); else @object = ValueFactory.Create(@object, factory); switch (kind) { case TypeKind.Dictionary: return new DictionaryNode(context, name, @object, member, parent); case TypeKind.Enumerable: return new EnumerableNode(context, name, @object, member, parent); default: return new ObjectNode(context, name, @object, member, parent); } }
private string GetMemberName(CachedMember member, Options options) { var context = new Context(options, Mode.Serialize, FileNode.NodeFormat); var memberContext = new MemberContext(member, context); return(member.IsField ? options.FieldNameConventions.GetName(memberContext) : options.PropertyNameConventions.GetName(memberContext)); }
private static string GetName(CachedMember member, Action <NamingConventions <ArrayItemContext> > config) { var convention = ArrayItemNamingConventions.Create(); config(convention); return(convention.GetName(new ArrayItemContext(ModelType, member, new Context(Options, Mode.Deserialize, "xml")))); }
public ArrayItemContext(CachedType type, CachedMember member, Context context) { Type = type; Member = member; Format = context.Format; Options = context.Options; Mode = context.Mode; }
private string FormatUser(CachedMember target) { return(string.IsNullOrWhiteSpace(target.Nick) ? target.Format() : Localize("user_search_format", Markdown.Bold(target.Tag.Sanitize()), Markdown.Bold(target.Nick.Sanitize()), Markdown.Code(target.Id.ToString()))); }
public MemberValue(IValue value, CachedMember member, Func<CachedType, bool> useActualType) { _value = value; _member = member; var type = member.Type; SpecifiedType = useActualType(type) && Instance != null ? Instance.ToCachedType() : type; IsReadonly = _member.IsReadonly; }
public void should_get_value(CachedMember cachedMember, MemberInfo memberInfo) { var @object = new Members(); @object.SetPropertyOrFieldValue(memberInfo.Name, memberInfo.GetPropertyOrFieldType() == typeof(string) ? "hai" : (object)(Optional<string>)"hai"); cachedMember.GetValue(@object).As<string>().ShouldEqual("hai"); }
public async Task KickAsync( [Description("Member to kick")] CachedMember member, [Description("Reason of the kick")][Remainder] string reason) { await member.KickAsync(RestRequestOptions.FromReason(reason)); await RespondEmbedAsync($"{member.FullName()} was kicked. ({reason})"); }
public void should_get_value(CachedMember cachedMember, MemberInfo memberInfo) { var @object = new Members(); @object.SetPropertyOrFieldValue(memberInfo.Name, memberInfo.GetPropertyOrFieldType() == typeof(string) ? "hai" : (object)(Optional <string>) "hai"); cachedMember.GetValue(@object).As <string>().ShouldEqual("hai"); }
public EnumContext(object value, Type type, CachedMember member, Context context) { Value = value; Type = type; Member = member; Format = context.Format; Options = context.Options; Mode = context.Mode; }
public CachedMember GetCached(Type type, string identifier) { CachedMember cached = null; ulong hashCode = Hash(type, identifier); _map.TryGetValue(hashCode, out cached); return(cached); }
public void should_add_generic_field_name_convention( CachedMember member, bool hasMember, string itemName) { GetName(member, x => x.Add( (n, c) => { n.ShouldEqual(itemName); c.Options.ShouldEqual(Options); return("yada"); })).ShouldEqual("yada"); }
public MuteContext(CachedGuild guild, CachedMember moderator, CachedMember member, IMessageChannel channel, string?reason) { Guild = guild; GuildId = guild.Id; Moderator = moderator; Member = member; UserId = member.Id; SourceChannel = channel; Reason = reason; }
public ValueNode( Context context, string name, IValue source, CachedMember member, INode parent) : base(name, source, member, parent, context) { _friendlyParseMessages = Context.Options.Deserialization.FriendlyParseErrorMessages; }
public void should_set_value(CachedMember cachedMember, MemberInfo memberInfo) { var @object = new Members(); cachedMember.SetValue(@object, "hai"); var value = @object.GetPropertyOrFieldValue(memberInfo.Name); (memberInfo.GetPropertyOrFieldType() == typeof(string) ? "hai" : (string)(Optional <string>)value).ShouldEqual("hai"); }
public ValueNode( Context context, string name, IValue source, CachedMember member, INode parent, int?index = null) : base(name, source, member, parent, context, index) { _friendlyParseMessages = Context.Options.Deserialization.FriendlyParseErrorMessages; }
public void should_pass_member_info_to_array_item_name_convention_when_enumerating() { var member = new CachedMember(typeof(ArrayItemMember).GetProperty("SomeProperty")); var node = CreateNodeOfType(new List <string> { "oh", "hai" }, mode: Mode.Serialize, member: member); var nodes = node.ToList(); nodes.ShouldNotBeEmpty(); nodes.ShouldAllMatch(x => x.Name == "item"); }
public MemberValue(IValue value, CachedMember member, Func <CachedType, bool> useActualType) { _value = value; _member = member; var type = member.Type; SpecifiedType = useActualType(type) && Instance != null? Instance.ToCachedType() : type; IsReadonly = _member.IsReadonly; }
public override async Task RewardAsync(CachedMember member) { foreach (var id in AddedRoleIds) { await member.GrantRoleAsync(id); } foreach (var id in RemovedRoleIds) { await member.RevokeRoleAsync(id); } }
public override ValueTask <MessageReceivedEventArgs> HandleDispatchAsync(IGatewayApiClient shard, MessageJsonModel model) { CachedMember author = null; IGatewayMessage message = null; if (model.GuildId.HasValue && !model.WebhookId.HasValue && model.Member.HasValue && Client.CacheProvider.TryGetUsers(out var userCache) && Client.CacheProvider.TryGetMembers(model.GuildId.Value, out var memberCache)) { model.Member.Value.User = model.Author; author = Dispatcher.GetOrAddMember(userCache, memberCache, model.GuildId.Value, model.Member.Value); foreach (var memberModel in model.Mentions.Select(static x =>
public ObjectNode( Context context, string name, IValue @object, CachedMember member, INode parent) : base(name, @object, member, parent, context) { _members = new Lazy<IEnumerable<MemberDefinition>>(EnumerateMembers); _nodes = new Lazy<IEnumerable<INode>>(EnumerateNodes); _addedNodes = new Lazy<IList<INode>>(() => new List<INode>()); }
public async Task MuteAsync(CachedMember member, TimeSpan timeout, [Remainder] string?reason = null) { if (member.Id == Context.User.Id) { Context.Command.ResetCooldowns(); return; } var locale = Localization.GetGuildLocale(Context.Guild !.Id); var lowestTimeout = TimeSpan.FromMinutes(1); if (timeout < lowestTimeout) { await ReplyErrorAsync(Localization.AdministrationMuteTimeoutLowest, lowestTimeout.Humanize(1, new CultureInfo(locale))); return; } var now = DateTime.UtcNow; var highestTimeout = now.AddYears(1) - now; if (timeout > highestTimeout) { await ReplyErrorAsync(Localization.AdministrationMuteTimeoutHighest, highestTimeout.Humanize(1, new CultureInfo(locale), TimeUnit.Year)); return; } if (member.Id == Context.Guild !.OwnerId) { await ReplyErrorAsync(Localization.AdministrationCannotMuteOwner); return; } if (Context.CurrentMember !.CheckHierarchy(member) <= 0) { await ReplyErrorAsync(Localization.AdministrationUserAboveMe); return; } if (((CachedMember)Context.User).CheckHierarchy(member) <= 0) { await ReplyErrorAsync(Localization.AdministrationUserAbove); return; } await Service.MuteUserAsync(Context.Channel, (CachedMember)Context.User, member, reason, timeout); }
public static ObjectNodeBase CreateSerializable(string name, IValue @object, INode parent, Context context, CachedMember member = null) { switch (GetTypeKind(@object.SpecifiedType, context.Options)) { case TypeKind.Simple: if (parent == null) throw new TypeNotSupportedException("simple type", @object.SpecifiedType, Mode.Serialize, "complex types"); return new ValueNode(context, name, @object, member, parent); case TypeKind.Dictionary: return new DictionaryNode(context, name, @object, member, parent); case TypeKind.Enumerable: return new EnumerableNode(context, name, @object, member, parent); default: return new ObjectNode(context, name, @object, member, parent); } }
public DictionaryNode( Context context, string name, IValue dictionary, CachedMember member, INode parent) : base(name, dictionary, member, parent, context) { _dictionary = new Lazy<IDictionary>(() => dictionary.Instance.MapOrDefault(GenericDictionaryAdapter.Create)); if (SpecifiedType.IsGenericDictionary) _itemType = SpecifiedType.GenericDictionaryTypes.Value; _nodes = new Lazy<IEnumerable<INode>>(EnumerateNodes); }
public void should_add_field_name_convention( CachedMember member, bool hasMember, string itemName) { GetName(member, x => x.Add( (n, c) => { n.ShouldEqual(itemName); c.HasMember.ShouldEqual(hasMember); c.Member.ShouldEqual(member); c.Type.ShouldEqual(ModelType); c.Options.ShouldEqual(Options); return "yada"; })).ShouldEqual("yada"); }
public EnumerableNode( Context context, string name, IValue enumerable, CachedMember member, INode parent) : base(name, enumerable, member, parent, context) { _list = new Lazy<IList>(() => enumerable.Instance.MapOrDefault(x => enumerable.ActualType.IsArray ? ArrayAdapter.Create(enumerable) : GenericListAdapter.Create(x))); if (SpecifiedType.IsGenericEnumerable) _itemType = enumerable.SpecifiedType.GenericEnumerableType; _nodes = new Lazy<IEnumerable<INode>>(EnumerateNodes); }
protected ObjectNodeBase( string name, IValue source, CachedMember member, INode parent, Context context) : base(parent) { _name = name; Source = source; Context = context; Member = member; HasMember = member != null; if (HasMember) Metadata.Add(member.Attributes); else if (Source?.ActualType != null) Metadata.Add(ActualType.Attributes); }
public void should_add_conditional_generic_field_convention( CachedMember member, bool hasMember, string itemName) { GetName(member, x => x.Add( (n, c) => { n.ShouldEqual(itemName); c.Options.ShouldEqual(Options); return "yada"; }, (n, c) => { n.ShouldEqual(itemName); c.Options.ShouldEqual(Options); return true; })).ShouldEqual("yada"); GetName(member, x => x.Add((string n) => "yada", n => false)).ShouldEqual(itemName); }
public void should_add_conditional_field_name_modification_convention( CachedMember member, bool hasMember, string itemName) { GetName(member, x => x.Add( (n, c) => { n.ShouldEqual(itemName); c.HasMember.ShouldEqual(hasMember); c.Member.ShouldEqual(member); c.Type.ShouldEqual(ModelType); c.Options.ShouldEqual(Options); return "yada"; }, (n, c) => { n.ShouldEqual(itemName); c.HasMember.ShouldEqual(hasMember); c.Member.ShouldEqual(member); c.Type.ShouldEqual(ModelType); c.Options.ShouldEqual(Options); return true; })).ShouldEqual("yada"); GetName(member, x => x.Add((n, p) => "yada", (n, p) => false)).ShouldEqual(itemName); }
public void should_get_value(CachedMember cachedMember, MemberInfo memberInfo, Type type) { var @object = new Members(); @object.SetPropertyOrFieldValue(memberInfo.Name, "hai"); cachedMember.GetValue(@object).ShouldEqual("hai"); }
public void should_indicate_if_member_has_attributes( CachedMember cachedMember, MemberInfo memberInfo) { cachedMember.HasAttribute<XmlIgnoreAttribute>().ShouldBeTrue(); cachedMember.HasAttribute<XmlArrayAttribute>().ShouldBeTrue(); }
public void should_return_type(CachedMember cachedMember, MemberInfo memberInfo) { cachedMember.Type.Type.ShouldEqual(typeof(string)); }
public void should_set_value(CachedMember cachedMember, MemberInfo memberInfo) { var @object = new Members(); cachedMember.SetValue(@object, "hai"); var value = @object.GetPropertyOrFieldValue(memberInfo.Name); (memberInfo.GetPropertyOrFieldType() == typeof(string) ? "hai" : (string)(Optional<string>)value).ShouldEqual("hai"); }
public void should_return_name(CachedMember cachedMember, MemberInfo memberInfo) { cachedMember.Name.ShouldEqual(memberInfo.Name); }
public void should_return_null_when_attribute_not_applied_attribute( CachedMember cachedMember, MemberInfo memberInfo) { cachedMember.GetAttribute<XmlArrayItemAttribute>().ShouldBeNull(); }
public void should_return_declaring_type(CachedMember cachedMember, MemberInfo memberInfo) { cachedMember.DeclaringType.Type.ShouldEqual(memberInfo.DeclaringType); }
public void should_return_attributes(CachedMember cachedMember, MemberInfo memberInfo) { cachedMember.Attributes.ShouldContain(x => x is XmlIgnoreAttribute); cachedMember.Attributes.ShouldContain(x => x is XmlArrayAttribute); }
public void should_return_attribute(CachedMember cachedMember, MemberInfo memberInfo) { cachedMember.GetAttribute<XmlIgnoreAttribute>().ShouldNotBeNull(); cachedMember.GetAttribute<XmlArrayAttribute>().ShouldNotBeNull(); }
public void should_indicate_if_a_member_is_not_readonly(CachedMember cachedMember, MemberInfo memberInfo) { cachedMember.IsReadonly.ShouldBeFalse(); }
public void should_indicate_if_member_does_not_have_an_attributes( CachedMember cachedMember, MemberInfo memberInfo) { cachedMember.HasAttribute<XmlArrayItemAttribute>().ShouldBeFalse(); }
public void should_indicate_if_is_a_property(CachedMember cachedMember, MemberInfo memberInfo) { var isProperty = memberInfo.MemberType == MemberTypes.Property; cachedMember.IsProperty.ShouldEqual(isProperty); cachedMember.IsField.ShouldEqual(!isProperty); }
public void should_indicate_if_property_or_field(CachedMember cachedMember, MemberInfo memberInfo) { cachedMember.IsPublicPropertyOrField.ShouldBeTrue(); }