diff --git a/formatting.go b/formatting.go index 8940f3e..54bad50 100644 --- a/formatting.go +++ b/formatting.go @@ -122,7 +122,7 @@ func (formatter *Formatter) ParseSkype(content *event.MessageEventContent, RoomM // parse quote message(set reply) content.Body = strings.ReplaceAll(content.Body, "\n", "") - quoteReg := regexp.MustCompile(`]+\bauthor="([^"]+)" authorname="([^"]+)" timestamp="([^"]+)" conversation.* messageid="([^"]+)".*>.*?(.*?).*?(.*)`) + quoteReg := regexp.MustCompile(`]+\bauthor="([^"]+)" authorname="([^"]+)" timestamp="([^"]+)" conversation="([^"]+)" messageid="([^"]+)".*>.*?(.*?).*?(.*)`) quoteMatches := quoteReg.FindAllStringSubmatch(content.Body, -1) if len(quoteMatches) > 0 { @@ -132,8 +132,14 @@ func (formatter *Formatter) ParseSkype(content *event.MessageEventContent, RoomM fmt.Println("ParseSkype quoteMatches a:", a) fmt.Println() } + portal := formatter.bridge.GetPortalByMXID(RoomMXID) + if portal.Key.JID != match[4] { + content.FormattedBody = match[6] + content.Body = fmt.Sprintf("%s\n\n", match[6]) + continue + } msgMXID := "" - msg := formatter.bridge.DB.Message.GetByID(match[4]) + msg := formatter.bridge.DB.Message.GetByID(match[5]) if msg != nil { msgMXID = string(msg.MXID) } @@ -144,21 +150,21 @@ func (formatter *Formatter) ParseSkype(content *event.MessageEventContent, RoomM href1, href2, mxid, - match[5]) + match[6]) content.FormattedBody = newContent - content.Body = fmt.Sprintf("> <%s> %s\n\n", mxid, match[5]) + content.Body = fmt.Sprintf("> <%s> %s\n\n", mxid, match[6]) inRelateTo := &event.RelatesTo{ Type: event.RelReply, EventID: id.EventID(msgMXID), } content.SetRelatesTo(inRelateTo) - backStr = match[6] + backStr = match[7] } } } // parse mention user message - r := regexp.MustCompile(`(?m)]+\bid="([^"]+)"(.*?)`) + r := regexp.MustCompile(`(?m)]+\bid="([^"]+)">(.*?)`) var originStr string var originBodyStr string if len(backStr) == 0 { @@ -170,8 +176,14 @@ func (formatter *Formatter) ParseSkype(content *event.MessageEventContent, RoomM if len(matches) > 0 { for _, match := range matches { mxid, displayname := formatter.getMatrixInfoByJID(match[1] + skypeExt.NewUserSuffix) + replaceStr := "" + if len(displayname) < 1 { + // TODO need to optimize + replaceStr = match[2] + ":" + } else { + replaceStr = fmt.Sprintf(`%s:`, formatter.bridge.Config.Homeserver.ServerName, mxid, displayname) + } // number := "@" + strings.Replace(match[1], skypeExt.NewUserSuffix, "", 1) - replaceStr := fmt.Sprintf(`%s:`, formatter.bridge.Config.Homeserver.ServerName, mxid, displayname) originStr = strings.ReplaceAll(originStr, match[0], replaceStr) originBodyStr = strings.ReplaceAll(originStr, replaceStr, displayname + ":") }