Пример #1
0
 /// <summary>
 /// Simulates typing in the specified channel. Automatically times out/stops after either:
 /// -10 Seconds
 /// -A message is sent
 /// </summary>
 /// <param name="channel"></param>
 public void SimulateTyping(DiscordChannel channel)
 {
     string url = Endpoints.BaseAPI + Endpoints.Channels + $"/{channel.id}" + Endpoints.Typing;
     try
     {
         WebWrapper.Post(url, token, "");
     }
     catch(Exception ex)
     {
         DebugLogger.Log("Exception ocurred while simulating typing: " + ex.Message, MessageLevel.Error);
     }
 }
Пример #2
0
 public DiscordVoiceClient(DiscordClient parentClient, DiscordVoiceConfig config, DiscordChannel channel)
 {
     _parent     = parentClient;
     VoiceConfig = config;
     Channel     = channel;
 }
Пример #3
0
 public DiscordMember GetMemberFromChannel(DiscordChannel channel, string username, bool caseSensitive)
 {
     DiscordServer parentServer = ServersList.Find(x => x.channels.Find(y => y.id == channel.id) != null);
     return parentServer.members.Find(y => caseSensitive ? y.Username == username : y.Username.ToLower() == username.ToLower());
 }
Пример #4
0
 public DiscordMessage GetLastMessageSent(DiscordChannel inChannel)
 {
     for (int i = MessageLog.Count - 1; i > -1; i--)
     {
         if (MessageLog[i].Value.author.ID == Me.ID)
             if(MessageLog[i].Value.channel.id == inChannel.id)
                 return MessageLog[i].Value;
     }
     return null;
 }
Пример #5
0
        public void AttachFile(DiscordChannel channel, string message, string pathToFile)
        {
            string url = Endpoints.BaseAPI + Endpoints.Channels + $"/{channel.id}" + Endpoints.Messages;
            //WebWrapper.PostWithAttachment(url, message, pathToFile);
            try
            {
                var uploadResult = JObject.Parse(WebWrapper.HttpUploadFile(url, token, pathToFile, "file", "image/jpeg", null));

                if (!string.IsNullOrWhiteSpace(message))
                    EditMessage(uploadResult["id"].ToString(), message, channel);
            }
            catch(Exception ex)
            {
                DebugLogger.Log($"Error ocurred while sending file ({pathToFile}) to {channel.name}: {ex.Message}", MessageLevel.Error);
            }
        }
Пример #6
0
 public void ChangeChannelTopic(string Channeltopic, DiscordChannel channel)
 {
     string topicChangeJson = JsonConvert.SerializeObject(
         new
         {
             name = channel.name,
             topic = Channeltopic
         });
     string url = Endpoints.BaseAPI + Endpoints.Channels + $"/{channel.id}";
     try
     {
         var result = JObject.Parse(WebWrapper.Patch(url, token, topicChangeJson));
         ServersList.Find(x => x.channels.Find(y => y.id == channel.id) != null).channels.Find(x => x.id == channel.id).topic = Channeltopic;
     }
     catch(Exception ex)
     {
         DebugLogger.Log($"Error ocurred while changing channel topic for channel {channel.name}: {ex.Message}", MessageLevel.Error);
     }
 }
Пример #7
0
        public void ChangeChannelTopic(string Channeltopic, DiscordChannel channel)
        {
            string topicChangeJson = JsonConvert.SerializeObject(
                new
                {
                    name = channel.name,
                    topic = Channeltopic
                });

            var httpRequest = (HttpWebRequest)WebRequest.Create("https://discordapp.com/api/channels/" + channel.id);
            httpRequest.Headers["authorization"] = token;
            httpRequest.ContentType = "application/json";
            httpRequest.Method = "PATCH";

            using (var sw = new StreamWriter(httpRequest.GetRequestStream()))
            {
                sw.Write(topicChangeJson.ToString());
                sw.Flush();
                sw.Close();
            }
            try
            {
                var httpResponse = (HttpWebResponse)httpRequest.GetResponse();
                using (var sr = new StreamReader(httpResponse.GetResponseStream()))
                {
                    var result = JObject.Parse(sr.ReadLine());
                    ServersList.Find(x => x.channels.Find(y => y.id == channel.id) != null).channels.Find(x => x.id == channel.id).topic = Channeltopic;
                }
            }
            catch (Exception ex)
            {
                if (DebugMessageReceived != null)
                    DebugMessageReceived(this, new DiscordDebugMessagesEventArgs { message = ex.Message });
            }
        }
Пример #8
0
        //eh
        private void GetChannelsList(JObject m)
        {
            if (ServersList == null)
                ServersList = new List<DiscordServer>();
            foreach(var j in m["d"]["guilds"])
            {
                DiscordServer temp = new DiscordServer();
                temp.id = j["id"].ToString();
                temp.name = j["name"].ToString();
                //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.id = u["id"].ToString();
                    tempSub.name = u["name"].ToString();
                    tempSub.type = u["type"].ToString();
                    tempSub.topic = u["topic"].ToString();
                    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.ID = mm["user"]["id"].ToString();
                    //member.Username = mm["user"]["username"].ToString();
                    //member.Avatar = mm["user"]["avatar"].ToString();
                    //member.Discriminator = mm["user"]["discriminator"].ToString();
                    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"));
                    }
                    member.Parent = temp;

                    temp.members.Add(member);
                }
                temp.owner = temp.members.Find(x => x.ID == j["owner_id"].ToString());
                ServersList.Add(temp);
            }
            
        }
Пример #9
0
 //eh
 private void GetChannelsList(JObject m)
 {
     if (ServersList == null)
         ServersList = new List<DiscordServer>();
     foreach(var j in m["d"]["guilds"])
     {
         DiscordServer temp = new DiscordServer();
         temp.id = j["id"].ToString();
         temp.name = j["name"].ToString();
         temp.owner_id = j["owner_id"].ToString();
         List<DiscordChannel> tempSubs = new List<DiscordChannel>();
         foreach(var u in j["channels"])
         {
             DiscordChannel tempSub = new DiscordChannel();
             tempSub.id = u["id"].ToString();
             tempSub.name = u["name"].ToString();
             tempSub.type = u["type"].ToString();
             tempSub.topic = u["topic"].ToString();
             tempSubs.Add(tempSub);
         }
         temp.channels = tempSubs;
         foreach(var mm in j["members"])
         {
             DiscordMember member = new DiscordMember();
             member.user.id = mm["user"]["id"].ToString();
             member.user.username = mm["user"]["username"].ToString();
             member.user.avatar = mm["user"]["avatar"].ToString();
             member.user.discriminator = mm["user"]["discriminator"].ToString();
             temp.members.Add(member);
         }
         ServersList.Add(temp);
     }
     
 }
Пример #10
0
        /// <summary>
        /// Sends a message to a channel, what else did you expect?
        /// </summary>
        /// <param name="message"></param>
        /// <param name="channel"></param>
        public void SendMessageToChannel(string message, DiscordChannel channel)
        {
            //DiscordServer serverID = ServerFromName(server);
           //string initMessage = "{\"recipient_id\":" + channelID.id + "}";
            var httpRequest = (HttpWebRequest)WebRequest.Create("https://discordapp.com/api/channels/" + channel.id + "/messages");
            httpRequest.Headers["authorization"] = token;
            httpRequest.ContentType = "application/json";
            httpRequest.Method = "POST";

            using (var sw = new StreamWriter(httpRequest.GetRequestStream()))
            {
                sw.Write(JsonConvert.SerializeObject(GenerateMessage(message)));
                sw.Flush();
                sw.Close();
            }
            try
            {
                var httpResponse = (HttpWebResponse)httpRequest.GetResponse();
                using (var sr = new StreamReader(httpResponse.GetResponseStream()))
                {
                    var result = sr.ReadToEnd();
                }
            }
            catch (WebException e)
            {
                using (StreamReader s = new StreamReader(e.Response.GetResponseStream()))
                {
                    string result = s.ReadToEnd();
                    Console.WriteLine("!!! " + result);   
                }
            }
        }
Пример #11
0
 private void GuildCreateEvents(JObject message)
 {
     DiscordGuildCreateEventArgs e = new DiscordGuildCreateEventArgs();
     e.RawJson = message;
     DiscordServer server = new DiscordServer();
     server.id = message["d"]["id"].ToString();
     server.name = message["d"]["name"].ToString();
     server.owner_id = message["d"]["owner_id"].ToString();
     server.members = new List<DiscordMember>();
     server.channels = new List<DiscordChannel>();
     foreach(var chn in message["d"]["channels"])
     {
         DiscordChannel tempChannel = new DiscordChannel();
         tempChannel.id = chn["id"].ToString();
         tempChannel.type = chn["type"].ToString();
         tempChannel.topic = chn["topic"].ToString();
         tempChannel.name = chn["name"].ToString();
         tempChannel.is_private = false;
         server.channels.Add(tempChannel);
     }
     foreach(var mbr in message["d"]["members"])
     {
         DiscordMember member = new DiscordMember();
         member.user.avatar = mbr["user"]["avatar"].ToString();
         member.user.username = mbr["user"]["username"].ToString();
         member.user.id = mbr["user"]["id"].ToString();
         member.user.discriminator = mbr["user"]["discriminator"].ToString();
         server.members.Add(member);
     }
     ServersList.Add(server);
     e.server = server;
     if (GuildCreated != null)
         GuildCreated(this, e);
 }
Пример #12
0
 public DiscordChannel CreateChannel(string ChannelName, bool voice)
 {
     string url = Endpoints.BaseAPI + Endpoints.Guilds + $"/{this.id}" + Endpoints.Channels;
     var reqJson = JsonConvert.SerializeObject(new { name = ChannelName, type = voice ? "voice" : "text" });
     var result = JObject.Parse(WebWrapper.Post(url, DiscordClient.token, reqJson));
     if (result != null)
     {
         DiscordChannel dc = new DiscordChannel { name = result["name"].ToString(), id = result["id"].ToString(), type = result["type"].ToString(), is_private = result["is_private"].ToObject<bool>(), topic = result["topic"].ToString() };
         this.channels.Add(dc);
         return dc;
     }
     return null;
 }
Пример #13
0
 public void DeleteChannel(DiscordChannel channel)
 {
     string url = Endpoints.BaseAPI + Endpoints.Channels + $"/{channel.id}";
     WebWrapper.Delete(url, DiscordClient.token);
 }
Пример #14
0
        private void GuildUpdateEvents(JObject message)
        {
            DiscordServer oldServer = ServersList.Find(x => x.id == message["d"]["id"].ToString());
            DiscordServer newServer = new DiscordServer
            {
                name = message["d"]["name"].ToString(),
                id = message["d"]["name"].ToString()
            };
            newServer.roles = new List<DiscordRole>();
            if (!message["d"]["roles"].IsNullOrEmpty())
            {
                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>()
                    };
                    newServer.roles.Add(t);
                }
            }
            newServer.channels = new List<DiscordChannel>();
            if (!message["d"]["channels"].IsNullOrEmpty())
            {
                foreach (var u in message["d"]["channels"])
                {
                    DiscordChannel tempSub = new DiscordChannel();
                    tempSub.id = u["id"].ToString();
                    tempSub.name = u["name"].ToString();
                    tempSub.type = u["type"].ToString();
                    tempSub.topic = u["topic"].ToString();
                    tempSub.parent = newServer;
                    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.type = o["type"].ToObject<DiscordPermissionOverride.OverrideType>();
                        dpo.id = o["id"].ToString();

                        permissionoverrides.Add(dpo);
                    }
                    tempSub.PermissionOverrides = permissionoverrides;

                    newServer.channels.Add(tempSub);
                }
            }
            if (!message["d"]["members"].IsNullOrEmpty())
            {
                foreach (var mm in message["d"]["members"])
                {
                    DiscordMember member = JsonConvert.DeserializeObject<DiscordMember>(mm["user"].ToString());
                    member.parentclient = this;
                    member.Parent = newServer;

                    JArray rawRoles = JArray.Parse(mm["roles"].ToString());
                    if (rawRoles.Count > 0)
                    {
                        foreach (var role in rawRoles.Children())
                        {
                            member.Roles.Add(newServer.roles.Find(x => x.id == role.Value<string>()));
                        }
                    }
                    else
                    {
                        member.Roles.Add(newServer.roles.Find(x => x.name == "@everyone"));
                    }

                    newServer.members.Add(member);
                }
            }
            if (!message["d"]["owner_id"].IsNullOrEmpty())
            {
                newServer.owner = newServer.members.Find(x => x.ID == message["d"]["owner_id"].ToString());
                DebugLogger.Log($"Transferred ownership from user '{oldServer.owner.Username}' to {newServer.owner.Username}.");
            }
            ServersList.Remove(oldServer);
            ServersList.Add(newServer);
            DiscordServerUpdateEventArgs dsuea = new DiscordServerUpdateEventArgs { NewServer = newServer, OldServer = oldServer };
            if (GuildUpdated != null)
                GuildUpdated(this, dsuea);
        }
Пример #15
0
 /*
     End of Bot commands
 */
 /// <summary>
 /// Sends a message, from the bot, to the given channel with the given message.
 /// </summary>
 /// <param name="message">Message to send</param>
 /// <param name="channel">Channel to send the message to</param>
 /// <returns>true if the message was sent, false otherwise</returns>
 public bool SendMessage(string message, DiscordChannel channel)
 {
     if (_client != null && _connected)
     {
         _client.SendMessageToChannel(message, channel);
         return true;
     }
     return false;
 }
Пример #16
0
        private void GuildCreateEvents(JObject message)
        {
            DiscordGuildCreateEventArgs e = new DiscordGuildCreateEventArgs();
            e.RawJson = message;
            DiscordServer server = new DiscordServer();
            server.id = message["d"]["id"].ToString();
            server.name = message["d"]["name"].ToString();
            server.members = new List<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.id = chn["id"].ToString();
                tempChannel.type = chn["type"].ToString();
                tempChannel.topic = chn["topic"].ToString();
                tempChannel.name = chn["name"].ToString();
                tempChannel.is_private = false;
                tempChannel.PermissionOverrides = new List<DiscordPermissionOverride>();
                foreach (var o in chn["permission_overwrites"])
                {
                    if (tempChannel.type == "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());
                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.members.Add(member);
            }
            server.owner = server.members.Find(x => x.ID == message["d"]["owner_id"].ToString());

            ServersList.Add(server);
            e.server = server;
            if (GuildCreated != null)
                GuildCreated(this, e);
        }
Пример #17
0
 private bool TimerComm(string args, DiscordMessage from)
 {
     int time;
     try
     {
         time = int.Parse(args);
     }
     catch (FormatException ex)
     {
         SendMessage("Please give a number of seconds to countdown from", from.channel);
         return false;
     }
     if (time < 0)
     {
         SendMessage("Please give a number of seconds above 0", from.channel);
         return false;
     }
     _timer = new Timer(time * 1000);
     _timer.Elapsed += TimerInterval;
     _timer.Start();
     SendMessage(":exclamation::exclamation: " + time + " second timer has started :exclamation::exclamation:", from.channel);
     _timerChannel = from.channel;
     return true;
 }
Пример #18
0
 /// <summary>
 /// Sends a message to a channel, what else did you expect?
 /// </summary>
 /// <param name="message"></param>
 /// <param name="channel"></param>
 public DiscordMessage SendMessageToChannel(string message, DiscordChannel channel)
 {
     string url = Endpoints.BaseAPI + Endpoints.Channels + $"/{channel.id}" + Endpoints.Messages;
     try
     {
         JObject result = JObject.Parse(WebWrapper.Post(url, token, JsonConvert.SerializeObject(Utils.GenerateMessage(message))));
         DiscordMessage m = new DiscordMessage
         {
             id = result["id"].ToString(),
             attachments = result["attachments"].ToObject<string[]>(),
             author = channel.parent.members.Find(x => x.ID == result["author"]["id"].ToString()),
             channel = channel,
             content = result["content"].ToString(),
             RawJson = result,
             timestamp = result["timestamp"].ToObject<DateTime>()
         };
         return m;
     }
     catch(Exception ex)
     {
         DebugLogger.Log($"Error ocurred while sending message to channel ({channel.name}): {ex.Message}", MessageLevel.Error);
     }
     return null;
 }
Пример #19
0
 public DiscordServer GetServerChannelIsIn(DiscordChannel channel)
 {
     return ServersList.Find(x => x.channels.Find(y => y.id == channel.id) != null);
 }
Пример #20
0
        /// <summary>
        /// Returns a List of DiscordMessages. 
        /// </summary>
        /// <param name="channel">The channel to return them from.</param>
        /// <param name="count">How many to return</param>
        /// <param name="idBefore">Messages before this message ID.</param>
        /// <param name="idAfter">Messages after this message ID.</param>
        /// <returns></returns>
        public List<DiscordMessage> GetMessageHistory(DiscordChannel channel, int count, int? idBefore, int ?idAfter)
        {
            string request = "https://discordapp.com/api/channels/" + channel.id + $"/messages?&limit={count}";
            if (idBefore != null)
                request += $"&before={idBefore}";
            if (idAfter != null)
                request += $"&after={idAfter}";

            JArray result = null;

            try
            {
                result = JArray.Parse(WebWrapper.Get(request, token));
            }
            catch(Exception ex)
            {
                DebugLogger.Log($"Error ocurred while getting message history for channel {channel.name}: {ex.Message}", MessageLevel.Error);
            }

            if(result != null)
            {
                List<DiscordMessage> messageList = new List<DiscordMessage>();
                /// NOTE
                /// For some reason, the d object is excluded from this.
                foreach (var item in result.Children())
                {
                    messageList.Add(new DiscordMessage
                    {
                        id = item["id"].ToString(),
                        channel = channel,
                        author = GetMemberFromChannel(channel, item["author"]["id"].ToObject<long>()),
                        content = item["content"].ToString(),
                        RawJson = item.ToObject<JObject>(),
                        timestamp = DateTime.Parse(item["timestamp"].ToString())
                    });
                }
                return messageList;
            }

            return null;
        }
Пример #21
0
 public void DeleteChannel(DiscordChannel channel)
 {
     string url = Endpoints.BaseAPI + Endpoints.Channels + $"/{channel.id}";
     try
     {
         WebWrapper.Delete(url, token);
     }
     catch(Exception ex)
     {
         DebugLogger.Log("Exception ocurred while deleting channel: " + ex.Message, MessageLevel.Error);
     }
 }
Пример #22
0
        public int DeleteAllMessagesInChannel(DiscordChannel channel)
        {
            int count = 0;

            foreach(var message in this.MessageLog)
            {
                if (message.Value.channel == channel)
                    if (message.Value.author.ID == Me.ID)
                    {
                        SendDeleteRequest(message.Value);
                        count++;
                    }
            }

            return count;
        }
Пример #23
0
 public DiscordChannel CreateChannel(DiscordServer server, string ChannelName, bool voice)
 {
     string url = Endpoints.BaseAPI + Endpoints.Guilds + $"/{server.id}" + Endpoints.Channels;
     var reqJson = JsonConvert.SerializeObject(new { name = ChannelName, type = voice ? "voice" : "text" });
     try
     {
         var result = JObject.Parse(WebWrapper.Post(url, token, reqJson));
         if (result != null)
         {
             DiscordChannel dc = new DiscordChannel { name = result["name"].ToString(), id = result["id"].ToString(), type = result["type"].ToString(), is_private = result["is_private"].ToObject<bool>(), topic = result["topic"].ToString() };
             server.channels.Add(dc);
             return dc;
         }
     }
     catch(Exception ex)
     {
         DebugLogger.Log("Exception ocurred while creating channel: " + ex.Message, MessageLevel.Error);
     }
     return null;
 }
Пример #24
0
 public DiscordMember GetMemberFromChannel(DiscordChannel channel, long id)
 {
     DiscordServer parentServer = ServersList.Find(x => x.channels.Find(y => y.id == channel.id) != null);
     return parentServer.members.Find(y => y.ID == id.ToString());
 }
Пример #25
0
 /// <summary>
 /// Creates and invite to the given channel.
 /// </summary>
 /// <param name="channel"></param>
 /// <returns>The invite's code.</returns>
 public string CreateInvite(DiscordChannel channel)
 {
     string url = Endpoints.BaseAPI + Endpoints.Channels + $"/{channel.id}" + Endpoints.Invites;
     try
     {
         var resopnse = JObject.Parse(WebWrapper.Post(url, token, "{\"validate\":\"\"}"));
         if (resopnse != null)
         {
             return resopnse["code"].ToString();
         }
     }
     catch(Exception ex)
     {
         DebugLogger.Log($"Error ocurred while creating invite for channel {channel.name}: {ex.Message}", MessageLevel.Error);
     }
     return null;
 }
Пример #26
0
        public DiscordMessage EditMessage(string MessageID, string replacementMessage, DiscordChannel channel)
        {
            string url = Endpoints.BaseAPI + Endpoints.Channels + $"/{channel.id}" + Endpoints.Messages + $"/{MessageID}";
            try
            {
                string replacement = JsonConvert.SerializeObject(
                    new
                    {
                        content = replacementMessage,
                        mentions = new string[0]
                    }
                );
                JObject result = JObject.Parse(WebWrapper.Patch(url, token, replacement));

                DiscordMessage m = new DiscordMessage
                {
                    RawJson = result,
                    attachments = result["attachments"].ToObject<string[]>(),
                    author = channel.parent.members.Find(x=>x.ID == result["author"]["id"].ToString()),
                    channel = channel,
                    content = result["content"].ToString(),
                    id = result["id"].ToString(),
                    timestamp = result["timestamp"].ToObject<DateTime>()
                };
                return m;
            }
            catch(Exception ex)
            {
                DebugLogger.Log("Exception ocurred while editing: " + ex.Message, MessageLevel.Error);
            }

            return null;
        }
Пример #27
0
        public async void ConnectToVoiceChannel(DiscordChannel channel, bool clientMuted = false, bool clientDeaf = false)
        {
            if (channel.type != "voice")
                throw new InvalidOperationException($"Channel '{channel.name}' is not a voice channel!");

            if (ConnectedToVoice())
                await Task.Run(()=>DisconnectFromVoice()).ConfigureAwait(false);

            if (VoiceClient == null)
                VoiceClient = new DiscordVoiceClient(this);
            VoiceClient.Disposed += (sender, e) => VoiceClient = null;
            VoiceClient.UserSpeaking += (sender, e) =>
            {
                if (UserSpeaking != null)
                    UserSpeaking(this, e);
            };

            string joinVoicePayload = JsonConvert.SerializeObject(new
            {
                op = 4,
                d = new
                {
                    guild_id = channel.parent.id,
                    channel_id = channel.id,
                    self_mute = clientMuted,
                    self_deaf = clientDeaf
                }
            });

            ws.Send(joinVoicePayload);
        }
Пример #28
0
 private void ChannelCreateEvents (JObject message)
 {
     if (message["d"]["is_private"].ToString().ToLower() == "false")
     {
         var foundServer = ServersList.Find(x => x.id == message["d"]["guild_id"].ToString());
         if (foundServer != null)
         {
             DiscordChannel tempChannel = new DiscordChannel();
             tempChannel.name = message["d"]["name"].ToString();
             tempChannel.type = message["d"]["type"].ToString();
             tempChannel.id = message["d"]["id"].ToString();
             foundServer.channels.Add(tempChannel);
             DiscordChannelCreateEventArgs fae = new DiscordChannelCreateEventArgs();
             fae.ChannelCreated = tempChannel;
             fae.ChannelType = DiscordChannelCreateType.CHANNEL;
             if (ChannelCreated != null)
                 ChannelCreated(this, fae);
         }
     }
     else
     {
         DiscordPrivateChannel tempPrivate = new DiscordPrivateChannel();
         tempPrivate.id = message["d"]["id"].ToString();
         DiscordRecipient tempRec = new DiscordRecipient();
         tempRec.id = message["d"]["recipient"]["id"].ToString();
         tempRec.username = message["d"]["recipient"]["username"].ToString();
         tempPrivate.recipient = tempRec;
         PrivateChannels.Add(tempPrivate);
         DiscordPrivateChannelEventArgs fak = new DiscordPrivateChannelEventArgs { ChannelType = DiscordChannelCreateType.PRIVATE, ChannelCreated = tempPrivate };
         if (PrivateChannelCreated != null)
             PrivateChannelCreated(this, fak);
     }
 }
Пример #29
0
 public DiscordVoiceClient(DiscordClient parentClient, DiscordVoiceConfig config, DiscordChannel channel)
 {
     _parent     = parentClient;
     VoiceConfig = config;
     Channel     = channel;
     InitializeOpusEncoder();
 }