示例#1
0
文件: ChatOverlay.cs 项目: oscsan/osu
        private void postMessage(TextBox textbox, bool newText)
        {
            var postText = textbox.Text;

            textbox.Text = string.Empty;

            if (string.IsNullOrEmpty(postText))
            {
                return;
            }

            var target = currentChannel;

            if (target == null)
            {
                return;
            }

            if (!api.IsLoggedIn)
            {
                target.AddNewMessages(new ErrorMessage("Please login to participate in chat!"));
                return;
            }

            if (postText[0] == '/')
            {
                // TODO: handle commands
                target.AddNewMessages(new ErrorMessage("Chat commands are not supported yet!"));
                return;
            }

            var message = new LocalEchoMessage
            {
                Sender     = api.LocalUser.Value,
                Timestamp  = DateTimeOffset.Now,
                TargetType = TargetType.Channel, //TODO: read this from channel
                TargetId   = target.Id,
                Content    = postText
            };

            var req = new PostMessageRequest(message);

            target.AddLocalEcho(message);
            req.Failure += e => target.ReplaceMessage(message, null);
            req.Success += m => target.ReplaceMessage(message, m);

            api.Queue(req);
        }
示例#2
0
        private void postMessage(TextBox textbox, bool newText)
        {
            var postText = textbox.Text;

            textbox.Text = string.Empty;

            if (string.IsNullOrWhiteSpace(postText))
            {
                return;
            }

            var target = currentChannel;

            if (target == null)
            {
                return;
            }

            if (!api.IsLoggedIn)
            {
                target.AddNewMessages(new ErrorMessage("Please login to participate in chat!"));
                return;
            }

            bool isAction = false;

            if (postText[0] == '/')
            {
                string[] parameters = postText.Substring(1).Split(new[] { ' ' }, 2);
                string   command    = parameters[0];
                string   content    = parameters.Length == 2 ? parameters[1] : string.Empty;

                switch (command)
                {
                case "me":

                    if (string.IsNullOrWhiteSpace(content))
                    {
                        currentChannel.AddNewMessages(new ErrorMessage("Usage: /me [action]"));
                        return;
                    }

                    isAction = true;
                    postText = content;
                    break;

                case "help":
                    currentChannel.AddNewMessages(new InfoMessage("Supported commands: /help, /me [action]"));
                    return;

                default:
                    currentChannel.AddNewMessages(new ErrorMessage($@"""/{command}"" is not supported! For a list of supported commands see /help"));
                    return;
                }
            }

            var message = new LocalEchoMessage
            {
                Sender     = api.LocalUser.Value,
                Timestamp  = DateTimeOffset.Now,
                TargetType = TargetType.Channel, //TODO: read this from channel
                TargetId   = target.Id,
                IsAction   = isAction,
                Content    = postText
            };

            var req = new PostMessageRequest(message);

            target.AddLocalEcho(message);
            req.Failure += e => target.ReplaceMessage(message, null);
            req.Success += m => target.ReplaceMessage(message, m);

            api.Queue(req);
        }