feat(webhooks): SUCCESSFUL_IMPORT event, better behaviour when creating entities
This commit is contained in:
		@@ -10,6 +10,8 @@ using Dapper;
 | 
			
		||||
 | 
			
		||||
using Humanizer;
 | 
			
		||||
 | 
			
		||||
using Newtonsoft.Json.Linq;
 | 
			
		||||
 | 
			
		||||
using NodaTime;
 | 
			
		||||
 | 
			
		||||
using Myriad.Builders;
 | 
			
		||||
@@ -24,13 +26,15 @@ namespace PluralKit.Bot
 | 
			
		||||
        private readonly ModelRepository _repo;
 | 
			
		||||
        private readonly EmbedService _embeds;
 | 
			
		||||
        private readonly HttpClient _client;
 | 
			
		||||
        private readonly DispatchService _dispatch;
 | 
			
		||||
 | 
			
		||||
        public Groups(IDatabase db, ModelRepository repo, EmbedService embeds, HttpClient client)
 | 
			
		||||
        public Groups(IDatabase db, ModelRepository repo, EmbedService embeds, HttpClient client, DispatchService dispatch)
 | 
			
		||||
        {
 | 
			
		||||
            _db = db;
 | 
			
		||||
            _repo = repo;
 | 
			
		||||
            _embeds = embeds;
 | 
			
		||||
            _client = client;
 | 
			
		||||
            _dispatch = dispatch;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task CreateGroup(Context ctx)
 | 
			
		||||
@@ -59,6 +63,12 @@ namespace PluralKit.Bot
 | 
			
		||||
 | 
			
		||||
            var newGroup = await _repo.CreateGroup(ctx.System.Id, groupName);
 | 
			
		||||
 | 
			
		||||
            _ = _dispatch.Dispatch(newGroup.Id, new UpdateDispatchData()
 | 
			
		||||
            {
 | 
			
		||||
                Event = DispatchEvent.CREATE_GROUP,
 | 
			
		||||
                EventData = JObject.FromObject(new { name = groupName }),
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            var eb = new EmbedBuilder()
 | 
			
		||||
                .Description($"Your new group, **{groupName}**, has been created, with the group ID **`{newGroup.Hid}`**.\nBelow are a couple of useful commands:")
 | 
			
		||||
                .Field(new("View the group card", $"> pk;group **{newGroup.Reference()}**"))
 | 
			
		||||
 
 | 
			
		||||
@@ -21,13 +21,15 @@ namespace PluralKit.Bot
 | 
			
		||||
        private readonly ModelRepository _repo;
 | 
			
		||||
        private readonly EmbedService _embeds;
 | 
			
		||||
        private readonly HttpClient _client;
 | 
			
		||||
        private readonly DispatchService _dispatch;
 | 
			
		||||
 | 
			
		||||
        public Member(EmbedService embeds, IDatabase db, ModelRepository repo, HttpClient client)
 | 
			
		||||
        public Member(EmbedService embeds, IDatabase db, ModelRepository repo, HttpClient client, DispatchService dispatch)
 | 
			
		||||
        {
 | 
			
		||||
            _embeds = embeds;
 | 
			
		||||
            _db = db;
 | 
			
		||||
            _repo = repo;
 | 
			
		||||
            _client = client;
 | 
			
		||||
            _dispatch = dispatch;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task NewMember(Context ctx)
 | 
			
		||||
@@ -62,12 +64,20 @@ namespace PluralKit.Bot
 | 
			
		||||
            // Try to match an image attached to the message
 | 
			
		||||
            var avatarArg = ctx.Message.Attachments.FirstOrDefault();
 | 
			
		||||
            Exception imageMatchError = null;
 | 
			
		||||
            bool sentDispatch = false;
 | 
			
		||||
            if (avatarArg != null)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    await AvatarUtils.VerifyAvatarOrThrow(_client, avatarArg.Url);
 | 
			
		||||
                    await _repo.UpdateMember(member.Id, new MemberPatch { AvatarUrl = avatarArg.Url });
 | 
			
		||||
                    await _db.Execute(conn => _repo.UpdateMember(member.Id, new MemberPatch { AvatarUrl = avatarArg.Url }, conn));
 | 
			
		||||
 | 
			
		||||
                    _ = _dispatch.Dispatch(member.Id, new()
 | 
			
		||||
                    {
 | 
			
		||||
                        Event = DispatchEvent.CREATE_MEMBER,
 | 
			
		||||
                        EventData = JObject.FromObject(new { name = memberName, avatar_url = avatarArg.Url }),
 | 
			
		||||
                    });
 | 
			
		||||
                    sentDispatch = true;
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
@@ -75,6 +85,13 @@ namespace PluralKit.Bot
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (!sentDispatch)
 | 
			
		||||
                _ = _dispatch.Dispatch(member.Id, new()
 | 
			
		||||
                {
 | 
			
		||||
                    Event = DispatchEvent.CREATE_MEMBER,
 | 
			
		||||
                    EventData = JObject.FromObject(new { name = memberName }),
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
            // Send confirmation and space hint
 | 
			
		||||
            await ctx.Reply($"{Emojis.Success} Member \"{memberName}\" (`{member.Hid}`) registered! Check out the getting started page for how to get a member up and running: https://pluralkit.me/start#create-a-member");
 | 
			
		||||
            // todo: move this to ModelRepository
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user