public virtual async Task PlaytestFifteenMinuteTask(RconService rconService,
                                                            SrcdsLogService srcdsLogService)
        {
            if (_dataService.RSettings.ProgramSettings.Debug)
            {
                _ = _log.LogMessage("Base class PlaytestFifteenMinuteTask", false, color: LOG_COLOR);
            }

            _dataService.SetIncludePlayerCount(true);

            //Ensure server is awake and RCON connection is established. Run other things while waking server
            _ = rconService.WakeRconServer(ServerLocation);

            //Get rid of the old log file if one exists. Just scrap it.
            srcdsLogService.RemoveFeedbackFile(server);

            //Make a feedback file
            var logResult = srcdsLogService.CreateFeedbackFile(server, GetFeedbackFileName());

            if (logResult)
            {
                await _log.LogMessage($"Log file created: {GetFeedbackFileName()}");

                var fbf = srcdsLogService.GetFeedbackFile(server);
                await fbf.LogFeedback($"Pre-test feedback started at: {DateTime.Now} CT");
            }
        }
Beispiel #2
0
        /// <summary>
        ///     Releases a server reservation
        /// </summary>
        /// <param name="userId">userId of server to release</param>
        /// <param name="reason">Reason for release</param>
        /// <returns>A prebuilt embed message containing the reason</returns>
        public Embed ReleaseServer(ulong userId, string reason, SocketTextChannel channel)
        {
            var reservation = DatabaseUtil.GetServerReservation(userId);
            var userName    = "" + reservation.UserId;

            try
            {
                userName = _dataService.Guild.GetUser(reservation.UserId).ToString();
            }
            catch
            {
                //Can't get user, they likely left.
            }

            var embed = BuildServerReleaseEmbed(userName, reservation, reason);

            //Find the job that is a reservation, and has the user ID
            var job = JobManager.AllSchedules.SingleOrDefault(x =>
                                                              x.Name.Contains($"{userId}") && x.Name.StartsWith("[TSRelease_"));

            //Remove it if not null
            if (job != null)
            {
                JobManager.RemoveJob(job.Name);
            }

            var hasServer = DatabaseUtil.GetTestServer(reservation.ServerId);

            //Get their feedback file and send it, then delete it.
            var fbf = _srcdsLogService.GetFeedbackFile(hasServer);

            if (fbf != null)
            {
                var file = fbf.FileName;
                if (File.Exists(file))
                {
                    channel.SendFileAsync(file, "");

                    _ = Task.Run(async() =>
                    {
                        //Give some time to send the file before deletion.
                        await Task.Delay(5000);
                        try
                        {
                            File.Delete(file);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e);
                        }
                    });
                }
            }

            _srcdsLogService.RemoveFeedbackFile(hasServer);

            //If there is feedback running on this server, remove it. Also delete the file.
            DatabaseUtil.RemoveServerReservation(userId);
            return(embed);
        }
        public virtual async Task PlaytestCommandPost(bool replyInContext, SrcdsLogService srcdsLogService,
                                                      RconService rconService)
        {
            if (_dataService.RSettings.ProgramSettings.Debug)
            {
                _ = _log.LogMessage("Base class PlaytestCommandPost", false, color: LOG_COLOR);
            }

            PlaytestCommandRunning = true;

            //Force the next alert to true
            _dataService.SetStartAlert(true);

            await _log.LogMessage("Running Playtest Post Tasks!", color : LOG_COLOR);

            //No context to send these messages to - default them
            if (!replyInContext)
            {
                await _dataService.CSGOTestingChannel.SendMessageAsync(embed : new EmbedBuilder()
                                                                       .WithAuthor($"Post playtest of {PlaytestCommandInfo.Title}")
                                                                       .WithColor(new Color(55, 55, 165))
                                                                       .WithDescription($"\nOn **{PlaytestCommandInfo.ServerAddress}**" +
                                                                                        $"\nWorkshop ID **{PlaytestCommandInfo.WorkshopId}**" +
                                                                                        $"\nDemo Name **{PlaytestCommandInfo.DemoName}**").Build());
            }

            var fbf = srcdsLogService.GetFeedbackFile(server);

            if (fbf != null && File.Exists(fbf.FileName))
            {
                Directory.CreateDirectory(
                    $"{_dataService.RSettings.ProgramSettings.PlaytestDemoPath}\\{PlaytestCommandInfo.StartDateTime:yyyy}" +
                    $"\\{PlaytestCommandInfo.StartDateTime:MM} - {PlaytestCommandInfo.StartDateTime:MMMM}" +
                    $"\\{PlaytestCommandInfo.DemoName}");

                File.Copy(fbf.FileName,
                          $"{_dataService.RSettings.ProgramSettings.PlaytestDemoPath}\\{PlaytestCommandInfo.StartDateTime:yyyy}" +
                          $"\\{PlaytestCommandInfo.StartDateTime:MM} - {PlaytestCommandInfo.StartDateTime:MMMM}" +
                          $"\\{PlaytestCommandInfo.DemoName}\\{PlaytestCommandInfo.DemoName}.txt"
                          , true);

                await AnnouncmentChannel.SendFileAsync(fbf.FileName, "");
            }

            _ = Task.Run(async() =>
            {
                await Task.Delay(35000);
                var patreonUsers = _dataService.PatreonsRole.Members.ToArray();
                GeneralUtil.Shuffle(patreonUsers);
                var thanks = "";
                foreach (var patreonsRoleMember in patreonUsers)
                {
                    thanks += $"{patreonsRoleMember.Username}, ";
                }

                await rconService.RconCommand(PlaytestCommandInfo.ServerAddress,
                                              $"say Thanks to these supporters: {thanks.TrimEnd(',', ' ')}");
                await Task.Delay(2000);
                await rconService.RconCommand(PlaytestCommandInfo.ServerAddress,
                                              @"Say Become a supporter at www.patreon.com/tophattwaffle");
            });

            //Stop getting more feedback
            srcdsLogService.RemoveFeedbackFile(server);
        }