private void GuildCreateEvents(JObject message) { DiscordGuildCreateEventArgs e = new DiscordGuildCreateEventArgs(); e.RawJson = message; DiscordServer server = new DiscordServer(); server.JoinedAt = message["d"]["joined_at"].ToObject<DateTime>(); server.parentclient = this; server.ID = message["d"]["id"].ToString(); server.Name = message["d"]["name"].ToString(); server.Members = new Dictionary<ID, DiscordMember>(); server.Channels = new List<DiscordChannel>(); server.Roles = new List<DiscordRole>(); foreach (var roll in message["d"]["roles"]) { DiscordRole t = new DiscordRole { Color = new DiscordSharp.Color(roll["color"].ToObject<int>().ToString("x")), Name = roll["name"].ToString(), Permissions = new DiscordPermission(roll["permissions"].ToObject<uint>()), Position = roll["position"].ToObject<int>(), Managed = roll["managed"].ToObject<bool>(), ID = roll["id"].ToString(), Hoist = roll["hoist"].ToObject<bool>() }; server.Roles.Add(t); } foreach (var chn in message["d"]["channels"]) { DiscordChannel tempChannel = new DiscordChannel(); tempChannel.Client = this; tempChannel.ID = chn["id"].ToString(); tempChannel.Type = chn["type"].ToObject<ChannelType>(); if (!chn["topic"].IsNullOrEmpty()) tempChannel.Topic = chn["topic"].ToString(); if (tempChannel.Type == ChannelType.Voice && !chn["bitrate"].IsNullOrEmpty()) tempChannel.Bitrate = chn["bitrate"].ToObject<int>(); tempChannel.Name = chn["name"].ToString(); tempChannel.Private = false; tempChannel.PermissionOverrides = new List<DiscordPermissionOverride>(); tempChannel.Parent = server; foreach (var o in chn["permission_overwrites"]) { if (tempChannel.Type == ChannelType.Voice) continue; DiscordPermissionOverride dpo = new DiscordPermissionOverride(o["allow"].ToObject<uint>(), o["deny"].ToObject<uint>()); dpo.id = o["id"].ToString(); if (o["type"].ToString() == "member") dpo.type = DiscordPermissionOverride.OverrideType.member; else dpo.type = DiscordPermissionOverride.OverrideType.role; tempChannel.PermissionOverrides.Add(dpo); } server.Channels.Add(tempChannel); } foreach (var mbr in message["d"]["members"]) { DiscordMember member = JsonConvert.DeserializeObject<DiscordMember>(mbr["user"].ToString()); if(mbr["nick"] != null) member.Nickname = mbr["nick"].ToString(); member.parentclient = this; member.Parent = server; foreach (var rollid in mbr["roles"]) { member.Roles.Add(server.Roles.Find(x => x.ID == rollid.ToString())); } if (member.Roles.Count == 0) member.Roles.Add(server.Roles.Find(x => x.Name == "@everyone")); server.AddMember(member); } foreach (var voiceStateJSON in message["d"]["voice_states"]) { DiscordVoiceState voiceState = JsonConvert.DeserializeObject<DiscordVoiceState>(voiceStateJSON.ToString()); DiscordMember member = server.GetMemberByKey(voiceState.UserID); member.CurrentVoiceChannel = server.Channels.Find(x => x.ID == voiceState.ChannelID); member.VoiceState = voiceState; } server.Owner = server.GetMemberByKey(message["d"]["owner_id"].ToString()); e.Server = server; if (!message["d"]["unavailable"].IsNullOrEmpty() && message["d"]["unavailable"].ToObject<bool>() == false) { var oldServer = ServersList.Find(x => x.ID == server.ID); if (oldServer != null && oldServer.Unavailable) ServersList.Remove(oldServer); ServersList.Add(server); DebugLogger.Log($"Guild with ID {server.ID} ({server.Name}) became available."); GuildAvailable?.Invoke(this, e); return; } ServersList.Add(server); GuildCreated?.Invoke(this, e); }
//eh private void GetChannelsList(JObject m) { if (ServersList == null) ServersList = new List<DiscordServer>(); foreach (var j in m["d"]["guilds"]) { if (!j["unavailable"].IsNullOrEmpty() && j["unavailable"].ToObject<bool>() == true) continue; //unavailable server DiscordServer temp = new DiscordServer(); temp.parentclient = this; temp.JoinedAt = j["joined_at"].ToObject<DateTime>(); temp.ID = j["id"].ToString(); temp.Name = j["name"].ToString(); if (!j["icon"].IsNullOrEmpty()) temp.icon = j["icon"].ToString(); else temp.icon = null; //temp.owner_id = j["owner_id"].ToString(); List<DiscordChannel> tempSubs = new List<DiscordChannel>(); List<DiscordRole> tempRoles = new List<DiscordRole>(); foreach (var u in j["roles"]) { DiscordRole t = new DiscordRole { Color = new DiscordSharp.Color(u["color"].ToObject<int>().ToString("x")), Name = u["name"].ToString(), Permissions = new DiscordPermission(u["permissions"].ToObject<uint>()), Position = u["position"].ToObject<int>(), Managed = u["managed"].ToObject<bool>(), ID = u["id"].ToString(), Hoist = u["hoist"].ToObject<bool>() }; tempRoles.Add(t); } temp.Roles = tempRoles; foreach (var u in j["channels"]) { DiscordChannel tempSub = new DiscordChannel(); tempSub.Client = this; tempSub.ID = u["id"].ToString(); tempSub.Name = u["name"].ToString(); tempSub.Type = u["type"].ToObject<ChannelType>(); if (!u["topic"].IsNullOrEmpty()) tempSub.Topic = u["topic"].ToString(); if (tempSub.Type == ChannelType.Voice && !u["bitrate"].IsNullOrEmpty()) tempSub.Bitrate = u["bitrate"].ToObject<int>(); tempSub.Parent = temp; List<DiscordPermissionOverride> permissionoverrides = new List<DiscordPermissionOverride>(); foreach (var o in u["permission_overwrites"]) { DiscordPermissionOverride dpo = new DiscordPermissionOverride(o["allow"].ToObject<uint>(), o["deny"].ToObject<uint>()); dpo.id = o["id"].ToString(); if (o["type"].ToString() == "member") dpo.type = DiscordPermissionOverride.OverrideType.member; else dpo.type = DiscordPermissionOverride.OverrideType.role; permissionoverrides.Add(dpo); } tempSub.PermissionOverrides = permissionoverrides; tempSubs.Add(tempSub); } temp.Channels = tempSubs; foreach (var mm in j["members"]) { DiscordMember member = JsonConvert.DeserializeObject<DiscordMember>(mm["user"].ToString()); member.parentclient = this; member.Roles = new List<DiscordRole>(); JArray rawRoles = JArray.Parse(mm["roles"].ToString()); if (rawRoles.Count > 0) { foreach (var role in rawRoles.Children()) { member.Roles.Add(temp.Roles.Find(x => x.ID == role.Value<string>())); } } else { member.Roles.Add(temp.Roles.Find(x => x.Name == "@everyone")); } temp.AddMember(member); } if (!j["presences"].IsNullOrEmpty()) { foreach (var presence in j["presences"]) { DiscordMember member = temp.GetMemberByKey(presence["user"]["id"].ToString()); if (member != null) { member.SetPresence(presence["status"].ToString()); if (!presence["game"].IsNullOrEmpty()) { member.CurrentGame = presence["game"]["name"].ToString(); if (presence["d"]["game"]["type"].ToObject<int>() == 1) { member.Streaming = true; if (presence["d"]["game"]["url"].ToString() != null) member.StreamURL = presence["d"]["game"]["url"].ToString(); } } } } } temp.Region = j["region"].ToString(); temp.Owner = temp.GetMemberByKey(j["owner_id"].ToString()); ServersList.Add(temp); } if (PrivateChannels == null) PrivateChannels = new List<DiscordPrivateChannel>(); foreach (var privateChannel in m["d"]["private_channels"]) { DiscordPrivateChannel tempPrivate = JsonConvert.DeserializeObject<DiscordPrivateChannel>(privateChannel.ToString()); tempPrivate.Client = this; tempPrivate.user_id = privateChannel["recipient"]["id"].ToString(); DiscordServer potentialServer = new DiscordServer(); ServersList.ForEach(x => { if (x.GetMemberByKey(privateChannel["recipient"]["id"].ToString()) != null) { potentialServer = x; } }); if (potentialServer.Owner != null) //should be a safe test..i hope { DiscordMember recipient = potentialServer.GetMemberByKey(privateChannel["recipient"]["id"].ToString()); if (recipient != null) { tempPrivate.Recipient = recipient; } else { DebugLogger.Log("Recipient was null!!!!", MessageLevel.Critical); } } else { DebugLogger.Log("No potential server found for user's private channel null! This will probably fix itself.", MessageLevel.Debug); } PrivateChannels.Add(tempPrivate); } }
/// <summary> /// Creates an empty guild with only this client in it given the following name. /// Unknown if works on bot accounts or not. /// </summary> /// <param name="GuildName">The name of the guild you wish to create.</param> /// <returns>the created DiscordServer</returns> public DiscordServer CreateGuild(string GuildName) { string createGuildUrl = Endpoints.BaseAPI + Endpoints.Guilds; string req = JsonConvert.SerializeObject(new { name = GuildName }); try { var response = JObject.Parse(WebWrapper.Post(createGuildUrl, token, req)); if (response != null) { DiscordServer server = new DiscordServer(); server.JoinedAt = response["joined_at"].ToObject<DateTime>(); server.ID = response["id"].ToString(); server.Name = response["name"].ToString(); server.parentclient = this; string channelGuildUrl = createGuildUrl + $"/{server.ID}" + Endpoints.Channels; var channelRespone = JArray.Parse(WebWrapper.Get(channelGuildUrl, token)); foreach (var item in channelRespone.Children()) { server.Channels.Add(new DiscordChannel { Client = this, Name = item["name"].ToString(), ID = item["id"].ToString(), Topic = item["topic"].ToString(), Private = item["is_private"].ToObject<bool>(), Type = item["type"].ToObject<ChannelType>() }); } server.AddMember(Me); server.Owner = server.GetMemberByKey(response["owner_id"].ToString()); if (server.Owner == null) DebugLogger.Log("Owner is null in CreateGuild!", MessageLevel.Critical); ServersList.Add(server); return server; } } catch (Exception ex) { DebugLogger.Log("Exception ocurred while creating guild: " + ex.Message, MessageLevel.Error); } return null; }