public async Task StartScriptAsync()
        {
            IUserMessage response;
            EmbedBuilder initialBuilder;


            initialBuilder = EmbedHelper.GetDefaultEmbed(Context);
            initialBuilder.AddField(":robot: Starting idle script", "Please wait...");

            response = await ReplyAsync("", embed : initialBuilder.Build());

            try {
                EmbedBuilder embed;
                Stopwatch    watch;


                watch = new Stopwatch();
                watch.Start();

                embed = EmbedHelper.GetDefaultEmbed(Context);

                _screenshotProvider.Start();

                watch.Stop();

                embed.AddField(":white_check_mark: Success", "The idle script has been started.");
                embed.AddField(":alarm_clock: Time taken to complete action", watch.Elapsed.ToString("mm'm 'ss's 'fff'ms'"));

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });
            } catch (Exception e) {
                await response.ModifyAsync(msg => msg = ErrorHandler.GetDefaultErrorMessageEmbed(e, msg, Context.Message));
            }
        }
示例#2
0
        public async Task GetMemoryInformationAsync()
        {
            IUserMessage response;
            EmbedBuilder initialBuilder;


            initialBuilder = EmbedHelper.GetDefaultEmbed(Context);
            initialBuilder.AddField(":mag: Gathering data", "Please wait...");

            response = await ReplyAsync("", embed : initialBuilder.Build());

            try {
                EmbedBuilder embed;
                Dictionary <string, string> ram;


                embed = EmbedHelper.GetDefaultEmbed(Context);
                ram   = MemoryProvider.GetRamUsage();

                foreach (var kvp in ram)
                {
                    embed.AddField(kvp.Key, kvp.Value);
                }

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });
            } catch (Exception e) {
                await response.ModifyAsync(msg => msg = ErrorHandler.GetDefaultErrorMessageEmbed(e, msg, Context.Message));
            }
        }
        public async Task GetVersionAsync()
        {
            IUserMessage response;
            EmbedBuilder initialBuilder;


            initialBuilder = EmbedHelper.GetDefaultEmbed(Context);
            initialBuilder.AddField(":robot: Starting bot script", "Please wait...");

            response = await ReplyAsync("", embed : initialBuilder.Build());

            try {
                EmbedBuilder    embed;
                Assembly        assembly;
                FileVersionInfo fileVersionInfo;
                string          version;


                embed           = EmbedHelper.GetDefaultEmbed(Context);
                assembly        = Assembly.GetExecutingAssembly();
                fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location);
                version         = fileVersionInfo.FileVersion;

                embed.AddField(":cheese: Session Bot Version", version);

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });
            } catch (Exception e) {
                await response.ModifyAsync(msg => msg = ErrorHandler.GetDefaultErrorMessageEmbed(e, msg, Context.Message));
            }
        }
示例#4
0
        public async Task StartGameAsync()
        {
            IUserMessage response;
            EmbedBuilder initialBuilder;


            initialBuilder = EmbedHelper.GetDefaultEmbed(Context);
            initialBuilder.AddField(":video_game: Starting game", "Please wait...");

            response = await ReplyAsync("", embed : initialBuilder.Build());

            try {
                EmbedBuilder    embed;
                ProcessProvider provider;


                provider = new ProcessProvider();
                embed    = EmbedHelper.GetDefaultEmbed(Context);

                StartGTAProcess();

                embed.AddField("Game started", "The GTA 5 game has been started successfully.");

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });
            } catch (Exception e) {
                await response.ModifyAsync(msg => msg = ErrorHandler.GetDefaultErrorMessageEmbed(e, msg, Context.Message));
            }
        }
示例#5
0
        public async Task ShutdownAsync()
        {
            IUserMessage response;
            EmbedBuilder initialBuilder;


            initialBuilder = EmbedHelper.GetDefaultEmbed(Context);
            initialBuilder.AddField(":video_game: Exiting game", "Please wait...");

            response = await ReplyAsync("", embed : initialBuilder.Build());

            try {
                EmbedBuilder    embed;
                ProcessProvider provider;


                provider = new ProcessProvider();
                embed    = EmbedHelper.GetDefaultEmbed(Context);
                embed.AddField(":robot: Stopping bot process", "Please wait...");

                _screenshotProvider.Stop();

                embed.AddField(":white_check_mark: Success", "The bot process has been stopped.");

                // Forcibly kill the GTA process.
                KillGTAProcess();

                embed.AddField("Process Killed", "The GTA 5 process is no longer running.");

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });
            } catch (Exception e) {
                await response.ModifyAsync(msg => msg = ErrorHandler.GetDefaultErrorMessageEmbed(e, msg, Context.Message));
            }
        }
        public async Task SwitchToDesktopAsync()
        {
            IUserMessage response;
            EmbedBuilder initialBuilder;


            initialBuilder = EmbedHelper.GetDefaultEmbed(Context);
            initialBuilder.AddField(":desktop: Switching to desktop", "Please wait...");

            response = await ReplyAsync("", embed : initialBuilder.Build());

            try {
                ScreenCaptureProvider provider;
                IntPtr       windowHandle;
                EmbedBuilder embed;
                const int    WM_COMMAND = 0x111;
                const int    MIN_ALL    = 419;


                embed        = EmbedHelper.GetDefaultEmbed(Context);
                provider     = new ScreenCaptureProvider(_config);
                windowHandle = User32.GetDesktopWindow();

                IntPtr lHwnd = User32.FindWindow("Shell_TrayWnd", null);
                User32.SendMessage(lHwnd, WM_COMMAND, (IntPtr)MIN_ALL, IntPtr.Zero);

                User32.SetForegroundWindow(windowHandle);

                embed.AddField(":white_check_mark: Success", "The desktop should now be in focus.");

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });
            } catch (Exception e) {
                await response.ModifyAsync(msg => msg = ErrorHandler.GetDefaultErrorMessageEmbed(e, msg, Context.Message));
            }
        }
示例#7
0
        public async Task GetNetworkStatsAsync()
        {
            IUserMessage response;
            EmbedBuilder initialBuilder;


            initialBuilder = EmbedHelper.GetDefaultEmbed(Context);
            initialBuilder.AddField(":computer: Gathering Network Statistics", "Please wait...");

            response = await ReplyAsync("", embed : initialBuilder.Build());

            try {
                EmbedBuilder       embed;
                IPGlobalProperties properties;
                UdpStatistics      udpStat = null;


                embed      = EmbedHelper.GetDefaultEmbed(Context);
                properties = IPGlobalProperties.GetIPGlobalProperties();
                udpStat    = properties.GetUdpIPv4Statistics();


                embed.AddField("Datagrams Received", udpStat.DatagramsReceived.ToString("#,##0"), inline: true);
                embed.AddField("Datagrams Sent", udpStat.DatagramsSent.ToString("#,##0"), inline: true);

                embed.AddField("Datagrams Discarded", udpStat.IncomingDatagramsDiscarded.ToString("#,##0"));
                embed.AddField("Datagrams With Errors", udpStat.IncomingDatagramsWithErrors.ToString("#,##0"));
                embed.AddField("UDP Listeners", udpStat.UdpListeners.ToString("#,##0"));

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });
            } catch (Exception e) {
                await response.ModifyAsync(msg => msg = ErrorHandler.GetDefaultErrorMessageEmbed(e, msg, Context.Message));
            }
        }
        public async Task FindNewSessionAsync()
        {
            IUserMessage response;
            EmbedBuilder initialBuilder;


            initialBuilder = EmbedHelper.GetDefaultEmbed(Context);
            initialBuilder.AddField(":mag: Finding new session", "Please wait...");

            response = await ReplyAsync("", embed : initialBuilder.Build());

            try {
                EmbedBuilder    embed;
                IntPtr          windowHandle;
                ProcessProvider provider;


                embed    = EmbedHelper.GetDefaultEmbed(Context);
                provider = new ProcessProvider();

                embed.AddField(":robot: Stopping bot process", "Please wait...");

                _screenshotProvider.Stop();

                embed.AddField(":white_check_mark: Success", "The bot process has been stopped.");
                embed.AddField(":mag: Finding new session", "Please wait...");

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });

                windowHandle = provider.GetGrandTheftAutoProcessPointer();

                User32.GetWindowThreadProcessId(windowHandle, out uint processID);

                if (processID != 0)
                {
                    Process process;


                    process = Process.GetProcessById((int)processID);

                    process.Suspend();
                    Thread.Sleep(8000);
                    process.Resume();
                }


                embed.AddField(":white_check_mark: Success", "A new session has been found.");
                embed.AddField(":robot: Starting bot script", "Please wait");

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });

                _screenshotProvider.Start();

                embed.AddField(":white_check_mark: Success", "Bot script started ");

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });
            } catch (Exception e) {
                await response.ModifyAsync(msg => msg = ErrorHandler.GetDefaultErrorMessageEmbed(e, msg, Context.Message));
            }
        }
示例#9
0
        public async Task RestartGameAsync()
        {
            IUserMessage response;
            EmbedBuilder initialBuilder;


            initialBuilder = EmbedHelper.GetDefaultEmbed(Context);
            initialBuilder.AddField(":video_game: Restarting game", "Please wait...");

            response = await ReplyAsync("", embed : initialBuilder.Build());

            try {
                EmbedBuilder embed;


                embed = EmbedHelper.GetDefaultEmbed(Context);
                embed.AddField(":robot: Stopping idle script", "Please wait...");

                _screenshotProvider.Stop();

                embed.AddField(":white_check_mark: Success", "The bot process has been stopped.");
                embed.AddField("Stopping GTA", "Please wait...");

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });

                KillGTAProcess();

                embed = EmbedHelper.GetDefaultEmbed(Context);
                embed.AddField("Starting GTA", "Please wait...");

                if (_config.IsSteamGame)
                {
                    // This is really nasty but is the best we can do without any information as to whether the game
                    // synchronization in Steam has been completed. Wait for 20 seconds until Steam is able to sync
                    // the game data and hope that the task has completed in time.
                    Thread.Sleep(20000);
                }

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });

                StartGTAProcess();

                embed = EmbedHelper.GetDefaultEmbed(Context);
                embed.AddField("Game started", "The GTA 5 game has been restarted successfully.");

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });
            } catch (Exception e) {
                await response.ModifyAsync(msg => msg = ErrorHandler.GetDefaultErrorMessageEmbed(e, msg, Context.Message));
            }
        }
示例#10
0
        public async Task RestartSystem()
        {
            IUserMessage response;
            EmbedBuilder initialBuilder;


            initialBuilder = EmbedHelper.GetDefaultEmbed(Context);
            initialBuilder.AddField(":zzz: Preparing to restart", "Please wait...");

            response = await ReplyAsync("", embed : initialBuilder.Build());

            using (var proc = Process.Start("shutdown.exe", "/r /t 0")) {
                // Nothing to do here as the process will be disposed of.
            }
        }
示例#11
0
        public async Task GetCpuInformationAsync()
        {
            IUserMessage response;
            EmbedBuilder initialBuilder;


            initialBuilder = EmbedHelper.GetDefaultEmbed(Context);
            initialBuilder.AddField(":mag: Gathering data", "Please wait...");

            response = await ReplyAsync("", embed : initialBuilder.Build());

            try {
                EmbedBuilder embed;
                string       cores;
                string       uptime;
                string       processor;
                Dictionary <string, string> temps;
                Dictionary <string, string> usage;


                embed     = EmbedHelper.GetDefaultEmbed(Context);
                cores     = CpuProvider.GetCoreCount();
                uptime    = CpuProvider.GetUpTime();
                processor = CpuProvider.GetProcessorInformation();
                temps     = CpuProvider.GetCpuTemperatures();
                usage     = CpuProvider.GetCpuLoad();

                embed.AddField("Processor", processor);
                embed.AddField("Processor Cores", cores);
                embed.AddField("System Up Time", uptime);

                foreach (var kvp in usage)
                {
                    embed.AddField(kvp.Key, kvp.Value);
                }

                foreach (var kvp in temps)
                {
                    embed.AddField(kvp.Key, kvp.Value);
                }

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });
            } catch (Exception e) {
                await response.ModifyAsync(msg => msg = ErrorHandler.GetDefaultErrorMessageEmbed(e, msg, Context.Message));
            }
        }
示例#12
0
        public async Task EnterGTAOnlineAsync()
        {
            IUserMessage    response;
            EmbedBuilder    initialBuilder;
            ProcessProvider provider;


            initialBuilder = EmbedHelper.GetDefaultEmbed(Context);
            initialBuilder.AddField(":keyboard: Pressing buttons", "Please wait...");
            provider = new ProcessProvider();

            response = await ReplyAsync("", embed : initialBuilder.Build());

            Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);

            try {
                EmbedBuilder     embed;
                string           path;
                Process          process;
                ProcessStartInfo startInfo;
                IntPtr           windowHandle;


                path  = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources");
                embed = EmbedHelper.GetDefaultEmbed(Context);

                startInfo          = new ProcessStartInfo();
                startInfo.FileName = $"{path}\\enterOnline.exe";

                process           = new Process();
                process.StartInfo = startInfo;

                windowHandle = provider.GetGrandTheftAutoProcessPointer();

                User32.SetForegroundWindow(windowHandle);

                process.Start();

                embed.AddField("Buttons Pressed", "IDK what to put here, things are happening I guess?");

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });
            } catch (Exception e) {
                await response.ModifyAsync(msg => msg = ErrorHandler.GetDefaultErrorMessageEmbed(e, msg, Context.Message));
            }
        }
示例#13
0
        public async Task GetLatencyAsync()
        {
            IUserMessage response;
            EmbedBuilder initialBuilder;


            initialBuilder = EmbedHelper.GetDefaultEmbed(Context);
            initialBuilder.AddField(":earth_asia: Calculating latency", "Please wait...");

            response = await ReplyAsync("", embed : initialBuilder.Build());

            try {
                EmbedBuilder embed;


                embed = EmbedHelper.GetDefaultEmbed(Context);
                embed.AddField(":earth_asia: Latency", $"{Context.Client.Latency}ms");

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });
            } catch (Exception e) {
                await response.ModifyAsync(msg => msg = ErrorHandler.GetDefaultErrorMessageEmbed(e, msg, Context.Message));
            }
        }
示例#14
0
        public async Task BringWindowToForegroundAsync()
        {
            IUserMessage response;
            EmbedBuilder initialBuilder;


            initialBuilder = EmbedHelper.GetDefaultEmbed(Context);
            initialBuilder.AddField("Bringing GTA Process to foreground", "Please wait...");

            response = await ReplyAsync("", embed : initialBuilder.Build());

            try {
                IntPtr          windowHandle;
                ProcessProvider provider;
                EmbedBuilder    embed;
                Stopwatch       watch;


                watch = new Stopwatch();
                watch.Start();

                embed    = EmbedHelper.GetDefaultEmbed(Context);
                provider = new ProcessProvider();

                windowHandle = provider.GetGrandTheftAutoProcessPointer();

                User32.SetForegroundWindow(windowHandle);
                watch.Stop();

                embed.AddField(":white_check_mark: Success", "GTA Process is in foreground.");
                embed.AddField(":alarm_clock: Time taken to complete action", watch.Elapsed.ToString("mm'm 'ss's 'fff'ms'"));

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });
            } catch (Exception e) {
                await response.ModifyAsync(msg => msg = ErrorHandler.GetDefaultErrorMessageEmbed(e, msg, Context.Message));
            }
        }
示例#15
0
        public async Task PressEnterAsync()
        {
            IUserMessage response;
            EmbedBuilder initialBuilder;


            initialBuilder = EmbedHelper.GetDefaultEmbed(Context);
            initialBuilder.AddField(":keyboard: Pressing buttons", "Please wait...");

            response = await ReplyAsync("", embed : initialBuilder.Build());

            Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);

            try {
                EmbedBuilder     embed;
                string           path;
                Process          process;
                ProcessStartInfo startInfo;


                path  = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources");
                embed = EmbedHelper.GetDefaultEmbed(Context);

                startInfo          = new ProcessStartInfo();
                startInfo.FileName = $"{path}\\enter.exe";

                process           = new Process();
                process.StartInfo = startInfo;
                process.Start();

                embed.AddField("Buttons Pressed", "IDK what to put here, I literally just pressed 1 key.");

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });
            } catch (Exception e) {
                await response.ModifyAsync(msg => msg = ErrorHandler.GetDefaultErrorMessageEmbed(e, msg, Context.Message));
            }
        }
示例#16
0
        public async Task KillErrorReporterAsync()
        {
            IUserMessage response;
            EmbedBuilder initialBuilder;


            initialBuilder = EmbedHelper.GetDefaultEmbed(Context);
            initialBuilder.AddField(":gun: Killing Error Reporter", "Please wait...");

            response = await ReplyAsync("", embed : initialBuilder.Build());

            try {
                Process         errorReporter;
                ProcessProvider provider;
                EmbedBuilder    embed;


                embed         = EmbedHelper.GetDefaultEmbed(Context);
                provider      = new ProcessProvider();
                errorReporter = provider.GetWindowsErrorReporterProcess();

                if (errorReporter != null)
                {
                    errorReporter.Kill();
                }
                else
                {
                    EventLogLogger.LogWarning("Attempted to kill the Windows error reporter process but the process could not be found.");
                }

                embed.AddField(":white_check_mark: Success", "The Windows error reporter process has been killed.");

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });
            } catch (Exception e) {
                await response.ModifyAsync(msg => msg = ErrorHandler.GetDefaultErrorMessageEmbed(e, msg, Context.Message));
            }
        }
示例#17
0
        public async Task GrabPlayerList()
        {
            IUserMessage response;
            EmbedBuilder initialBuilder;


            initialBuilder = EmbedHelper.GetDefaultEmbed(Context);
            initialBuilder.AddField(":camera_with_flash: Capturing Player List", "Please wait...");

            response = await ReplyAsync("", embed : initialBuilder.Build());

            try {
                Byte[] imageBytes;
                ScreenCaptureProvider provider;
                EmbedBuilder          embed;
                ISupportedImageFormat format;


                embed    = EmbedHelper.GetDefaultEmbed(Context);
                provider = new ScreenCaptureProvider(_config);

                format = new JpegFormat {
                    Quality = 50
                };
                imageBytes = provider.MergePlayerList();

                using (var stream = new MemoryStream(imageBytes)) {
                    using (MemoryStream outStream = new MemoryStream()) {
                        // Initialize the ImageFactory using the overload to preserve EXIF metadata.
                        using (ImageFactory imageFactory = new ImageFactory(preserveExifData: true)) {
                            imageFactory.Load(stream)
                            .Format(format)
                            .Save(outStream);
                        }
                        TimeSpan span;
                        string   dateString;


                        span       = (DateTime.Now - File.GetLastWriteTimeUtc(Common.PlayerListFirstScreenshotPath));
                        dateString = "";

                        if (span.Days > 0)
                        {
                            dateString += $"{span.Days} days, ";
                        }

                        if (span.Hours > 0)
                        {
                            dateString += $"{span.Hours} hours, ";
                        }

                        if (span.Minutes > 0)
                        {
                            dateString += $"{span.Minutes} minutes, ";
                        }

                        dateString += $"{span.Seconds} seconds";
                        embed.AddField(":pencil: Current Player List", $"List age: {dateString} old");

                        await Context.Channel.SendFileAsync(outStream, "players.jpg");
                    }
                }

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });
            } catch (Exception e) {
                await response.ModifyAsync(msg => msg = ErrorHandler.GetDefaultErrorMessageEmbed(e, msg, Context.Message));
            }
        }
示例#18
0
        public async Task GetScreenStatusAsync()
        {
            IUserMessage response;
            EmbedBuilder initialBuilder;


            initialBuilder = EmbedHelper.GetDefaultEmbed(Context);
            initialBuilder.AddField(":camera_with_flash: Uploading screenshot", "Please wait...");

            response = await ReplyAsync("", embed : initialBuilder.Build());

            try {
                ScreenCaptureProvider provider;
                IntPtr                windowHandle;
                EmbedBuilder          embed;
                Stopwatch             watch;
                Stopwatch             uploadWatch;
                ISupportedImageFormat format;
                TextLayer             watermark;
                Byte[]                imageBytes;


                watch       = new Stopwatch();
                uploadWatch = new Stopwatch();

                watch.Start();

                embed    = EmbedHelper.GetDefaultEmbed(Context);
                provider = new ScreenCaptureProvider(_config);

                // Get the desktop window rather than the GTA window, if there is an application
                // blocking the GTA window then taking a screenshot of the GTA window won't really
                // show any problems. Getting the desktop window will grab the currently active desktop.
                windowHandle = User32.GetDesktopWindow();

                format = new JpegFormat {
                    Quality = 50
                };
                imageBytes = provider.CaptureWindow(windowHandle);

                watermark = BuildWatermark(windowHandle);

                using (var stream = new MemoryStream(imageBytes)) {
                    using (MemoryStream outStream = new MemoryStream()) {
                        // Initialize the ImageFactory using the overload to preserve EXIF metadata.
                        using (ImageFactory imageFactory = new ImageFactory(preserveExifData: true)) {
                            imageFactory.Load(stream)
                            .Format(format)
                            .Watermark(watermark)
                            .Save(outStream);
                        }

                        watch.Stop();

                        embed.AddField(":camera_with_flash: Success", "Current status of the host machine is shown below.");
                        embed.AddField(":alarm_clock: Action time", watch.Elapsed.ToShortForm(), inline: true);

                        uploadWatch.Start();

                        await Context.Channel.SendFileAsync(outStream, "window.jpg");
                    }
                }

                uploadWatch.Stop();
                embed.AddField(":alarm_clock: Upload time", uploadWatch.Elapsed.ToShortForm(), inline: true);

                await response.ModifyAsync(msg => { msg.Embed = embed.Build(); msg.Content = ""; });
            } catch (Exception e) {
                await response.ModifyAsync(msg => msg = ErrorHandler.GetDefaultErrorMessageEmbed(e, msg, Context.Message));
            }
        }