/// <summary>
        /// Sends a message to the given target (user or group chat)
        /// </summary>
        /// <param name="target">A User or GroupChat</param>
        /// <param name="messageText">The text of the message</param>
        /// <param name="disableLinkPreview">Whether or not to disable link previews</param>
        /// <param name="replyTarget">The message to reply to</param>
        /// <param name="forceReplyOptions">Specifies that the message must be replied to, and what users must reply</param>
        /// <returns>The message that was sent.</returns>
        public Message SendMessage(MessageTarget target, string messageText, bool disableLinkPreview = false, Message replyTarget = null, ForceReplyOptions forceReplyOptions = null)
        {
            var request = new RestRequest("sendMessage", Method.POST)
            {
                RootElement = "result"
            };

            request.AddParameter("chat_id", target.Id);
            request.AddParameter("text", messageText);
            request.AddParameter("disable_web_page_preview", disableLinkPreview);

            if (replyTarget != null)
            {
                request.AddParameter("reply_to_message_id", replyTarget.MessageId);
            }

            if (forceReplyOptions != null)
            {
                request.AddParameter("reply_markup", SimpleJson.SerializeObject(forceReplyOptions));
            }

            var result = _client.Execute<Message>(request);
            return result.Data;
        }
        /// <summary>
        /// Forward a message from one chat to another.
        /// </summary>
        /// <param name="message">The message to forward.</param>
        /// <param name="target">The user/group to send to.</param>
        /// <returns>The message that was forwarded</returns>
        public Message ForwardMessage(Message message, MessageTarget target)
        {
            var request = new RestRequest("forwardMessage", Method.POST)
            {
                RootElement = "result"
            };

            request.AddParameter("chat_id", target.Id);
            request.AddParameter("from_chat_id", (message.Chat == null ? message.From.Id : message.Chat.Id));
            request.AddParameter("message_id", message.MessageId);

            var result = _client.Execute<Message>(request);
            return result.Data;
        }
        /// <summary>
        /// Sends a photo to the given target (user or group chat)
        /// </summary>
        /// <param name="target">A User or GroupChat</param>
        /// <param name="imageStream">A stream containing the data for the image</param>
        /// <param name="caption">A caption for the image</param>
        /// <param name="filename">The filename to report to Telegram</param>
        /// <returns>The message that was sent.</returns>
        public Message SendPhoto(MessageTarget target, Stream imageStream, string caption = null, string filename = "picture.jpg")
        {
            if (filename == null) { throw new ArgumentNullException("filename", "Lectern requires a filename with proper extension."); }
            if (!filename.Contains(".")) { throw new ArgumentException("Lectern requires a filename with proper extension.", "filename"); }

            var request = new RestRequest("sendPhoto", Method.POST)
            {
                RootElement = "result"
            };

            request.AddParameter("chat_id", target.Id);
            request.AddFile("photo", imageStream.CopyTo, filename);
            request.AddParameter("caption", caption);

            request.AddHeader("Content-Type", "multipart/form-data");

            var result = _client.Execute<Message>(request);

            imageStream.Close();
            return result.Data;
        }
        /// <summary>
        /// Indicates that the bot is doing a specified action
        /// </summary>
        /// <param name="target">The target to indicate towards</param>
        /// <param name="action">The action the bot is doing (from the ChatAction class)</param>
        public void SendChatAction(MessageTarget target, string action)
        {
            var request = new RestRequest("sendChatAction", Method.POST);

            request.AddParameter("chat_id", target.Id);
            request.AddParameter("action", action);

            _client.Execute(request);
        }