Fix unlinking deleted accounts
This commit is contained in:
		@@ -112,6 +112,19 @@ namespace PluralKit.Bot.CommandSystem
 | 
				
			|||||||
            return null;
 | 
					            return null;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public bool MatchUserRaw(out ulong id)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            id = 0;
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            var text = PeekArgument();
 | 
				
			||||||
 | 
					            if (MentionUtils.TryParseUser(text, out var mentionId))
 | 
				
			||||||
 | 
					                id = mentionId;
 | 
				
			||||||
 | 
					            else if (ulong.TryParse(text, out var rawId))
 | 
				
			||||||
 | 
					                id = rawId;
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            return id != 0;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public Task<PKSystem> PeekSystem() => MatchSystemInner();
 | 
					        public Task<PKSystem> PeekSystem() => MatchSystemInner();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public async Task<PKSystem> MatchSystem()
 | 
					        public async Task<PKSystem> MatchSystem()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,21 +36,21 @@ namespace PluralKit.Bot.Commands
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            ctx.CheckSystem();
 | 
					            ctx.CheckSystem();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            IUser account;
 | 
					            ulong id;
 | 
				
			||||||
            if (!ctx.HasNext())
 | 
					            if (!ctx.HasNext())
 | 
				
			||||||
                account = ctx.Author;
 | 
					                id = ctx.Author.Id;
 | 
				
			||||||
            else           
 | 
					            else if (!ctx.MatchUserRaw(out id))
 | 
				
			||||||
                account = await ctx.MatchUser() ?? throw new PKSyntaxError("You must pass an account to link with (either ID or @mention).");
 | 
					                throw new PKSyntaxError("You must pass an account to link with (either ID or @mention).");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var accountIds = (await _data.GetSystemAccounts(ctx.System)).ToList();
 | 
					            var accountIds = (await _data.GetSystemAccounts(ctx.System)).ToList();
 | 
				
			||||||
            if (!accountIds.Contains(account.Id)) throw Errors.AccountNotLinked;
 | 
					            if (!accountIds.Contains(id)) throw Errors.AccountNotLinked;
 | 
				
			||||||
            if (accountIds.Count == 1) throw Errors.UnlinkingLastAccount;
 | 
					            if (accountIds.Count == 1) throw Errors.UnlinkingLastAccount;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var msg = await ctx.Reply(
 | 
					            var msg = await ctx.Reply(
 | 
				
			||||||
                $"Are you sure you want to unlink {account.Mention} from your system?");
 | 
					                $"Are you sure you want to unlink <@{id}> from your system?");
 | 
				
			||||||
            if (!await ctx.PromptYesNo(msg)) throw Errors.MemberUnlinkCancelled;
 | 
					            if (!await ctx.PromptYesNo(msg)) throw Errors.MemberUnlinkCancelled;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            await _data.RemoveAccount(ctx.System, account.Id);
 | 
					            await _data.RemoveAccount(ctx.System, id);
 | 
				
			||||||
            await ctx.Reply($"{Emojis.Success} Account unlinked.");
 | 
					            await ctx.Reply($"{Emojis.Success} Account unlinked.");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user