Fix unlinking deleted accounts
This commit is contained in:
parent
3ba6a115f0
commit
4311cb3ad1
@ -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.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user