public async Task Restart(CommandContext ctx) { if (await LockObj.WaitAsync(0).ConfigureAwait(false)) { DiscordMessage?msg = null; try { msg = await ctx.RespondAsync("Saving state...").ConfigureAwait(false); await StatsStorage.SaveAsync(true).ConfigureAwait(false); msg = await msg.UpdateOrCreateMessageAsync(ctx.Channel, "Restarting...").ConfigureAwait(false); Restart(ctx.Channel.Id, "Restarted due to command request"); } catch (Exception e) { await msg.UpdateOrCreateMessageAsync(ctx.Channel, "Restarting failed: " + e.Message).ConfigureAwait(false); } finally { LockObj.Release(); } } else { await ctx.RespondAsync("Update is in progress").ConfigureAwait(false); } }
public async Task Update(CommandContext ctx) { if (await LockObj.WaitAsync(0).ConfigureAwait(false)) { DiscordMessage?msg = null; try { Config.Log.Info("Checking for available bot updates..."); msg = await msg.UpdateOrCreateMessageAsync(ctx.Channel, "Checking for bot updates...").ConfigureAwait(false); var(updated, stdout) = await UpdateAsync().ConfigureAwait(false); if (!string.IsNullOrEmpty(stdout)) { await ctx.SendAutosplitMessageAsync("```" + stdout + "```").ConfigureAwait(false); } if (!updated) { return; } msg = await ctx.RespondAsync("Saving state...").ConfigureAwait(false); await StatsStorage.SaveAsync(true).ConfigureAwait(false); msg = await msg.UpdateOrCreateMessageAsync(ctx.Channel, "Restarting...").ConfigureAwait(false); Restart(ctx.Channel.Id, "Restarted after successful bot update"); } catch (Exception e) { await msg.UpdateOrCreateMessageAsync(ctx.Channel, "Updating failed: " + e.Message).ConfigureAwait(false); } finally { LockObj.Release(); } } else { await ctx.RespondAsync("Update is already in progress").ConfigureAwait(false); } }