/// <summary> /// Invoked when a local user is posting a message to the hosting chat room /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void _HostingRoom_IsSendingMessage(object sender, RoomMessageEventArgs e) { /// <summary> /// The message filtering action taken by the application after filter/format logic is run /// </summary> RoomMessageFilteringAction messageAction; //Get the pending message RoomMessage messageToFilter = e.Message; //Extract the plain-text version of the message. string pendingPostText = e.Message.MessageDictionary[RoomMessageFormat.PlainText].ToString(); //Update UI with the text of the pending message. this.Dispatcher.BeginInvoke(new ShowPendingMessageDelegate(ShowPendingMessage), new object[] { pendingPostText }); //Check message string to see if the message contains the sub-string entered on the add-in UI if (FilterMessagePost(pendingPostText, FilterTextString.Text)) { //The message string contains the sub-string so the message action is canceled. //Update the UI with the message filtering action and do not update the UpdatedMessage text block. this.Dispatcher.BeginInvoke(new ShowFilterMessageActionDelegate(ShowFilterMessageAction), new object[] { RoomMessageFilteringAction.Canceled }); messageAction = RoomMessageFilteringAction.Canceled; } else { //The message string DOES NOT contain the filter sub-string. //If the pending message starts with "do not reformat" in any letter case then //update the UI with the message filter action, update the UI updated message box with the original message text, //and set the message filtering action to Passed if (pendingPostText.ToUpper().StartsWith("DO NOT REFORMAT:")) { this.Dispatcher.BeginInvoke(new ShowUpdatedMessageDelegate(ShowUpdatedMessage), new object[] { pendingPostText }); this.Dispatcher.BeginInvoke(new ShowFilterMessageActionDelegate(ShowFilterMessageAction), new object[] { RoomMessageFilteringAction.Passed }); messageAction = RoomMessageFilteringAction.Passed; } else { //Reformat the original message text by setting all characters to upper case. //Update the UI with the message filter action, update the UI updated message box with the reformatted message text //and set the message filtering action to Replaced this.Dispatcher.BeginInvoke(new ShowUpdatedMessageDelegate(ShowUpdatedMessage), new object[] { FormatMessagePost(pendingPostText) }); this.Dispatcher.BeginInvoke(new ShowFilterMessageActionDelegate(ShowFilterMessageAction), new object[] { RoomMessageFilteringAction.Replaced }); messageAction = RoomMessageFilteringAction.Replaced; } } //Update the pending message with the updated message text UI text block messageToFilter.MessageDictionary[RoomMessageFormat.PlainText] = UpdatedPost.Text; //Send the filtered message with whatever message filtering action was set in the previous code. _HostingRoom.SendFilteredMessage(messageToFilter, messageAction); }
private async Task MucClient_RoomMessage(object Sender, RoomMessageEventArgs e) { await this.GetRoomNode(e.RoomId, e.Domain); ChatView View = MainWindow.currentInstance.FindRoomView(e.From, XmppClient.GetBareJID(e.To)); MainWindow.ParseChatMessage(e, out string Message, out bool IsMarkdown, out DateTime Timestamp); if (IsMarkdown) { View?.Event(Message, string.Empty, new MarkdownDocument(Message, ChatView.GetMarkdownSettings()), Timestamp, e.ThreadID); } else { View?.Event(Message, string.Empty, e.ThreadID); } }