From ae4a42d7fbaf02ea4aa140c1c6f9ace52d955352 Mon Sep 17 00:00:00 2001 From: Fabio Gaming Date: Sat, 21 Jan 2023 11:45:22 +0100 Subject: [PATCH 01/16] changed version to development version --- Amino.NET/Amino.NET.csproj | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Amino.NET/Amino.NET.csproj b/Amino.NET/Amino.NET.csproj index ee80cbc..c2bf03a 100644 --- a/Amino.NET/Amino.NET.csproj +++ b/Amino.NET/Amino.NET.csproj @@ -2,7 +2,7 @@ net5.0 - 1.2.0 + 1.2.0-Dev-6.9.3 FabioTheFox FabiDev An unofficial C# wrapper for Aminos REST API for making amino bots and tools @@ -20,6 +20,7 @@ Amino.Net-Logo-V2.png true + FabioTheFox From c641bba33503d24be6b256445baa1b6395cb027e Mon Sep 17 00:00:00 2001 From: Fabio Gaming Date: Sat, 21 Jan 2023 20:20:19 +0100 Subject: [PATCH 02/16] started SubClient started SubClient development --- Amino.NET/Amino.NET.csproj | 2 +- Amino.NET/Client.cs | 2 +- Amino.NET/SubClient.cs | 145 +++++++++++++++++++++++++++++++++++++ 3 files changed, 147 insertions(+), 2 deletions(-) create mode 100644 Amino.NET/SubClient.cs diff --git a/Amino.NET/Amino.NET.csproj b/Amino.NET/Amino.NET.csproj index c2bf03a..9e8f513 100644 --- a/Amino.NET/Amino.NET.csproj +++ b/Amino.NET/Amino.NET.csproj @@ -2,7 +2,7 @@ net5.0 - 1.2.0-Dev-6.9.3 + 1.2.0-Dev-6.9.8.5 FabioTheFox FabiDev An unofficial C# wrapper for Aminos REST API for making amino bots and tools diff --git a/Amino.NET/Client.cs b/Amino.NET/Client.cs index e2de1d5..a115161 100644 --- a/Amino.NET/Client.cs +++ b/Amino.NET/Client.cs @@ -157,7 +157,7 @@ private Task headerBuilder() headers.Add("Host", "service.aminoapps.com"); headers.Add("Accept-Encoding", "gzip"); headers.Add("Connection", "Keep-Alive"); - headers.Add("User-Agent", "Dalvik/2.1.0 (Linux; U; Android 7.1.2; SM-G965N Build/star2ltexx-user 7.1.; com.narvii.amino.master/3.4.33602)"); + headers.Add("User-Agent", "Apple iPhone13,4 iOS v15.6.1 Main/3.12.9"); if(sessionID != null) { headers.Add("NDCAUTH", $"sid={sessionID}"); } return Task.CompletedTask; } diff --git a/Amino.NET/SubClient.cs b/Amino.NET/SubClient.cs new file mode 100644 index 0000000..9862dfd --- /dev/null +++ b/Amino.NET/SubClient.cs @@ -0,0 +1,145 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using RestSharp; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Amino +{ + public class SubClient + { + + private Amino.Client client; + public bool debug { get; set; } + private string communityId; + + + + //headers. + private IDictionary headers = new Dictionary(); + + //Handles the header stuff + private Task headerBuilder() + { + headers.Clear(); + headers.Add("NDCDEVICEID", client.deviceID); + headers.Add("Accept-Language", "en-US"); + headers.Add("Content-Type", "application/json; charset=utf-8"); + headers.Add("Host", "service.aminoapps.com"); + headers.Add("Accept-Encoding", "gzip"); + headers.Add("Connection", "Keep-Alive"); + headers.Add("User-Agent", "Apple iPhone13,4 iOS v15.6.1 Main/3.12.9"); + if (client.sessionID != null) { headers.Add("NDCAUTH", $"sid={client.sessionID}"); } + return Task.CompletedTask; + } + + + public SubClient(Amino.Client _client, string communityId) + { + if (_client.sessionID == null) { throw new Exception("ErrorCode: 0: Client not logged in"); } + client = _client; + debug = client.debug; + headerBuilder(); + } + + public SubClient(Amino.Client _client, int communityId) + { + if (_client.sessionID == null) { throw new Exception("ErrorCode: 0: Client not logged in"); } + client = _client; + debug = client.debug; + headerBuilder(); + } + + + + public Task get_invite_codes(string status = "normal", int start = 0, int size = 25) + { + try + { + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/g/s-x{communityId}/community/invitation?status={status}&start={start}&size={size}"); + request.AddHeaders(headers); + var response = client.ExecuteGet(request); + if ((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if (debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + + } catch(Exception e) { throw new Exception(e.Message); } + + } + + public Task generate_invite_code(int duration = 0, bool force = true) + { + try + { + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/g/s-x{communityId}/community/invitation"); + request.AddHeaders(headers); + JObject data = new JObject(); + data.Add("duration", duration); + data.Add("force", force); + data.Add("timestamp", helpers.GetTimestamp() * 1000); + request.AddJsonBody(JsonConvert.SerializeObject(data)); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + var response = client.ExecuteGet(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if(debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + }catch(Exception e) + { + throw new Exception(e.Message); + } + } + + public Task delete_invite_code(string inviteId) + { + try + { + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/g/s-x{communityId}/community/invitation/{inviteId}"); + request.AddHeaders(headers); + var response = client.Delete(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if(debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + }catch(Exception e) { throw new Exception(e.Message); } + } + + public Task post_blog(string title, string content) + { + try + { + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/blog"); + request.AddHeaders(headers); + JObject data = new JObject(); + data.Add("address", null); + data.Add("title", title); + data.Add("content", content); + data.Add("mediaList", new JArray()); + data.Add("extensions", new JObject()); + data.Add("latitude", 0); + data.Add("longitude", 0); + data.Add("eventSource", "GlobalComposeMenu"); + data.Add("timestamp", helpers.GetTimestamp() * 1000); + request.AddJsonBody(JsonConvert.SerializeObject(data)); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + Console.WriteLine(data); + var response = client.ExecutePost(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if(debug) { Trace.WriteLine(response.Content); } + + return Task.CompletedTask; + }catch(Exception e) + { + throw new Exception(e.Message); + } + } + + + } +} From 685fb4746c15f1fdf8715451166fcf3737cc78b9 Mon Sep 17 00:00:00 2001 From: Fabio Gaming Date: Sun, 22 Jan 2023 00:55:59 +0100 Subject: [PATCH 03/16] Added more SubClient more subclient yes. --- Amino.NET/Amino.NET.csproj | 2 +- Amino.NET/Objects/InviteCode.cs | 125 ++++++++++++++++++++++++++++++++ Amino.NET/SubClient.cs | 47 ++++++++++-- 3 files changed, 168 insertions(+), 6 deletions(-) create mode 100644 Amino.NET/Objects/InviteCode.cs diff --git a/Amino.NET/Amino.NET.csproj b/Amino.NET/Amino.NET.csproj index 9e8f513..06378be 100644 --- a/Amino.NET/Amino.NET.csproj +++ b/Amino.NET/Amino.NET.csproj @@ -2,7 +2,7 @@ net5.0 - 1.2.0-Dev-6.9.8.5 + 1.2.0-Dev-6.9.9.8 FabioTheFox FabiDev An unofficial C# wrapper for Aminos REST API for making amino bots and tools diff --git a/Amino.NET/Objects/InviteCode.cs b/Amino.NET/Objects/InviteCode.cs new file mode 100644 index 0000000..181b6ad --- /dev/null +++ b/Amino.NET/Objects/InviteCode.cs @@ -0,0 +1,125 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +namespace Amino.Objects +{ + [JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)] + public class InviteCode + { + public int status { get; } + public int duration { get; } + public string invitationId { get; } + public string inviteUrl { get; } + public string modifiedTime { get; } + public int communityId { get; } + public string createdTime { get; } + public string json { get; } + public _Author Author { get; } + + + public InviteCode(JObject _json) + { + dynamic jsonObj = (JObject)JsonConvert.DeserializeObject(_json.ToString()); + status = (int)jsonObj["status"]; + duration = (int)jsonObj["duration"]; + invitationId = (string)jsonObj["invitationId"]; + inviteUrl = (string)jsonObj["link"]; + modifiedTime = (string)jsonObj["modifiedTime"]; + communityId = (int)jsonObj["ndcId"]; + json = _json.ToString(); + Author = new _Author(_json); + } + + + [JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)] + public class _Author + { + public int status { get; } + public bool isNicknameVerified { get; } + public string userId { get; } + public int level { get; } + public int followingStatus { get; } + public int accountMembershipStatus { get; } + public bool isGlobal { get; } + public int membershipStatus { get; } + public string avatarFrameId { get; } + public int reputation { get; } + public int role { get; } + public int communityId { get; } + public int membersCount { get; } + public string nickname { get; } + public string iconUrl { get; } + public _InfluencerInfo InfluencerInfo { get; } + public _AvatarFrame AvatarFrame { get; } + + + public _Author(JObject _json) + { + dynamic jsonObj = (JObject)JsonConvert.DeserializeObject(_json.ToString()); + status = (int)jsonObj["author"]["status"]; + isNicknameVerified = (bool)jsonObj["author"]["isNicknameVerified"]; + userId = (string)jsonObj["author"]["uid"]; + level = (int)jsonObj["author"]["level"]; + followingStatus = (int)jsonObj["author"]["followingStatus"]; + accountMembershipStatus = (int)jsonObj["author"]["accountMembershipStatus"]; + isGlobal = (bool)jsonObj["author"]["isGlobal"]; + membershipStatus = (int)jsonObj["author"]["membershipStatus"]; + avatarFrameId = (string)jsonObj["author"]["avatarFrameId"]; + reputation = (int)jsonObj["author"]["reputation"]; + role = (int)jsonObj["author"]["role"]; + communityId = (int)jsonObj["author"]["ndcId"]; + membersCount = (int)jsonObj["author"]["membersCount"]; + nickname = (string)jsonObj["author"]["nickname"]; + if (jsonObj["author"]["icon"] != null) { iconUrl = (string)jsonObj["author"]["icon"]; } + if(jsonObj["author"]["influencerInfo"] != null) { InfluencerInfo = new _InfluencerInfo(_json); } + if(jsonObj["author"]["avatarFrame"] != null) { AvatarFrame = new _AvatarFrame(_json); } + + } + + + [JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)] + public class _InfluencerInfo + { + public bool pinned { get; } + public string createdTime { get; } + public int fansCount { get; } + public int monthlyFee { get; } + + public _InfluencerInfo(JObject _json) + { + dynamic jsonObj = (JObject)JsonConvert.DeserializeObject(_json.ToString()); + pinned = (bool)jsonObj["author"]["influencerInfo"]["pinned"]; + createdTime = (string)jsonObj["author"]["influencerInfo"]["createdTime"]; + fansCount = (int)jsonObj["author"]["influencerInfo"]["fansCount"]; + monthlyFee = (int)jsonObj["author"]["influencerInfo"]["monthlyFee"]; + } + } + + + [JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)] + public class _AvatarFrame + { + public int status { get; } + public string ownershipStatus { get; } + public int version { get; } + public string resourceUrl { get; } + public string name { get; } + public string iconUrl { get; } + public string frameId { get; } + + public _AvatarFrame(JObject _json) + { + dynamic jsonObj = (JObject)JsonConvert.DeserializeObject(_json.ToString()); + status = (int)jsonObj["author"]["avatarFrame"]["status"]; + ownershipStatus = (string)jsonObj["author"]["avatarFrame"]["ownershipStatus"]; + version = (int)jsonObj["author"]["avatarFrame"]["version"]; + resourceUrl = (string)jsonObj["author"]["avatarFrame"]["resourceUrl"]; + name = (string)jsonObj["author"]["avatarFrame"]["name"]; + iconUrl = (string)jsonObj["author"]["avatarFrame"]["icon"]; + frameId = (string)jsonObj["author"]["avatarFrame"]["frameId"]; + } + + + } + } + } +} diff --git a/Amino.NET/SubClient.cs b/Amino.NET/SubClient.cs index 9862dfd..fe606b4 100644 --- a/Amino.NET/SubClient.cs +++ b/Amino.NET/SubClient.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -38,35 +39,46 @@ private Task headerBuilder() } - public SubClient(Amino.Client _client, string communityId) + public SubClient(Amino.Client _client, string _communityId) { if (_client.sessionID == null) { throw new Exception("ErrorCode: 0: Client not logged in"); } client = _client; debug = client.debug; + communityId = _communityId; headerBuilder(); } - public SubClient(Amino.Client _client, int communityId) + public SubClient(Amino.Client _client, int _communityId) { if (_client.sessionID == null) { throw new Exception("ErrorCode: 0: Client not logged in"); } client = _client; debug = client.debug; + communityId = _communityId.ToString(); headerBuilder(); } - public Task get_invite_codes(string status = "normal", int start = 0, int size = 25) + public List get_invite_codes(string status = "normal", int start = 0, int size = 25) { try { + List inviteCodeList = new List(); RestClient client = new RestClient(helpers.BaseUrl); RestRequest request = new RestRequest($"/g/s-x{communityId}/community/invitation?status={status}&start={start}&size={size}"); request.AddHeaders(headers); var response = client.ExecuteGet(request); if ((int)response.StatusCode != 200) { throw new Exception(response.Content); } if (debug) { Trace.WriteLine(response.Content); } - return Task.CompletedTask; + dynamic jsonObj = (JObject)JsonConvert.DeserializeObject(response.Content); + JArray inviteCodesJson = jsonObj["communityInvitationList"]; + foreach(JObject code in inviteCodesJson) + { + Amino.Objects.InviteCode invCode = new Objects.InviteCode(code); + inviteCodeList.Add(invCode); + } + Console.WriteLine(response.Content); + return inviteCodeList; } catch(Exception e) { throw new Exception(e.Message); } @@ -128,7 +140,6 @@ public Task post_blog(string title, string content) data.Add("timestamp", helpers.GetTimestamp() * 1000); request.AddJsonBody(JsonConvert.SerializeObject(data)); request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); - Console.WriteLine(data); var response = client.ExecutePost(request); if((int)response.StatusCode != 200) { throw new Exception(response.Content); } if(debug) { Trace.WriteLine(response.Content); } @@ -140,6 +151,32 @@ public Task post_blog(string title, string content) } } + public Task post_wiki(string title, string content, byte[] icon = null) + { + try + { + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/item"); + request.AddHeaders(headers); + JObject data = new JObject(); + data.Add("label", title); + data.Add("content", content); + data.Add("eventSource", "GlobalComposeMenu"); + data.Add("mediaList", new JArray()); + data.Add("extensions", new JObject()); + data.Add("timestamp", helpers.GetTimestamp() * 1000); + if(icon != null) { data.Add("icon", this.client.upload_media(icon, Types.upload_File_Types.Image)); } + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + var response = client.ExecutePost(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if(debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + + } catch(Exception e) { throw new Exception(e.Message); } + } + + //public Task edit_blog(string blogId, string title, ) + } } From e3a0a672161c33ec1a22dc056e97cc14f81afd05 Mon Sep 17 00:00:00 2001 From: Fabio Gaming Date: Mon, 23 Jan 2023 01:53:12 +0100 Subject: [PATCH 04/16] more SubClient added new functions yes. --- Amino.NET/Amino.NET.csproj | 2 +- Amino.NET/SubClient.cs | 224 +++++++++++++++++++++++++++++++++++-- Amino.NET/Types.cs | 10 +- Amino.NET/helpers.cs | 9 ++ 4 files changed, 231 insertions(+), 14 deletions(-) diff --git a/Amino.NET/Amino.NET.csproj b/Amino.NET/Amino.NET.csproj index 06378be..221d6bd 100644 --- a/Amino.NET/Amino.NET.csproj +++ b/Amino.NET/Amino.NET.csproj @@ -2,7 +2,7 @@ net5.0 - 1.2.0-Dev-6.9.9.8 + 1.2.0-Dev-7.1.1.9 FabioTheFox FabiDev An unofficial C# wrapper for Aminos REST API for making amino bots and tools diff --git a/Amino.NET/SubClient.cs b/Amino.NET/SubClient.cs index fe606b4..fa76da1 100644 --- a/Amino.NET/SubClient.cs +++ b/Amino.NET/SubClient.cs @@ -4,9 +4,6 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.Globalization; -using System.Linq; -using System.Text; using System.Threading.Tasks; namespace Amino @@ -121,10 +118,30 @@ public Task delete_invite_code(string inviteId) }catch(Exception e) { throw new Exception(e.Message); } } - public Task post_blog(string title, string content) + public Task post_blog(string title, string content, List imageList = null, bool fansOnly = false, string backgroundColor = null) { try { + JArray mediaList = new JArray(); + JObject extensionData = new JObject(); + + if(imageList != null) + { + JArray tempMedia = new JArray(); + foreach(byte[] bytes in imageList) + { + tempMedia = new JArray(); + tempMedia.Add(100); + tempMedia.Add(this.client.upload_media(bytes, Types.upload_File_Types.Image)); + tempMedia.Add(null); + mediaList.Add(tempMedia); + } + } + if(fansOnly) { extensionData.Add("fansOnly", fansOnly); } + if(backgroundColor != null) { JObject color = new JObject(); color.Add("backgroundColor", backgroundColor); extensionData.Add(new JProperty("style", color)); } + + + RestClient client = new RestClient(helpers.BaseUrl); RestRequest request = new RestRequest($"/x{communityId}/s/blog"); request.AddHeaders(headers); @@ -132,8 +149,8 @@ public Task post_blog(string title, string content) data.Add("address", null); data.Add("title", title); data.Add("content", content); - data.Add("mediaList", new JArray()); - data.Add("extensions", new JObject()); + data.Add("mediaList", new JArray(mediaList)); + data.Add(new JProperty("extensions", extensionData)); data.Add("latitude", 0); data.Add("longitude", 0); data.Add("eventSource", "GlobalComposeMenu"); @@ -151,10 +168,29 @@ public Task post_blog(string title, string content) } } - public Task post_wiki(string title, string content, byte[] icon = null) + public Task post_wiki(string title, string content, List imageList = null, bool fansOnly = false, string backgroundColor = null) { try { + JArray mediaList = new JArray(); + JObject extensionData = new JObject(); + + if (imageList != null) + { + JArray tempMedia = new JArray(); + foreach (byte[] bytes in imageList) + { + tempMedia = new JArray(); + tempMedia.Add(100); + tempMedia.Add(this.client.upload_media(bytes, Types.upload_File_Types.Image)); + tempMedia.Add(null); + mediaList.Add(tempMedia); + } + } + if (fansOnly) { extensionData.Add("fansOnly", fansOnly); } + if (backgroundColor != null) { JObject color = new JObject(); color.Add("backgroundColor", backgroundColor); extensionData.Add(new JProperty("style", color)); } + + RestClient client = new RestClient(helpers.BaseUrl); RestRequest request = new RestRequest($"/x{communityId}/s/item"); request.AddHeaders(headers); @@ -162,11 +198,11 @@ public Task post_wiki(string title, string content, byte[] icon = null) data.Add("label", title); data.Add("content", content); data.Add("eventSource", "GlobalComposeMenu"); - data.Add("mediaList", new JArray()); - data.Add("extensions", new JObject()); + data.Add("mediaList", new JArray(mediaList)); + data.Add(new JProperty("extensions", extensionData)); data.Add("timestamp", helpers.GetTimestamp() * 1000); - if(icon != null) { data.Add("icon", this.client.upload_media(icon, Types.upload_File_Types.Image)); } request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + request.AddJsonBody(JsonConvert.SerializeObject(data)); var response = client.ExecutePost(request); if((int)response.StatusCode != 200) { throw new Exception(response.Content); } if(debug) { Trace.WriteLine(response.Content); } @@ -175,8 +211,174 @@ public Task post_wiki(string title, string content, byte[] icon = null) } catch(Exception e) { throw new Exception(e.Message); } } - //public Task edit_blog(string blogId, string title, ) + public Task edit_blog(string blogId, string title = null, string content = null, List imageList = null, bool fansOnly = false, string backgroundColor = null) + { + try + { + JArray mediaList = new JArray(); + JObject extensionData = new JObject(); + + if (imageList != null) + { + JArray tempMedia = new JArray(); + foreach (byte[] bytes in imageList) + { + tempMedia = new JArray(); + tempMedia.Add(100); + tempMedia.Add(this.client.upload_media(bytes, Types.upload_File_Types.Image)); + tempMedia.Add(null); + mediaList.Add(tempMedia); + } + } + if (fansOnly) { extensionData.Add("fansOnly", fansOnly); } + if (backgroundColor != null) { JObject color = new JObject(); color.Add("backgroundColor", backgroundColor); extensionData.Add(new JProperty("style", color)); } + + + + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/blog"); + request.AddHeaders(headers); + JObject data = new JObject(); + data.Add("address", null); + data.Add("title", title); + data.Add("content", content); + data.Add("mediaList", new JArray(mediaList)); + data.Add(new JProperty("extensions", extensionData)); + data.Add("latitude", 0); + data.Add("longitude", 0); + data.Add("eventSource", "PostDetailView"); + data.Add("timestamp", helpers.GetTimestamp() * 1000); + request.AddJsonBody(JsonConvert.SerializeObject(data)); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + var response = client.ExecutePost(request); + if ((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if (debug) { Trace.WriteLine(response.Content); } + + return Task.CompletedTask; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + } + + + public Task delete_blog(string blogId) + { + try + { + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/blog/{blogId}"); + request.AddHeaders(headers); + var response = client.Delete(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if(debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + } catch(Exception e) { throw new Exception(e.Message); } + } + + public Task delete_wiki(string wikiId) + { + try + { + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/item/{wikiId}"); + request.AddHeaders(headers); + var response = client.Delete(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if(debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + } catch(Exception e) { throw new Exception(e.Message); } + } + + public Task repost_blog(string postId, Types.Repost_Types type, string content = null) + { + try + { + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/blog"); + request.AddHeaders(headers); + JObject data = new JObject(); + data.Add("content", content); + data.Add("refObjectId", postId); + data.Add("refObjectType", (int)type); + data.Add("type", 2); + data.Add("timestamp", helpers.GetTimestamp() * 1000); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + request.AddJsonBody(JsonConvert.SerializeObject(data)); + var response = client.ExecutePost(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if(debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + + }catch(Exception e) { throw new Exception(e.Message); } + } + + + public Task check_in(int? timezone = null) + { + try + { + int? tz; + if (timezone != null) { tz = timezone; } else { tz = helpers.getTimezone(); } + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/check-in"); + request.AddHeaders(headers); + JObject data = new JObject(); + data.Add("timestamp", helpers.GetTimestamp() * 1000); + data.Add("timezone", tz); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + request.AddJsonBody(JsonConvert.SerializeObject(data)); + var response = client.ExecutePost(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if(debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + }catch(Exception e) { throw new Exception(e.Message); } + } + + public Task repair_check_in(Types.Repair_Types repairType) + { + try + { + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/check-in/repair"); + request.AddHeaders(headers); + JObject data = new JObject(); + data.Add("timestamp", helpers.GetTimestamp() * 1000); + data.Add("repairMethod", Convert.ToString((int)repairType)); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + request.AddJsonBody(JsonConvert.SerializeObject(data)); + var response = client.ExecutePost(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if(debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + }catch(Exception e) { throw new Exception(e.Message); } + } + + public Task lottery(int? timezone = null) + { + try + { + int? tz; + if (timezone != null) { tz = timezone; } else { tz = helpers.getTimezone(); } + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/check-in"); + request.AddHeaders(headers); + JObject data = new JObject(); + data.Add("timestamp", helpers.GetTimestamp() * 1000); + data.Add("timezone", tz); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + request.AddJsonBody(JsonConvert.SerializeObject(data)); + var response = client.ExecutePost(request); + if ((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if (debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + } + catch (Exception e) { throw new Exception(e.Message); } + } } + + } diff --git a/Amino.NET/Types.cs b/Amino.NET/Types.cs index a7199ae..54657e6 100644 --- a/Amino.NET/Types.cs +++ b/Amino.NET/Types.cs @@ -81,8 +81,8 @@ public enum Sorting_Types /// public enum Repair_Types { - Coins, - Membeership + Coins = 1, + Membeership = 2 } /// @@ -254,5 +254,11 @@ public enum Wallet_Config_Levels lvl_1, lvl_2 } + + public enum Repost_Types + { + Blog = 1, + Wiki = 2 + } } } diff --git a/Amino.NET/helpers.cs b/Amino.NET/helpers.cs index aa160d0..30183f0 100644 --- a/Amino.NET/helpers.cs +++ b/Amino.NET/helpers.cs @@ -48,6 +48,15 @@ public static string generate_signiture(string data) return Convert.ToBase64String(CombineTwoArrays(StringToByteArray(prefix), result)); } + /// + /// Returns the current Amino compatible Timezone + /// + /// + public static int getTimezone() + { + return TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).Divide(1000).Seconds; + } + /// /// This function allows you to generate an Amino valid signiture for file uploads /// From 2cab75f05f1ac115bdd2cb1f5354970d3641b7f9 Mon Sep 17 00:00:00 2001 From: Fabio Gaming Date: Mon, 23 Jan 2023 17:57:51 +0100 Subject: [PATCH 05/16] added stuff did stuff to subclient and client --- Amino.NET/Client.cs | 10 ++++++ Amino.NET/SubClient.cs | 73 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) diff --git a/Amino.NET/Client.cs b/Amino.NET/Client.cs index a115161..1b29935 100644 --- a/Amino.NET/Client.cs +++ b/Amino.NET/Client.cs @@ -83,6 +83,8 @@ public class Client public bool debug { get; set; } = false; + private SubClient subClient = null; + //The value to access the websocket manager private Amino.WebSocketHandler webSocket; @@ -293,6 +295,8 @@ public Task logout() is_Global = false; headerBuilder(); _ = webSocket.disconnect_socket(); + subClient.Dispose(); + subClient = null; return Task.CompletedTask; }catch(Exception e) { throw new Exception(e.Message); } @@ -2328,6 +2332,12 @@ public Task wallet_config(Types.Wallet_Config_Levels walletLevel) }catch(Exception e) { throw new Exception(e.Message); } } + public void SetSubClient(Amino.SubClient subClient) + { + if(subClient == null) { throw new Exception("No SubClient provided!"); } + this.subClient = subClient; + } + /// /// Handles the Event calls, do not manually interact with this Class or its functions! /// diff --git a/Amino.NET/SubClient.cs b/Amino.NET/SubClient.cs index fa76da1..ca24903 100644 --- a/Amino.NET/SubClient.cs +++ b/Amino.NET/SubClient.cs @@ -377,6 +377,79 @@ public Task lottery(int? timezone = null) catch (Exception e) { throw new Exception(e.Message); } } + public Task edit_profile(string nickname = null, string content = null, byte[] icon = null, List imageList = null, List captionList = null, string backgroundColor = null, byte[] backgroundImage = null, string defaultChatBubbleId = null) + { + try + { + JObject data = new JObject(); + + JArray mediaList = new JArray(); + JObject extensionData = new JObject(); + + if (imageList != null) + { + JArray tempMedia = new JArray(); + for(int i = 0; i != imageList.Count; i++) + { + tempMedia = new JArray(); + tempMedia.Add(100); + tempMedia.Add(this.client.upload_media(imageList[i], Types.upload_File_Types.Image)); + tempMedia.Add(captionList[i]); + mediaList.Add(tempMedia); + } + } + if (backgroundColor != null) { JObject color = new JObject(); color.Add("backgroundColor", backgroundColor); extensionData.Add(new JProperty("style", color)); } + if(backgroundImage != null) { JObject bgImg = new JObject(); JArray bgArr = new JArray(); bgArr.Add(100);bgArr.Add(this.client.upload_media(backgroundImage, Types.upload_File_Types.Image));bgArr.Add(null); bgArr.Add(null); bgArr.Add(null); bgImg.Add("backgroundMediaList", new JArray(bgArr)); extensionData.Add(new JProperty("style", bgImg)); } + if(defaultChatBubbleId != null) { JObject dchtbl = new JObject(); dchtbl.Add("defaultBubbleId", defaultChatBubbleId); extensionData.Add(dchtbl); } + + + data.Add("timestamp", helpers.GetTimestamp() * 1000); + data.Add(new JProperty("extensions", extensionData)); + if(nickname != null) { data.Add("nickname", nickname); } + if(content != null) { data.Add("content", content); } + if(icon != null) { data.Add("icon", this.client.upload_media(icon, Types.upload_File_Types.Image)); } + + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/user-profile/{this.client.userID}"); + request.AddHeaders(headers); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + request.AddJsonBody(JsonConvert.SerializeObject(data)); + var response = client.ExecutePost(request); + if ((int)response.StatusCode != 200) throw new Exception(response.Content); + if(debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + } + catch(Exception e) { throw new Exception(e.Message); } + } + + public Task vote_poll(string postId, string optionId) + { + try + { + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/blog/{postId}/poll/option/{optionId}/vote"); + JObject data = new JObject(); + data.Add("timestamp", helpers.GetTimestamp() * 1000); + data.Add("eventSource", "PostDetailView"); + data.Add("value", 1); + request.AddHeaders(headers); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + request.AddJsonBody(JsonConvert.SerializeObject(data)); + var response = client.ExecutePost(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if(debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + }catch(Exception e) { throw new Exception(e.Message); } + } + + + public void Dispose() + { + this.communityId = null; + this.client = null; + this.headers = null; + } + } From d55c8523f49d585edcefa08d8f327ee0dcc11ab1 Mon Sep 17 00:00:00 2001 From: Fabio Gaming Date: Sat, 28 Jan 2023 03:41:50 +0100 Subject: [PATCH 06/16] fixed stuff fixed some Client stuff and added more SubClient, also fixed some Objects like Fromid and FromCode --- Amino.NET/Amino.NET.csproj | 2 +- Amino.NET/Client.cs | 37 +++++++++------- Amino.NET/Objects/Community.cs | 77 +++++++++++++++++----------------- Amino.NET/Objects/FromCode.cs | 17 ++++---- Amino.NET/Objects/FromId.cs | 24 +++++------ 5 files changed, 83 insertions(+), 74 deletions(-) diff --git a/Amino.NET/Amino.NET.csproj b/Amino.NET/Amino.NET.csproj index 221d6bd..135e689 100644 --- a/Amino.NET/Amino.NET.csproj +++ b/Amino.NET/Amino.NET.csproj @@ -2,7 +2,7 @@ net5.0 - 1.2.0-Dev-7.1.1.9 + 1.2.0-Dev-7.1.2.7.7 FabioTheFox FabiDev An unofficial C# wrapper for Aminos REST API for making amino bots and tools diff --git a/Amino.NET/Client.cs b/Amino.NET/Client.cs index 1b29935..a8aefc2 100644 --- a/Amino.NET/Client.cs +++ b/Amino.NET/Client.cs @@ -217,13 +217,19 @@ public Task login(string _email, string _password, string _secret = null) { string secret; if (_secret == null) { secret = $"0 {_password}"; } else { secret = _secret; } - var data = new { email = _email, v = 2, secret = secret, deviceID = deviceID, clientType = 100, action = "normal", timestamp = helpers.GetTimestamp() * 1000}; - + JObject data = new JObject(); + data.Add("email", _email); + data.Add("v", 2); + data.Add("secret", secret); + data.Add("deviceID", deviceID); + data.Add("clientType", 100); + data.Add("action", "normal"); + data.Add("timestamp", helpers.GetTimestamp() * 1000); RestClient client = new RestClient(helpers.BaseUrl); RestRequest request = new RestRequest("/g/s/auth/login", Method.Post); request.AddHeaders(headers); - request.AddJsonBody(data); - request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(System.Text.Json.JsonSerializer.Serialize(data))); + request.AddJsonBody(JsonConvert.SerializeObject(data)); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); var response = client.ExecutePost(request); if((int)response.StatusCode != 200) { throw new Exception(response.Content); } json = response.Content; @@ -562,22 +568,23 @@ public Amino.Objects.GlobalProfile get_user_info(string _userId) public bool check_device(string _deviceId) { CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture; - var data = new - { - deviceID = _deviceId, - bundleID = "com.narvii.amino.master", - clientType = 100, - systemPushEnabled = true, - timezone = 0, - locale = currentCulture.Name, - timestamp = (Math.Round(helpers.GetTimestamp())) * 1000 - }; + + JObject data = new JObject(); + data.Add("deviceID", _deviceId); + data.Add("bundleID", "com.narvii.amino.master"); + data.Add("clientType", 100); + data.Add("systemPushEnabled", true); + data.Add("timezone", 0); + data.Add("locale", currentCulture.Name); + data.Add("timestamp", helpers.GetTimestamp() * 1000); + try { RestClient client = new RestClient(helpers.BaseUrl); RestRequest request = new RestRequest("/g/s/device"); + request.AddJsonBody(JsonConvert.SerializeObject(data)); request.AddHeaders(headers); - request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(System.Text.Json.JsonSerializer.Serialize(data))); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); var response = client.ExecutePost(request); if ((int)response.StatusCode != 200) { return false; } if (debug) { Trace.WriteLine(response.Content); } diff --git a/Amino.NET/Objects/Community.cs b/Amino.NET/Objects/Community.cs index ebec55b..5c7d9ed 100644 --- a/Amino.NET/Objects/Community.cs +++ b/Amino.NET/Objects/Community.cs @@ -7,23 +7,23 @@ namespace Amino.Objects [JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)] public class Community { - public int listedStatus { get; private set; } - public int probationStatus { get; private set; } - public int membersCount { get; private set; } + public int? listedStatus { get; private set; } + public int? probationStatus { get; private set; } + public int? membersCount { get; private set; } public string primaryLanguage { get; private set; } - public float communityHeat { get; private set; } + public float? communityHeat { get; private set; } public string strategyInfo { get; private set; } public string tagline { get; private set; } - public int joinType { get; private set; } - public int status { get; private set; } + public int? joinType { get; private set; } + public int? status { get; private set; } public string modifiedTime { get; private set; } - public int communityId { get; private set; } + public int? communityId { get; private set; } public string communityLink { get; private set; } public string iconUrl { get; private set; } public string updatedTime { get; private set; } public string endpoint { get; private set; } public string communityName { get; private set; } - public int templateId { get; private set; } + public int? templateId { get; private set; } public string createdTime { get; private set; } public string json { get; private set; } public _Agent Agent { get; private set; } @@ -32,24 +32,23 @@ public class Community public Community(JObject _json) { dynamic jsonObj = (JObject)JsonConvert.DeserializeObject(_json.ToString()); - listedStatus = (int)jsonObj["listedStatus"]; - probationStatus = (int)jsonObj["probationStatus"]; - membersCount = (int)jsonObj["membersCount"]; - primaryLanguage = (string)jsonObj["primaryLanguage"]; - communityHeat = (float)jsonObj["communityHeat"]; - strategyInfo = (string)jsonObj["strategyInfo"]; - tagline = (string)jsonObj["tagline"]; - joinType = (int)jsonObj["joinType"]; - status = (int)jsonObj["status"]; - modifiedTime = (string)jsonObj["modifiedTime"]; - communityId = (int)jsonObj["ndcId"]; - communityLink = (string)jsonObj["link"]; - iconUrl = (string)jsonObj["icon"]; - updatedTime = (string)jsonObj["updatedTime"]; - endpoint = (string)jsonObj["endpoint"]; - communityName = (string)jsonObj["name"]; - templateId = (int)jsonObj["templateId"]; - createdTime = (string)jsonObj["createdTime"]; + try { listedStatus = (int)jsonObj["listedStatus"]; } catch { } + try { probationStatus = (int)jsonObj["probationStatus"]; }catch{ } + try { membersCount = (int)jsonObj["membersCount"]; } catch { } + try { joinType = (int)jsonObj["joinType"]; } catch { } + try { status = (int)jsonObj["status"]; } catch { } + try { communityId = (int)jsonObj["ndcId"]; } catch { } + try { communityHeat = (float)jsonObj["communityHeat"]; } catch { } + try { primaryLanguage = (string)jsonObj["primaryLanguage"]; } catch { } + try { strategyInfo = (string)jsonObj["strategyInfo"]; } catch { } + try { tagline = (string)jsonObj["tagline"]; } catch { } + try { modifiedTime = (string)jsonObj["modifiedTime"]; } catch { } + try { communityLink = (string)jsonObj["link"]; } catch { } + try { iconUrl = (string)jsonObj["icon"]; } catch { } + try { updatedTime = (string)jsonObj["updatedTime"]; } catch { } + try { endpoint = (string)jsonObj["endpoint"]; } catch { } + try { communityName = (string)jsonObj["name"]; } catch { } + try { createdTime = (string)jsonObj["createdTime"]; } catch { } json = _json.ToString(); Agent = new _Agent(_json); } @@ -58,24 +57,24 @@ public class _Agent { public bool isNickNameVerified { get; private set; } public string userId { get; private set; } - public int level { get; private set; } - public int followingStatus { get; private set; } - public int membershipStatus { get; private set; } + public int? level { get; private set; } + public int? followingStatus { get; private set; } + public int? membershipStatus { get; private set; } public bool isGlobal { get; private set; } - public int reputation { get; private set; } - public int membersCount { get; private set; } + public int? reputation { get; private set; } + public int? membersCount { get; private set; } public _Agent(JObject _json) { dynamic jsonObj = (JObject)JsonConvert.DeserializeObject(_json.ToString()); - isNickNameVerified = (bool)jsonObj["agent"]["isNicknameVerified"]; - userId = (string)jsonObj["agent"]["uid"]; - level = (int)jsonObj["agent"]["level"]; - followingStatus = (int)jsonObj["agent"]["followingStatus"]; - membershipStatus = (int)jsonObj["agent"]["membershipStatus"]; - isGlobal = (bool)jsonObj["agent"]["isGlobal"]; - reputation = (int)jsonObj["agent"]["reputation"]; - membersCount = (int)jsonObj["agent"]["membersCount"]; + try { isNickNameVerified = (bool)jsonObj["agent"]["isNicknameVerified"]; } catch { } + try { userId = (string)jsonObj["agent"]["uid"]; } catch { } + try { level = (int)jsonObj["agent"]["level"]; } catch { } + try { followingStatus = (int)jsonObj["agent"]["followingStatus"]; } catch { } + try { membershipStatus = (int)jsonObj["agent"]["membershipStatus"]; } catch { } + try { isGlobal = (bool)jsonObj["agent"]["isGlobal"]; } catch { } + try { reputation = (int)jsonObj["agent"]["reputation"]; } catch { } + try { membersCount = (int)jsonObj["agent"]["membersCount"]; } catch { } } } } diff --git a/Amino.NET/Objects/FromCode.cs b/Amino.NET/Objects/FromCode.cs index 3d98aed..23fd901 100644 --- a/Amino.NET/Objects/FromCode.cs +++ b/Amino.NET/Objects/FromCode.cs @@ -15,17 +15,20 @@ public class FromCode public string shortCode { get; } public int objectType { get; } public string json { get; } + public Community Community { get; } = null; public FromCode(JObject _json) { dynamic jsonObj = (JObject)JsonConvert.DeserializeObject(_json.ToString()); - path = (string)jsonObj["linkInfoV2"]["path"]; - objectId = (string)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["objectId"]; - targetCode = (int)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["targetCode"]; - communityId = (int)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["ndcId"]; - if(jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["fullPath"] != null) { fullPath = (string)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["fullPath"]; } - if(jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["shortCode"] != null) { shortCode = (string)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["shortCode"]; } - objectType = (int)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["objectType"]; + try { if (jsonObj["linkInfoV2"]["path"] != null) { path = (string)jsonObj["linkInfoV2"]["path"]; } } catch { } + try { if (jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["objectId"] != null) { objectId = (string)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["objectId"]; } } catch { } + try { if (jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["targetCode"] != null) { targetCode = (int)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["targetCode"]; } } catch { } + try { if (jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["ndcId"] != null) { communityId = (int)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["ndcId"]; } } catch { } + try { if (jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["fullPath"] != null) { fullPath = (string)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["fullPath"]; } } catch { } + try { if (jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["shortCode"] != null) { shortCode = (string)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["shortCode"]; } } catch { } + try { if (jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["objectType"] != null) { objectType = (int)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["objectType"]; } } catch { } + if(jsonObj["linkInfoV2"]["extensions"]["community"] != null) { Community = new Community(jsonObj["linkInfoV2"]["extensions"]["community"]); } + json = _json.ToString(); } } diff --git a/Amino.NET/Objects/FromId.cs b/Amino.NET/Objects/FromId.cs index 80181f4..dc1c67a 100644 --- a/Amino.NET/Objects/FromId.cs +++ b/Amino.NET/Objects/FromId.cs @@ -9,26 +9,26 @@ public class FromId public string path { get; } public string objectId { get; } public string shareURLShortCode { get; } - public int targetCode { get; } - public int communityId { get; } + public int? targetCode { get; } + public int? communityId { get; } public string fullPath { get; } public string shortCode { get; } public string shareURLFullPath { get; } - public int objectType { get; } + public int? objectType { get; } public string json { get; } public FromId(JObject _json) { dynamic jsonObj = (JObject)JsonConvert.DeserializeObject(_json.ToString()); - path = (string)jsonObj["linkInfoV2"]["path"]; - objectId = (string)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["objectId"]; - shareURLShortCode = (string)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["shareURLShortCode"]; - targetCode = (int)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["targetCode"]; - communityId = (int)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["ndcId"]; - fullPath = (string)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["fullPath"]; - if(jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["shortCode"] != null) { shortCode = (string)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["shortCode"]; } - shareURLFullPath = (string)jsonObj["linKInfoV2"]["extensions"]["linkInfo"]["shareURLFullPath"]; - objectType = (int)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["objectType"]; + try { path = (string)jsonObj["linkInfoV2"]["path"]; } catch { } + try { objectId = (string)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["objectId"]; } catch { } + try { shareURLShortCode = (string)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["shareURLShortCode"]; } catch { } + try { targetCode = (int)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["targetCode"]; } catch { } + try { communityId = (int)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["ndcId"]; } catch { } + try { fullPath = (string)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["fullPath"]; } catch { } + try { shortCode = (string)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["shortCode"]; } catch { } + try { shareURLFullPath = (string)jsonObj["linKInfoV2"]["extensions"]["linkInfo"]["shareURLFullPath"]; } catch { } + try { objectType = (int)jsonObj["linkInfoV2"]["extensions"]["linkInfo"]["objectType"]; } catch { } json = _json.ToString(); } From e0606754d6324aa25a6d79935570a810a6f7b7d7 Mon Sep 17 00:00:00 2001 From: Fabio Gaming Date: Sun, 5 Feb 2023 03:00:27 +0100 Subject: [PATCH 07/16] . more subclient --- Amino.NET/SubClient.cs | 77 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/Amino.NET/SubClient.cs b/Amino.NET/SubClient.cs index ca24903..019041c 100644 --- a/Amino.NET/SubClient.cs +++ b/Amino.NET/SubClient.cs @@ -442,6 +442,83 @@ public Task vote_poll(string postId, string optionId) }catch(Exception e) { throw new Exception(e.Message); } } + public Task comment(string message, Amino.Types.Comment_Types type, string targetId, bool isGuest = false) + { + try + { + string endPoint = null; + JObject data = new JObject(); + data.Add("content", message); + data.Add("strickerId", null); + data.Add("type", 0); + data.Add("timestamp", helpers.GetTimestamp() * 1000); + string comType; + if (isGuest) { comType = "g-comment"; } else { comType = "comment"; } + switch(type) + { + case Types.Comment_Types.Blog: + data.Add("eventSource", "PostDetailView"); + endPoint = $"/x{communityId}/s/blog/{targetId}/{comType}"; + break; + case Types.Comment_Types.Wiki: + data.Add("eventSource", "PostDetailView"); + break; + case Types.Comment_Types.Reply: + data.Add("respondTo", targetId); + endPoint = $"/x{communityId}/s/item/{targetId}/{comType}"; + break; + case Types.Comment_Types.User: + data.Add("eventSource", "UserProfileView"); + endPoint = $"/x{communityId}/s/user-profile/{targetId}/{comType}"; + break; + } + + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest(endPoint); + request.AddHeaders(headers); + request.AddJsonBody(JsonConvert.SerializeObject(data)); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + var response = client.ExecutePost(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if(debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + } + catch(Exception e) { throw new Exception(e.Message); } + } + + public Task delete_comment(string commentId, Amino.Types.Comment_Types type, string targetId) + { + try + { + string endPoint = null; + switch(type) + { + case Types.Comment_Types.Blog: + endPoint = $"/x{communityId}/s/blog/{targetId}/comment/{commentId}"; + break; + case Types.Comment_Types.Wiki: + endPoint = $"/x{communityId}/s/item/{targetId}/comment/{commentId}"; + break; + case Types.Comment_Types.Reply: + break; + case Types.Comment_Types.User: + endPoint = $"/x{communityId}/s/user-profile/{targetId}/comment/{commentId}"; + break; + } + + + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest(endPoint); + request.AddHeaders(headers); + var response = client.Delete(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if(debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + }catch(Exception e) { throw new Exception(e.Message); } + } + + + public void Dispose() { From 6c1d50e7a8420f141c33302aa2c4c3723b3ec4bd Mon Sep 17 00:00:00 2001 From: Fabio Gaming Date: Tue, 7 Feb 2023 09:43:53 +0100 Subject: [PATCH 08/16] changed discord invite --- Amino.NET/Amino.NET.csproj | 2 +- Amino.NET/Amino.NET.xml | 11 +++++++++++ Amino.NET/Amino.Net-Logo-V2.png | Bin 0 -> 155988 bytes README.md | 2 +- 4 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 Amino.NET/Amino.Net-Logo-V2.png diff --git a/Amino.NET/Amino.NET.csproj b/Amino.NET/Amino.NET.csproj index 135e689..e235344 100644 --- a/Amino.NET/Amino.NET.csproj +++ b/Amino.NET/Amino.NET.csproj @@ -37,7 +37,7 @@ - + True diff --git a/Amino.NET/Amino.NET.xml b/Amino.NET/Amino.NET.xml index cf4e5d4..5031784 100644 --- a/Amino.NET/Amino.NET.xml +++ b/Amino.NET/Amino.NET.xml @@ -139,6 +139,11 @@ Fires each time an Amino chat title has been changed (only chats where the current Amino account is in) + + + Fires each time an Amino chat content has been changed (only in chats where the currnt Amino account is in) + + Creates an instance of the Amino.Client object and builds headers @@ -724,6 +729,12 @@ string : The signiture. + + + Returns the current Amino compatible Timezone + + + This function allows you to generate an Amino valid signiture for file uploads diff --git a/Amino.NET/Amino.Net-Logo-V2.png b/Amino.NET/Amino.Net-Logo-V2.png new file mode 100644 index 0000000000000000000000000000000000000000..237dd7e26da1db83dff549b9d490e597171f5eb2 GIT binary patch literal 155988 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

;@D$_^({`zq$H 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 XmRQ@`l}g3s00000NkvXXu0mjf*Wx=u literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 24e1f98..1ce8d83 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ You can get Amino.Net straight from [NuGet.org](https://nuget.org) or any NuGet - Events ([Click Here](https://github.com/FabioGaming/Amino.NET/blob/master/Events.md)) - Exceptions & Troubleshooting ([Click Here](https://github.com/FabioGaming/Amino.NET/blob/master/Exceptions.md)) - Amino REST API Documentation (Coming soon) -- Official Amino.Net Discord Server ([Click Here](https://discord.gg/gNnBnADQkz)) +- Official Amino.Net Discord Server ([Click Here](https://discord.gg/qyv8P2gegK)) # GENERAL DOCUMENTATION ### To see a better view on the Documentation consider viewing the seperated documentation files linked in `Quick Links` From bde4b7bf837aea37fa52d7b666150c3f65d831ff Mon Sep 17 00:00:00 2001 From: Fabio Gaming Date: Fri, 10 Feb 2023 15:24:11 +0100 Subject: [PATCH 09/16] added more subclient more subclient yes. --- Amino.NET/Client.cs | 3 ++ Amino.NET/SubClient.cs | 83 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) diff --git a/Amino.NET/Client.cs b/Amino.NET/Client.cs index a8aefc2..c735f77 100644 --- a/Amino.NET/Client.cs +++ b/Amino.NET/Client.cs @@ -2219,6 +2219,9 @@ public Task claim_new_user_coupon() }catch(Exception e) { throw new Exception(e.Message); } } + + + ///

/// Allows you to accept host / organizer of a chatroom with the current Amino account /// diff --git a/Amino.NET/SubClient.cs b/Amino.NET/SubClient.cs index 019041c..8ec37e7 100644 --- a/Amino.NET/SubClient.cs +++ b/Amino.NET/SubClient.cs @@ -517,8 +517,91 @@ public Task delete_comment(string commentId, Amino.Types.Comment_Types type, str }catch(Exception e) { throw new Exception(e.Message); } } + public Task like_post(string postId, bool isWiki = false) + { + try + { + string endPoint = null; + + JObject data = new JObject(); + data.Add("value", 4); + data.Add("timestamp", helpers.GetTimestamp() * 1000); + if(!isWiki) { data.Add("eventSource", "UserProfileView"); endPoint = $"/x{communityId}/s/blog/{postId}/vote?cv=1.2"; } else { data.Add("eventSource", "PostDetailView"); endPoint = $"/x{communityId}/s/item/{postId}/vote?cv=1.2"; } + + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest(endPoint); + request.AddHeaders(headers); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + request.AddJsonBody(JsonConvert.SerializeObject(data)); + var response = client.ExecutePost(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if(debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + } + catch(Exception e) { throw new Exception(e.Message); } + } + + public Task unlike_post(string postId, bool isWiki = false) + { + try + { + string endPoint = null; + if(!isWiki) { endPoint = $"/x{communityId}/s/blog/{postId}/vote?eventSource=UserProfileView"; } else { endPoint = $"/x{communityId}/s/item/{postId}/vote?eventSource=PostDetailView"; } + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest(endPoint); + request.AddHeaders(headers); + var response = client.Delete(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if(debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + }catch(Exception e) { throw new Exception(e.Message); } + } + + public Task like_comment(string commentId, string targetId,Types.Comment_Types targetType) + { + try + { + string _targetType = null; + string voteType = null; + string targetValue = null; + if(targetType == Types.Comment_Types.User) { _targetType = "UserProfileView"; targetValue = "user-profile"; } else { _targetType = "PostDetailView"; targetValue = "blog"; } + if(targetType == Types.Comment_Types.Wiki) { voteType = "g-vote"; targetValue = "item"; } else { voteType = "vote"; } + JObject data = new JObject(); + data.Add("timestamp", helpers.GetTimestamp() * 1000); + data.Add("value", 1); + data.Add("EventSource", _targetType); + + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/{targetValue}/{targetId}/comment/{commentId}/{voteType}?cv=1.2&value=1"); + request.AddHeaders(headers); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + request.AddJsonBody(JsonConvert.SerializeObject(data)); + var response = client.ExecutePost(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if(debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + + }catch(Exception e) { throw new Exception(e.Message); } + } + public Task unlike_comment(string commentId, string targetId, Amino.Types.Comment_Types targetType) + { + try + { + string _targetType = null; + string _eventSource = "PostDetailView"; + if (targetType == Types.Comment_Types.User) { _targetType = "user-profile"; _eventSource = "UserProfileView"; } else if (targetType == Types.Comment_Types.Wiki) { _targetType = "item"; } else { _targetType = "blog"; } + + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/{_targetType}/{targetId}/comment/{commentId}/g-vote?eventSource={_eventSource}"); + request.AddHeaders(headers); + var response = client.Delete(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if(debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + }catch(Exception e) { throw new Exception(e.Message); } + } public void Dispose() { From 0aec15a6231bec74462cd0e820e0420cf0125aab Mon Sep 17 00:00:00 2001 From: Fabio Gaming Date: Thu, 2 Mar 2023 09:31:06 +0100 Subject: [PATCH 10/16] Added Stuff Added functions, a lot of SubClient and added timezone filter stuff to make coin farmers and activity bots easier --- Amino.NET/Amino.NET.csproj | 2 +- Amino.NET/Client.cs | 17 +- Amino.NET/Objects/AdvancedCommunityInfo.cs | 230 +++++++++++++++++++++ Amino.NET/SubClient.cs | 189 +++++++++++++++++ Amino.NET/helpers.cs | 107 ++++++++++ 5 files changed, 543 insertions(+), 2 deletions(-) create mode 100644 Amino.NET/Objects/AdvancedCommunityInfo.cs diff --git a/Amino.NET/Amino.NET.csproj b/Amino.NET/Amino.NET.csproj index e235344..d8b225e 100644 --- a/Amino.NET/Amino.NET.csproj +++ b/Amino.NET/Amino.NET.csproj @@ -2,7 +2,7 @@ net5.0 - 1.2.0-Dev-7.1.2.7.7 + 1.2.0-Dev-7.1.2.7.9.9 FabioTheFox FabiDev An unofficial C# wrapper for Aminos REST API for making amino bots and tools diff --git a/Amino.NET/Client.cs b/Amino.NET/Client.cs index c735f77..9b8dc54 100644 --- a/Amino.NET/Client.cs +++ b/Amino.NET/Client.cs @@ -2219,7 +2219,22 @@ public Task claim_new_user_coupon() }catch(Exception e) { throw new Exception(e.Message); } } - + + public Objects.AdvancedCommunityInfo get_community_info(string communityId) + { + try + { + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/g/s-x{communityId}/community/info?withInfluencerList=1&withTopicList=true&influencerListOrderStrategy=fansCount"); + request.AddHeaders(headers); + var response = client.ExecuteGet(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if(debug) { Trace.WriteLine(response.Content); } + dynamic jsonObj = (JObject)JsonConvert.DeserializeObject(response.Content); + Objects.AdvancedCommunityInfo community = new Objects.AdvancedCommunityInfo(jsonObj); + return community; + }catch(Exception e) { throw new Exception(e.Message); } + } /// diff --git a/Amino.NET/Objects/AdvancedCommunityInfo.cs b/Amino.NET/Objects/AdvancedCommunityInfo.cs new file mode 100644 index 0000000..a08c19b --- /dev/null +++ b/Amino.NET/Objects/AdvancedCommunityInfo.cs @@ -0,0 +1,230 @@ +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Amino.Objects +{ + [JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)] + public class AdvancedCommunityInfo + { + public bool isCurrentUserJoined { get; } + public bool searchable { get; } + public bool isStandaloneAppDeprecated { get; } + public int listedStatus { get; } + public int probationStatus { get; } + public string keywords { get; } + public int membersCount { get; } + public string primaryLanguage { get; } + public float communityHeat { get; } + public string content { get; } + public bool isStandaloneAppMonetizationEnabled { get; } + public string tagline { get; } + public int joinType { get; } + public int status { get; } + public string modifiedTime { get; } + public int communityId { get; } + public string link { get; } + public string iconUrl { get; } + public string updatedTime { get; } + public string endpoint { get; } + public string name { get; } + public int templateId { get; } + public string createdTime { get; } + public string json { get; } + public List<_User> communityHeadList { get; } = new List<_User>(); + public _User Agent { get; } + public _ThemePack ThemePack { get; } + public _AdvancedSettings AdvancedSettings { get; } + + + + public AdvancedCommunityInfo(JObject _json) + { + dynamic jsonObj = (JObject)JsonConvert.DeserializeObject(_json.ToString()); + try { isCurrentUserJoined = (bool)jsonObj["isCurrentUserJoined"]; } catch { } + try { searchable = (bool)jsonObj["community"]["searchable"]; } catch { } + try { isStandaloneAppDeprecated = (bool)jsonObj["community"]["isStandaloneAppDeprecated"]; } catch { } + try { listedStatus = (int)jsonObj["community"]["listedStatus"]; } catch { } + try { probationStatus = (int)jsonObj["community"]["probationStatus"]; }catch { } + try { keywords = (string)jsonObj["community"]["keywords"]; }catch { } + try { membersCount = (int)jsonObj["community"]["membersCount"]; }catch { } + try { primaryLanguage = (string)jsonObj["community"]["primaryLanguage"]; } catch { } + try { communityHeat = (float)jsonObj["community"]["communityHeat"]; } catch { } + try { content = (string)jsonObj["community"]["content"]; } catch { } + try { isStandaloneAppMonetizationEnabled = (bool)jsonObj["community"]["isStandaloneAppMonetizationEnabled"]; } catch { } + try { tagline = (string)jsonObj["community"]["tagline"]; } catch { } + try { joinType = (int)jsonObj["community"]["joinType"]; } catch { } + try { status = (int)jsonObj["community"]["status"]; } catch { } + try { modifiedTime = (string)jsonObj["community"]["modifiedTime"]; } catch { } + try { communityId = (int)jsonObj["community"]["ndcId"]; } catch { } + try { link = (string)jsonObj["community"]["link"]; } catch { } + try { iconUrl = (string)jsonObj["community"]["icon"]; } catch { } + try { updatedTime = (string)jsonObj["community"]["updatedTime"]; }catch { } + try { endpoint = (string)jsonObj["community"]["endpoint"]; } catch { } + try { name = (string)jsonObj["community"]["name"]; } catch { } + try { templateId = (int)jsonObj["community"]["templateId"]; }catch { } + try { createdTime = (string)jsonObj["community"]["createdTime"]; } catch { } + try { json = _json.ToString(); } catch { } + try { Agent = new _User(jsonObj["community"]["agent"]); } catch { } + try { ThemePack = new _ThemePack(jsonObj["community"]["themePack"]); } catch { } + try { AdvancedSettings = new _AdvancedSettings(jsonObj["community"]["advancedSettings"]); } catch { } + try + { + JArray userArray = jsonObj["community"]["communityHeadList"]; + foreach (JObject user in userArray) + { + _User _user = new _User(user); + communityHeadList.Add(_user); + } + }catch { } + + } + + [JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)] + public class _User + { + public int status { get; } + public bool isNicknameVerified { get; } + public string userId { get; } + public int level { get; } + public int followingStatus { get; } + public int accountMembershipStatus { get; } + public bool isGlobal { get; } + public int membershipStatus { get; } + public string avatarFrameId { get; } + public int reputation { get; } + public int role { get; } + public int communityId { get; } + public int membersCount { get; } + public string nickname { get; } + public string iconUrl { get; } + + + public _User(JObject _json) + { + dynamic jsonObj = (JObject)JsonConvert.DeserializeObject(_json.ToString()); + try { status = (int)jsonObj["status"]; } catch { } + try { isNicknameVerified = (bool)jsonObj["isNicknameVerified"]; } catch { } + try { userId = (string)jsonObj["uid"]; } catch { } + try { level = (int)jsonObj["level"]; } catch { } + try { followingStatus = (int)jsonObj["followingStatus"]; } catch { } + try { accountMembershipStatus = (int)jsonObj["accountMembershipStatus"]; } catch { } + try { isGlobal = (bool)jsonObj["isGlobal"]; } catch { } + try { membershipStatus = (int)jsonObj["membershipStatus"]; } catch { } + try { avatarFrameId = (string)jsonObj["avatarFrameId"]; } catch { } + try { reputation = (int)jsonObj["reputation"]; } catch { } + try { role = (int)jsonObj["role"]; } catch { } + try { communityId = (int)jsonObj["ndcId"]; } catch { } + try { membersCount = (int)jsonObj["membersCount"]; } catch { } + try { nickname = (string)jsonObj["nickname"]; } catch { } + try { iconUrl = (string)jsonObj["icon"]; } catch { } + + } + + + + } + + [JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)] + public class _ThemePack + { + public string themeColor { get; } + public string themePackHash { get; } + public int themePackRevision { get; } + public string themePackUrl { get; } + + public _ThemePack(JObject _json) + { + dynamic jsonObj = (JObject)JsonConvert.DeserializeObject(_json.ToString()); + try { themeColor = (string)jsonObj["themeColor"]; } catch { } + try { themePackHash = (string)jsonObj["themePackHash"]; } catch { } + try { themePackRevision = (int)jsonObj["themePackRevision"]; } catch { } + try { themePackUrl = (string)jsonObj["themePackUrl"]; } catch { } + } + } + + [JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)] + public class _AdvancedSettings + { + public int defaultRakingTypeInLeaderBoard { get; } + public int frontPageLayout { get; } + public bool hasPendingReviewRequest { get; } + public bool welcomeMessageEnabled { get; } + public string welcomeMessageText { get; } + public int pollMinFullBarCount { get; } + public bool catalogEnabled { get; } + public List<_NewsFeed> NewsFeed { get; } = new List<_NewsFeed>(); + public List<_Ranks> Ranks { get; } = new List<_Ranks>(); + + public _AdvancedSettings(JObject _json) + { + dynamic jsonObj = (JObject)JsonConvert.DeserializeObject(_json.ToString()); + try { defaultRakingTypeInLeaderBoard = (int)jsonObj["defaultRankingTypeInLeaderboard"]; } catch { } + try { frontPageLayout = (int)jsonObj["frontPageLayout"]; } catch { } + try { hasPendingReviewRequest = (bool)jsonObj["hasPendingReviewRequest"]; } catch { } + try { welcomeMessageEnabled = (bool)jsonObj["welcomeMessageEnabled"]; } catch { } + try { pollMinFullBarCount = (int)jsonObj["pollMinFullBarCount"]; } catch { } + try { catalogEnabled = (bool)jsonObj["catalogEnabled"]; } catch { } + try + { + JArray newsFeed = jsonObj["newsfeedPages"]; + foreach (JObject post in newsFeed) + { + _NewsFeed _post = new _NewsFeed(post); + NewsFeed.Add(_post); + } + }catch { } + try + { + JArray ranks = jsonObj["rankingTable"]; + foreach (JObject rank in ranks) + { + _Ranks _rank = new _Ranks(rank); + Ranks.Add(_rank); + } + }catch { } + } + + + + [JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)] + public class _NewsFeed + { + public int status { get; } + public int type { get; } + + public _NewsFeed(JObject _json) + { + dynamic jsonObj = (JObject)JsonConvert.DeserializeObject(_json.ToString()); + try { status = (int)jsonObj["status"]; } catch { } + try { type = (int)jsonObj["type"]; } catch { } + } + } + + [JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)] + public class _Ranks + { + public int level { get; } + public int reputation { get; } + public string id { get; } + public string title { get; } + + public _Ranks(JObject _json) + { + dynamic jsonObj = (JObject)JsonConvert.DeserializeObject(_json.ToString()); + try { level = (int)jsonObj["level"]; } catch { } + try { reputation = (int)jsonObj["reputation"]; } catch { } + try { id = (string)jsonObj["id"]; } catch { } + try { title = (string)jsonObj["title"]; } catch { } + } + } + + } + + + } +} diff --git a/Amino.NET/SubClient.cs b/Amino.NET/SubClient.cs index 8ec37e7..9b28bf5 100644 --- a/Amino.NET/SubClient.cs +++ b/Amino.NET/SubClient.cs @@ -592,6 +592,8 @@ public Task unlike_comment(string commentId, string targetId, Amino.Types.Commen string _targetType = null; string _eventSource = "PostDetailView"; if (targetType == Types.Comment_Types.User) { _targetType = "user-profile"; _eventSource = "UserProfileView"; } else if (targetType == Types.Comment_Types.Wiki) { _targetType = "item"; } else { _targetType = "blog"; } + + RestClient client = new RestClient(helpers.BaseUrl); RestRequest request = new RestRequest($"/x{communityId}/s/{_targetType}/{targetId}/comment/{commentId}/g-vote?eventSource={_eventSource}"); @@ -603,6 +605,193 @@ public Task unlike_comment(string commentId, string targetId, Amino.Types.Commen }catch(Exception e) { throw new Exception(e.Message); } } + public Task upvote_comment(string commentId, string postId) + { + try + { + JObject data = new JObject(); + data.Add("value", 1); + data.Add("eventSource", "PostDetailView"); + data.Add("timestamp", helpers.GetTimestamp() * 1000); + + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/blog/{postId}/comment/{commentId}/vote?cv=1.2&value=1"); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + request.AddHeaders(headers); + request.AddJsonBody(JsonConvert.SerializeObject(data)); + var response = client.ExecutePost(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if (debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + }catch(Exception e) { throw new Exception(e.Message); } + } + + public Task downvote_comment(string commentId, string postId) + { + try + { + JObject data = new JObject(); + data.Add("value", -1); + data.Add("eventSource", "PostDetailView"); + data.Add("timestamp", helpers.GetTimestamp() * 1000); + + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/blog/{postId}/comment/{commentId}/vote?cv=1.2&value=1"); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + request.AddHeaders(headers); + request.AddJsonBody(JsonConvert.SerializeObject(data)); + var response = client.Delete(request); + if ((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if (debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + } + catch (Exception e) { throw new Exception(e.Message); } + } + + public Task unvote_comment(string commentId, string postId) + { + try + { + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/blog/{postId}/comment/{commentId}/vote?eventSource=PostDetailView"); + var response = client.Delete(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if (debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + }catch(Exception e) { throw new Exception(e.Message); } + } + + public Task reply_wall(string userId, string commentId, string message) + { + try + { + JObject data = new JObject(); + data.Add("content", message); + data.Add("stackId", null); + data.Add("respondTo", commentId); + data.Add("type", 0); + data.Add("eventSource", "UserProfileView"); + data.Add("timestamp", helpers.GetTimestamp() * 1000); + + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/user-profile/{userId}/comment"); + request.AddHeaders(headers); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + request.AddJsonBody(JsonConvert.SerializeObject(data)); + var response = client.ExecutePost(request); + if ((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if (debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + }catch(Exception e) { throw new Exception(e.Message); } + + } + + public Task set_activity_status(Types.Activity_Status_Types status) + { + try + { + JObject data = new JObject(); + if (status == Types.Activity_Status_Types.On) { data.Add("onlineStatus", "on"); } else { data.Add("onlineStatus", "off"); } + data.Add("duration", 86400); + data.Add("timestamp", helpers.GetTimestamp() * 1000); + + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/user-profile/{this.client.userID}/online-status"); + request.AddHeaders(headers); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + request.AddJsonBody(JsonConvert.SerializeObject(data)); + var response = client.ExecutePost(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if (debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + } + catch(Exception e) { throw new Exception(e.Message); } + } + + public Task check_notification() + { + try + { + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/notification/checked"); + request.AddHeaders(headers); + var response = client.ExecutePost(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if(debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + }catch(Exception e) { throw new Exception(e.Message); } + } + + public Task delete_notification(string notificationId) + { + try + { + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/notification/{notificationId}"); + request.AddHeaders(headers); + var response = client.Delete(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if(debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + }catch(Exception e) { throw new Exception(e.Message); } + } + + public Task clear_notifications() + { + try + { + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/notification"); + request.AddHeaders(headers); + var response = client.Delete(request); + if((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if(debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + }catch(Exception e) { throw new Exception(e.Message); } + } + + public Task send_activity_time() + { + try + { + JObject data = new JObject(); + JArray timeData = new JArray(); + + foreach (Dictionary timer in helpers.getTimeData()) + { + JObject subData = new JObject(); + + subData.Add("start", timer["start"]); + subData.Add("end", timer["end"]); + + timeData.Add(subData); + } + int optInAdsFlags = 2147483647; + int tzf = helpers.TzFilter(); + data.Add("userActiveTimeChunkList", timeData); + data.Add("OptInAdsFlags", optInAdsFlags); + data.Add("timestamp", (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds); + data.Add("timezone", tzf); + + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/community/stats/user-active-time"); + request.AddHeaders(headers); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + request.AddJsonBody(JsonConvert.SerializeObject(data)); + var response = client.ExecutePost(request); + if ((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if (debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + + } + catch(Exception e) { throw new Exception(e.Message); } + } + + public Task start_chat(string userId, string message, string title = null, bool isGlobal = false, bool publishToGlobal = false) + { + + } + public void Dispose() { this.communityId = null; diff --git a/Amino.NET/helpers.cs b/Amino.NET/helpers.cs index 30183f0..fc5b484 100644 --- a/Amino.NET/helpers.cs +++ b/Amino.NET/helpers.cs @@ -213,5 +213,112 @@ public static int get_ObjectTypeID(Types.Object_Types type) return _type; } + + public static int TzFilter() + { + string localhour = DateTime.UtcNow.ToString("HH"); + string localminute = DateTime.UtcNow.ToString("mm"); + Dictionary UTC = new Dictionary { + { "GMT0", "+0" }, + { "GMT1", "+60" }, + { "GMT2", "+120" }, + { "GMT3", "+180" }, + { "GMT4", "+240" }, + { "GMT5", "+300" }, + { "GMT6", "+360" }, + { "GMT7", "+420" }, + { "GMT8", "+480" }, + { "GMT9", "+540" }, + { "GMT10", "+600" }, + { "GMT11", "+660" }, + { "GMT12", "+720" }, + { "GMT13", "+780" }, + { "GMT-1", "-60" }, + { "GMT-2", "-120" }, + { "GMT-3", "-180" }, + { "GMT-4", "-240" }, + { "GMT-5", "-300" }, + { "GMT-6", "-360" }, + { "GMT-7", "-420" }, + { "GMT-8", "-480" }, + { "GMT-9", "-540" }, + { "GMT-10", "-600" }, + { "GMT-11", "-660" } + }; + string[] hour = new string[] { localhour, localminute }; + switch (hour[0]) + { + case "00": + return int.Parse(UTC["GMT-1"]); + case "01": + return int.Parse(UTC["GMT-2"]); + case "02": + return int.Parse(UTC["GMT-3"]); + case "03": + return int.Parse(UTC["GMT-4"]); + case "04": + return int.Parse(UTC["GMT-5"]); + case "05": + return int.Parse(UTC["GMT-6"]); + case "06": + return int.Parse(UTC["GMT-7"]); + case "07": + return int.Parse(UTC["GMT-8"]); + case "08": + return int.Parse(UTC["GMT-9"]); + case "09": + return int.Parse(UTC["GMT-10"]); + case "10": + return int.Parse(UTC["GMT13"]); + case "11": + return int.Parse(UTC["GMT12"]); + case "12": + return int.Parse(UTC["GMT11"]); + case "13": + return int.Parse(UTC["GMT10"]); + case "14": + return int.Parse(UTC["GMT9"]); + case "15": + return int.Parse(UTC["GMT8"]); + case "16": + return int.Parse(UTC["GMT7"]); + case "17": + return int.Parse(UTC["GMT6"]); + case "18": + return int.Parse(UTC["GMT5"]); + case "19": + return int.Parse(UTC["GMT4"]); + case "20": + return int.Parse(UTC["GMT3"]); + case "21": + return int.Parse(UTC["GMT2"]); + case "22": + return int.Parse(UTC["GMT1"]); + case "23": + return int.Parse(UTC["GMT0"]); + default: + return int.Parse(UTC["GMT-1"]); + + } + } + + public static List> getTimeData() + { + long t = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds; + List> timers = new List>(); + for (int i = 0; i < 50; i++) + { + long start = t + (i * 300); + long end = start + 300; + Dictionary timer = new Dictionary + { + {"start", start}, + {"end", end} + }; + timers.Add(timer); + } + return timers; + } + } } From 9055a1aebb281a9f943ab8c8028b7d08c14e1e51 Mon Sep 17 00:00:00 2001 From: Fabio Gaming Date: Tue, 21 Mar 2023 08:09:55 +0100 Subject: [PATCH 11/16] Added stuff - Added more Event Docs - Added some SubClient functions --- Amino.NET/SubClient.cs | 73 +++++++++++++++++++++++++++++++++++++++++- Events.md | 58 +++++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+), 1 deletion(-) diff --git a/Amino.NET/SubClient.cs b/Amino.NET/SubClient.cs index 9b28bf5..690505d 100644 --- a/Amino.NET/SubClient.cs +++ b/Amino.NET/SubClient.cs @@ -787,11 +787,82 @@ public Task send_activity_time() catch(Exception e) { throw new Exception(e.Message); } } - public Task start_chat(string userId, string message, string title = null, bool isGlobal = false, bool publishToGlobal = false) + public Task start_chat(List userIds, string message, string title = null, string content = null, bool isGlobal = false, bool publishToGlobal = false) { + try + { + JObject data = new JObject(); + data.Add("title", title); + data.Add("inviteeUids", new JArray(userIds)); + data.Add("initialMessageContent", message); + data.Add("content", content); + data.Add("timestamp", helpers.GetTimestamp() * 1000); + if(isGlobal) { data.Add("type", 2); data.Add("eventSource", "GlobalComposeMenu"); } else { data.Add("type", 0); } + if(publishToGlobal) { data.Add("publishToGlobal", 1); } else { data.Add("publishToGlobal", 0); } + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/chat/thread"); + request.AddHeaders(headers); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + request.AddJsonBody(JsonConvert.SerializeObject(data)); + var response = client.ExecutePost(request); + if ((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if (debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + } + catch(Exception e) { throw new Exception(e.Message); } + } + public Task start_chat(string userId, string message, string title = null, string content = null, bool isGlobal = false, bool publishToGlobal = false) + { + start_chat(new List() { userId }, message, title, content, isGlobal, publishToGlobal); + return Task.CompletedTask; } + public Task invite_to_chat(List userIds, string chatId) + { + try + { + JObject data = new JObject(); + data.Add("uids", new JArray(userIds)); + data.Add("timestamp", helpers.GetTimestamp() * 1000); + + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/chat/thread/{chatId}/member/invite"); + request.AddHeaders(headers); + request.AddHeader("NDC-MSG-SIG", helpers.generate_signiture(JsonConvert.SerializeObject(data))); + request.AddJsonBody(JsonConvert.SerializeObject(data)); + var response = client.ExecutePost(request); + if ((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if (debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + + } + catch(Exception e) { throw new Exception(e.Message); } + } + + public Task invite_to_chat(string userId, string chatId) + { + invite_to_chat(new List() { userId }, chatId); + return Task.CompletedTask; + } + + public Task add_to_favorites(string userId) + { + try + { + RestClient client = new RestClient(helpers.BaseUrl); + RestRequest request = new RestRequest($"/x{communityId}/s/user-group/quick-access/{userId}"); + request.AddHeaders(headers); + var response = client.ExecutePost(request); + if ((int)response.StatusCode != 200) { throw new Exception(response.Content); } + if (debug) { Trace.WriteLine(response.Content); } + return Task.CompletedTask; + + } + catch(Exception e) { throw new Exception(e.Message); } + } + + public void Dispose() { this.communityId = null; diff --git a/Events.md b/Events.md index a22a652..e31467a 100644 --- a/Events.md +++ b/Events.md @@ -318,6 +318,64 @@ static void main(string[] args) - Amino.Objects.ChatEvent + +
+onChatContentChanged +

This event fires each time an Amino chat thread Content (Description) has been changed (only for chats where the current Amino account is in)

+ +### Event: +- This event returns an Amino.Objects.ChatEvent Object +### Example: +```CSharp +static void onChatContentChangedEvent(Amino.Objects.ChatEvent chatEvent) +{ + Console.WriteLine($"Content of Chat thread {chatEvent.chatId} has changed."); +} + + +[...] + +static void main(string[] args) +{ + [...] + client.onChatContentChanged += onChatContentChangedEvent; +} +``` + +### Returns: +- Amino.Objects.ChatEvent +
+ + + +
+onChatAnnouncementPin +

This event fires each time an Amino chat Announcement has been pinned / changed (only for chats where the current Amino account is in)

+ +### Event: +- This event returns an Amino.Objects.ChatAnnouncement Object +### Example: +```CSharp +static void onChatAnnouncementChangedEvent(Amino.Objects.ChatAnnouncement chatAnnouncement) +{ + Console.WriteLine($"Chat Announcement of Chat thread {chatAnnouncement.chatId} has changed to {chatAnnouncement.content}."); +} + + +[...] + +static void main(string[] args) +{ + [...] + client.onChatAnnouncementPin += onChatAnnouncementChangedEvent; +} +``` + +### Returns: +- Amino.Objects.ChatAnnouncement +
+ +