public static void Ticket(CommandArgs args) { if (!File.Exists(save)) { if (Directory.Exists(Path.Combine(TShock.SavePath, "TicketSystem"))) { TicketReader reader = new TicketReader(); ticketlist = reader.writeFile(save); } else { Setup(); } } var FindMe = Player.GetPlayerByName(args.Player.Name); if (FindMe.GetTicState() == Player.CanSubmitTickets.no) { args.Player.SendMessage("You cannot send tickets because you have had that privilege revoked.", Color.Red); } else if ((FindMe.GetTicState() == Player.CanSubmitTickets.yes) && (args.Parameters.Count < 1)) { args.Player.SendMessage("/Ticket <-t:[tag]/tags/responses/clearresponses> <message>:", bluebase); args.Player.SendMessage("- /Ticket <message>: This submits a message with a tag marked as the default tag.", bluesecondarybase); args.Player.SendMessage("- /Ticket -t:<tag> <message>: This submits a message with a defined tag. Ex: \"/ticket -t:report Bob griefed my house!\" (notice: -t:<tag> has no spaces between the colon and the specified tag).", bluesecondarybase); args.Player.SendMessage("- /Ticket tags: This shows a list of the valid tags defined in the \"tags.txt\" file.", bluesecondarybase); args.Player.SendMessage("- /Ticket responses: This shows a list of the tickets that were responded too, and their specific response.", bluesecondarybase); args.Player.SendMessage("- /Ticket clearresponses: This clears all of the tickets you have submitted that have responses.", bluesecondarybase); args.Player.SendMessage("WARNING: If you misuse the privalege of submitting tickets, you will have that privalege taken away.", Color.Red); } else if (args.Parameters[0].ToLower() == "clearresponses") { try { lock (ticketlist.Tickets) { for (int i = ticketlist.Tickets.Count - 1; i >= 0; i++) { if (ticketlist.Tickets[i].getName() == args.Player.Name) { if (ticketlist.Tickets[i].getResponse() != null) ticketlist.Tickets.Remove(ticketlist.Tickets[i]); } } } } catch (Exception e) { Log.Error(e.Message); } UpdateTicketsInJSON(save); args.Player.SendMessage("Your responses have been cleared!", bluebase); } else if (args.Parameters[0].ToLower() == "responses") { if (File.Exists(save)) { int i = ticketlist.responseCount(args.Player.Name); int x = ticketlist.ticketCount(args.Player.Name); if (i != 0) { args.Player.SendMessage("--- Responses for Tickets (" + i + "/" + x + ") ---", bluebase); lock (ticketlist.Tickets) { foreach (StandardTicket t in ticketlist.Tickets) { if (t.getName() == args.Player.Name) { if (t.getResponse() != null) { args.Player.SendMessage("(" + t.getTicket().Trim() + "): " + t.getResponse(), bluesecondarybase); } } } } args.Player.SendMessage("To clear the responses, type /ticket clearresponses", bluebase); } } } else if ((FindMe.GetTicState() == Player.CanSubmitTickets.yes) && (args.Parameters[0].ToLower() == "tags") || (args.Parameters[0].ToLower() == "tag") || (args.Parameters[0].ToLower() == "taglist")) { if (File.Exists(tagpath)) { string[] officialtags = File.ReadAllText(tagpath).Split('\n'); args.Player.SendMessage("Tags:", bluebase); foreach (string officialtag in officialtags) { if (officialtag.StartsWith(" ") || officialtag == null || officialtag == "") continue; args.Player.SendMessage(officialtag, bluesecondarybase); } } } else if ((FindMe.GetTicState() == Player.CanSubmitTickets.yes) && (args.Parameters[0].ToLower().StartsWith("-tag:") || args.Parameters[0].ToLower().StartsWith("-t:"))) { string tag = args.Parameters[0].ToLower().Split(':')[1]; string[] officialtags = File.ReadAllText(tagpath).Split('\n'); for (int i = 0; i < officialtags.Length; i++) { officialtags[i] = officialtags[i].Trim().ToLower(); } if (!((IList<string>)officialtags).Contains(tag.Trim())) tag = officialtags[0]; if ((tag == "") || (tag == null)) { if (!((IList<string>)officialtags).Contains(args.Parameters[1].ToLower().Trim())) tag = officialtags[0]; } try { string text = ""; foreach (string word in args.Parameters) { if (word == args.Parameters[0]) continue; else text = text + word + " "; } ticketlist.AddItem(new StandardTicket(args.Player.Name, text, null, DateTime.Now.ToString(), tag)); UpdateTicketsInJSON(save); args.Player.SendMessage("Your Ticket has been sent!", bluebase); args.Player.SendMessage("Note: It has been tagged as " + tag + ". Use \"/ticket tags\" to view a list of valid tags.", bluesecondarybase); foreach (Player player in TicketSystem.Players) { if (player.TSPlayer.Group.HasPermission("TicketList")) { player.TSPlayer.SendMessage(string.Format("{0} just submitted a ticket: {1}", args.Player.Name, text), bluebase); } } Console.ForegroundColor = ConsoleColor.Blue; Console.Write(args.Player.Name + " just submitted a ticket: ", bluebase); Console.ResetColor(); Console.WriteLine(text); if (Config.beepOnTicketSubmission) Console.Beep(637, 100); } catch (Exception e) { args.Player.SendMessage("Your ticket could not be sent, contact an administrator.", Color.Red); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(e.Message); Console.ResetColor(); Log.Error(e.Message); } } else if (FindMe.GetTicState() == Player.CanSubmitTickets.yes) { try { string[] officialtags = File.ReadAllText(tagpath).Split('\n'); for (int i = 0; i < officialtags.Length; i++) { officialtags[i] = officialtags[i].Trim().ToLower(); } string text = ""; foreach (string word in args.Parameters) { text = text + word + " "; } ticketlist.AddItem(new StandardTicket(args.Player.Name, text, null, DateTime.Now.ToString(), officialtags[0])); UpdateTicketsInJSON(save); args.Player.SendMessage("Your Ticket has been sent!", bluebase); foreach (Player player in TicketSystem.Players) { if (player.TSPlayer.Group.HasPermission("TicketList")) { player.TSPlayer.SendMessage(string.Format("{0} just submitted a ticket: {1}", args.Player.Name, text), bluebase); } } Console.ForegroundColor = ConsoleColor.Blue; Console.Write(args.Player.Name + " just submitted a ticket: ", bluebase); Console.ResetColor(); Console.WriteLine(text); if (Config.beepOnTicketSubmission) Console.Beep(637, 100); } catch (Exception e) { args.Player.SendMessage("Your ticket could not be sent, contact an administrator.", Color.Red); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(e.Message); Console.ResetColor(); Log.Error(e.Message); } } }
public static void Setup() { save = Path.Combine(TShock.SavePath, @"TicketSystem\Tickets.json"); banned = Path.Combine(TShock.SavePath, @"TicketSystem\Banned.txt"); TicketReader Reader = new TicketReader(); Config = new Config(); if (File.Exists(save)) { try { ticketlist = Reader.readFile(save); Console.ForegroundColor = ConsoleColor.Yellow; if (ticketlist.Tickets.Count != 0) Console.WriteLine(ticketlist.Tickets.Count + " tickets have been loaded."); else Console.WriteLine("There are no tickets."); Console.ResetColor(); try { if (File.Exists(ConfigPath)) Config = Config.Read(ConfigPath); Config.Write(ConfigPath); } catch (Exception e) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Error in TicketSystem Config.json file! Check log for more details."); Console.WriteLine(e.Message); Console.ForegroundColor = ConsoleColor.Gray; Log.Error("Config Exception"); Log.Error(e.ToString()); } } catch (Exception e) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Error in Tickets.json file! Check log for more details."); Console.WriteLine(e.Message); Console.ResetColor(); Log.Error("------------- Config Exception in Ticket List file (Tickets.json) -------------"); Log.Error(e.Message); Log.Error("---------------------------------- Error End ----------------------------------"); Console.ForegroundColor = ConsoleColor.Red; } } else { Directory.CreateDirectory(Path.Combine(TShock.SavePath, "TicketSystem")); ticketlist = Reader.writeFile(save); using (StreamWriter writer = new StreamWriter(tagpath, true)) { writer.WriteLine("Default"); writer.WriteLine("Grief"); writer.WriteLine("Report"); writer.WriteLine("High-Importance"); } using (StreamWriter writer = new StreamWriter(Path.Combine(TShock.SavePath, @"TicketSystem\loginmsg.txt"), true)) { writer.WriteLine("To write a complaint, use \"/ticket [-t:<tag>] <Message>\""); writer.WriteLine("NOTE: Tags are optional. To view a list of tags, use \"/ticket tags\""); } Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("There are no tickets."); Console.ResetColor(); Log.Info("No tickets submitted."); } }