public virtual async Task PlaytestStartingInTask(RconService rconService, SrcdsLogService srcdsLogService, AnnouncementMessage announcementMessage) { if (_dataService.RSettings.ProgramSettings.Debug) { _ = _log.LogMessage("Base class PlaytestStartingInTask", false, color: LOG_COLOR); } //Ensure server is awake and RCON connection is established. Run other things while waking server _ = rconService.WakeRconServer(ServerLocation); //Start asking the server for player counts. _dataService.SetIncludePlayerCount(true); //Start asking for player counts JobManager.AddJob( async() => await rconService.GetPlayCountFromServer(ServerLocation), s => s.WithName("[QueryPlayerCount]").ToRunEvery(60).Seconds()); //Figure out how far away from start we are string countdownString = null; var countdown = StartDateTime.GetValueOrDefault().Subtract(DateTime.Now); if (StartDateTime.GetValueOrDefault().CompareTo(DateTime.Now) < 0) { countdownString = $"Started: {countdown:h\'H \'m\'M\'} ago!"; } else { countdownString = countdown.ToString("d'D 'h'H 'm'M'").TrimStart(' ', 'D', 'H', '0'); } await rconService.RconCommand(ServerLocation, "sv_cheats 0"); var mentionRole = TesterRole; //Handle comp or casual if (IsCasual) { await rconService.RconCommand(ServerLocation, $"sv_password {_dataService.RSettings.General.CasualPassword}"); } else { mentionRole = _dataService.CompetitiveTesterRole; } //Skip the alert. if (!_dataService.GetStartAlertStatus()) { _dataService.SetStartAlert(true); return; } var unsubInfo = Game.ToString(); if (!IsCasual) { unsubInfo = "comp"; } await TesterRole.ModifyAsync(x => { x.Mentionable = true; }); await TestingChannel.SendMessageAsync($"Heads up {mentionRole.Mention}! " + $"There is a playtest starting in {countdownString}." + $"\nType `>playtester {unsubInfo}` to manage {unsubInfo} playtest notifications.", embed : announcementMessage.CreatePlaytestEmbed(this, true, AnnouncementMessage.Id)); await TesterRole.ModifyAsync(x => { x.Mentionable = false; }); //DM users about their test foreach (var creator in Creators) { try { await creator.SendMessageAsync( $"Don't forget that you have a playtest for __**{CleanedTitle}**__ in __**{countdownString}**__"); } catch { //Could not DM creator about their test. } } }
public virtual async Task PlaytestCommandPre(bool replyInContext, SrcdsLogService srcdsLogService, RconService rconService) { if (_dataService.RSettings.ProgramSettings.Debug) { _ = _log.LogMessage("Base class PlaytestCommandPre", false, color: LOG_COLOR); } PlaytestCommandRunning = true; _dataService.SetStartAlert(false); await _log.LogMessage("Running Playtest Pre Tasks!", color : LOG_COLOR); //Store test information for later use. Will be written to the DB. var gameMode = IsCasual ? "casual" : "comp"; string mentions = null; Creators.ForEach(x => mentions += $"{x.Mention} "); PlaytestCommandInfo = new PlaytestCommandInfo { Id = 1, //Only storing 1 of these in the DB at a time, so hard code to 1. Mode = gameMode, DemoName = $"{StartDateTime:MM_dd_yyyy}" + $"_{CleanedTitle.Substring(0, CleanedTitle.IndexOf(' ')).Trim()}" + $"_{gameMode}", WorkshopId = GeneralUtil.GetWorkshopIdFromFqdn(WorkshopLink.ToString()), ServerAddress = ServerLocation, Title = CleanedTitle, ThumbNailImage = CanUseGallery ? GalleryImages[0] : _dataService.RSettings.General.FallbackTestImageUrl, ImageAlbum = ImageGallery.ToString(), CreatorMentions = mentions, StartDateTime = StartDateTime.GetValueOrDefault(), Game = Game.ToString() }; var fbf = srcdsLogService.GetFeedbackFile(server); //If somehow the session does not exist... if (fbf == null) { srcdsLogService.CreateFeedbackFile(server, GetFeedbackFileName()); fbf = srcdsLogService.GetFeedbackFile(server); } await fbf.LogFeedback($"Playtest starting feedback started at: {DateTime.Now} CT"); //Write to the DB so we can restore this info next boot DatabaseUtil.StorePlaytestCommandInfo(PlaytestCommandInfo); //Figure out where to send the no context message //No context to send these messages to - default them if (!replyInContext) { await TestingChannel.SendMessageAsync(embed : new EmbedBuilder() .WithAuthor($"Pre-start playtest of {CleanedTitle}") .WithColor(new Color(55, 55, 165)) .WithDescription($"\nOn **{PlaytestCommandInfo.ServerAddress}**" + $"\nWith config of **{PlaytestCommandInfo.Mode}**" + $"\nWorkshop ID **{PlaytestCommandInfo.WorkshopId}**").Build()); } }