Advertisement
Spectrewiz

Ticket System

Feb 10th, 2012
433
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 33.90 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Reflection;
  4. using System.Drawing;
  5. using Terraria;
  6. using Hooks;
  7. using TShockAPI;
  8. using TShockAPI.DB;
  9. using System.ComponentModel;
  10. using System.IO;
  11. using Newtonsoft.Json;
  12.  
  13. namespace TicketSystem
  14. {
  15.     [APIVersion(1, 11)]
  16.     public class TicketSystem : TerrariaPlugin
  17.     {
  18.         #region Main Plugin
  19.         public static List<Player> Players = new List<Player>();
  20.         public static string save = "";
  21.         public static string banned = "";
  22.         public static TicketList ticketlist;
  23.         public override string Name
  24.         {
  25.             get { return "Ticket System"; }
  26.         }
  27.  
  28.         public override string Author
  29.         {
  30.             get { return "Spectrewiz"; }
  31.         }
  32.  
  33.         public override string Description
  34.         {
  35.             get { return "This plugin allows users in game to file tickets (complaints) that admins can access."; }
  36.         }
  37.  
  38.         public override Version Version
  39.         {
  40.             get { return new Version(1, 1, 0); }
  41.         }
  42.  
  43.         public override void Initialize()
  44.         {
  45.             GameHooks.Update += OnUpdate;
  46.             GameHooks.Initialize += OnInitialize;
  47.             NetHooks.GreetPlayer += OnGreetPlayer;
  48.             ServerHooks.Leave += OnLeave;
  49.             ServerHooks.Chat += OnChat;
  50.         }
  51.  
  52.         protected override void Dispose(bool disposing)
  53.         {
  54.             if (disposing)
  55.             {
  56.                 GameHooks.Update -= OnUpdate;
  57.                 GameHooks.Initialize -= OnInitialize;
  58.                 NetHooks.GreetPlayer -= OnGreetPlayer;
  59.                 ServerHooks.Leave -= OnLeave;
  60.                 ServerHooks.Chat -= OnChat;
  61.             }
  62.             base.Dispose(disposing);
  63.         }
  64.  
  65.         public TicketSystem(Main game)
  66.             : base(game)
  67.         {
  68.             Order = 10;
  69.         }
  70.  
  71.         public void OnInitialize()
  72.         {
  73.             Commands.ChatCommands.Add(new Command(Hlpme, "ticket", "hlpme"));
  74.             Commands.ChatCommands.Add(new Command("TicketList", TicketListCommmand, "ticketlist", "ticlist"));
  75.             Commands.ChatCommands.Add(new Command("TicketClear", TicketClear, "ticketclear", "ticketsclear", "ticclear", "ticsclear"));
  76.             Commands.ChatCommands.Add(new Command("TicketBan", TicBan, "ticketban", "ticban"));
  77.  
  78.             save = Path.Combine(TShock.SavePath, @"TicketSystem\Tickets.json");
  79.             banned = Path.Combine(TShock.SavePath, @"TicketSystem\Banned.txt");
  80.             TicketReader Reader = new TicketReader();
  81.  
  82.             if (File.Exists(save))
  83.             {
  84.                 try
  85.                 {
  86.                     ticketlist = Reader.readFile(save);
  87.                     Console.ForegroundColor = ConsoleColor.Yellow;
  88.                     if (ticketlist.Tickets.Count != 0)
  89.                         Console.WriteLine(ticketlist.Tickets.Count + " tickets have been loaded.");
  90.                     else
  91.                         Console.WriteLine("There are no tickets.");
  92.                     Console.ResetColor();
  93.                 }
  94.                 catch (Exception e)
  95.                 {
  96.                     Console.ForegroundColor = ConsoleColor.Red;
  97.                     Console.WriteLine("Error in Tickets.json file! Check log for more details.");
  98.                     Console.WriteLine(e.Message);
  99.                     Console.ResetColor();
  100.                     Log.Error("--------- Config Exception in TicketSystem Config file (Tickets.json) ---------");
  101.                     Log.Error(e.Message);
  102.                     Log.Error("---------------------------------- Error End ----------------------------------");
  103.                 }
  104.             }
  105.             else
  106.             {
  107.                 Directory.CreateDirectory(Path.Combine(TShock.SavePath, "TicketSystem"));
  108.                 ticketlist = Reader.writeFile(save);
  109.                 Console.ForegroundColor = ConsoleColor.Yellow;
  110.                 Console.WriteLine("There are no tickets.");
  111.                 Console.ResetColor();
  112.                 Log.Info("No tickets submitted.");
  113.             }
  114.         }
  115.  
  116.         public void OnUpdate()
  117.         {
  118.         }
  119.  
  120.         public void OnGreetPlayer(int who, HandledEventArgs e)
  121.         {
  122.             lock (Players)
  123.                 Players.Add(new Player(who));
  124.             string name = TShock.Players[who].Name.ToLower();
  125.             string line;
  126.             var ListedPlayer = Player.GetPlayerByName(name);
  127.             int count = ticketlist.Tickets.Count;
  128.             if (File.Exists(save))
  129.             {
  130.                 int i = ticketlist.responseCount(TShock.Players[who].Name);
  131.                 int x = ticketlist.ticketCount(TShock.Players[who].Name);
  132.                 if (i != 0)
  133.                 {
  134.                     TShock.Players[who].SendMessage("--- Responses for Tickets (" + i + "/" + x + ") ---", 30, 144, 255);
  135.                     foreach (StandardTicket t in ticketlist.Tickets)
  136.                     {
  137.                         if (t.getName() == TShock.Players[who].Name)
  138.                         {
  139.                             if (t.getResponse() != null)
  140.                             {
  141.                                 TShock.Players[who].SendMessage("(" + t.getTicket().Trim() + "): " + t.getResponse(), 135, 206, 255);
  142.                             }
  143.                         }
  144.                     }
  145.                     TShock.Players[who].SendMessage("To clear the responses, type /ticket clearresponses", 30, 144, 255);
  146.                 }
  147.             }
  148.             if (File.Exists(banned))
  149.             {
  150.                 using (StreamReader reader = new StreamReader(banned))
  151.                 {
  152.                     while ((line = reader.ReadLine()) != null)
  153.                     {
  154.                         if (String.Compare(line, name) == 0)
  155.                         {
  156.                             ListedPlayer.SetTicState(Player.CanSubmitTickets.no);
  157.                         }
  158.                     }
  159.                 }
  160.             }
  161.             if (!TShock.Players[who].Group.HasPermission("TicketList") && (ListedPlayer.GetTicState() != Player.CanSubmitTickets.no))
  162.             {
  163.                 TShock.Players[who].SendMessage("To write a complaint, use /ticket <Message>", 30, 144, 255);
  164.             }
  165.             else if ((TShock.Players[who].Group.HasPermission("TicketList")) && (count != 0))
  166.             {
  167.                 TShock.Players[who].SendMessage("There are " + count + " tickets submitted, use /ticketlist to view them.", 30, 144, 255);
  168.             }
  169.         }
  170.  
  171.         public void OnLeave(int ply)
  172.         {
  173.             lock (Players)
  174.             {
  175.                 for (int i = 0; i < Players.Count; i++)
  176.                 {
  177.                     if (Players[i].Index == ply)
  178.                     {
  179.                         Players.RemoveAt(i);
  180.                         break;
  181.                     }
  182.                 }
  183.             }
  184.         }
  185.  
  186.         public void OnChat(messageBuffer msg, int ply, string text, HandledEventArgs e)
  187.         {
  188.         }
  189.         #endregion
  190.  
  191.         #region Commands and whatnot
  192.         public static void Hlpme(CommandArgs args)
  193.         {
  194.             var FindMe = Player.GetPlayerByName(args.Player.Name);
  195.             if (FindMe.GetTicState() == Player.CanSubmitTickets.no)
  196.             {
  197.                 args.Player.SendMessage("You cannot send tickets because you have had that privilege revoked.", Color.Red);
  198.             }
  199.             if ((FindMe.GetTicState() == Player.CanSubmitTickets.yes) && (args.Parameters.Count < 1))
  200.             {
  201.                 args.Player.SendMessage("You must enter a message!", Color.Red);
  202.             }
  203.             if ((FindMe.GetTicState() == Player.CanSubmitTickets.yes) && (args.Parameters.Count >= 1) && (args.Parameters[0].ToLower() != "clearresponses"))
  204.             {
  205.                 try
  206.                 {
  207.                     string text = "";
  208.                     foreach (string word in args.Parameters)
  209.                     {
  210.                         text = text + word + " ";
  211.                     }
  212.  
  213.                     ticketlist.AddItem(new StandardTicket(args.Player.Name, text, null, DateTime.Now.ToString()));
  214.  
  215.                     File.Delete(save);
  216.                     TextWriter tw = new StreamWriter(save, true);
  217.                     tw.Write(JsonConvert.SerializeObject(ticketlist, Formatting.Indented));
  218.                     tw.Close();
  219.  
  220.                     args.Player.SendMessage("Your Ticket has been sent!", 30, 144, 255);
  221.                     foreach (Player player in TicketSystem.Players)
  222.                     {
  223.                         if (player.TSPlayer.Group.HasPermission("TicketList"))
  224.                         {
  225.                             player.TSPlayer.SendMessage(string.Format("{0} just submitted a ticket: {1}", args.Player.Name, text), 30, 144, 255);
  226.                         }
  227.                     }
  228.                 }
  229.                 catch (Exception e)
  230.                 {
  231.                     args.Player.SendMessage("Your ticket could not be sent, contact an administrator.", Color.Red);
  232.                     Console.ForegroundColor = ConsoleColor.Red;
  233.                     Console.WriteLine(e.Message);
  234.                     Console.ResetColor();
  235.                     Log.Error(e.Message);
  236.                 }
  237.             }
  238.             if (args.Parameters[0].ToLower() == "clearresponses")
  239.             {
  240.                 try
  241.                 {
  242.                     ticketlist.clearResponses(args.Player.Name);
  243.                 }
  244.                 catch (Exception e)
  245.                 {
  246.                     Log.Error(e.Message);
  247.                 }
  248.                 finally
  249.                 {
  250.                     File.Delete(save);
  251.                     TextWriter tw = new StreamWriter(save, true);
  252.                     tw.Write(JsonConvert.SerializeObject(ticketlist, Formatting.Indented));
  253.                     tw.Close();
  254.                     args.Player.SendMessage("Your responses have been cleared!", 30, 144, 255);
  255.                 }
  256.             }
  257.         }
  258.  
  259.         public static void TicketListCommmand(CommandArgs args)
  260.         {
  261.             int pglimit = 5;
  262.             int linelmt = 1;
  263.             int crntpage = 0;
  264.            
  265.             if (args.Parameters.Count > 0)
  266.             {
  267.                 if (!int.TryParse(args.Parameters[0], out crntpage) || crntpage < 1)
  268.                 {
  269.                     args.Player.SendMessage(string.Format("Invalid page number ({0})", crntpage), Color.Red);
  270.                     return;
  271.                 }
  272.                 crntpage--;
  273.             }
  274.  
  275.             if (ticketlist.Tickets.Count < 1)
  276.             {
  277.                 args.Player.SendMessage("There are no tickets submitted.", Color.Red);
  278.                 return;
  279.             }
  280.  
  281.             int pgcount = ticketlist.Tickets.Count / pglimit;
  282.             if (crntpage > pgcount)
  283.             {
  284.                 args.Player.SendMessage(string.Format("Page number exceeds pages ({0}/{1})", crntpage + 1, pgcount + 1), Color.Red);
  285.                 return;
  286.             }
  287.  
  288.             args.Player.SendMessage(string.Format("Tickets ({0}/{1}):", crntpage + 1, pgcount + 1), 30, 144, 255);
  289.  
  290.             var ticketslist = new List<string>();
  291.             for (int i = (crntpage * pglimit); (i < ((crntpage * pglimit) + pglimit)) && i < ticketlist.Tickets.Count; i++)
  292.             {
  293.                 ticketslist.Add((i + 1) + ". " + ticketlist.Tickets[i].getTime() + " - " + ticketlist.Tickets[i].getName() + ": " + ticketlist.Tickets[i].getTicket());
  294.             }
  295.             var lines = ticketslist.ToArray();
  296.             for (int i = 0; i < lines.Length; i += linelmt)
  297.             {
  298.                 args.Player.SendMessage(string.Join(", ", lines, i, Math.Min(lines.Length - i, linelmt)), 135, 206, 255); ;
  299.             }
  300.  
  301.             if (crntpage < pgcount)
  302.             {
  303.                 args.Player.SendMessage(string.Format("Type /ticketlist {0} for more tickets.", (crntpage + 2)), 30, 144, 255);
  304.             }
  305.         }
  306.  
  307.         public static void TicketClear(CommandArgs args)
  308.         {
  309.             if (args.Parameters.Count < 1)
  310.             {
  311.                 args.Player.SendMessage("Syntax: /ticketclear <all/id/response>", 30, 144, 255);
  312.                 args.Player.SendMessage("- /ticketclear <all>: Removes all the tickets", 135, 206, 255);
  313.                 args.Player.SendMessage("- /ticketclear <id> <id>: Removes one ticket ID based on the IDs listed with /ticketlist", 135, 206, 255);
  314.                 args.Player.SendMessage("- /ticketclear <response/r> <id> <message>: When the player who submitted that ticket logs in, he will recieve the message and the ticket will automatically be cleared.", 135, 206, 255);
  315.                 args.Player.SendMessage("Note: /ticketclear can be shortened to /ticclear", 30, 144, 255);
  316.             }
  317.             else
  318.             {
  319.                 switch (args.Parameters[0].ToLower())
  320.                 {
  321.                     case "all":
  322.                         try
  323.                         {
  324.                             ticketlist.Tickets.Clear();
  325.                             File.Delete(save);
  326.                             TextWriter tw = new StreamWriter(save, true);
  327.                             tw.Write(JsonConvert.SerializeObject(ticketlist, Formatting.Indented));
  328.                             tw.Close();
  329.                             args.Player.SendMessage("All of the Tickets were cleared!", 30, 144, 255);
  330.                             Console.ForegroundColor = ConsoleColor.Red;
  331.                             Console.WriteLine(string.Format("{0} has cleared all of the tickets.", args.Player.Name));
  332.                             Console.ResetColor();
  333.                             Log.Info(string.Format("{0} has cleared all of the tickets.", args.Player.Name));
  334.                         }
  335.                         catch (Exception e)
  336.                         {
  337.                             // Let the console know what went wrong, and tell the player that there was an error.
  338.                             args.Player.SendMessage("There are no tickets!", Color.Red);
  339.                             Console.ForegroundColor = ConsoleColor.Red;
  340.                             Console.WriteLine(e.Message);
  341.                             Console.ResetColor();
  342.                             Log.Error(e.Message);
  343.                         }
  344.                         break;
  345.                     case "id":
  346.                         if (args.Parameters.Count > 1)
  347.                         {
  348.                             try
  349.                             {
  350.                                 int lineToDelete = (Convert.ToInt32(args.Parameters[1]) - 1);
  351.                                 ticketlist.Tickets.RemoveAt(lineToDelete);
  352.                                 File.Delete(save);
  353.                                 TextWriter tw = new StreamWriter(save, true);
  354.                                 tw.Write(JsonConvert.SerializeObject(ticketlist, Formatting.Indented));
  355.                                 tw.Close();
  356.                                 args.Player.SendMessage(string.Format("Ticket ID {0} was cleared!", args.Parameters[1]), 30, 144, 255);
  357.                                 Console.ForegroundColor = ConsoleColor.Red;
  358.                                 Console.WriteLine(string.Format("{0} has cleared ticket ID: {1}", args.Player.Name, args.Parameters[1]));
  359.                                 Console.ResetColor();
  360.                                 Log.Info(string.Format("{0} has cleared ticket ID: {1}", args.Player.Name, args.Parameters[1]));
  361.                             }
  362.                             catch (Exception e)
  363.                             {
  364.                                 args.Player.SendMessage("Not a valid ID.", Color.Red);
  365.                                 Console.ForegroundColor = ConsoleColor.Red;
  366.                                 Console.WriteLine(e.Message);
  367.                                 Console.ResetColor();
  368.                                 Log.Error(e.Message);
  369.                             }
  370.                         }
  371.                         else
  372.                         {
  373.                             args.Player.SendMessage("You have to state a ticket ID! Syntax: /ticclear id <id>", Color.Red);
  374.                         }
  375.                         break;
  376.                     case "response":
  377.                         if (args.Parameters.Count > 1)
  378.                         {
  379.                             int i = 0;
  380.                             string respond = "";
  381.                             foreach (string arg in args.Parameters)
  382.                             {
  383.                                 i++;
  384.                                 if (i > 2)
  385.                                 {
  386.                                     respond = respond + arg + " ";
  387.                                 }
  388.                             }
  389.                             int lineToRespond = 0;
  390.                             int.TryParse(args.Parameters[1], out lineToRespond);
  391.                             string playername = ticketlist.Tickets[lineToRespond - 1].getName();
  392.                             string ticket = ticketlist.Tickets[lineToRespond - 1].getTicket();
  393.                             try
  394.                             {
  395.                                 var listedplayer = Player.GetPlayerByName(playername);
  396.                                 listedplayer.TSPlayer.SendMessage("Your ticket (" + ticket.Trim() + ") has been responded to: ", 30, 144, 255);
  397.                                 listedplayer.TSPlayer.SendMessage(respond.Trim(), 135, 206, 255);
  398.                                 ticketlist.Tickets.RemoveAt(lineToRespond - 1);
  399.                                 File.Delete(save);
  400.                                 TextWriter tw = new StreamWriter(save, true);
  401.                                 tw.Write(JsonConvert.SerializeObject(ticketlist, Formatting.Indented));
  402.                                 tw.Close();
  403.                             }
  404.                             catch
  405.                             {
  406.                                 try
  407.                                 {
  408.                                     ticketlist.Tickets[lineToRespond - 1].setResponse(respond);
  409.                                     File.Delete(save);
  410.                                     TextWriter tw = new StreamWriter(save, true);
  411.                                     tw.Write(JsonConvert.SerializeObject(ticketlist, Formatting.Indented));
  412.                                     tw.Close();
  413.                                 }
  414.                                 catch (Exception e)
  415.                                 {
  416.                                     args.Player.SendMessage("Your response could not be sent.", Color.Red);
  417.                                     Console.ForegroundColor = ConsoleColor.Red;
  418.                                     Console.WriteLine(e.Message);
  419.                                     Console.ResetColor();
  420.                                     Log.Error(e.Message);
  421.                                 }
  422.                             }
  423.                             finally { args.Player.SendMessage("You just responded to Ticket ID: " + lineToRespond, 30, 144, 255); }
  424.                         }
  425.                         break;
  426.                     case "r":
  427.                         if (args.Parameters.Count > 1)
  428.                         {
  429.                             int i = 0;
  430.                             string respond = "";
  431.                             foreach (string arg in args.Parameters)
  432.                             {
  433.                                 i++;
  434.                                 if (i > 2)
  435.                                 {
  436.                                     respond = respond + arg + " ";
  437.                                 }
  438.                             }
  439.                             int lineToRespond = 0;
  440.                             int.TryParse(args.Parameters[1], out lineToRespond);
  441.                             string playername = ticketlist.Tickets[lineToRespond - 1].getName();
  442.                             string ticket = ticketlist.Tickets[lineToRespond - 1].getTicket();
  443.                             try
  444.                             {
  445.                                 var listedplayer = Player.GetPlayerByName(playername);
  446.                                 listedplayer.TSPlayer.SendMessage("Your ticket (" + ticket.Trim() + ") has been responded to: ", 30, 144, 255);
  447.                                 listedplayer.TSPlayer.SendMessage(respond.Trim(), 135, 206, 255);
  448.                                 ticketlist.Tickets.RemoveAt(lineToRespond - 1);
  449.                                 File.Delete(save);
  450.                                 TextWriter tw = new StreamWriter(save, true);
  451.                                 tw.Write(JsonConvert.SerializeObject(ticketlist, Formatting.Indented));
  452.                                 tw.Close();
  453.                             }
  454.                             catch
  455.                             {
  456.                                 try
  457.                                 {
  458.                                     ticketlist.Tickets[lineToRespond - 1].setResponse(respond);
  459.                                     File.Delete(save);
  460.                                     TextWriter tw = new StreamWriter(save, true);
  461.                                     tw.Write(JsonConvert.SerializeObject(ticketlist, Formatting.Indented));
  462.                                     tw.Close();
  463.                                 }
  464.                                 catch (Exception e)
  465.                                 {
  466.                                     args.Player.SendMessage("Your response could not be sent.", Color.Red);
  467.                                     Console.ForegroundColor = ConsoleColor.Red;
  468.                                     Console.WriteLine(e.Message);
  469.                                     Console.ResetColor();
  470.                                     Log.Error(e.Message);
  471.                                 }
  472.                             }
  473.                             finally { args.Player.SendMessage("You just responded to Ticket ID: " + lineToRespond, 30, 144, 255); }
  474.                         }
  475.                         break;
  476.                     case "help":
  477.                         args.Player.SendMessage("Syntax: /ticketclear <all/id/response>", 30, 144, 255);
  478.                         args.Player.SendMessage("- /ticketclear <all>: Removes all the tickets", 135, 206, 255);
  479.                         args.Player.SendMessage("- /ticketclear <id> <id>: Removes one ticket ID based on the IDs listed with /ticketlist", 135, 206, 255);
  480.                         args.Player.SendMessage("- /ticketclear <response/r> <id> <message>: When the player who submitted that ticket logs in, he will recieve the message and the ticket will automatically be cleared.", 135, 206, 255);
  481.                         args.Player.SendMessage("Note: /ticketclear can be shortened to /ticclear", 30, 144, 255);
  482.                         break;
  483.                     default:
  484.                         args.Player.SendMessage("Syntax: /ticketclear <all/id/response>", Color.Red);
  485.                         break;
  486.                 }
  487.             }
  488.         }
  489.  
  490.         public static void TicBan(CommandArgs args)
  491.         {
  492.             string tempbanned = Path.Combine(TShock.SavePath, @"TicketSystem\tempbanned.txt");
  493.             int numberOfPeopleBanned = 1;
  494.             if (args.Parameters.Count < 1)
  495.             {
  496.                 args.Player.SendMessage("Syntax: /ticketban <ban/unban/list>", 30, 144, 255);
  497.                 args.Player.SendMessage("- /ticketban <ban> <player name>: stops the player from filing tickets", 135, 206, 255);
  498.                 args.Player.SendMessage("- /ticketban <unban> <player id/name>: unbans a player based on their ID or their name. Use /ticban list to find out banned IDs", 135, 206, 255);
  499.                 args.Player.SendMessage("- /ticketban <list>: lists players that are banned and their IDs", 135, 206, 255);
  500.                 args.Player.SendMessage("Note: /ticketban can be shortened to /ticban", 30, 144, 255);
  501.             }
  502.             else
  503.             {
  504.                 switch (args.Parameters[0].ToLower())
  505.                 {
  506.                     case "ban":
  507.                         if (args.Parameters.Count == 1)
  508.                         {
  509.                             args.Player.SendMessage("/ticketban ban <player name>: stops the player from filing tickets", 30, 144, 255);
  510.                         }
  511.                         else
  512.                         {
  513.                             try
  514.                             {
  515.                                 var FindPlayer = TShock.Utils.FindPlayer(args.Parameters[1]);
  516.                                 var ListedPlayer = Player.GetPlayerByName(args.Parameters[1]);
  517.                                 if (FindPlayer.Count == 1)
  518.                                 {
  519.                                     if ((ListedPlayer.GetTicState() == Player.CanSubmitTickets.yes) && (!FindPlayer[0].Group.HasPermission("TicketBan")))
  520.                                     {
  521.                                         ListedPlayer.SetTicState(Player.CanSubmitTickets.no);
  522.                                         args.Player.SendMessage(string.Format("You have revoked the privileges of submitting tickets from {0}", FindPlayer[0].Name), Color.Red);
  523.                                         using (StreamWriter writer = new StreamWriter(banned))
  524.                                         {
  525.                                             writer.WriteLine(FindPlayer[0].Name.ToLower());
  526.                                         }
  527.                                         FindPlayer[0].SendMessage("You can no longer submit tickets.", Color.Red);
  528.                                     }
  529.                                     else if (FindPlayer[0].Group.HasPermission("TicketBan"))
  530.                                     {
  531.                                         args.Player.SendMessage("This player cannot be banned from using tickets.", Color.Red);
  532.                                         Log.Info(args.Player.Name + " tried to ban " + FindPlayer[0].Name + " from using tickets.");
  533.                                     }
  534.                                     else
  535.                                     {
  536.                                         args.Player.SendMessage("This player already is banned from using tickets. If you want to give back the privilege, use /ticetban unban <player id/name> (find banned IDs by doing /ticketban list)", Color.Red);
  537.                                     }
  538.                                 }
  539.                                 else if (FindPlayer.Count > 1)
  540.                                 {
  541.                                     args.Player.SendMessage(string.Format("There is more than one person online with the name {0}", args.Parameters[1]), Color.Red);
  542.                                 }
  543.                                 else if (FindPlayer.Count < 1)
  544.                                 {
  545.                                     args.Player.SendMessage(string.Format("There is nobody online with the name {0}", args.Parameters[1]), Color.Red);
  546.                                 }
  547.                             }
  548.                             catch (Exception e)
  549.                             {
  550.                                 args.Player.SendMessage(string.Format("There is nobody online with the name {0}", args.Parameters[1]), Color.Red);
  551.                                 Console.ForegroundColor = ConsoleColor.Red;
  552.                                 Console.WriteLine(e.Message);
  553.                                 Console.ResetColor();
  554.                                 Log.Error(e.Message);
  555.                             }
  556.                         }
  557.                         break;
  558.                     case "unban":
  559.                         if (args.Parameters.Count == 1)
  560.                         {
  561.                             args.Player.SendMessage("/ticketban unban <player id/name>: unbans a player based on their ID or their name. Use /ticban list to find out banned IDs", 30, 144, 255);
  562.                         }
  563.                         else
  564.                         {
  565.                             int id;
  566.                             try
  567.                             {
  568.                                 int.TryParse(args.Parameters[1], out id);
  569.                                 if (id == 0)
  570.                                 {
  571.                                     string line = null;
  572.                                     string line_to_delete = args.Parameters[1];
  573.                                     int i = 0;
  574.  
  575.                                     StreamReader reader = new StreamReader(banned);
  576.                                     StreamWriter writer = new StreamWriter(tempbanned, true);
  577.                                     while ((line = reader.ReadLine()) != null)
  578.                                     {
  579.                                         if (String.Compare(line, line_to_delete, true) != 0)
  580.                                         {
  581.                                             writer.WriteLine(line);
  582.                                         }
  583.                                         else
  584.                                         {
  585.                                             i++;
  586.                                         }
  587.                                     }
  588.                                     reader.Close();
  589.                                     writer.Close();
  590.                                     File.Delete(banned);
  591.                                     File.Move(tempbanned, banned);
  592.                                     if (i == 0)
  593.                                     {
  594.                                         args.Player.SendMessage(string.Format("Cannot find player name {0}", args.Parameters[1]), Color.Red);
  595.                                     }
  596.                                     else
  597.                                     {
  598.                                         args.Player.SendMessage(string.Format("You have given back the privileges of submitting tickets to player: {0}. This will take affect when they next log in.", args.Parameters[1]), 30, 144, 255);
  599.                                         Console.ForegroundColor = ConsoleColor.Red;
  600.                                         Console.WriteLine(string.Format("{0} has unbanned player: {1}", args.Player.Name, args.Parameters[1]));
  601.                                         Console.ResetColor();
  602.                                         Log.Info(string.Format("{0} has unbanned player: {1}", args.Player.Name, args.Parameters[1]));
  603.                                         i = 0;
  604.                                     }
  605.                                 }
  606.                                 else
  607.                                 {
  608.                                     var file = new List<string>(System.IO.File.ReadAllLines(banned));
  609.                                     file.RemoveAt(id - 1);
  610.                                     File.WriteAllLines(banned, file.ToArray());
  611.                                     args.Player.SendMessage(string.Format("You have given back the privileges of submitting tickets to player ID: {0}. This will take affect when they next log in.", args.Parameters[1]), 30, 144, 255);
  612.                                     Console.ForegroundColor = ConsoleColor.Red;
  613.                                     Console.WriteLine(string.Format("{0} has unbanned player ID: {1}", args.Player.Name, args.Parameters[1]));
  614.                                     Console.ResetColor();
  615.                                     Log.Info(string.Format("{0} has unbanned player ID: {1}", args.Player.Name, args.Parameters[1]));
  616.                                 }
  617.                             }
  618.                             catch (Exception e)
  619.                             {
  620.                                 args.Player.SendMessage(string.Format("Cannot find player {0}", args.Parameters[1]), Color.Red);
  621.                                 Console.ForegroundColor = ConsoleColor.Red;
  622.                                 Console.WriteLine(e.Message);
  623.                                 Console.ResetColor();
  624.                                 Log.Error(e.Message);
  625.                             }
  626.                         }
  627.                         break;
  628.                     case "list":
  629.                         try
  630.                         {
  631.                             StreamReader sr = new StreamReader(banned);
  632.                             while (sr.Peek() >= 0)
  633.                             {
  634.                                 args.Player.SendMessage(numberOfPeopleBanned + ". " + sr.ReadLine(), 135, 206, 255);
  635.                                 numberOfPeopleBanned++;
  636.                             }
  637.                             sr.Close();
  638.                             numberOfPeopleBanned = 1;
  639.                         }
  640.                         catch (Exception e)
  641.                         {
  642.                             args.Player.SendMessage("Nobody is banned from using tickets.", Color.Red);
  643.                             Console.ForegroundColor = ConsoleColor.Red;
  644.                             Console.WriteLine(e.Message);
  645.                             Console.ResetColor();
  646.                             Log.Error(e.Message);
  647.                         }
  648.                         break;
  649.                     case "help":
  650.                         args.Player.SendMessage("Syntax: /ticketban <ban/unban/list>", 30, 144, 255);
  651.                         args.Player.SendMessage("- /ticketban <ban> <player name>: stops the player from filing tickets", 135, 206, 255);
  652.                         args.Player.SendMessage("- /ticketban <unban> <player id/name>: unbans a player based on their ID or their name. Use /ticban list to find out banned IDs", 135, 206, 255);
  653.                         args.Player.SendMessage("- /ticketban <list>: lists players that are banned and their IDs", 135, 206, 255);
  654.                         args.Player.SendMessage("Note: /ticketban can be shortened to /ticban", 30, 144, 255);
  655.                         break;
  656.                     default:
  657.                         args.Player.SendMessage("Syntax: /ticketban <ban/unban/list>", Color.Red);
  658.                         break;
  659.                 }
  660.             }
  661.         }
  662.         #endregion
  663.     }
  664. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement