public async Task LinkAccountAsync(string command, [Optional][Remainder] string id) { var guildUser = _dataService.GetSocketGuildUser(Context.User.Id); switch (command.ToLower()) { case "add": await AddUser(); break; case "delete": if (id == null) { await DeleteContextUser(); } else if (guildUser.Roles.Any(x => x.Id == _dataService.ModeratorRole.Id || x.Id == _dataService.AdminRole.Id) && id != null) { await DeleteTargetUser(); } else { await ReplyAsync(embed : new EmbedBuilder() .WithAuthor("You don't have the right permissions for that.") .WithColor(165, 55, 55).Build()); } break; case "get": if (id == null) { await GetLinked(); } else if (guildUser.Roles.Any(x => x.Id == _dataService.ModeratorRole.Id || x.Id == _dataService.AdminRole.Id) && id != null) { await GetTargetLinked(); } else { await ReplyAsync(embed : new EmbedBuilder() .WithAuthor("You don't have the right permissions for that.") .WithColor(165, 55, 55).Build()); } break; default: await ReplyAsync(embed : new EmbedBuilder() .WithAuthor("Unknown command") .WithDescription("See `>help link`") .WithColor(165, 55, 55).Build()); break; } async Task DeleteTargetUser() { UserSteamID returnedUser = null; var steamIdRegex = new Regex(@"(STEAM_[\d]:[\d]:\d+)"); var target = id; if (steamIdRegex.IsMatch(id)) { returnedUser = DatabaseUtil.GetUserSteamID(steamId: steamIdRegex.Match(id).Value); } else { var targetUser = _dataService.GetSocketGuildUser(id); returnedUser = DatabaseUtil.GetUserSteamID(targetUser.Id); target = targetUser.ToString(); } if (returnedUser == null) { await DisplayNoLinkFound(target); return; } var deleteResult = DatabaseUtil.DeleteUserSteamID(returnedUser); if (deleteResult) { await ReplyAsync(embed : new EmbedBuilder() .WithAuthor("Link deleted!") .WithDescription( $"`{_dataService.GetSocketGuildUser(returnedUser.UserId)}` is **no longer** linked to `{returnedUser.SteamID}`") .WithColor(165, 55, 55).Build()); await ReplyAsync(); } else { await ReplyAsync(embed : new EmbedBuilder() .WithAuthor("Failed to delete link") .WithColor(165, 55, 55).Build()); } } async Task DeleteContextUser() { var returnedUser = DatabaseUtil.GetUserSteamID(Context.User.Id); if (returnedUser == null) { await DisplayNoLinkFound(Context.User.ToString()); return; } var deleteResult = DatabaseUtil.DeleteUserSteamID(returnedUser); if (deleteResult) { await ReplyAsync(embed : new EmbedBuilder() .WithAuthor("Link deleted!") .WithDescription($"`{Context.User}` is **no longer** linked to `{returnedUser.SteamID}`") .WithColor(165, 55, 55).Build()); } else { await ReplyAsync(embed : new EmbedBuilder() .WithAuthor("Failed to delete link") .WithColor(165, 55, 55).Build()); } } async Task AddUser() { if (id == null) { await ReplyAsync(embed : new EmbedBuilder() .WithAuthor("ID cannot be empty") .WithColor(165, 55, 55).Build()); return; } var steamIdRegex = new Regex(@"(STEAM_[\d]:[\d]:\d+)"); if (!steamIdRegex.IsMatch(id)) { await ReplyAsync(embed : new EmbedBuilder() .WithAuthor("Invalid SteamID format") .WithDescription("Example: `STEAM_1:1:11383969`") .WithColor(165, 55, 55).Build()); return; } var parsedID = steamIdRegex.Match(id).Value; var result = DatabaseUtil.AddUserSteamID(new UserSteamID { UserId = Context.User.Id, SteamID = parsedID }); if (result) { await ReplyAsync(embed : new EmbedBuilder() .WithAuthor("Link added!") .WithDescription($"`{Context.User}` is linked to `{parsedID}`") .WithColor(55, 165, 55).Build()); } else { await ReplyAsync(embed : new EmbedBuilder() .WithAuthor("Unable to add link") .WithColor(165, 55, 55).Build()); } } async Task GetLinked() { var userSteam = DatabaseUtil.GetUserSteamID(Context.User.Id); if (userSteam == null) { await DisplayNoLinkFound(Context.User.ToString()); return; } await ReplyAsync(embed : new EmbedBuilder() .WithAuthor("Link found") .WithDescription($"`{Context.User}` is linked to `{userSteam.SteamID}`") .WithColor(55, 55, 165).Build()); } async Task GetTargetLinked() { UserSteamID returnedUser = null; var steamIdRegex = new Regex(@"(STEAM_[\d]:[\d]:\d+)"); var target = id; if (steamIdRegex.IsMatch(id)) { returnedUser = DatabaseUtil.GetUserSteamID(steamId: steamIdRegex.Match(id).Value); } else { var targetUser = _dataService.GetSocketGuildUser(id); returnedUser = DatabaseUtil.GetUserSteamID(targetUser.Id); target = targetUser.ToString(); } if (returnedUser == null) { await DisplayNoLinkFound(target); return; } await ReplyAsync(embed : new EmbedBuilder() .WithAuthor("Link found") .WithDescription( $"`{_dataService.GetSocketGuildUser(returnedUser.UserId)}` is linked to `{returnedUser.SteamID}`") .WithColor(55, 55, 165).Build()); } async Task DisplayNoLinkFound(string target) { await ReplyAsync(embed : new EmbedBuilder() .WithAuthor($"No link found for {target}!") .WithColor(165, 55, 55).Build()); } }