Пример #1
0
    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()));
    }
Пример #2
0
        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}).");
            }
        }
Пример #3
0
        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}");
            }
        }
Пример #4
0
    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 *"));
    }