public async Task <IActionResult> DoMemberGuildPatch(string memberRef, ulong guild_id, [FromBody] JObject data) { var system = await ResolveSystem("@me"); var member = await ResolveMember(memberRef); if (member == null) { throw Errors.MemberNotFound; } if (member.System != system.Id) { throw Errors.NotOwnMemberError; } var settings = await _repo.GetMemberGuild(guild_id, member.Id, false); if (settings == null) { throw Errors.MemberGuildNotFound; } var patch = MemberGuildPatch.FromJson(data); patch.AssertIsValid(); if (patch.Errors.Count > 0) { throw new ModelParseError(patch.Errors); } var newSettings = await _repo.UpdateMemberGuild(member.Id, guild_id, patch); return(Ok(newSettings.ToJson())); }
public async Task ServerName(Context ctx, PKMember target) { ctx.CheckGuildContext(); if (await ctx.MatchClear("this member's server name")) { ctx.CheckOwnMember(target); var patch = new MemberGuildPatch { DisplayName = null }; await _db.Execute(conn => _repo.UpsertMemberGuild(conn, target.Id, ctx.Guild.Id, patch)); if (target.DisplayName != null) { await ctx.Reply($"{Emojis.Success} Member server name cleared. This member will now be proxied using their global display name \"{target.DisplayName}\" in this server ({ctx.Guild.Name})."); } else { await ctx.Reply($"{Emojis.Success} Member server name cleared. This member will now be proxied using their member name \"{target.NameFor(ctx)}\" in this server ({ctx.Guild.Name})."); } } else if (!ctx.HasNext()) { // No perms check, server name isn't covered by member privacy var eb = await CreateMemberNameInfoEmbed(ctx, target); if (ctx.System?.Id == target.System) { eb.Description($"To change server name, type `pk;member {target.Reference()} servername <server name>`.\nTo clear it, type `pk;member {target.Reference()} servername -clear`."); } await ctx.Reply(embed : eb.Build()); } else { ctx.CheckOwnMember(target); var newServerName = ctx.RemainderOrNull(); var patch = new MemberGuildPatch { DisplayName = newServerName }; await _db.Execute(conn => _repo.UpsertMemberGuild(conn, target.Id, ctx.Guild.Id, patch)); await ctx.Reply($"{Emojis.Success} Member server name changed. This member will now be proxied using the name \"{newServerName}\" in this server ({ctx.Guild.Name})."); } }
private Task UpdateAvatar(AvatarLocation location, Context ctx, PKMember target, string?url) { switch (location) { case AvatarLocation.Server: var serverPatch = new MemberGuildPatch { AvatarUrl = url }; return(_db.Execute(c => c.UpsertMemberGuild(target.Id, ctx.Guild.Id, serverPatch))); case AvatarLocation.Member: var memberPatch = new MemberPatch { AvatarUrl = url }; return(_db.Execute(c => c.UpdateMember(target.Id, memberPatch))); default: throw new ArgumentOutOfRangeException($"Unknown avatar location {location}"); } }
public Task <MemberGuildSettings> UpdateMemberGuild(MemberId member, ulong guild, MemberGuildPatch patch) { _logger.Information("Updated {MemberId} in guild {GuildId}: {@MemberGuildPatch}", member, guild, patch); var query = patch.Apply(new Query("member_guild").Where("member", member).Where("guild", guild)); _ = _dispatch.Dispatch(member, guild, patch); return(_db.QueryFirst <MemberGuildSettings>(query, "returning *")); }