daily pastebin goal
16%
SHARE
TWEET

KoGaMa.NET V0.1.5.2

a guest Dec 23rd, 2017 33 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Discord: CaptainJens#9067
  2. using System;
  3. using System.Net.Http;
  4. using System.Threading.Tasks;
  5. using Newtonsoft.Json;
  6. using System.Collections.Generic;
  7. using System.Timers;
  8. using System.Linq;
  9. using System.Text.RegularExpressions;
  10.  
  11. namespace KoGaMa.NET
  12. {
  13.     class Program
  14.     {
  15.         public static void MessageReceived(Bot.Message Message)
  16.         {
  17.             if (Message.Content.ToLower() == "ping")
  18.             {
  19.                 Message.Reply("pong");
  20.             }
  21.             else if (Message.Content.ToLower() == "kill me")
  22.             {
  23.                 Message.Reply(string.Concat(Enumerable.Repeat(":BunnyEmote51 ", 99999)));
  24.             }
  25.             else if (Message.Content.ToLower().StartsWith("play ") && Message.Author.Name == "CaptainJens")
  26.             {
  27.                 Message.Bot.SetStatus("playing", Message.Content.Substring(5));
  28.                 Message.Reply("Now playing: " + Message.Bot.GameID);
  29.             }
  30.             else if (Message.Content.ToLower().StartsWith("build ") && Message.Author.Name == "CaptainJens")
  31.             {
  32.                 Message.Bot.SetStatus("building", Message.Content.Substring(6));
  33.                 Message.Reply("Now building: " + Message.Bot.GameID);
  34.             }
  35.             else if (Message.Content.ToLower() == "gooffline" && Message.Author.Name == "CaptainJens")
  36.             {
  37.                 Message.Bot.SetStatus("offline");
  38.                 Message.Reply("I'm offline now!");
  39.             }
  40.             else if (Message.Content.ToLower() == "goonline" && Message.Author.Name == "CaptainJens")
  41.             {
  42.                 Message.Bot.SetStatus("online");
  43.                 Message.Reply("I'm online again!");
  44.             }
  45.         }
  46.  
  47.         static async Task AsyncBot()
  48.         {
  49.             Bot bot = new Bot();
  50.  
  51.             bot.MessageReceived += MessageReceived;
  52.  
  53.             bot.LoggedIn += async () =>
  54.             {
  55.                 await bot.SendMessage("Hello", "335181");
  56.             };
  57.  
  58.             bot.EnableLogging = true;
  59.             bot.SetServer("WWW");
  60.             bot.DebugColor = ConsoleColor.DarkCyan;
  61.             bot.SetStatus("playing", "123");
  62.             await bot.Login("username", "password");
  63.  
  64.             //await bot.CheckFeed("335181");
  65.  
  66.             await Task.Delay(-1);
  67.         }
  68.  
  69.         static void Main(string[] args)
  70.         {
  71.             AsyncBot().Wait();
  72.         }
  73.     }
  74.     //KoGaMa Bot
  75.     class Bot
  76.     {
  77.         //VARIABLES
  78.         private HttpClient client { get; set; } = new HttpClient();
  79.         private Timer CheckChatInterval = new Timer() { Interval = 2000, AutoReset = true, Enabled = true };
  80.         private Timer SendPulseInterval = new Timer() { Interval = 10000, AutoReset = true, Enabled = true };
  81.  
  82.         public bool EnableLogging = false;
  83.         public string Server { get; private set; }
  84.         public ConsoleColor DebugColor = ConsoleColor.DarkCyan;
  85.         public string CSRFToken { get; private set; }
  86.         public string Notify_Token { get; private set; }
  87.  
  88.         public Action<Bot.Message> MessageReceived;
  89.         public Action LoggedIn;
  90.  
  91.         public string GameID { get; private set; }
  92.         public string Status { get; private set; } //"playing", "building", "online", "offline"
  93.         public string Username { get; private set; }
  94.         public string ID { get; private set; }
  95.         public string Gold { get; private set; }
  96.         public string Silver { get; private set; }
  97.         public string Friends_Limit { get; private set; }
  98.         public string Created { get; private set; }
  99.         public string Email { get; private set; }
  100.         public string Language { get; private set; }
  101.         public bool Email_Confirmed { get; private set; }
  102.         public bool IsAdmin { get; private set; }
  103.  
  104.         public string XP { get; private set; }
  105.         public string Level_Progress { get; private set; }
  106.         public string XP_To_Next_Level { get; private set; }
  107.         public string Previous_Level_XP { get; private set; }
  108.         public string Next_Level_XP { get; private set; }
  109.  
  110.         //CONSTRUCTOR
  111.         public Bot()
  112.         {
  113.             try
  114.             {
  115.                 this.CheckChatInterval.Elapsed += this.CheckChat;
  116.                 this.SendPulseInterval.Elapsed += this.SendPulse;
  117.             }
  118.             catch (Exception e)
  119.             {
  120.                 Log("ERROR", e.Message);
  121.             }
  122.         }
  123.  
  124.         //SET STATUS (Status = "playing", "building, "online" or "offline")
  125.         public void SetStatus(string Status, string GameID = "0")
  126.         {
  127.             try
  128.             {
  129.                 if (Status.ToLower() != "offline" && Status.ToLower() != "online" && Status.ToLower() != "playing" && Status.ToLower() != "building")
  130.                 {
  131.                     Log("ERROR", "Invalid status type. Status type has to be \"playing\", \"building\", \"online\" or \"offline\"");
  132.                 }
  133.                 else
  134.                 {
  135.                     this.GameID = GameID;
  136.                     this.Status = Status;
  137.                     if (Status.ToLower() == "offline")
  138.                         SendPulseInterval.Stop();
  139.                     else
  140.                         SendPulseInterval.Start();
  141.                 }
  142.             }
  143.             catch (Exception e)
  144.             {
  145.                 Log("ERROR", e.Message);
  146.             }
  147.         }
  148.  
  149.         //SET SERVER
  150.         public void SetServer(string Server)
  151.         {
  152.             try
  153.             {
  154.                 if (Server.ToLower() != "www" && Server.ToLower() != "friends" && Server.ToLower() != "br")
  155.                 {
  156.                     Log("ERROR", "Invalid server. The server must be WWW, Friends or BR.");
  157.                 }
  158.                 else if (Server.ToLower() == "www")
  159.                 {
  160.                     this.client.BaseAddress = new Uri("http://www.kogama.com");
  161.                     this.Server = "WWW";
  162.                 }
  163.                 else if (Server.ToLower() == "br")
  164.                 {
  165.                     this.client.BaseAddress = new Uri("http://kogama.com.br/");
  166.                     this.Server = "BR";
  167.                 }
  168.                 else if (Server.ToLower() == "friends")
  169.                 {
  170.                     this.client.BaseAddress = new Uri("http://friends.kogama.com/");
  171.                     this.Server = "Friends";
  172.                 }
  173.             }
  174.             catch (Exception e)
  175.             {
  176.                 Log("ERROR", e.Message);
  177.             }
  178.         }
  179.  
  180.         //GET STRING BETWEEN TWO STRINGS (START AND END) (USER TO READ TEXT IN HTML RESPONSES)
  181.         private List<string> GetSubStrings(string Input, string Start, string End)
  182.         {
  183.             MatchCollection matches = Regex.Matches(Input, Start + "(.*?)" + End);
  184.             List<string> list = new List<string>();
  185.             foreach (Match match in matches)
  186.                 list.Add(match.Groups[1].Value);
  187.             return list;
  188.         }
  189.  
  190.         //DISPLAY AN ERROR IN THE CONSOLE
  191.         private void Log(string LogType, string Message)
  192.         {
  193.             if (LogType.ToLower() == "error")
  194.             {
  195.                 Console.ForegroundColor = ConsoleColor.Red;
  196.                 Console.WriteLine(LogType + ":");
  197.                 Console.ResetColor();
  198.                 Console.WriteLine(Message);
  199.                 Console.WriteLine("\n");
  200.             }
  201.             else if (EnableLogging)
  202.             {
  203.                 Console.ForegroundColor = this.DebugColor;
  204.                 Console.WriteLine(LogType + ":");
  205.                 Console.ResetColor();
  206.                 Console.WriteLine(Message);
  207.                 Console.WriteLine("\n");
  208.             }
  209.         }
  210.  
  211.         //CLASSES USED AS REQUEST DATA (PRIVATE)
  212.         private class LoginInfo
  213.         {
  214.             public string username;
  215.             public string password;
  216.         }
  217.  
  218.         private class MessageInfo
  219.         {
  220.             public string message;
  221.             public string to_profile_id;
  222.             public bool history;
  223.             public bool status;
  224.         }
  225.  
  226.         private class OnlineInfo
  227.         {
  228.             public string location;
  229.             public string status;
  230.         }
  231.  
  232.         private class CommentInfo
  233.         {
  234.             public string comment;
  235.         }
  236.  
  237.         //CLASSES FOR OBJECTS (PUBLIC)
  238.         public class Message
  239.         {
  240.             public User Author = new User();
  241.             public string Content;
  242.             public string Created;
  243.             public Bot Bot;
  244.             public async void Reply(string Message)
  245.             {
  246.                 try
  247.                 {
  248.                     if (this.Author.ID == "" || this.Bot == null)
  249.                     {
  250.                         Bot.Log("ERROR", "Message object is missing data.");
  251.                     }
  252.                     else
  253.                     {
  254.                         await Bot.SendMessage(Message, this.Author.ID, Log: false);
  255.                         Bot.Log("COMMAND", "Input: " + this.Content + "\nAuthor: " + this.Author.Name + "\nOutput: " + Message + "\n");
  256.                     }
  257.                 }
  258.                 catch (Exception e)
  259.                 {
  260.                     Bot.Log("ERROR", e.Message);
  261.                 }
  262.             }
  263.         }
  264.  
  265.         public class User
  266.         {
  267.             public string Name;
  268.             public string ID;
  269.         }
  270.  
  271.         //-----REQUESTS-----//
  272.         //LOGIN
  273.         public async Task Login(string Username, string Password)
  274.         {
  275.             try
  276.             {
  277.                 if (Server.ToLower() != "www" && Server.ToLower() != "friends" && Server.ToLower() != "br")
  278.                 {
  279.                     Log("ERROR", "Please provide a server before logging in. \nTo provide a server, use: bot.SetServer(\"server\")\n\"server\" can be \"WWW\", \"Friends\" or \"BR\"");
  280.                     CheckChatInterval.Stop();
  281.                     SendPulseInterval.Stop();
  282.                     Console.ReadLine();
  283.                     return;
  284.                 }
  285.                 LoginInfo user = new LoginInfo() { username = Username, password = Password };
  286.                 HttpResponseMessage response = await this.client.PostAsJsonAsync("/auth/login/", user);
  287.  
  288.                 response.EnsureSuccessStatusCode();
  289.  
  290.                 Console.WriteLine("\nLogged in!\n");
  291.  
  292.                 //SETTING VARIABLES
  293.                 var DataObject = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(await response.Content.ReadAsStringAsync());
  294.                 this.Username = DataObject["data"]["username"];
  295.                 this.ID = DataObject["data"]["id"];
  296.                 this.Gold = DataObject["data"]["gold"];
  297.                 this.Silver = DataObject["data"]["silver"];
  298.                 this.Friends_Limit = DataObject["data"]["friends_limit"];
  299.                 this.Created = DataObject["data"]["created"];
  300.                 if (DataObject["data"]["email"] != "")
  301.                     this.Email = DataObject["data"]["email"];
  302.                 else
  303.                     this.Email = "none";
  304.                 this.Language = DataObject["data"]["language"];
  305.                 this.Email_Confirmed = DataObject["data"]["email_confirmed"];
  306.                 this.IsAdmin = DataObject["data"]["is_admin"];
  307.  
  308.                 this.XP = DataObject["data"]["xp"];
  309.                 this.Level_Progress = DataObject["data"]["level_progress"];
  310.                 this.Previous_Level_XP = DataObject["data"]["previous_level_xp"];
  311.                 this.Next_Level_XP = DataObject["data"]["next_level_xp"];
  312.                 this.XP_To_Next_Level = DataObject["data"]["xp_to_next_level"];
  313.  
  314.                 //GETTING TOKENS
  315.                 string HTMLData = await this.client.GetAsync("/auth/after-login/").Result.Content.ReadAsStringAsync();
  316.  
  317.                 this.CSRFToken = this.GetSubStrings(HTMLData, "<meta name=\"CSRFToken\" content=\"", "\">")[0];
  318.                 this.client.DefaultRequestHeaders.Add("X-Csrf-Token", this.CSRFToken);
  319.                 this.Notify_Token = this.GetSubStrings(HTMLData, "<meta name=\"Notify-Token\" content=\"", "\">")[0];
  320.                 HTMLData = null;
  321.                 LoggedIn?.Invoke();
  322.             }
  323.             catch (Exception e)
  324.             {
  325.                 if (e.Message.Contains("400"))
  326.                     Log("ERROR", e.Message + "\nThis error can be related to entering the wrong username or password. \nPlease close the application and check your login info.");
  327.                 else
  328.                     Log("ERROR", e.Message);
  329.             }
  330.         }
  331.  
  332.         //WIP - GET USER INFO
  333.         public async Task<string> GetUserInfo(string username)
  334.         {
  335.             try
  336.             {
  337.                 Console.ForegroundColor = this.DebugColor;
  338.                 Console.WriteLine("USER INFO:");
  339.                 Console.ResetColor();
  340.                 if (username == this.Username) //GET OWN INFO - WIP
  341.                 {
  342.                     await Task.Delay(20);
  343.  
  344.                     Console.WriteLine("Username: " + this.Username);
  345.                     Console.WriteLine("ID: " + this.ID);
  346.                     Console.WriteLine("Gold: " + this.Gold);
  347.                     Console.WriteLine("Silver: " + this.Silver);
  348.                     Console.WriteLine("Friends limit: " + this.Friends_Limit);
  349.                     Console.WriteLine("Account created: " + this.Created);
  350.                     Console.WriteLine("Email address: " + this.Email);
  351.                     Console.WriteLine("Language: " + this.Language);
  352.                     Console.WriteLine("Email confirmed: " + this.Email_Confirmed);
  353.                     Console.WriteLine("Is administrator: " + this.IsAdmin);
  354.  
  355.                     Console.WriteLine("\nXP: " + this.XP);
  356.                     Console.WriteLine("Level progress to next level: " + this.Level_Progress + "%");
  357.                     Console.WriteLine("XP needed to reach next level: " + this.XP_To_Next_Level);
  358.                     Console.WriteLine("Previous Level XP: " + this.Previous_Level_XP);
  359.                     Console.WriteLine("Next Level XP: " + this.Next_Level_XP);
  360.                     Console.WriteLine("\n");
  361.                     return "";
  362.                 }
  363.                 else //SEND REQUEST TO GET INFO WIP
  364.                 {
  365.                     return "YOUR INFO:\n\nUsername: nub\nGold: -200\nXP: 0.000001";
  366.                 }
  367.             }
  368.             catch (Exception e)
  369.             {
  370.                 Log("ERROR", e.Message);
  371.                 return "An error occured.";
  372.             }
  373.         }
  374.  
  375.         //PURCHASE MODEL(S)
  376.         public async Task PurchaseModel(string modelID, int times)
  377.         {
  378.             try
  379.             {
  380.                 Log("PURCHASING MODELS", "Please wait...");
  381.                 int x = 0;
  382.                 while (x < times)
  383.                 {
  384.                     if ((Convert.ToInt32(this.Gold) >= 30 && (this.Server.ToLower() == "www" || this.Server.ToLower() == "br")) || (Convert.ToInt32(this.Gold) >= 50 && (this.Server.ToLower() == "friends")))
  385.                     {
  386.                         x += 1;
  387.                         if (EnableLogging) Console.WriteLine("\nThe model will be purchased in 30 seconds!");
  388.                         await Task.Delay(30000);
  389.  
  390.                         HttpResponseMessage response = await this.client.PostAsJsonAsync("/model/market/i-" + modelID + "/purchase/", "");
  391.  
  392.                         response.EnsureSuccessStatusCode();
  393.                         if (EnableLogging) Console.WriteLine("Model purchased!");
  394.                     }
  395.                     else
  396.                     {
  397.                         Log("ERROR", "You do not have enough gold to purchase the model.");
  398.                         return;
  399.                     }
  400.                 }
  401.                 await Task.Delay(500);
  402.                 if (EnableLogging) Console.WriteLine("\nTransaction completed!\n");
  403.                 await Task.Delay(500);
  404.             }
  405.             catch (Exception e)
  406.             {
  407.                 Log("ERROR", e.Message);
  408.             }
  409.         }
  410.  
  411.         //SEND MESSAGE
  412.         public async Task SendMessage(string Message, string To_ID, bool Log = true)
  413.         {
  414.             try
  415.             {
  416.                 MessageInfo msgObject = new MessageInfo()
  417.                 {
  418.                     message = Message,
  419.                     to_profile_id = To_ID
  420.                 };
  421.  
  422.                 HttpResponseMessage response = await this.client.PostAsJsonAsync("/chat/" + this.ID + "/", msgObject);
  423.  
  424.                 if (response.IsSuccessStatusCode)
  425.                 {
  426.                     if (Log == true)
  427.                     {
  428.                         this.Log("MESSAGE SENT", "From: me\nMessage: " + Message + "\nTo: " + To_ID);
  429.                     }
  430.                 }
  431.                 else
  432.                 {
  433.                     this.Log("ERROR", "Failed to send the message.\nServer responded with: " + response.StatusCode);
  434.                 }
  435.             }
  436.             catch (Exception e)
  437.             {
  438.                 this.Log("ERROR", e.Message);
  439.             }
  440.         }
  441.  
  442.         //WIP-CHECK FEED - DON'T USE YET!
  443.         //TO DO: -READ FEED -GET COMMENTS FOR EACH FEED POST -POST COMMENT -POST FEED POST
  444.         public async Task CheckFeed(string ProfileID)
  445.         {
  446.             try
  447.             {
  448.                 HttpResponseMessage response = await this.client.GetAsync("/api/feed/" + ProfileID);
  449.                 var DataObject = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(await response.Content.ReadAsStringAsync());
  450.                 foreach (dynamic feedpost in DataObject["data"])
  451.                 {
  452.                     Console.WriteLine(feedpost);
  453.                     if (feedpost["_data"].ToString().Contains("test"))
  454.                     {
  455.                         CommentInfo RequestData = new CommentInfo()
  456.                         {
  457.                             comment = "Feedpost info: " + feedpost["_data"] + " Created: " + feedpost["created"] + " type: " + feedpost["feed_type"] + " gold: " + feedpost["gold"]
  458.                         };
  459.                         Console.WriteLine(feedpost["other_username"] + " ID" + feedpost["id"]);
  460.                         string ID2 = feedpost["id"];
  461.                         HttpResponseMessage response2 = await client.PostAsJsonAsync("/api/feed/" + ID2 + "/comment/", RequestData);
  462.                         Console.WriteLine(await response2.Content.ReadAsStringAsync());
  463.                     }
  464.                 }
  465.             }
  466.             catch (Exception e)
  467.             {
  468.                 Log("ERROR", e.Message);
  469.             }
  470.         }
  471.  
  472.         //[TIMERS ONLY] SEND PULSE
  473.         private async void SendPulse(Object CheckChatObject, ElapsedEventArgs CheckChatArgs)
  474.         {
  475.             try
  476.             {
  477.                 if (this.Status.ToLower() == "building")
  478.                 {
  479.                     OnlineInfo RequestData = new OnlineInfo() { location = "/build/0/project/" + this.GameID + "/", status = "active" };
  480.                     await this.client.PostAsJsonAsync("/user/" + this.ID + "/pulse/", RequestData);
  481.                 }
  482.                 else if (this.Status.ToLower() == "playing")
  483.                 {
  484.                     OnlineInfo RequestData = new OnlineInfo() { location = "/games/play/" + this.GameID + "/", status = "active" };
  485.                     await this.client.PostAsJsonAsync("/user/" + this.ID + "/pulse/", RequestData);
  486.                 }
  487.                 else if (this.Status.ToLower() == "online")
  488.                 {
  489.                     OnlineInfo RequestData = new OnlineInfo() { location = "/", status = "active" };
  490.                     await this.client.PostAsJsonAsync("/user/" + this.ID + "/pulse/", RequestData);
  491.                 }
  492.             }
  493.             catch (Exception e)
  494.             {
  495.                 Log("ERROR", e.Message);
  496.             }
  497.         }
  498.  
  499.         //[TIMERS ONLY] CHECK CHAT
  500.         private async void CheckChat(Object CheckChatObject, ElapsedEventArgs CheckChatArgs)
  501.         {
  502.             try
  503.             {
  504.                 HttpResponseMessage response = await this.client.GetAsync("/chat/" + this.ID + "/");
  505.                 if (response.IsSuccessStatusCode)
  506.                 {
  507.                     var DataObject = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(await response.Content.ReadAsStringAsync());
  508.                     foreach (dynamic data in DataObject["data"])
  509.                     {
  510.                         foreach (dynamic fromID in data)
  511.                         {
  512.                             foreach (dynamic messageData in fromID)
  513.                             {
  514.                                 Message message = new Message()
  515.                                 {
  516.                                     Content = messageData["message"].ToString(),
  517.                                     Created = messageData["created"].ToString(),
  518.                                     Author = new User()
  519.                                     {
  520.                                         Name = messageData["from_username"].ToString(),
  521.                                         ID = messageData["from_profile_id"].ToString()
  522.                                     },
  523.                                     Bot = this
  524.                                 };
  525.                                 MessageReceived?.Invoke(message);
  526.                             }
  527.                         }
  528.                     }
  529.                 }
  530.             }
  531.             catch (Exception e)
  532.             {
  533.                 Log("ERROR", e.Message);
  534.             }
  535.         }
  536.     }
  537. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top