diff --git a/config/config.go b/config/config.go
index fb19b7d..b999fd7 100644
--- a/config/config.go
+++ b/config/config.go
@@ -29,6 +29,7 @@ type Config struct {
Homeserver struct {
Address string `yaml:"address"`
Domain string `yaml:"domain"`
+ ServerName string `yaml:"server_name"`
} `yaml:"homeserver"`
AppService struct {
diff --git a/example-config.yaml b/example-config.yaml
index d0c4d59..4069c05 100644
--- a/example-config.yaml
+++ b/example-config.yaml
@@ -4,6 +4,8 @@ homeserver:
address: https://example.com
# The domain of the homeserver (for MXIDs, etc).
domain: example.com
+ # If you don’t know what this is, no need to modify(for parse "mention user/reply message, etc")
+ server_name: matrix.to
# Application service host/registration related details.
# Changing these values requires regeneration of the registration.
diff --git a/formatting.go b/formatting.go
index 1ef6bd0..8940f3e 100644
--- a/formatting.go
+++ b/formatting.go
@@ -138,8 +138,8 @@ func (formatter *Formatter) ParseSkype(content *event.MessageEventContent, RoomM
msgMXID = string(msg.MXID)
}
mxid, _ = formatter.getMatrixInfoByJID("8:" + match[1] + skypeExt.NewUserSuffix)
- href1 := fmt.Sprintf(`https://%s/#/room/%s/%s?via=%s`, formatter.bridge.Config.Homeserver.Domain, RoomMXID, msgMXID, formatter.bridge.Config.Homeserver.Domain)
- href2 := fmt.Sprintf(`https://%s/#/user/%s`, formatter.bridge.Config.Homeserver.Domain, mxid)
+ href1 := fmt.Sprintf(`https://%s/#/room/%s/%s?via=%s`, formatter.bridge.Config.Homeserver.ServerName, RoomMXID, msgMXID, formatter.bridge.Config.Homeserver.Domain)
+ href2 := fmt.Sprintf(`https://%s/#/user/%s`, formatter.bridge.Config.Homeserver.ServerName, mxid)
newContent := fmt.Sprintf(`In reply to %s
%s
`,
href1,
href2,
@@ -170,9 +170,10 @@ func (formatter *Formatter) ParseSkype(content *event.MessageEventContent, RoomM
if len(matches) > 0 {
for _, match := range matches {
mxid, displayname := formatter.getMatrixInfoByJID(match[1] + skypeExt.NewUserSuffix)
- number := "@" + strings.Replace(match[1], skypeExt.NewUserSuffix, "", 1)
- originStr = strings.ReplaceAll(originStr, match[0], fmt.Sprintf(`%s:`, formatter.bridge.Config.Homeserver.Domain, mxid, displayname))
- originBodyStr = strings.Replace(originStr, number, displayname, -1)
+ // 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 + ":")
}
if len(backStr) == 0 {
content.Format = event.FormatHTML
diff --git a/go.mod b/go.mod
index db6133e..24cf9b1 100644
--- a/go.mod
+++ b/go.mod
@@ -5,7 +5,7 @@ go 1.14
require (
github.com/chai2010/webp v1.1.0
github.com/gorilla/websocket v1.4.2
- github.com/kelaresg/go-skypeapi v0.1.2-0.20210120095455-33c3f50415c4
+ github.com/kelaresg/go-skypeapi v0.1.2-0.20210128115834-086b2e03dd09
github.com/lib/pq v1.7.0
github.com/mattn/go-sqlite3 v2.0.3+incompatible
github.com/pkg/errors v0.9.1
diff --git a/go.sum b/go.sum
index beea6be..4c5ae4b 100644
--- a/go.sum
+++ b/go.sum
@@ -160,6 +160,8 @@ github.com/kelaresg/go-skypeapi v0.1.2-0.20201211120317-8651f9f08575 h1:4M0mtPS+
github.com/kelaresg/go-skypeapi v0.1.2-0.20201211120317-8651f9f08575/go.mod h1:2Mxwa2Flo+PKlVYEM4QBNgs408C/mUSBXRzAb6+B+Zg=
github.com/kelaresg/go-skypeapi v0.1.2-0.20210120095455-33c3f50415c4 h1:8tif5ndoTRHAOj4j2Ump9uyDaKoQ/W17dJ2K36G418U=
github.com/kelaresg/go-skypeapi v0.1.2-0.20210120095455-33c3f50415c4/go.mod h1:2Mxwa2Flo+PKlVYEM4QBNgs408C/mUSBXRzAb6+B+Zg=
+github.com/kelaresg/go-skypeapi v0.1.2-0.20210128115834-086b2e03dd09 h1:Hy1sgotN3qqglcmoT4G295UiX7Ucdyn/mGq/GlwDNgc=
+github.com/kelaresg/go-skypeapi v0.1.2-0.20210128115834-086b2e03dd09/go.mod h1:2Mxwa2Flo+PKlVYEM4QBNgs408C/mUSBXRzAb6+B+Zg=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4=
diff --git a/matrix.go b/matrix.go
index a7ed35d..69fcfde 100644
--- a/matrix.go
+++ b/matrix.go
@@ -257,7 +257,7 @@ func (mx *MatrixHandler) HandleMembership(evt *event.Event) {
}
user := mx.bridge.GetUserByMXID(evt.Sender)
- if user == nil || user.Conn == nil || !user.Whitelisted || !user.IsConnected() {
+ if user == nil || user.Conn == nil || user.Conn.LoginInfo == nil || !user.Whitelisted || !user.IsConnected() {
return
}
@@ -307,7 +307,7 @@ func (mx *MatrixHandler) HandleRoomMetadata(evt *event.Event) {
}
portal := mx.bridge.GetPortalByMXID(evt.RoomID)
- if user.Conn == nil || portal == nil || portal.IsPrivateChat() {
+ if user.Conn == nil || user.Conn.LoginInfo == nil || portal == nil || portal.IsPrivateChat() {
return
}
@@ -449,7 +449,7 @@ func (mx *MatrixHandler) HandleRedaction(evt *event.Event) {
}
portal := mx.bridge.GetPortalByMXID(evt.RoomID)
- if user.Conn != nil && portal != nil {
+ if user.Conn != nil && user.Conn.LoginInfo != nil && portal != nil {
portal.HandleMatrixRedaction(user, evt)
}
}
diff --git a/portal.go b/portal.go
index ab46068..d7489e0 100644
--- a/portal.go
+++ b/portal.go
@@ -1420,8 +1420,8 @@ func (portal *Portal) sendMessage(intent *appservice.IntentAPI, eventType event.
"net.maunium.whatsapp.puppet": intent.IsCustomPuppet,
}
}
- fmt.Println()
- fmt.Printf("portal sendMessage0: %+v", content)
+ fmt.Println("portal sendMessage timestamp:", timestamp)
+ fmt.Printf("portal sendMessage: %+v", content)
if portal.Encrypted && portal.bridge.Crypto != nil {
encrypted, err := portal.bridge.Crypto.Encrypt(portal.MXID, eventType, wrappedContent)
if err != nil {
@@ -1431,12 +1431,8 @@ func (portal *Portal) sendMessage(intent *appservice.IntentAPI, eventType event.
wrappedContent.Parsed = encrypted
}
if timestamp == 0 {
- fmt.Println()
- fmt.Printf("portal sendMessage1: %+v", content)
return intent.SendMessageEvent(portal.MXID, eventType, &wrappedContent)
} else {
- fmt.Println()
- fmt.Printf("portal sendMessage2: %+v", content)
return intent.SendMassagedMessageEvent(portal.MXID, eventType, &wrappedContent, timestamp)
}
}
@@ -2042,7 +2038,7 @@ func (portal *Portal) convertMatrixMessageSkype(sender *User, evt *event.Event)
}
// mention user message
- r := regexp.MustCompile(`(?m)]+\bhref="(.*?)://` + portal.bridge.Config.Homeserver.Domain + `/#/@([^"]+):(.*?)">(.*?)`)
+ r := regexp.MustCompile(`(?m)]+\bhref="(.*?)://` + portal.bridge.Config.Homeserver.ServerName + `/#/@([^"]+):(.*?)">(.*?)`)
matches := r.FindAllStringSubmatch(matchStr, -1)
fmt.Println("matches: ", matches)
if len(matches) > 0 {
@@ -2226,30 +2222,34 @@ func (portal *Portal) HandleMatrixMessage(sender *User, evt *event.Event) {
func SendMsg(sender *User, chatThreadId string, content *skype.SendMessage, output chan<- error) (err error) {
fmt.Println("message SendMsg type: ", content.Type)
- switch event.MessageType(content.Type) {
- case event.MsgText, event.MsgEmote, event.MsgNotice:
- err = sender.Conn.SendText(chatThreadId, content)
- case event.MsgImage:
- fmt.Println("message SendMsg type m.image: ", content.Type)
- err = sender.Conn.SendFile(chatThreadId, content)
- case event.MsgVideo:
- fmt.Println("message SendMsg type m.video: ", content.Type)
- err = sender.Conn.SendFile(chatThreadId, content)
- case event.MsgAudio:
- fmt.Println("message SendMsg type m.audio: ", content.Type)
- err = sender.Conn.SendFile(chatThreadId, content)
- case event.MsgFile:
- fmt.Println("message SendMsg type m.file: ", content.Type)
- err = sender.Conn.SendFile(chatThreadId, content)
- case event.MsgLocation:
- fmt.Println("message SendMsg type m.location: ", content.Type)
- //err = c.SendFile(chatThreadId, content)
- default:
- err = errors.New("send to skype(unknown message type)")
+ if sender.Conn.LoginInfo != nil {
+ switch event.MessageType(content.Type) {
+ case event.MsgText, event.MsgEmote, event.MsgNotice:
+ err = sender.Conn.SendText(chatThreadId, content)
+ case event.MsgImage:
+ fmt.Println("message SendMsg type m.image: ", content.Type)
+ err = sender.Conn.SendFile(chatThreadId, content)
+ case event.MsgVideo:
+ fmt.Println("message SendMsg type m.video: ", content.Type)
+ err = sender.Conn.SendFile(chatThreadId, content)
+ case event.MsgAudio:
+ fmt.Println("message SendMsg type m.audio: ", content.Type)
+ err = sender.Conn.SendFile(chatThreadId, content)
+ case event.MsgFile:
+ fmt.Println("message SendMsg type m.file: ", content.Type)
+ err = sender.Conn.SendFile(chatThreadId, content)
+ case event.MsgLocation:
+ fmt.Println("message SendMsg type m.location: ", content.Type)
+ //err = c.SendFile(chatThreadId, content)
+ default:
+ err = errors.New("send to skype(unknown message type)")
+ }
+ } else {
+ err = errors.New("Not logged into Skype or Skype session has expired")
}
if err != nil {
- output <- fmt.Errorf("message sending responded with %d", err)
+ output <- err
} else {
output <- nil
}
diff --git a/user.go b/user.go
index 21f92c5..018679c 100644
--- a/user.go
+++ b/user.go
@@ -12,8 +12,6 @@ import (
"sync"
"time"
- //"github.com/pkg/errors"
- "github.com/skip2/go-qrcode"
log "maunium.net/go/maulogger/v2"
"maunium.net/go/mautrix"
@@ -328,58 +326,6 @@ func (user *User) IsLoginInProgress() bool {
return user.Conn != nil && user.Conn.IsLoginInProgress()
}
-func (user *User) loginQrChannel(ce *CommandEvent, qrChan <-chan string, eventIDChan chan<- id.EventID) {
- var qrEventID id.EventID
- for code := range qrChan {
- if code == "stop" {
- return
- }
- qrCode, err := qrcode.Encode(code, qrcode.Low, 256)
- if err != nil {
- user.log.Errorln("Failed to encode QR code:", err)
- ce.Reply("Failed to encode QR code: %v", err)
- return
- }
-
- bot := user.bridge.AS.BotClient()
-
- resp, err := bot.UploadBytes(qrCode, "image/png")
- if err != nil {
- user.log.Errorln("Failed to upload QR code:", err)
- ce.Reply("Failed to upload QR code: %v", err)
- return
- }
-
- if qrEventID == "" {
- sendResp, err := bot.SendImage(ce.RoomID, code, resp.ContentURI)
- if err != nil {
- user.log.Errorln("Failed to send QR code to user:", err)
- return
- }
- qrEventID = sendResp.EventID
- eventIDChan <- qrEventID
- } else {
- _, err = bot.SendMessageEvent(ce.RoomID, event.EventMessage, &event.MessageEventContent{
- MsgType: event.MsgImage,
- Body: code,
- URL: resp.ContentURI.CUString(),
- NewContent: &event.MessageEventContent{
- MsgType: event.MsgImage,
- Body: code,
- URL: resp.ContentURI.CUString(),
- },
- RelatesTo: &event.RelatesTo{
- Type: event.RelReplace,
- EventID: qrEventID,
- },
- })
- if err != nil {
- user.log.Errorln("Failed to send edited QR code to user:", err)
- }
- }
- }
-}
-
func (user *User) Login(ce *CommandEvent, name string, password string) (err error) {
if user.contactsPresence == nil {
user.contactsPresence = make(map[string]*skypeExt.Presence)