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 updates..."); msg = await ctx.RespondAsync("Saving state...").ConfigureAwait(false); await StatsStorage.SaveAsync(true).ConfigureAwait(false); msg = await msg.UpdateOrCreateMessageAsync(ctx.Channel, "Checking for updates...").ConfigureAwait(false); using (var git = new Process { StartInfo = new ProcessStartInfo("git", "pull") { CreateNoWindow = true, UseShellExecute = false, RedirectStandardOutput = true, StandardOutputEncoding = Encoding.UTF8, }, }) { git.Start(); var stdout = await git.StandardOutput.ReadToEndAsync().ConfigureAwait(false); git.WaitForExit(); if (!string.IsNullOrEmpty(stdout)) { await ctx.SendAutosplitMessageAsync("```" + stdout + "```").ConfigureAwait(false); if (stdout.Contains("Already up to date", StringComparison.InvariantCultureIgnoreCase)) { return; } } } msg = await ctx.RespondAsync("Restarting...").ConfigureAwait(false); Restart(ctx.Channel.Id); } catch (Exception e) { msg = 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); } }
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); } }