public void TestAutoTypeParser(string id) { if (SteamUtil.Parse(id).ConvertToUInt64() == 76561198224231904) { Assert.True(true, "Steam ID parsing successfull"); } else { Assert.True(false); } }
public void OnBombButtonClick(object sender, EventArgs args) { var mode = (BotMode)_dropDown.SelectedIndex; if (!string.IsNullOrWhiteSpace(_targetBox.Text)) { var matchid = string.IsNullOrWhiteSpace(_matchIDBox.Text) ? 8 : SharecodeUtil.Parse(_matchIDBox.Text); var steamId = SteamUtil.Parse(_targetBox.Text); if (steamId == null) { MessageBox.Show("Titan - Error", "Could not parse Steam ID " + _targetBox.Text + " to Steam ID. Please provide a valid " + "SteamID, SteamID3 or SteamID64.", MessageBoxType.Error); return; } var targetBanInfo = Titan.Instance.BanManager.GetBanInfoFor(steamId.ConvertToUInt64()); if (targetBanInfo != null) { if (targetBanInfo.VacBanned || targetBanInfo.GameBanCount > 0) { _log.Warning("The target has already been banned. Are you sure you " + "want to bot this player? Ignore this message if the " + "target has been banned in other games."); } } _log.Information("Starting bombing of {Target} in Match {Match}.", _targetBox.Text, matchid); Titan.Instance.AccountManager.StartBotting(mode, steamId, matchid); } else { MessageBox.Show("Please provide a target.", MessageBoxType.Error); } }
public override TabPage GetTabPage() { var txtBoxSteamID = new TextBox { PlaceholderText = "STEAM_0:0:131983088" }; var txtBoxMatchID = new TextBox { PlaceholderText = "CSGO-727c4-5oCG3-PurVX-sJkdn-LsXfE" }; // CS:GO var cbAbusiveText = new CheckBox { Text = "Abusive Text Chat", Checked = true }; var cbAbusiveVoice = new CheckBox { Text = "Abusive Voice Chat", Checked = true }; var cbGriefing = new CheckBox { Text = "Griefing", Checked = true }; var cbCheatAim = new CheckBox { Text = "Aim Hacking", Checked = true }; var cbCheatWall = new CheckBox { Text = "Wall Hacking", Checked = true }; var cbCheatOther = new CheckBox { Text = "Other Hacking", Checked = true }; var csgoGroupBox = new GroupBox { Text = "Options", Visible = true, Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(cbAbusiveText, true), new TableCell(cbAbusiveVoice, true), new TableCell(cbGriefing, true) ), new TableRow( new TableCell(cbCheatAim), new TableCell(cbCheatWall), new TableCell(cbCheatOther) ) } } }; // TF2 var dropReportReason = new DropDown { Items = { "Cheating", "Idling", "Harassment", "Griefing" }, SelectedIndex = 0 }; var tf2GroupBox = new GroupBox { Text = "Options", Visible = false, Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(new Label { Text = "Reason" }, true), new TableCell(dropReportReason, true) ) } } }; var dropIndexes = new DropDown(); RefreshIndexesDropDown(dropIndexes); DropDownIndex.Add(dropIndexes); var cbAllIndexes = new CheckBox { Text = "Use all accounts", Checked = false }; cbAllIndexes.CheckedChanged += (sender, args) => { if (cbAllIndexes.Checked != null) { dropIndexes.Enabled = (bool)!cbAllIndexes.Checked; } else { cbAllIndexes.Checked = false; } }; var dropGame = new DropDown { Items = { "Counter-Strike: Global Offensive", "Team Fortress 2" }, SelectedIndex = 0 }; dropGame.SelectedIndexChanged += (sender, args) => { txtBoxMatchID.Enabled = dropGame.SelectedIndex == 0; csgoGroupBox.Visible = dropGame.SelectedIndex == 0; tf2GroupBox.Visible = dropGame.SelectedIndex == 1; _log.Debug("Switched game to {game}.", dropGame.SelectedValue); }; var btnReport = new Button { Text = "Report" }; btnReport.Click += (sender, args) => { if (!string.IsNullOrWhiteSpace(txtBoxSteamID.Text)) { var steamID = SteamUtil.Parse(txtBoxSteamID.Text); var matchID = SharecodeUtil.Parse(txtBoxMatchID.Text); if (steamID != null) { if (steamID.IsBlacklisted(dropGame.ToAppID())) { UIManager.SendNotification( "Restriction applied", "The target you are trying to report is blacklisted from botting " + "in Titan.", () => Process.Start("https://github.com/Marc3842h/Titan/wiki/Blacklist") ); return; } if (matchID == 8 && dropGame.SelectedIndex == 0) { _log.Warning("Could not convert {ID} to a valid Match ID. Trying to resolve the " + "the Match ID in which the target is playing at the moment.", matchID); Titan.Instance.AccountManager.StartMatchIDResolving( cbAllIndexes.Checked != null && (bool)cbAllIndexes.Checked ? -1 : dropIndexes.SelectedIndex, new LiveGameInfo { SteamID = steamID, AppID = TitanAccount.CSGO_APPID }); } if (Titan.Instance.WebHandle.RequestBanInfo(steamID.ConvertToUInt64(), out var banInfo)) { if (banInfo.VacBanned || banInfo.GameBanCount > 0) { _log.Warning("The target has already been banned. Are you sure you " + "want to bot this player? Ignore this message if the " + "target has been banned in other games."); } if (Titan.Instance.VictimTracker.IsVictim(steamID)) { _log.Warning("You already report botted this victim. " + "Are you sure you want to bot this player? " + "Ignore this message if the first report didn't have enough reports."); } _log.Information("Starting reporting of {Target} in Match {Match} in game {Game}.", steamID.ConvertToUInt64(), matchID, dropGame.SelectedValue); Titan.Instance.AccountManager.StartReporting( cbAllIndexes.Checked != null && (bool)cbAllIndexes.Checked ? -1 : dropIndexes.SelectedIndex, new ReportInfo { SteamID = steamID, MatchID = matchID, AppID = dropGame.ToAppID(), AbusiveText = cbAbusiveText.Checked != null && (bool)cbAbusiveText.Checked, AbusiveVoice = cbAbusiveVoice.Checked != null && (bool)cbAbusiveVoice.Checked, Griefing = cbGriefing.Checked != null && (bool)cbGriefing.Checked, AimHacking = cbCheatAim.Checked != null && (bool)cbCheatAim.Checked, WallHacking = cbCheatWall.Checked != null && (bool)cbCheatWall.Checked, OtherHacking = cbCheatOther.Checked != null && (bool)cbCheatOther.Checked, Reason = dropReportReason.ToTF2ReportReason() }); } } else { UIManager.SendNotification( "Titan - Error", "Could not parse Steam ID " + txtBoxSteamID.Text + " to Steam ID. Please provide a valid " + "SteamID, SteamID3 or SteamID64." ); } } else { UIManager.SendNotification( "Titan - Error", "Please provide a valid target." ); } }; return(new TabPage { Text = "Report", Enabled = !Titan.Instance.DummyMode, Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new GroupBox { Text = "Target", Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(new Label { Text = "Steam ID" }, true), new TableCell(txtBoxSteamID, true) ), new TableRow( new TableCell(new Label { Text = "Match ID" }), new TableCell(txtBoxMatchID) ) } } }, csgoGroupBox, tf2GroupBox, new GroupBox { Text = "Bots", Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(new Label { Text = "Use Index" }, true), new TableCell(dropIndexes, true) ), new TableRow( new TableCell(new Panel()), new TableCell(cbAllIndexes) ) } } }, new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(dropGame), new TableCell(new Panel(),true), new TableCell(new Panel(),true), new TableCell(btnReport) ), new TableRow { ScaleHeight = true } } } } } }); }
public static int Main(string[] args) { Thread.CurrentThread.Name = "Main"; Instance = new Titan { Options = new Options() }; Logger = LogCreator.Create(); if (Environment.CurrentDirectory != Instance.Directory.ToString()) { Logger.Debug("Run from {currentDir}, switching to work directory in {workingDir}.", Environment.CurrentDirectory, Instance.Directory.ToString()); } // Windows users run the program by double clicking Titan.exe (and then it opens a console window) // and in case of exception occurence, this window gets immediatly closed which is bad because // they're unable to attach the stacktrace then. Prevent it by waiting until the user presses a key. #if !__UNIX__ AppDomain.CurrentDomain.UnhandledException += (sender, eventArgs) => { if (eventArgs.IsTerminating) { Logger.Error((Exception)eventArgs.ExceptionObject, "An error occured."); // Don't use logging object here incase the exception was thrown by a logger Console.Write("Press any key to exit Titan..."); Console.Read(); } }; #endif // The bridge between Common Logging and Serilog uses the global Logger (Log.Logger). // As Quartz.NET is the only dependency using Common Logging (and because of our bridge the global logger) // we're creating the global logger as Quartz logger (which hides annoying debug messages). Log.Logger = LogCreator.CreateQuartzLogger(); // Quartz.NET Instance.Scheduler = StdSchedulerFactory.GetDefaultScheduler().Result; Instance.Scheduler.Start(); Instance.JsonSerializer = new JsonSerializer(); Instance.HttpClient = new HttpClient(); Instance.HttpClient.DefaultRequestHeaders.Add( "User-Agent", "Titan Report & Commend Bot (https://github.com/Marc3842h/Titan)" ); var parser = new Parser(config => { config.IgnoreUnknownArguments = true; config.EnableDashDash = true; config.HelpWriter = TextWriter.Null; }); // Default parser.ParseArguments <Options>(args) .WithParsed(options => { Instance.Options = options; }); // Verbs parser.ParseArguments <ReportOptions, CommendOptions>(args) .WithParsed <ReportOptions>(options => { Instance.EnableUI = false; Instance.ParsedObject = options; }) .WithParsed <CommendOptions>(options => { Instance.EnableUI = false; Instance.ParsedObject = options; }) .WithNotParsed(error => { if (Instance.ParsedObject == null) { Instance.EnableUI = true; Logger.Information("No valid verb has been provided while parsing. Opening UI..."); } }); new Config.Config().Load(); // Reinitialize logger with new parsed debug option Logger = LogCreator.Create(); #if __UNIX__ Instance.IsAdmin = Linux.getuid() == 0; // UID of root is always 0 #else Instance.IsAdmin = new WindowsPrincipal(WindowsIdentity.GetCurrent()) .IsInRole(WindowsBuiltInRole.Administrator); #endif if (Instance.IsAdmin) { if (!Instance.Options.AllowAdmin) { Logger.Error("Titan is running as administrator or root."); Logger.Error("This is not supported. Titan will refuse to start until you start it as normal " + "user. If you are unable to do this for any reason, start Titan with the --admin " + "option to force the usage of administrator rights."); #if !__UNIX__ Console.Write("Press any key to exit Titan..."); Console.Read(); #endif Instance.Scheduler.Shutdown(); return((int)ExitCodes.RunningAsAdmin); } Logger.Warning("Titan has been started as Administrator but will continue to run as the " + "--admin option has been passed. Please note that Steam also doesn't allow to be " + "run from root and that it may be insecure."); } if (Instance.Options.Debug) { Instance.DebugDirectory = new DirectoryInfo(Path.Combine(Instance.Directory.ToString(), "debug")); if (!Instance.DebugDirectory.Exists) { Instance.DebugDirectory.Create(); } if (Instance.Options.SteamKitDebug) { DebugLog.AddListener(new TitanListener()); DebugLog.Enabled = true; } } if (Instance.Options.Secure) { Logger.Debug("Secure mode has been enabled. Titan will output no sensitive data."); } if (Instance.Options.DisableBlacklist) { Logger.Debug("Blacklist has been disabled by passing the --noblacklist option."); } Instance.ProfileSaver = new ProfileSaver(); if (Instance.EnableUI) { try { Instance.UIManager = new UIManager(); } catch (InvalidOperationException ex) { if (!string.IsNullOrEmpty(ex.Message) && ex.Message.ToLower().Contains("could not detect platform")) { Logger.Error("---------------------------------------"); Logger.Error("A fatal error has been detected!"); Logger.Error("Eto.Forms could not detect your current operating system."); #if __UNIX__ Logger.Error("Please install {0}, {1}, {2} and {3} before submitting a bug report.", "Mono (\u22655.4)", "Gtk 3", "libNotify", "libAppindicator3"); #else Logger.Error("Please install {0} before submitting a bug report.", ".NET Framework (\u22654.6.1)"); #endif Logger.Error("Contact {Marc} on Discord if the issue still persists after installing " + "the dependencies listed above.", "Marc3842h#7312"); Logger.Error("---------------------------------------"); Logger.Debug(ex, "Include the error below if you\'re contacting Marc on Discord."); #if !__UNIX__ Console.Write("Press any key to exit Titan..."); Console.Read(); #endif Instance.Scheduler.Shutdown(); return((int)ExitCodes.UIInitFailed); } Logger.Error(ex, "A error occured while loading UI."); throw; } } Instance.AccountManager = new AccountManager(new FileInfo( Path.Combine(Instance.Directory.ToString(), Instance.Options.AccountsFile)) ); Instance.ThreadManager = new ThreadManager(); Instance.WebHandle = new SWAHandle(); Instance.VictimTracker = new VictimTracker(); AppDomain.CurrentDomain.ProcessExit += OnShutdown; Instance.AccountManager.ParseAccountFile(); Task.Run(() => TimeAligner.AlignTime()); if (Instance.EnableUI) { Instance.UIManager.InitializeForms(); } // Load after Forms were initialized Instance.WebHandle.Load(); // VictimTracker depends on the web api key being loaded correctly. Instance.VictimTracker.InitTrigger(); var attribute = Assembly.GetEntryAssembly().GetCustomAttribute <AssemblyInformationalVersionAttribute>(); var version = attribute != null ? attribute.InformationalVersion : Assembly.GetEntryAssembly().GetName().Version.Major + "." + Assembly.GetEntryAssembly().GetName().Version.Minor + "." + Assembly.GetEntryAssembly().GetName().Version.Build; Logger.Information("Hello and welcome to Titan {version}.", "v" + version); if (Instance.EnableUI && Instance.ParsedObject == null || Instance.DummyMode) { Instance.UIManager.ShowForm(UIType.General); } else { if (Instance.ParsedObject.GetType() == typeof(ReportOptions)) { var opt = (ReportOptions)Instance.ParsedObject; var steamID = SteamUtil.Parse(opt.Target); if (steamID.IsBlacklisted(opt.Game.ToAppID())) { Instance.UIManager.SendNotification( "Restriction applied", "The target you are trying to report is blacklisted from botting " + "in Titan.", () => Process.Start("https://github.com/Marc3842h/Titan/wiki/Blacklist") ); } else { Instance.AccountManager.StartReporting(Instance.AccountManager.Index, new ReportInfo { SteamID = SteamUtil.Parse(opt.Target), MatchID = SharecodeUtil.Parse(opt.Match), AppID = opt.Game.ToAppID(), AbusiveText = opt.AbusiveTextChat, AbusiveVoice = opt.AbusiveVoiceChat, Griefing = opt.Griefing, AimHacking = opt.AimHacking, WallHacking = opt.WallHacking, OtherHacking = opt.OtherHacking }); } } else if (Instance.ParsedObject.GetType() == typeof(CommendOptions)) { var opt = (CommendOptions)Instance.ParsedObject; Instance.AccountManager.StartCommending(Instance.AccountManager.Index, new CommendInfo { SteamID = SteamUtil.Parse(opt.Target), AppID = TitanAccount.CSGO_APPID, Friendly = opt.Friendly, Leader = opt.Leader, Teacher = opt.Teacher }); } else { Instance.UIManager.ShowForm(UIType.General); } } Instance.Scheduler.ScheduleJob(Instance.VictimTracker.Job, Instance.VictimTracker.Trigger); Logger.Debug("Startup done. Active threads: {threads}", Process.GetCurrentProcess().Threads.Count + 1); Instance.StartMainLoop(); // The Shutdown handler gets only called after the last thread finished. // Quartz runs a Watchdog until Scheduler#Shutdown is called, so we're calling it // before Titan will be calling the Shutdown Hook. Logger.Debug("Shutting down Quartz.NET Scheduler."); Instance.Scheduler.Shutdown(); return((int)ExitCodes.Ok); }
public TabPage GetReportTab() { var txtBoxSteamID = new TextBox { PlaceholderText = "STEAM_0:0:131983088" }; var txtBoxMatchID = new TextBox { PlaceholderText = "CSGO-727c4-5oCG3-PurVX-sJkdn-LsXfE" }; var cbAbusiveText = new CheckBox { Text = "Abusive Text Chat", Checked = true }; var cbAbusiveVoice = new CheckBox { Text = "Abusive Voice Chat", Checked = true }; var cbGriefing = new CheckBox { Text = "Griefing", Checked = true }; var cbCheatAim = new CheckBox { Text = "Aim Hacking", Checked = true }; var cbCheatWall = new CheckBox { Text = "Wall Hacking", Checked = true }; var cbCheatOther = new CheckBox { Text = "Other Hacking", Checked = true }; var dropIndexes = new DropDown(); foreach (var i in Titan.Instance.AccountManager.Accounts) { if (i.Key != -1) { dropIndexes.Items.Add("#" + i.Key + " (" + i.Value.Count + " accounts)"); } } dropIndexes.SelectedIndex = Titan.Instance.AccountManager.Index; var cbAllIndexes = new CheckBox { Text = "Use all accounts", Checked = false }; cbAllIndexes.CheckedChanged += delegate { if (cbAllIndexes.Checked != null) { dropIndexes.Enabled = (bool)!cbAllIndexes.Checked; } else { cbAllIndexes.Checked = false; } }; var btnReport = new Button { Text = "Report" }; btnReport.Click += delegate { if (!string.IsNullOrWhiteSpace(txtBoxSteamID.Text)) { var steamID = SteamUtil.Parse(txtBoxSteamID.Text); var matchID = SharecodeUtil.Parse(txtBoxMatchID.Text); if (steamID != null) { if (matchID == 8) { _log.Warning("Could not convert {ID} to a valid Match ID. Trying to resolve the " + "the Match ID in which the target is playing at the moment.", matchID); Titan.Instance.AccountManager.StartMatchIDResolving( cbAllIndexes.Checked != null && (bool)cbAllIndexes.Checked ? -1 : dropIndexes.SelectedIndex, new LiveGameInfo { SteamID = steamID }); } if (Blacklist.IsBlacklisted(steamID)) { Titan.Instance.UIManager.SendNotification( "Restriction applied", "The target you are trying to report is blacklisted from botting " + "in Titan.", delegate { Process.Start("https://github.com/Marc3842h/Titan/wiki/Blacklist"); } ); return; } var targetBanInfo = Titan.Instance.BanManager.GetBanInfoFor(steamID.ConvertToUInt64()); if (targetBanInfo != null) { if (targetBanInfo.VacBanned || targetBanInfo.GameBanCount > 0) { _log.Warning("The target has already been banned. Are you sure you " + "want to bot this player? Ignore this message if the " + "target has been banned in other games."); } if (Titan.Instance.VictimTracker.IsVictim(steamID)) { _log.Warning("You already report botted this victim. " + "Are you sure you want to bot this player? " + "Ignore this message if the first report didn't have enough reports."); } _log.Information("Starting reporting of {Target} in Match {Match}.", steamID.ConvertToUInt64(), matchID); Titan.Instance.AccountManager.StartReporting( cbAllIndexes.Checked != null && (bool)cbAllIndexes.Checked ? -1 : dropIndexes.SelectedIndex, new ReportInfo { SteamID = steamID, MatchID = matchID, AbusiveText = cbAbusiveText.Checked != null && (bool)cbAbusiveText.Checked, AbusiveVoice = cbAbusiveVoice.Checked != null && (bool)cbAbusiveVoice.Checked, Griefing = cbGriefing.Checked != null && (bool)cbGriefing.Checked, AimHacking = cbCheatAim.Checked != null && (bool)cbCheatAim.Checked, WallHacking = cbCheatWall.Checked != null && (bool)cbCheatWall.Checked, OtherHacking = cbCheatOther.Checked != null && (bool)cbCheatOther.Checked }); } } else { Titan.Instance.UIManager.SendNotification( "Titan - Error", "Could not parse Steam ID " + txtBoxSteamID.Text + " to Steam ID. Please provide a valid " + "SteamID, SteamID3 or SteamID64." ); } } else { Titan.Instance.UIManager.SendNotification( "Titan - Error", "Please provide a valid target." ); } }; return(new TabPage { Text = "Report", Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new GroupBox { Text = "Target", Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(new Label { Text = "Steam ID" }, true), new TableCell(txtBoxSteamID, true) ), new TableRow( new TableCell(new Label { Text = "Match ID" }), new TableCell(txtBoxMatchID) ) } } }, new GroupBox { Text = "Options", Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(cbAbusiveText, true), new TableCell(cbAbusiveVoice, true), new TableCell(cbGriefing, true) ), new TableRow( new TableCell(cbCheatAim), new TableCell(cbCheatWall), new TableCell(cbCheatOther) ) } } }, new GroupBox { Text = "Bots", Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(new Label { Text = "Use Index" }, true), new TableCell(dropIndexes, true) ), new TableRow( new TableCell(new Panel()), new TableCell(cbAllIndexes) ) } } }, new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(new Panel(), true), new TableCell(new Panel(), true), new TableCell(btnReport) ), new TableRow { ScaleHeight = true } } } } } }); }
public TabPage GetCommendTab() { var txtBoxSteamID = new TextBox { PlaceholderText = "STEAM_0:0:131983088" }; var cbLeader = new CheckBox { Text = "Leader", Checked = true }; var cbFriendly = new CheckBox { Text = "Friendly", Checked = true }; var cbTeacher = new CheckBox { Text = "Teacher", Checked = true }; var dropIndexes = new DropDown(); foreach (var i in Titan.Instance.AccountManager.Accounts) { if (i.Key != -1) { dropIndexes.Items.Add("#" + i.Key + " (" + i.Value.Count + " accounts)"); } } dropIndexes.SelectedIndex = Titan.Instance.AccountManager.Index; var cbAllIndexes = new CheckBox { Text = "Use all accounts", Checked = false }; cbAllIndexes.CheckedChanged += delegate { if (cbAllIndexes.Checked != null) { dropIndexes.Enabled = (bool)!cbAllIndexes.Checked; } else { cbAllIndexes.Checked = false; } }; var btnCommend = new Button { Text = "Commend" }; btnCommend.Click += delegate { if (!string.IsNullOrWhiteSpace(txtBoxSteamID.Text)) { var steamID = SteamUtil.Parse(txtBoxSteamID.Text); if (steamID != null) { if (Blacklist.IsBlacklisted(steamID)) { Titan.Instance.UIManager.SendNotification( "Restriction applied", "The target you are trying to report is blacklisted from botting " + "in Titan.", delegate { Process.Start("https://github.com/Marc3842h/Titan/wiki/Blacklist"); } ); return; } _log.Information("Starting commending of {Target}.", steamID.ConvertToUInt64()); Titan.Instance.AccountManager.StartCommending( cbAllIndexes.Checked != null && (bool)cbAllIndexes.Checked ? -1 : dropIndexes.SelectedIndex, new CommendInfo { SteamID = steamID, Leader = cbLeader.Checked != null && (bool)cbLeader.Checked, Friendly = cbFriendly.Checked != null && (bool)cbFriendly.Checked, Teacher = cbTeacher.Checked != null && (bool)cbTeacher.Checked }); } else { Titan.Instance.UIManager.SendNotification( "Titan - Error", "Could not parse Steam ID " + txtBoxSteamID.Text + " to Steam ID. Please provide a valid " + "SteamID, SteamID3 or SteamID64." ); } } else { Titan.Instance.UIManager.SendNotification( "Titan - Error", "Please provide a valid target." ); } }; return(new TabPage { Text = "Commend", Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new GroupBox { Text = "Target", Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(new Label { Text = "Steam ID" }, true), new TableCell(txtBoxSteamID, true) ) } } }, new GroupBox { Text = "Options", Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(cbLeader, true), new TableCell(cbFriendly, true), new TableCell(cbTeacher, true) ) } } }, new GroupBox { Text = "Bots", Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(new Label { Text = "Use Index" }, true), new TableCell(dropIndexes, true) ), new TableRow( new TableCell(new Panel()), new TableCell(cbAllIndexes) ) } } }, new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(new Panel(), true), new TableCell(new Panel(), true), new TableCell(btnCommend) ), new TableRow { ScaleHeight = true } } } } } }); }
private TabPage GetCommendTab() { var txtBoxSteamID = new TextBox { PlaceholderText = "STEAM_0:0:131983088" }; var cbLeader = new CheckBox { Text = "Leader", Checked = true }; var cbFriendly = new CheckBox { Text = "Friendly", Checked = true }; var cbTeacher = new CheckBox { Text = "Teacher", Checked = true }; var dropIndexes = new DropDown(); RefreshIndexesDropDown(dropIndexes); _indexDropDowns.Add(dropIndexes); var cbAllIndexes = new CheckBox { Text = "Use all accounts", Checked = false }; cbAllIndexes.CheckedChanged += delegate { if (cbAllIndexes.Checked != null) { dropIndexes.Enabled = (bool)!cbAllIndexes.Checked; } else { cbAllIndexes.Checked = false; } }; var btnCommend = new Button { Text = "Commend" }; btnCommend.Click += delegate { if (!string.IsNullOrWhiteSpace(txtBoxSteamID.Text)) { var steamID = SteamUtil.Parse(txtBoxSteamID.Text); if (steamID != null) { _log.Information("Starting commending of {Target}.", steamID.ConvertToUInt64()); Titan.Instance.AccountManager.StartCommending( cbAllIndexes.Checked != null && (bool)cbAllIndexes.Checked ? -1 : dropIndexes.SelectedIndex, new CommendInfo { SteamID = steamID, Leader = cbLeader.Checked != null && (bool)cbLeader.Checked, Friendly = cbFriendly.Checked != null && (bool)cbFriendly.Checked, Teacher = cbTeacher.Checked != null && (bool)cbTeacher.Checked }); } else { Titan.Instance.UIManager.SendNotification( "Titan - Error", "Could not parse Steam ID " + txtBoxSteamID.Text + " to Steam ID. Please provide a valid " + "SteamID, SteamID3 or SteamID64." ); } } else { Titan.Instance.UIManager.SendNotification( "Titan - Error", "Please provide a valid target." ); } }; return(new TabPage { Text = "Commend", Enabled = !Titan.Instance.DummyMode, Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new GroupBox { Text = "Target", Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(new Label { Text = "Steam ID" }, true), new TableCell(txtBoxSteamID, true) ) } } }, new GroupBox { Text = "Options", Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(cbLeader, true), new TableCell(cbFriendly, true), new TableCell(cbTeacher, true) ) } } }, new GroupBox { Text = "Bots", Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(new Label { Text = "Use Index" }, true), new TableCell(dropIndexes, true) ), new TableRow( new TableCell(new Panel()), new TableCell(cbAllIndexes) ) } } }, new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(new Panel(), true), new TableCell(new Panel(), true), new TableCell(btnCommend) ), new TableRow { ScaleHeight = true } } } } } }); }
public override TabPage GetTabPage() { var txtBoxSteamID = new TextBox { PlaceholderText = "STEAM_0:0:131983088" }; var cbLeader = new CheckBox { Text = "Leader", Checked = true }; var cbFriendly = new CheckBox { Text = "Friendly", Checked = true }; var cbTeacher = new CheckBox { Text = "Teacher", Checked = true }; var dropIndexes = new DropDown(); RefreshIndexesDropDown(dropIndexes); DropDownIndex.Add(dropIndexes); var labelWarning = new Label { Text = "All your indexes sum up to over 100 accounts.\n" + "Titan will delay the botting process to\n" + "prevent Steam rate limit issues.", Visible = false }; var cbAllIndexes = new CheckBox { Text = "Use all accounts", Checked = false }; cbAllIndexes.CheckedChanged += (sender, args) => { if (cbAllIndexes.Checked != null) { dropIndexes.Enabled = (bool)!cbAllIndexes.Checked; if (Titan.Instance.AccountManager.Count() > 00) { labelWarning.Visible = (bool)cbAllIndexes.Checked; } } else { cbAllIndexes.Checked = false; } }; var btnCommend = new Button { Text = "Commend" }; btnCommend.Click += (sender, args) => { if (!string.IsNullOrWhiteSpace(txtBoxSteamID.Text)) { var steamID = SteamUtil.Parse(txtBoxSteamID.Text); if (steamID != null) { _log.Information("Starting commending of {Target}.", steamID.ConvertToUInt64()); Titan.Instance.AccountManager.StartCommending( cbAllIndexes.Checked != null && (bool)cbAllIndexes.Checked ? -1 : dropIndexes.SelectedIndex, new CommendInfo { SteamID = steamID, AppID = TitanAccount.CSGO_APPID, Leader = cbLeader.Checked != null && (bool)cbLeader.Checked, Friendly = cbFriendly.Checked != null && (bool)cbFriendly.Checked, Teacher = cbTeacher.Checked != null && (bool)cbTeacher.Checked }); } else { UIManager.SendNotification( "Titan - Error", "Could not parse Steam ID " + txtBoxSteamID.Text + " to Steam ID. Please provide a valid " + "SteamID, SteamID3 or SteamID64." ); } } else { UIManager.SendNotification( "Titan - Error", "Please provide a valid target." ); } }; return(new TabPage { Text = "Commend", Enabled = !Titan.Instance.DummyMode, Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new GroupBox { Text = "Target", Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(new Label { Text = "Steam ID" }, true), new TableCell(txtBoxSteamID, true) ) } } }, new GroupBox { Text = "Options", Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(cbLeader, true), new TableCell(cbFriendly, true), new TableCell(cbTeacher, true) ) } } }, new GroupBox { Text = "Bots", Content = new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(new Label { Text = "Use Index" }, true), new TableCell(dropIndexes, true) ), new TableRow( new TableCell(labelWarning), new TableCell(cbAllIndexes) ) } } }, new TableLayout { Spacing = new Size(5, 5), Padding = new Padding(10, 10, 10, 10), Rows = { new TableRow( new TableCell(new Panel(), true), new TableCell(new Panel(), true), new TableCell(btnCommend) ), new TableRow { ScaleHeight = true } } } } } }); }
public static int Main(string[] args) { Thread.CurrentThread.Name = "Main"; Instance = new Titan { Options = new Options() }; Logger = LogCreator.Create(); Logger.Debug("Startup: Loading Serilog <-> Common Logging Bridge."); // Common Logging <-> Serilog bridge Log.Logger = LogCreator.Create("Quartz.NET Scheduler"); Logger.Debug("Startup: Loading Quartz.NET."); // Quartz.NET Instance.Scheduler = StdSchedulerFactory.GetDefaultScheduler().Result; Instance.Scheduler.Start(); Logger.Debug("Startup: Parsing Command Line Arguments."); Parser.Default.ParseArguments <Options, ReportOptions, CommendOptions, IdleOptions>(args) .WithParsed <ReportOptions>(options => { Instance.EnableUI = false; Instance.ParsedObject = options; }) .WithParsed <CommendOptions>(options => { Instance.EnableUI = false; Instance.ParsedObject = options; }) .WithParsed <IdleOptions>(options => { Instance.EnableUI = false; Instance.ParsedObject = options; }) .WithNotParsed(error => { Instance.EnableUI = true; Logger.Information("No valid verb has been provided while parsing. Opening UI..."); }); // Reinitialize logger with new parsed debug option Logger = LogCreator.Create(); if (Instance.Options.Debug) { if (!Instance.DebugDirectory.Exists) { Instance.DebugDirectory.Create(); } } if (Instance.Options.DisableBlacklist) { Logger.Debug("Blacklist has been disabled by passing the --noblacklist option."); } Logger.Debug("Startup: Loading UI Manager, Victim Tracker, Account Manager and Ban Manager."); try { Instance.UIManager = new UIManager(); } catch (Exception ex) { if (ex.GetType() == typeof(InvalidOperationException)) { var osEx = (InvalidOperationException)ex; if (osEx.Message.ToLower().Contains("could not detect platform")) { Log.Error("---------------------------------------"); Log.Error("A fatal error has been detected!"); Log.Error("You are missing a Eto.Forms platform assembly."); if (Type.GetType("Mono.Runtime") != null) { Log.Error("Please read the README.md file and install all required dependencies."); } Log.Error("Either {0} or {1} Titan. Titan will now shutdown.", "redownload", "rebuild"); Log.Error("Contact {Marc} on Discord for more information.", "Marc3842h#7312"); Log.Error("---------------------------------------"); Environment.Exit(-1); } } Log.Error(ex, "A error occured while loading UI."); throw; } Instance.VictimTracker = new VictimTracker(); Instance.Scheduler.ScheduleJob(Instance.VictimTracker.Job, Instance.VictimTracker.Trigger); Instance.AccountManager = new AccountManager(new FileInfo( Path.Combine(Environment.CurrentDirectory, Instance.Options.AccountsFile)) ); Instance.ThreadManager = new ThreadManager(); Instance.BanManager = new BanManager(); Logger.Debug("Startup: Registering Shutdown Hook."); AppDomain.CurrentDomain.ProcessExit += OnShutdown; Logger.Debug("Startup: Parsing accounts.json file."); if (Instance.AccountManager.ParseAccountFile()) { Logger.Debug("Initializing Forms..."); Instance.UIManager.InitializeForms(); Logger.Debug("Startup: Loading Web API Key"); // Resolve API Key File Instance.APIKeyResolver = new WebAPIKeyResolver(); Instance.APIKeyResolver.ParseKeyFile(); Logger.Information("Hello and welcome to Titan v1.5.0-Dev."); if (Instance.EnableUI || Instance.ParsedObject == null) { Instance.UIManager.ShowForm(UIType.General); } else { if (Instance.ParsedObject.GetType() == typeof(ReportOptions)) { var opt = (ReportOptions)Instance.ParsedObject; var steamID = SteamUtil.Parse(opt.Target); if (Blacklist.IsBlacklisted(steamID)) { Instance.UIManager.SendNotification( "Restriction applied", "The target you are trying to report is blacklisted from botting " + "in Titan.", delegate { Process.Start("https://github.com/Marc3842h/Titan/wiki/Blacklist"); } ); } else { Instance.AccountManager.StartReporting(Instance.AccountManager.Index, new ReportInfo { SteamID = SteamUtil.Parse(opt.Target), MatchID = SharecodeUtil.Parse(opt.Match), AbusiveText = opt.AbusiveTextChat, AbusiveVoice = opt.AbusiveVoiceChat, Griefing = opt.Griefing, AimHacking = opt.AimHacking, WallHacking = opt.WallHacking, OtherHacking = opt.OtherHacking }); } } else if (Instance.ParsedObject.GetType() == typeof(CommendOptions)) { var opt = (CommendOptions)Instance.ParsedObject; Instance.AccountManager.StartCommending(Instance.AccountManager.Index, new CommendInfo { SteamID = SteamUtil.Parse(opt.Target), Friendly = opt.Friendly, Leader = opt.Leader, Teacher = opt.Teacher }); } else if (Instance.ParsedObject.GetType() == typeof(IdleOptions)) { var opt = (IdleOptions)Instance.ParsedObject; // TODO: Parse the idle options as soon as idling is implemented } else { Instance.UIManager.ShowForm(UIType.General); } } Instance.UIManager.StartMainLoop(); } // The Shutdown handler gets only called after the last thread finished. // Quartz runs a Watchdog until Scheduler#Shutdown is called, so we're calling it // before Titan will be calling the Shutdown Hook. Logger.Debug("Shutdown: Shutting down Quartz.NET Scheduler."); Instance.Scheduler.Shutdown(); return(0); // OK. }
public static int Main(string[] args) { Thread.CurrentThread.Name = "Main"; Logger.Debug("Startup: Loading Titan Bootstrapper."); // Initialize Titan Singleton Instance = new Titan { Options = new Options() }; Logger.Debug("Startup: Loading Serilog <-> Common Logging Bridge."); // Common Logging <-> Serilog bridge Log.Logger = LogCreator.Create("Quartz.NET Scheduler"); Logger.Debug("Startup: Loading Quartz.NET."); // Quartz.NET Instance.Scheduler = StdSchedulerFactory.GetDefaultScheduler(); Instance.Scheduler.Start(); // SteamKit Logger.Debug("Startup: Refreshing Steam Universe list."); SteamDirectory.Initialize().Wait(); Logger.Debug("Startup: Parsing Command Line Arguments."); /* Parse arguments provided with the starting of this */ if (Parser.Default.ParseArguments(args, Instance.Options)) { Logger.Information("Skipping UI and going directly to botting - Target: {Target} - Match ID: {Id}", Instance.Options.Target, Instance.Options.MatchId); Instance.EnableUI = false; } else { Logger.Information("The arguments --target and --mode were omitted - opening the UI."); Instance.EnableUI = true; } Logger.Debug("Startup: Initializing Gui Manager, Victim Tracker, Account Manager and Ban Manager."); Instance.UIManager = new UIManager(); Instance.VictimTracker = new VictimTracker(); // Schedule Victim Tracking Instance.Scheduler.ScheduleJob(Instance.VictimTracker.Job, Instance.VictimTracker.Trigger); var file = string.IsNullOrEmpty(Instance.Options.File) ? "accounts.json" : Instance.Options.File; Instance.AccountManager = new AccountManager(new FileInfo(Path.Combine(Environment.CurrentDirectory, file))); Instance.ThreadManager = new ThreadManager(); Instance.BanManager = new BanManager(); Instance.BanManager.ParseApiKeyFile(); Logger.Debug("Startup: Registering Shutdown Hook."); // Register hook AppDomain.CurrentDomain.ProcessExit += OnShutdown; Logger.Debug("Startup: Parsing accounts.json file."); if (Instance.AccountManager.ParseAccountFile()) { Logger.Information("Hello and welcome to Titan v1.4.0-Dev."); if (Instance.EnableUI) { Instance.UIManager.ShowForm(UIType.Main); } else { var mode = BotModeParser.Parse(Instance.Options.Mode); if (mode == BotMode.Report) { Instance.AccountManager.StartBotting(mode, SteamUtil.Parse(Instance.Options.Target), Instance.Options.MatchId != null ? Convert.ToUInt64(Instance.Options.MatchId) : 8); } } Instance.UIManager.StartMainLoop(); } // The Shutdown handler gets only called after the last thread finished. // Quartz runs a Watchdog until Scheduler#Shutdown is called, so we're calling it // before Titan will be calling the Shutdown Hook. Logger.Debug("Shutdown: Shutting down Quartz.NET Scheduler."); Instance.Scheduler.Shutdown(); return(0); // OK. }
public static int Main(string[] args) { Thread.CurrentThread.Name = "Main"; Instance = new Titan { Options = new Options() }; Logger = LogCreator.Create(); #if __UNIX__ Instance.IsAdmin = Syscall.getuid() == 0; // UID of root is always 0 #else Instance.IsAdmin = new WindowsPrincipal(WindowsIdentity.GetCurrent()) .IsInRole(WindowsBuiltInRole.Administrator); #endif if (Instance.IsAdmin) { Logger.Error("Titan is running as administrator or root."); Logger.Error("This is not supported. Titan will refuse to start until you start it as normal user."); #if !__UNIX__ Console.Write("Press any key to exit Titan..."); Console.Read(); #endif return(-1); } Logger.Debug("Titan was called from: {dir}", Environment.CurrentDirectory); Logger.Debug("Working in directory: {dir}", Instance.Directory.ToString()); // Workaround for Mono related issue regarding System.Net.Http. // More detail: https://github.com/dotnet/corefx/issues/19914 var systemNetHttpDll = new FileInfo(Path.Combine(Instance.Directory.ToString(), "System.Net.Http.dll")); if (systemNetHttpDll.Exists && !PlatformUtil.IsWindows()) { systemNetHttpDll.Delete(); } // Windows users run the program by double clicking Titan.exe (and then it opens a console window) // and in case of exception occurence, this window gets immediatly closed which is bad because // they're unable to attach the stacktrace then. Prevent it by waiting until the user presses a key. AppDomain.CurrentDomain.UnhandledException += (sender, eventArgs) => { if (eventArgs.IsTerminating) { #if !__UNIX__ Console.Write("Press any key to exit Titan..."); Console.Read(); #endif } }; Logger.Debug("Startup: Loading Serilog <-> Common Logging Bridge."); // The bridge between Common Logging and Serilog uses the global Logger (Log.Logger). // As Quartz.NET is the only dependency using Common Logging (and because of our bridge the global logger) // we're creating the global logger as Quartz logger (which hides annoying debug messages). Log.Logger = LogCreator.CreateQuartzLogger(); Logger.Debug("Startup: Loading Quartz.NET."); // Quartz.NET Instance.Scheduler = StdSchedulerFactory.GetDefaultScheduler().Result; Instance.Scheduler.Start(); Logger.Debug("Startup: Parsing Command Line Arguments."); var parser = new Parser(config => { config.IgnoreUnknownArguments = true; config.EnableDashDash = true; config.HelpWriter = TextWriter.Null; }); // Default parser.ParseArguments <Options>(args) .WithParsed(options => { Instance.Options = options; }); // Verbs parser.ParseArguments <ReportOptions, CommendOptions>(args) .WithParsed <ReportOptions>(options => { Instance.EnableUI = false; Instance.ParsedObject = options; }) .WithParsed <CommendOptions>(options => { Instance.EnableUI = false; Instance.ParsedObject = options; }) .WithNotParsed(error => { if (Instance.ParsedObject == null) { Instance.EnableUI = true; Logger.Information("No valid verb has been provided while parsing. Opening UI..."); } }); // Reinitialize logger with new parsed debug option Logger = LogCreator.Create(); if (Instance.Options.Debug) { Instance.DebugDirectory = new DirectoryInfo(Path.Combine(Instance.Directory.ToString(), "debug")); if (!Instance.DebugDirectory.Exists) { Instance.DebugDirectory.Create(); } DebugLog.AddListener(new TitanListener()); DebugLog.Enabled = true; } if (Instance.Options.Secure) { Logger.Debug("Secure mode has been enabled. Titan will output no sensitive data."); } if (Instance.Options.DisableBlacklist) { Logger.Debug("Blacklist has been disabled by passing the --noblacklist option."); } Logger.Debug("Startup: Loading UI Manager, Victim Tracker, Account Manager and Ban Manager."); Instance.JsonSerializer = new JsonSerializer(); try { Instance.UIManager = new UIManager(); } catch (InvalidOperationException ex) { if (!string.IsNullOrEmpty(ex.Message) && ex.Message.ToLower().Contains("could not detect platform")) { Logger.Error("---------------------------------------"); Logger.Error("A fatal error has been detected!"); Logger.Error("Eto.Forms could not detect your current operating system."); if (Type.GetType("Mono.Runtime") != null) { Logger.Error("Please install {0}, {1}, {2}, {3} and {4} before submitting a bug report.", "Mono (\u22655.4)", "Gtk 3", "Gtk# 3 (GTK Sharp)", "libNotify", "libAppindicator3"); } else { Logger.Error("Please install {0} before submitting a bug report.", ".NET Framework (\u22654.6.1)"); } Logger.Error("Contact {Marc} on Discord if the issue still persists after installing " + "the dependencies listed above.", "Marc3842h#7312"); Logger.Error("---------------------------------------"); Logger.Debug(ex, "Include the error below if you\'re contacting Marc on Discord."); #if !__UNIX__ Console.Write("Press any key to exit Titan..."); Console.Read(); #endif Instance.Scheduler.Shutdown(); return(-1); } Logger.Error(ex, "A error occured while loading UI."); throw; } Instance.VictimTracker = new VictimTracker(); Instance.Scheduler.ScheduleJob(Instance.VictimTracker.Job, Instance.VictimTracker.Trigger); Instance.AccountManager = new AccountManager(new FileInfo( Path.Combine(Instance.Directory.ToString(), Instance.Options.AccountsFile)) ); Instance.ThreadManager = new ThreadManager(); Instance.WebHandle = new SWAHandle(); Logger.Debug("Startup: Registering Shutdown Hook."); AppDomain.CurrentDomain.ProcessExit += OnShutdown; Logger.Debug("Startup: Parsing accounts.json file."); Instance.AccountManager.ParseAccountFile(); Logger.Debug("Startup: Initializing Forms..."); Instance.UIManager.InitializeForms(); // Load after Forms were initialized Instance.WebHandle.Load(); Logger.Information("Hello and welcome to Titan v1.6.0-EAP."); if (Instance.EnableUI && Instance.ParsedObject == null || Instance.DummyMode) { Instance.UIManager.ShowForm(UIType.General); } else { if (Instance.ParsedObject.GetType() == typeof(ReportOptions)) { var opt = (ReportOptions)Instance.ParsedObject; var steamID = SteamUtil.Parse(opt.Target); if (Blacklist.IsBlacklisted(steamID)) { Instance.UIManager.SendNotification( "Restriction applied", "The target you are trying to report is blacklisted from botting " + "in Titan.", delegate { Process.Start("https://github.com/Marc3842h/Titan/wiki/Blacklist"); } ); } else { Instance.AccountManager.StartReporting(Instance.AccountManager.Index, new ReportInfo { SteamID = SteamUtil.Parse(opt.Target), MatchID = SharecodeUtil.Parse(opt.Match), AppID = TitanAccount.CSGO_APPID, AbusiveText = opt.AbusiveTextChat, AbusiveVoice = opt.AbusiveVoiceChat, Griefing = opt.Griefing, AimHacking = opt.AimHacking, WallHacking = opt.WallHacking, OtherHacking = opt.OtherHacking }); } } else if (Instance.ParsedObject.GetType() == typeof(CommendOptions)) { var opt = (CommendOptions)Instance.ParsedObject; Instance.AccountManager.StartCommending(Instance.AccountManager.Index, new CommendInfo { SteamID = SteamUtil.Parse(opt.Target), AppID = TitanAccount.CSGO_APPID, Friendly = opt.Friendly, Leader = opt.Leader, Teacher = opt.Teacher }); } else { Instance.UIManager.ShowForm(UIType.General); } } Instance.UIManager.StartMainLoop(); // The Shutdown handler gets only called after the last thread finished. // Quartz runs a Watchdog until Scheduler#Shutdown is called, so we're calling it // before Titan will be calling the Shutdown Hook. Logger.Debug("Shutdown: Shutting down Quartz.NET Scheduler."); Instance.Scheduler.Shutdown(); return(0); // OK. }
public static int Main(string[] args) { Thread.CurrentThread.Name = "Main"; Instance = new Titan { Options = new Options() }; Logger = LogCreator.Create(); Logger.Debug("Startup: Loading Serilog <-> Common Logging Bridge."); // Common Logging <-> Serilog bridge Log.Logger = LogCreator.Create("Quartz.NET Scheduler"); Logger.Debug("Startup: Loading Quartz.NET."); // Quartz.NET Instance.Scheduler = StdSchedulerFactory.GetDefaultScheduler(); Instance.Scheduler.Start(); Logger.Debug("Startup: Refreshing Steam Universe list."); SteamDirectory.Initialize().Wait(); Logger.Debug("Startup: Parsing Command Line Arguments."); if (Parser.Default.ParseArguments(args, Instance.Options)) { Logger.Information("Skipping UI and going directly to botting - Target: {Target} - Match ID: {ID}", Instance.Options.Target, Instance.Options.MatchID); Instance.EnableUI = false; } else { Logger.Information("The arguments --target and --mode were omitted - opening the UI."); Instance.EnableUI = true; } // Reinitialize logger with new parsed debug option Logger = LogCreator.Create(); if (Instance.Options.Debug) { if (!Instance.DebugDirectory.Exists) { Instance.DebugDirectory.Create(); } } Logger.Debug("Startup: Loading UI Manager, Victim Tracker, Account Manager and Ban Manager."); try { Instance.UIManager = new UIManager(); } catch (Exception ex) { if (ex.GetType() == typeof(InvalidOperationException)) { var osEx = (InvalidOperationException)ex; if (osEx.Message.ToLower().Contains("could not detect platform")) { Log.Error("---------------------------------------"); Log.Error("A fatal error has been detected!"); Log.Error("You are missing a Eto.Forms platform assembly."); if (Type.GetType("Mono.Runtime") != null) { Log.Error("Please read the README.md file and install all required dependencies."); } Log.Error("Either {0} or {1} Titan. Titan will now shutdown.", "redownload", "rebuild"); Log.Error("Contact {Marc} on Discord for more information.", "Marc3842h#7312"); Log.Error("---------------------------------------"); Environment.Exit(-1); } } Log.Error(ex, "A error occured while loading UI."); throw; } Instance.VictimTracker = new VictimTracker(); Instance.Scheduler.ScheduleJob(Instance.VictimTracker.Job, Instance.VictimTracker.Trigger); Instance.AccountManager = new AccountManager(new FileInfo( Path.Combine(Environment.CurrentDirectory, Instance.Options.File)) ); Instance.ThreadManager = new ThreadManager(); Instance.BanManager = new BanManager(); Logger.Debug("Startup: Registering Shutdown Hook."); AppDomain.CurrentDomain.ProcessExit += OnShutdown; Logger.Debug("Startup: Parsing accounts.json file."); if (Instance.AccountManager.ParseAccountFile()) { Logger.Debug("Initializing Forms..."); Instance.UIManager.InitializeForms(); Logger.Debug("Startup: Loading Web API Key"); // Resolve API Key File Instance.APIKeyResolver = new WebAPIKeyResolver(); Instance.APIKeyResolver.ParseKeyFile(); Logger.Information("Hello and welcome to Titan v1.5.0-Dev."); if (Instance.EnableUI) { Instance.UIManager.ShowForm(UIType.General); } else { switch (Regex.Replace(Instance.Options.Mode.ToLowerInvariant(), @"\s+", "")) { case "report": Instance.AccountManager.StartReporting(Instance.AccountManager.Index, new ReportInfo { SteamID = SteamUtil.Parse(Instance.Options.Target), MatchID = SharecodeUtil.Parse(Instance.Options.MatchID), AbusiveText = Instance.Options.AbusiveTextChat, AbusiveVoice = Instance.Options.AbusiveVoiceChat, Griefing = Instance.Options.Griefing, AimHacking = Instance.Options.AimHacking, WallHacking = Instance.Options.WallHacking, OtherHacking = Instance.Options.OtherHacking }); break; case "commend": Instance.AccountManager.StartCommending(Instance.AccountManager.Index, new CommendInfo { SteamID = SteamUtil.Parse(Instance.Options.Target), Friendly = Instance.Options.Friendly, Leader = Instance.Options.Leader, Teacher = Instance.Options.Teacher }); break; default: Logger.Error("Could not parse {Mode} to Mode.", Instance.Options.Mode); Instance.UIManager.ShowForm(UIType.General); break; } } Instance.UIManager.StartMainLoop(); } // The Shutdown handler gets only called after the last thread finished. // Quartz runs a Watchdog until Scheduler#Shutdown is called, so we're calling it // before Titan will be calling the Shutdown Hook. Logger.Debug("Shutdown: Shutting down Quartz.NET Scheduler."); Instance.Scheduler.Shutdown(); return(0); // OK. }
public static int Main(string[] args) { Thread.CurrentThread.Name = "Main"; // Initialize Titan Singleton Instance = new Titan { Options = new Options() }; // Create official Titan logger Logger = LogCreator.Create(); Logger.Debug("Startup: Loading Serilog <-> Common Logging Bridge."); // Common Logging <-> Serilog bridge Log.Logger = LogCreator.Create("Quartz.NET Scheduler"); Logger.Debug("Startup: Loading Quartz.NET."); // Quartz.NET Instance.Scheduler = StdSchedulerFactory.GetDefaultScheduler(); Instance.Scheduler.Start(); Logger.Debug("Startup: Refreshing Steam Universe list."); // SteamKit SteamDirectory.Initialize().Wait(); Logger.Debug("Startup: Parsing Command Line Arguments."); // Parse arguments provided with the starting of this if (Parser.Default.ParseArguments(args, Instance.Options)) { Logger.Information("Skipping UI and going directly to botting - Target: {Target} - Match ID: {ID}", Instance.Options.Target, Instance.Options.MatchID); Instance.EnableUI = false; } else { Logger.Information("The arguments --target and --mode were omitted - opening the UI."); Instance.EnableUI = true; } // Reinitialize logger with new parsed debug option Logger = LogCreator.Create(); // Initialize the Debug directory if Debug mode is enabled if (Instance.Options.Debug) { if (!Instance.DebugDirectory.Exists) { Instance.DebugDirectory.Create(); } } Logger.Debug("Startup: Loading UI Manager, Victim Tracker, Account Manager and Ban Manager."); Instance.UIManager = new UIManager(); // Initialize Victim Tracker Instance.VictimTracker = new VictimTracker(); // Schedule Victim Tracking Instance.Scheduler.ScheduleJob(Instance.VictimTracker.Job, Instance.VictimTracker.Trigger); // Initialize Account Manager Instance.AccountManager = new AccountManager(new FileInfo( Path.Combine(Environment.CurrentDirectory, Instance.Options.File)) ); // Initialize Thread Manager Instance.ThreadManager = new ThreadManager(); // Initialize Ban Manager Instance.BanManager = new BanManager(); Logger.Debug("Startup: Registering Shutdown Hook."); // Register shutdown hook AppDomain.CurrentDomain.ProcessExit += OnShutdown; Logger.Debug("Startup: Parsing accounts.json file."); if (Instance.AccountManager.ParseAccountFile()) { Logger.Debug("Initializing Forms..."); Instance.UIManager.InitializeForms(); Logger.Debug("Startup: Loading Web API Key"); // Resolve API Key File Instance.APIKeyResolver = new WebAPIKeyResolver(); Instance.APIKeyResolver.ParseKeyFile(); Logger.Information("Hello and welcome to Titan v1.4.0-Dev."); if (Instance.EnableUI) { Instance.UIManager.ShowForm(UIType.General); } else { switch (Regex.Replace(Instance.Options.Mode.ToLowerInvariant(), @"\s+", "")) { case "report": Instance.AccountManager.StartReporting(Instance.AccountManager.Index, new ReportInfo { SteamID = SteamUtil.Parse(Instance.Options.Target), MatchID = SharecodeUtil.Parse(Instance.Options.MatchID), AbusiveText = Instance.Options.AbusiveTextChat, AbusiveVoice = Instance.Options.AbusiveVoiceChat, Griefing = Instance.Options.Griefing, AimHacking = Instance.Options.AimHacking, WallHacking = Instance.Options.WallHacking, OtherHacking = Instance.Options.OtherHacking }); break; case "commend": Instance.AccountManager.StartCommending(Instance.AccountManager.Index, new CommendInfo { SteamID = SteamUtil.Parse(Instance.Options.Target), Friendly = Instance.Options.Friendly, Leader = Instance.Options.Leader, Teacher = Instance.Options.Teacher }); break; default: Log.Error("Could not parse {Mode} to Mode.", Instance.Options.Mode); Instance.UIManager.ShowForm(UIType.General); break; } } Instance.UIManager.StartMainLoop(); } // The Shutdown handler gets only called after the last thread finished. // Quartz runs a Watchdog until Scheduler#Shutdown is called, so we're calling it // before Titan will be calling the Shutdown Hook. Logger.Debug("Shutdown: Shutting down Quartz.NET Scheduler."); Instance.Scheduler.Shutdown(); return(0); // OK. }
public void FeedWithTarget(string target) { Target = SteamUtil.Parse(target).AccountID; }