Exemplo n.º 1
0
            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);
                }
            }
Exemplo n.º 2
0
            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);
                }
            }
Exemplo n.º 3
0
            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);
                }
            }