Advertisement
KeinMitleid

Facepunch Events

Aug 7th, 2015
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 13.42 KB | None | 0 0
  1. // TODO: Implement BanEventArgs, ItemEventArgs, PostEventArgs, and RatingEventArgs.
  2. // TODO: Implement Length and Ratings.
  3.  
  4. // Should we route these events based on user?
  5. // What about tense?
  6. // Events are handled by SynchronizationHandler.
  7.  
  8. using HtmlAgilityPack;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Linq;
  12. using System.Web;
  13.  
  14. namespace Facepunch
  15. {
  16.     internal static class Helpers
  17.     {
  18.         internal static int GetQuery (this IEnumerable<HtmlNode> node, int index, string key)
  19.         {
  20.             return int.Parse (HttpUtility.ParseQueryString (node.ElementAt (index).Attributes ("href")).Get (key));
  21.         }
  22.        
  23.         internal static string GetText (this IEnumerable<HtmlNode> node, int index)
  24.         {
  25.             return string.Intern (node.ElementAt (index).InnerText);
  26.         }
  27.     }
  28.    
  29.     public class BanEventArgs : ItemEventArgs
  30.     {
  31.         public int    ModeratorId   { get; }
  32.         public int    PostId        { get; }
  33.         public int    ThreadId      { get; }
  34.         public int    UserId        { get; }
  35.         public string ModeratorName { get; }
  36.         public string ThreadName    { get; }
  37.         public string UserName      { get; }
  38.           /*public Length Length        { get; }*/
  39.         public string Reason        { get; }
  40.    
  41.         internal BanEventArgs (int time, HtmlNode html) : base (time)
  42.         {
  43.             var a = html.Descendants ("a");
  44.             var b = html.Descendants ("b");
  45.    
  46.             ModeratorId   = a.GetQuery (0, "u");
  47.             PostId        = a.GetQuery (4, "p");
  48.             ThreadId      = a.GetQuery (4, "t");
  49.             UserId        = a.GetQuery (2, "u");
  50.             ModeratorName = a.GetText  (0);
  51.             ThreadName    = a.GetText  (4);
  52.             UserName      = a.GetText  (2);
  53.               /*Length        = b.GetText  (0);*/
  54.             Reason        = b.GetText  (1);
  55.         }
  56.        
  57.         public override string ToString ()
  58.         {
  59.             return $"{ModeratorName} banned {UserName} for {/**/} in {ThreadName} with the reason {Reason}.";
  60.         }
  61.     }
  62.    
  63.     public class BanPermanentEventArgs : ItemEventArgs
  64.     {
  65.         public int    ModeratorId   { get; }
  66.         public int    PostId        { get; }
  67.         public int    ThreadId      { get; }
  68.         public int    UserId        { get; }
  69.         public string ModeratorName { get; }
  70.         public string ThreadName    { get; }
  71.         public string UserName      { get; }
  72.         public string Reason        { get; }
  73.    
  74.         internal BanPermanentEventArgs (int time, HtmlNode html) : base (time)
  75.         {
  76.             var a = html.Descendants ("a");
  77.             var b = html.Descendants ("b");
  78.            
  79.             ModeratorId   = a.GetQuery (0, "u");
  80.             PostId        = a.GetQuery (4, "p");
  81.             ThreadId      = a.GetQuery (4, "t");
  82.             UserId        = a.GetQuery (2, "u");
  83.             ModeratorName = a.GetText  (0);
  84.             ThreadName    = a.GetText  (4);
  85.             UserName      = a.GetText  (2);
  86.             Reason        = b.GetText  (0);
  87.         }
  88.        
  89.         public override string ToString ()
  90.         {
  91.             return $"{ModeratorName} permabanned {UserName} in {ThreadName} with the reason {Reason}.";
  92.         }
  93.     }
  94.    
  95.     public class CloseBigEventArgs : ItemEventArgs
  96.     {
  97.         public int    ThreadId   { get; }
  98.         public string ThreadName { get; }
  99.        
  100.         internal CloseBigEventArgs (int time, HtmlNode html) : base (time)
  101.         {
  102.             var a = html.Descendants ("a");
  103.            
  104.             ThreadId   = a.GetQuery (0, "t");
  105.             ThreadName = a.GetText  (0);
  106.         }
  107.        
  108.         public override string ToString ()
  109.         {
  110.             return $"The thread {ThreadName} was closed because it had over 5000 posts.";
  111.         }
  112.     }
  113.    
  114.     public class CloseEventArgs : ItemEventArgs
  115.     {
  116.         public int    ForumId       { get; }
  117.         public int    ModeratorId   { get; }
  118.         public int    ThreadId      { get; }
  119.         public int    UserId        { get; }
  120.         public string ForumName     { get; }
  121.         public string ModeratorName { get; }
  122.         public string ThreadName    { get; }
  123.         public string UserName      { get; }
  124.         public string Reason        { get; }
  125.        
  126.         internal CloseEventArgs (int time, HtmlNode html) : base (time)
  127.         {
  128.             var a = html.Descendants ("a");
  129.             var b = html.Descendants ("b");
  130.            
  131.             ForumId       = a.GetQuery (5, "f");
  132.             ModeratorId   = a.GetQuery (0, "u");
  133.             ThreadId      = a.GetQuery (4, "t");
  134.             UserId        = a.GetQuery (2, "u");
  135.             ForumName     = a.GetText  (5);
  136.             ModeratorName = a.GetText  (0);
  137.             ThreadName    = a.GetText  (4);
  138.             UserName      = a.GetText  (2);
  139.             Reason        = b.GetText  (0);
  140.         }
  141.        
  142.         public override string ToString ()
  143.         {
  144.             return $"{ModeratorName} closed {UserName}'s thread called {ThreadName} in {ForumName} with the reason {Reason}.";
  145.         }
  146.     }
  147.    
  148.     public class DeleteHardEventArgs : ItemEventArgs
  149.     {
  150.         public int    ForumOldId    { get; }
  151.         public int    ModeratorId   { get; }
  152.         public string ForumOldName  { get; }
  153.         public string ModeratorName { get; }
  154.         public string ThreadName    { get; }
  155.         public string Reason        { get; }
  156.        
  157.         internal DeleteHardEventArgs (int time, HtmlNode html) : base (time)
  158.         {
  159.             var a = html.Descendants ("a");
  160.             var b = html.Descendants ("b");
  161.            
  162.             ForumOldId    = a.GetQuery (2, "f");
  163.             ModeratorId   = a.GetQuery (0, "f");
  164.             ForumOldName  = a.GetText  (2);
  165.             ModeratorName = a.GetText  (0);
  166.             ThreadName    = b.GetText  (0);
  167.             Reason        = b.GetText  (1);
  168.         }
  169.        
  170.         public override string ToString ()
  171.         {
  172.             return $"{ModeratorName} removed the thread {ThreadName} in {ForumOldName} with the reason {Reason}.";
  173.         }
  174.     }
  175.    
  176.     public class DeleteSoftEventArgs : ItemEventArgs
  177.     {
  178.         public int    ForumId       { get; }
  179.         public int    ModeratorId   { get; }
  180.         public int    ThreadId      { get; }
  181.         public string ForumName     { get; }
  182.         public string ModeratorName { get; }
  183.         public string ThreadName    { get; }
  184.         public string Reason        { get; }
  185.            
  186.         internal DeleteSoftEventArgs (int time, HtmlNode html) : base (time)
  187.         {
  188.             var a = html.Descendants ("a");
  189.             var b = html.Descendants ("b");
  190.            
  191.             ForumId       = a.GetQuery (3, "f");
  192.             ModeratorId   = a.GetQuery (0, "u");
  193.             ThreadId      = a.GetQuery (2, "t");
  194.             ForumName     = a.GetText  (3);
  195.             ModeratorName = a.GetText  (0);
  196.             ThreadName    = a.GetText  (2);
  197.             Reason        = b.GetText  (0);
  198.         }
  199.        
  200.         public override string ToString ()
  201.         {
  202.             return $"{ModeratorName} deleted the thread {ThreadName} in {ForumName} with the reason {Reason}.";
  203.         }
  204.     }
  205.    
  206.     public class DropDeadThreadEventArgs : ItemEventArgs
  207.     {
  208.         public int    ForumOldId    { get; }
  209.         public int    ModeratorId   { get; }
  210.         public int    ThreadId      { get; }
  211.         public int    UserId        { get; }
  212.         public string ForumOldName  { get; }
  213.         public string ModeratorName { get; }
  214.         public string ThreadName    { get; }
  215.         public string UserName      { get; }
  216.         public string Reason        { get; }
  217.        
  218.         internal DropDeadThreadEventArgs (int time, HtmlNode html) : base (time)
  219.         {
  220.             var a = html.Descendants ("a");
  221.             var b = html.Descendants ("b");
  222.            
  223.             ForumOldId    = a.GetQuery (5, "f");
  224.             ModeratorId   = a.GetQuery (0, "u");
  225.             ThreadId      = a.GetQuery (4, "t");
  226.             UserId        = a.GetQuery (2, "u");
  227.             ForumOldName  = a.GetText  (5);
  228.             ModeratorName = a.GetText  (0);
  229.             ThreadName    = a.GetText  (4);
  230.             UserName      = a.GetText  (2);
  231.             Reason        = b.GetText  (0);
  232.         }
  233.        
  234.         public override string ToString ()
  235.         {
  236.             return $"{ModeratorName} DDT'd {UserName}'s thread called {ThreadName} in {ForumOldName} with the reason {Reason}.";
  237.         }
  238.     }
  239.  
  240.     public class ItemEventArgs : EventArgs
  241.     {
  242.         public int Time { get; }
  243.        
  244.         internal ItemEventArgs (int time)
  245.         {
  246.             Time = time;
  247.         }
  248.  
  249.         public override string ToString ()
  250.         {
  251.             return $"";
  252.         }
  253.     }
  254.    
  255.     public class JoinEventArgs : ItemEventArgs
  256.     {
  257.         public int    UserId   { get; }
  258.         public string UserName { get; }
  259.        
  260.         internal JoinEventArgs (int time, HtmlNode html) : base (time)
  261.         {
  262.             var a = html.Descendants ("a");
  263.            
  264.             UserId   = a.GetQuery (0, "u");
  265.             UserName = a.GetText  (0);
  266.         }
  267.        
  268.         public override string ToString ()
  269.         {
  270.             return $"{UserName} has joined.";
  271.         }
  272.     }
  273.    
  274.     public class MoveEventArgs : ItemEventArgs
  275.     {
  276.         public int    ForumNewId    { get; }
  277.         public int    ForumOldId    { get; }
  278.         public int    ModeratorId   { get; }
  279.         public int    ThreadId      { get; }
  280.         public int    UserId        { get; }
  281.         public string ForumNewName  { get; }
  282.         public string ForumOldName  { get; }
  283.         public string ModeratorName { get; }
  284.         public string ThreadName    { get; }
  285.         public string UserName      { get; }
  286.            
  287.         internal MoveEventArgs (int time, HtmlNode html) : base (time)
  288.         {
  289.             var a = html.Descendants ("a");
  290.            
  291.             ForumNewId    = a.GetQuery (6, "f");
  292.             ForumOldId    = a.GetQuery (5, "f");
  293.             ModeratorId   = a.GetQuery (0, "u");
  294.             ThreadId      = a.GetQuery (4, "t");
  295.             UserId        = a.GetQuery (2, "u");
  296.             ForumNewName  = a.GetText  (6);
  297.             ForumOldName  = a.GetText  (5);
  298.             ModeratorName = a.GetText  (0);
  299.             ThreadName    = a.GetText  (4);
  300.             UserName      = a.GetText  (2);
  301.         }
  302.        
  303.         public override string ToString ()
  304.         {
  305.             return $"{ModeratorName} moved {UserName}'s thread called {ThreadName} from {ForumOldName} to {ForumNewName}.";
  306.         }
  307.     }
  308.    
  309.     public class OpenEventArgs : ItemEventArgs
  310.     {  
  311.         public int    ForumId       { get; }
  312.         public int    ModeratorId   { get; }
  313.         public int    ThreadId      { get; }
  314.         public int    UserId        { get; }
  315.         public string ForumName     { get; }
  316.         public string ModeratorName { get; }
  317.         public string ThreadName    { get; }
  318.         public string UserName      { get; }
  319.         public string Reason        { get; }
  320.        
  321.         internal OpenEventArgs (int time, HtmlNode html) : base (time)
  322.         {
  323.             var a = html.Descendants ("a");
  324.             var b = html.Descendants ("b");
  325.            
  326.             ForumId       = a.GetQuery (5, "f");
  327.             ModeratorId   = a.GetQuery (0, "u");
  328.             ThreadId      = a.GetQuery (4, "t");
  329.             UserId        = a.GetQuery (2, "u");
  330.             ForumName     = a.GetText  (5);
  331.             ModeratorName = a.GetText  (0);
  332.             ThreadName    = a.GetText  (4);
  333.             UserName      = a.GetText  (2);
  334.             Reason        = b.GetText  (0);
  335.         }
  336.        
  337.         public override string ToString ()
  338.         {
  339.             return $"{ModeratorName} opened {UserName}'s thread called {ThreadName} in {ForumName} with the reason {Reason}.";
  340.         }
  341.     }
  342.    
  343.     public class PostEventArgs : ItemEventArgs
  344.     {
  345.         public int    ForumId    { get; }
  346.         public int    PostId     { get; }
  347.         public int    ThreadId   { get; }
  348.         public int    UserId     { get; }
  349.         public string ForumName  { get; }
  350.         public string ThreadName { get; }
  351.         public string UserName   { get; }
  352.         public bool   Mentioned  { get; }
  353.        
  354.         internal PostEventArgs (int time, HtmlNode html) : base (time)
  355.         {
  356.             var a   = html.Descendants ("a");
  357.             var div = html.Descendants ("div");
  358.            
  359.             ForumId    = a.GetQuery  (0, "f");
  360.             PostId     = a.GetQuery  (2, "p");
  361.             ThreadId   = a.GetQuery  (2, "t");
  362.             UserId     = a.GetQuery  (1, "u");
  363.             ForumName  = a.GetText   (0);
  364.             ThreadName = a.GetText   (2);
  365.             UserName   = a.GetText   (1);
  366.             Mentioned  = div.GetText (5) == "Mentioned";
  367.         }
  368.        
  369.         public override string ToString ()
  370.         {
  371.             return $"";
  372.         }
  373.     }
  374.    
  375.     public class RatingEventArgs : ItemEventArgs
  376.     {
  377.         public int    PostId     { get; }
  378.         public int    ThreadId   { get; }
  379.         public int    UserId     { get; }
  380.         public string ThreadName { get; }
  381.         public string UserName   { get; }
  382.           /*public Rating Rating     { get; }*/
  383.        
  384.         internal RatingEventArgs (int time, HtmlNode html) : base (time)
  385.         {
  386.             var a = html.Descendants ("a");
  387.            
  388.             PostId     = a.GetQuery (1, "p");
  389.             ThreadId   = a.GetQuery (1, "t");
  390.             UserId     = a.GetQuery (0, "u");
  391.             ThreadName = a.GetText  (1);
  392.             UserName   = a.GetText  (0);
  393.         }
  394.        
  395.         public override string ToString ()
  396.         {
  397.             return $"{UserName} rated your post in {ThreadName}.";
  398.         }
  399.     }
  400.    
  401.     public class UnbanEventArgs : ItemEventArgs
  402.     {
  403.         public int    ModeratorId   { get; }
  404.         public int    UserId        { get; }
  405.         public string ModeratorName { get; }
  406.         public string UserName      { get; }
  407.         public string Reason        { get; }
  408.            
  409.         internal UnbanEventArgs (int time, HtmlNode html) : base (time)
  410.         {
  411.             var a = html.Descendants ("a");
  412.             var b = html.Descendants ("b");
  413.            
  414.             ModeratorId   = a.GetQuery (0, "u");
  415.             UserId        = a.GetQuery (2, "u");
  416.             ModeratorName = a.GetText  (0);
  417.             UserName      = a.GetText  (2);
  418.             Reason        = b.GetText  (0);
  419.         }
  420.        
  421.         public override string ToString ()
  422.         {
  423.             return $"{ModeratorName} unbanned {UserName} with the reason {Reason}.";
  424.         }
  425.     }
  426.    
  427.     public delegate void BanEventHandler            (object sender, BanEventArgs args);
  428.     public delegate void BanPermanentEventHandler   (object sender, BanPermanentEventArgs args);
  429.     public delegate void CloseEventHandler          (object sender, CloseEventArgs args);
  430.     public delegate void CloseBigEventHandler       (object sender, CloseBigEventArgs args);
  431.     public delegate void DeleteHardEventHandler     (object sender, DeleteHardEventArgs args);
  432.     public delegate void DeleteSoftEventHandler     (object sender, DeleteSoftEventArgs args);
  433.     public delegate void DropDeadThreadEventHandler (object sender, DropDeadThreadEventArgs args);
  434.     public delegate void ItemEventHandler           (object sender, ItemEventArgs args);
  435.     public delegate void JoinEventHandler           (object sender, JoinEventArgs args);
  436.     public delegate void MoveEventHandler           (object sender, MoveEventArgs args);
  437.     public delegate void OpenEventHandler           (object sender, OpenEventArgs args);
  438.     public delegate void PostEventHandler           (object sender, PostEventArgs args);
  439.     public delegate void RatingEventHandler         (object sender, RatingEventArgs args);
  440.     public delegate void UnbanEventHandler          (object sender, UnbanEventArgs args);
  441. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement