Fix unlinking deleted accounts

This commit is contained in:
Ske 2020-01-25 18:08:35 +01:00
parent 3ba6a115f0
commit 4311cb3ad1
2 changed files with 20 additions and 7 deletions

View File

@ -112,6 +112,19 @@ namespace PluralKit.Bot.CommandSystem
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 async Task<PKSystem> MatchSystem()

View File

@ -36,21 +36,21 @@ namespace PluralKit.Bot.Commands
{
ctx.CheckSystem();
IUser account;
ulong id;
if (!ctx.HasNext())
account = ctx.Author;
else
account = await ctx.MatchUser() ?? throw new PKSyntaxError("You must pass an account to link with (either ID or @mention).");
id = ctx.Author.Id;
else if (!ctx.MatchUserRaw(out id))
throw new PKSyntaxError("You must pass an account to link with (either ID or @mention).");
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;
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;
await _data.RemoveAccount(ctx.System, account.Id);
await _data.RemoveAccount(ctx.System, id);
await ctx.Reply($"{Emojis.Success} Account unlinked.");
}
}