Пример #1
0
 /// <summary>
 /// Processes the given DiscordMessage, extracting the command and the args for that command.
 /// Assumes that the message starts with the command char
 /// </summary>
 /// <param name="message">The message to parse</param>
 /// <returns>Two strings, the first being the command name and the second, the arguments</returns>
 public static string[] ProcessMessage(DiscordMessage message)
 {
     string[] contents = message.content.Split(' ');
     string[] parsed = new string[2];
     parsed[0] = contents[0].Substring(1).ToLower();
     parsed[1] = "";
     for (int i = 1; i < contents.Length; i++)
     {
         parsed[1] += contents[i] + " ";
     }
     return parsed;
 }
Пример #2
0
        public DiscordMessage SendMessage(string message)
        {
            string url = Endpoints.BaseAPI + Endpoints.Channels + $"/{id}" + Endpoints.Messages;
            JObject result = JObject.Parse(WebWrapper.Post(url, DiscordClient.token, JsonConvert.SerializeObject(Utils.GenerateMessage(message))));

            DiscordMessage m = new DiscordMessage
            {
                id = result["id"].ToString(),
                attachments = result["attachments"].ToObject<string[]>(),
                author = this.parent.members.Find(x => x.ID == result["author"]["id"].ToString()),
                channel = this,
                content = result["content"].ToString(),
                RawJson = result,
                timestamp = result["timestamp"].ToObject<DateTime>()
            };
            return m;
        }
Пример #3
0
 /*
     From here on are the bot commands. These are exceuted when a
     user sends a message prefaced with the COMMAND_CHAR found in
     MessageProcessor.cs
 */
 private bool SetStatus(string args, DiscordMessage from)
 {
     _userStatus[from.author.user.username.ToLower()] = args;
     return true;
 }
Пример #4
0
 private bool PingComm(string args, DiscordMessage from)
 {
     SendMessage(":exclamation: SaltyBot is here :exclamation:", from.channel);
     return true;
 }
Пример #5
0
 private bool MeComm(string args, DiscordMessage from)
 {
     switch (@from.author.user.username.ToLower())
     {
         case "salt":
             SendMessage("He is my creator. I owe my digital life to him. :heart: Beep-Boop-Beep" +
                         " :heart:",
                 @from.channel);
             break;
         case "kowz":
             SendMessage("He supplies the world with dank memes and moderately okay Sheik plays",
                 @from.channel);
             break;
         case "rafacar":
             SendMessage("A Brazillian dude who is... --Internet Disconnected--",
                 @from.channel);
             break;
         case "freedom":
             SendMessage("My sources indicate he is Canadian and thus lives with polar bears in " +
                         "an igloo while watching anime",
                 @from.channel);
             break;
         case "axaruz":
             SendMessage("September 16th, 2015 at 1:16pm: \"doesn't matter to me\"",
                 @from.channel);
             break;
         default:
             SendMessage("Hmmmm.... You appear to not be in my database folder \"NSA/People/InternetFolk\". " +
                         "Can you tell me who you are with " + MessageProcessor.COMMAND_CHAR + "iam",
                 @from.channel);
             break;
     }
     return true;
 }
Пример #6
0
 private bool GetStatus(string args, DiscordMessage from)
 {
     args = args.ToLower();
     if (_userStatus.ContainsKey(args))
     {
         SendMessage(_userStatus[args], from.channel);
     }
     else
     {
         SendMessage("User has not set their status yet", from.channel);
     }
     return true;
 }
Пример #7
0
 private void DeleteMessage(DiscordMessage message)
 {
     string url = Endpoints.BaseAPI + Endpoints.Channels + $"/{id}" + Endpoints.Messages + $"/{message.id}";
     var result = JObject.Parse(WebWrapper.Delete(url, DiscordClient.token));
 }
Пример #8
0
 private void SendDeleteRequest(DiscordMessage message, bool user = false)
 {
     string url;
     if(!user)
         url = Endpoints.BaseAPI + Endpoints.Channels + $"/{message.channel.id}" + Endpoints.Messages + $"/{message.id}";
     else
         url = Endpoints.BaseAPI + Endpoints.Users + $"/{message.channel.id}" + Endpoints.Messages + $"/{message.id}";
     try
     {
         var result = WebWrapper.Delete(url, token);
     }
     catch(Exception ex)
     {
         DebugLogger.Log($"Exception ocurred while deleting message (ID: {message.id}): " + ex.Message, MessageLevel.Error);
     }
 }
Пример #9
0
 public void DeletePrivateMessage(DiscordMessage message)
 {
     SendDeleteRequest(message, true);
 }
Пример #10
0
 private bool AcceptInviteComm(string args, DiscordMessage from)
 {
     // not implemented yet. Waiting on DiscordSharp API
     return false;
 }
Пример #11
0
        private void MessageCreateEvents(JObject message)
        {
            try
            {
                string tempChannelID = message["d"]["channel_id"].ToString();

                var foundServerChannel = ServersList.Find(x => x.channels.Find(y => y.id == tempChannelID) != null);
                if (foundServerChannel == null)
                {
                    var foundPM = PrivateChannels.Find(x => x.id == message["d"]["channel_id"].ToString());
                    DiscordPrivateMessageEventArgs dpmea = new DiscordPrivateMessageEventArgs();
                    dpmea.Channel = foundPM;
                    dpmea.message = message["d"]["content"].ToString();
                    DiscordMember tempMember = new DiscordMember();
                    tempMember.user.username = message["d"]["author"]["username"].ToString();
                    tempMember.user.id = message["d"]["author"]["id"].ToString();
                    dpmea.author = tempMember;


                    if (PrivateMessageReceived != null)
                        PrivateMessageReceived(this, dpmea);
                }
                else
                {
                    DiscordMessageEventArgs dmea = new DiscordMessageEventArgs();
                    dmea.Channel = foundServerChannel.channels.Find(y => y.id == tempChannelID);

                    dmea.message_text = message["d"]["content"].ToString();

                    DiscordMember tempMember = new DiscordMember();
                    tempMember = foundServerChannel.members.Find(x => x.user.id == message["d"]["author"]["id"].ToString());
                    dmea.author = tempMember;

                    DiscordMessage m = new DiscordMessage();
                    m.author = dmea.author;
                    m.channel = dmea.Channel;
                    m.content = dmea.message_text;
                    m.id = message["d"]["id"].ToString();
                    m.RawJson = message;
                    dmea.message = m;

                    Regex r = new Regex("\\d+");
                    foreach (Match mm in r.Matches(dmea.message_text))
                        if (mm.Value == Me.user.id)
                            if (MentionReceived != null)
                                MentionReceived(this, dmea);
                    if (MessageReceived != null)
                        MessageReceived(this, dmea);
                    
                    KeyValuePair<string, DiscordMessage> toAdd = new KeyValuePair<string, DiscordMessage>(message["d"]["id"].ToString(), m);
                    MessageLog.Add(toAdd);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("!!! {0}", ex.Message);
                Console.Beep(100, 1000);
            }
        }
Пример #12
0
        private void SendDeleteRequest(DiscordMessage message)
        {
            var httpRequest = (HttpWebRequest)WebRequest.Create("https://discordapp.com/api/channels/" + message.channel.id + "/messages/" + message.id);
            httpRequest.Headers["authorization"] = token;
            httpRequest.ContentType = "application/json";
            httpRequest.Method = "DELETE";

            using (var sw = new StreamWriter(httpRequest.GetRequestStream()))
            {
                //sw.Write("DELETE");
                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);
                }
            }
        }
Пример #13
0
        private DiscordMessage GenerateMessage(string message)
        {
            DiscordMessage dm = new DiscordMessage();
            List<string> foundIDS = new List<string>();
            Regex r = new Regex("\\@\\w+");
            List<KeyValuePair<string, string>> toReplace = new List<KeyValuePair<string, string>>();
            foreach (Match m in r.Matches(message))
            {
                if (m.Index > 0 && message[m.Index - 1] == '<')
                    continue;
                DiscordMember user = ServersList.Find(x => x.members.Find(y => y.user.username == m.Value.Trim('@')) != null).members.Find(y=>y.user.username == m.Value.Trim('@'));
                foundIDS.Add(user.user.id);
                toReplace.Add(new KeyValuePair<string, string>(m.Value, user.user.id));
            }
            foreach(var k in toReplace)
            {
                message = message.Replace(k.Key, "<@" + k.Value + ">");
            }

            dm.content = message;
            dm.mentions = foundIDS.ToArray();
            return dm;
        }
Пример #14
0
 /// <summary>
 /// Checks to see if the given message starts with the a valid command character
 /// </summary>
 /// <param name="message">discord message to check</param>
 /// <returns>true if message starts with the command char, false otherwise</returns>
 public static bool ValidCommand(DiscordMessage message)
 {
     return message.content[0] == COMMAND_CHAR;
 }
Пример #15
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;
 }
Пример #16
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;
 }
Пример #17
0
 private bool AuthorizeComm(string args, DiscordMessage from)
 {
     if (args == "password" && _admin == null)
     {
         _admin = from.author.user;
         SendMessage(
             "Successfully set " + _admin.username +
             " as my local admin. Password invalidated", from.channel);
     }
     else
     {
         SendMessage("Invalid login credentials. Please copy code from my console.", from.channel);
     }
     return true;
 }
Пример #18
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;
        }
Пример #19
0
 private bool ClearComm(string args, DiscordMessage from)
 {
     // NOTE: this only works on messages sent from the currently logged in user!
     if (_admin != null && from.author.user.username == _admin.username)
     {
         _client.DeleteAllMessagesInChannel(from.channel);
         SendMessage("My Channel messages were cleared at " + DateTime.Now.ToShortDateString()
             + " " + DateTime.Now.ToShortTimeString() + " by my admin: " +
             _admin.username, from.channel);
         SendMessage("Note, clearing only works when given admin status by the Server owner", from.channel);
     }
     return true;
 }
Пример #20
0
        private void MessageCreateEvents(JObject message)
        {
            try
            {
                string tempChannelID = message["d"]["channel_id"].ToString();

                var foundServerChannel = ServersList.Find(x => x.channels.Find(y => y.id == tempChannelID) != null);
                if (foundServerChannel == null)
                {
                    if (message["d"]["author"]["id"].ToString() != Me.ID)
                    {
                        var foundPM = PrivateChannels.Find(x => x.id == message["d"]["channel_id"].ToString());
                        DiscordPrivateMessageEventArgs dpmea = new DiscordPrivateMessageEventArgs();
                        dpmea.Channel = foundPM;
                        dpmea.message = message["d"]["content"].ToString();
                        DiscordMember tempMember = new DiscordMember(this);
                        tempMember.Username = message["d"]["author"]["username"].ToString();
                        tempMember.ID = message["d"]["author"]["id"].ToString();
                        dpmea.author = tempMember;


                        if (PrivateMessageReceived != null)
                            PrivateMessageReceived(this, dpmea);
                    }
                    else
                    {
                        //if (DebugMessageReceived != null)
                        //    DebugMessageReceived(this, new DiscordDebugMessagesEventArgs { message = "Ignoring MESSAGE_CREATE for private channel for message sent from this client." });
                    }
                }
                else
                {
                    DiscordMessageEventArgs dmea = new DiscordMessageEventArgs();
                    dmea.Channel = foundServerChannel.channels.Find(y => y.id == tempChannelID);

                    dmea.message_text = message["d"]["content"].ToString();

                    DiscordMember tempMember = new DiscordMember(this);
                    tempMember = foundServerChannel.members.Find(x => x.ID == message["d"]["author"]["id"].ToString());
                    dmea.author = tempMember;

                    DiscordMessage m = new DiscordMessage();
                    m.author = dmea.author;
                    m.channel = dmea.Channel;
                    m.content = dmea.message_text;
                    m.id = message["d"]["id"].ToString();
                    m.RawJson = message;
                    m.timestamp = DateTime.Now;
                    dmea.message = m;

                    Regex r = new Regex("\\d+");
                    foreach (Match mm in r.Matches(dmea.message_text))
                        if (mm.Value == Me.ID)
                            if (MentionReceived != null)
                                MentionReceived(this, dmea);

                    KeyValuePair<string, DiscordMessage> toAdd = new KeyValuePair<string, DiscordMessage>(message["d"]["id"].ToString(), m);
                    MessageLog.Add(toAdd);

                    if (MessageReceived != null)
                        MessageReceived(this, dmea);
                }
            }
            catch (Exception ex)
            {
                DebugLogger.Log("Error ocurred during MessageCreateEvents: " + ex.Message, MessageLevel.Error);
            }
        }
Пример #21
0
 private bool DisconnectComm(string args, DiscordMessage from)
 {
     if (_admin.username == from.author.user.username)
     {
         SendMessage("Goodbye cruel digital world!", from.channel);
         Disconnect();
     }
     return true;
 }