public async Task DeleteBanAsync(long banID) { var getBan = await _bans.GetBanAsync(this.Context.Guild, banID); if (!getBan.IsSuccess) { await _feedback.SendErrorAsync(this.Context, getBan.ErrorReason); return; } var ban = getBan.Entity; var deleteBan = await _bans.DeleteBanAsync(ban); if (!deleteBan.IsSuccess) { await _feedback.SendErrorAsync(this.Context, deleteBan.ErrorReason); return; } await this.Context.Guild.RemoveBanAsync((ulong)ban.User.DiscordID); await _feedback.SendConfirmationAsync(this.Context, "Ban rescinded."); var rescinder = await this.Context.Guild.GetUserAsync(this.Context.User.Id); await _logging.NotifyUserUnbanned(ban, rescinder); }
public async Task <RuntimeResult> DeleteBanAsync(long banID) { var getBan = await _bans.GetBanAsync(this.Context.Guild, banID); if (!getBan.IsSuccess) { return(getBan.ToRuntimeResult()); } var ban = getBan.Entity; // This has to be done before the warning is actually deleted - otherwise, the lazy loader is removed and // navigation properties can't be evaluated var rescinder = await this.Context.Guild.GetUserAsync(this.Context.User.Id); var notifyResult = await _logging.NotifyUserUnbannedAsync(ban, rescinder); if (!notifyResult.IsSuccess) { return(notifyResult.ToRuntimeResult()); } var deleteBan = await _bans.DeleteBanAsync(ban); if (!deleteBan.IsSuccess) { return(deleteBan.ToRuntimeResult()); } await this.Context.Guild.RemoveBanAsync((ulong)ban.User.DiscordID); return(RuntimeCommandResult.FromSuccess("Ban rescinded.")); }
public async Task <IResult> DeleteBanAsync(long banID) { var getBan = await _bans.GetBanAsync(_context.GuildID.Value, banID); if (!getBan.IsSuccess) { return(getBan); } var ban = getBan.Entity; // This has to be done before the warning is actually deleted - otherwise, the lazy loader is removed and // navigation properties can't be evaluated var notifyResult = await _logging.NotifyUserUnbannedAsync(ban, _context.User.ID); if (!notifyResult.IsSuccess) { return(notifyResult); } var deleteBan = await _bans.DeleteBanAsync(ban); if (!deleteBan.IsSuccess) { return(deleteBan); } return(await _guildAPI.RemoveGuildBanAsync(_context.GuildID.Value, ban.User.DiscordID)); }
private async Task <OperationResult> RescindBanIfExpiredAsync ( ChannelLoggingService loggingService, BanService bans, SocketGuild guild, UserBan ban, CancellationToken ct ) { if (ct.IsCancellationRequested) { return(OperationResult.FromError("Operation was cancelled.")); } if (!(ban.ExpiresOn <= DateTime.UtcNow)) { // No rescinding is needed, so we'll just bail out return(OperationResult.FromSuccess()); } var rescinder = guild.GetUser(this.Client.CurrentUser.Id); var notifyResult = await loggingService.NotifyUserUnbannedAsync(ban, rescinder); if (!notifyResult.IsSuccess) { return(OperationResult.FromError(notifyResult)); } var deleteResult = await bans.DeleteBanAsync(ban, ct); if (!deleteResult.IsSuccess) { return(OperationResult.FromError(deleteResult)); } try { await guild.RemoveBanAsync((ulong)ban.User.DiscordID); } catch (HttpException hex) when(hex.HttpCode == HttpStatusCode.NotFound) { // Already unbanned return(OperationResult.FromSuccess()); } catch (Exception ex) { return(OperationResult.FromError(ex)); } return(OperationResult.FromSuccess()); }
/// <inheritdoc/> protected override async Task OnTickAsync(CancellationToken ct) { if (this.Client.ConnectionState != ConnectionState.Connected) { // Give the client some time to start up await Task.Delay(TimeSpan.FromSeconds(5), ct); return; } var now = DateTime.UtcNow; foreach (var guild in this.Client.Guilds) { var warnings = _warnings.GetWarnings(guild).Where(w => w.IsTemporary); foreach (var warning in warnings) { if (warning.ExpiresOn <= now) { await _warnings.DeleteWarningAsync(warning); } } if (!guild.GetUser(this.Client.CurrentUser.Id).GuildPermissions.BanMembers) { // No point in trying to rescind bans if the bot doesn't have ban perms continue; } var bans = _bans.GetBans(guild).Where(b => b.IsTemporary); foreach (var ban in bans) { if (ban.ExpiresOn <= now) { await _bans.DeleteBanAsync(ban); await guild.RemoveBanAsync((ulong)ban.User.DiscordID); } } } await Task.Delay(TimeSpan.FromHours(1), ct); }