Merge branch 'develop'
This commit is contained in:
commit
edb0eb1d08
|
@ -29,6 +29,7 @@ type Config struct {
|
||||||
Homeserver struct {
|
Homeserver struct {
|
||||||
Address string `yaml:"address"`
|
Address string `yaml:"address"`
|
||||||
Domain string `yaml:"domain"`
|
Domain string `yaml:"domain"`
|
||||||
|
ServerName string `yaml:"server_name"`
|
||||||
} `yaml:"homeserver"`
|
} `yaml:"homeserver"`
|
||||||
|
|
||||||
AppService struct {
|
AppService struct {
|
||||||
|
|
|
@ -4,6 +4,8 @@ homeserver:
|
||||||
address: https://example.com
|
address: https://example.com
|
||||||
# The domain of the homeserver (for MXIDs, etc).
|
# The domain of the homeserver (for MXIDs, etc).
|
||||||
domain: example.com
|
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.
|
# Application service host/registration related details.
|
||||||
# Changing these values requires regeneration of the registration.
|
# Changing these values requires regeneration of the registration.
|
||||||
|
|
|
@ -138,8 +138,8 @@ func (formatter *Formatter) ParseSkype(content *event.MessageEventContent, RoomM
|
||||||
msgMXID = string(msg.MXID)
|
msgMXID = string(msg.MXID)
|
||||||
}
|
}
|
||||||
mxid, _ = formatter.getMatrixInfoByJID("8:" + match[1] + skypeExt.NewUserSuffix)
|
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)
|
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.Domain, mxid)
|
href2 := fmt.Sprintf(`https://%s/#/user/%s`, formatter.bridge.Config.Homeserver.ServerName, mxid)
|
||||||
newContent := fmt.Sprintf(`<mx-reply><blockquote><a href="%s">In reply to</a> <a href="%s">%s</a><br>%s</blockquote></mx-reply>`,
|
newContent := fmt.Sprintf(`<mx-reply><blockquote><a href="%s">In reply to</a> <a href="%s">%s</a><br>%s</blockquote></mx-reply>`,
|
||||||
href1,
|
href1,
|
||||||
href2,
|
href2,
|
||||||
|
@ -170,9 +170,10 @@ func (formatter *Formatter) ParseSkype(content *event.MessageEventContent, RoomM
|
||||||
if len(matches) > 0 {
|
if len(matches) > 0 {
|
||||||
for _, match := range matches {
|
for _, match := range matches {
|
||||||
mxid, displayname := formatter.getMatrixInfoByJID(match[1] + skypeExt.NewUserSuffix)
|
mxid, displayname := formatter.getMatrixInfoByJID(match[1] + skypeExt.NewUserSuffix)
|
||||||
number := "@" + strings.Replace(match[1], skypeExt.NewUserSuffix, "", 1)
|
// number := "@" + strings.Replace(match[1], skypeExt.NewUserSuffix, "", 1)
|
||||||
originStr = strings.ReplaceAll(originStr, match[0], fmt.Sprintf(`<a href="https://%s/#/%s">%s</a>:`, formatter.bridge.Config.Homeserver.Domain, mxid, displayname))
|
replaceStr := fmt.Sprintf(`<a href="https://%s/#/%s">%s</a>:`, formatter.bridge.Config.Homeserver.ServerName, mxid, displayname)
|
||||||
originBodyStr = strings.Replace(originStr, number, displayname, -1)
|
originStr = strings.ReplaceAll(originStr, match[0], replaceStr)
|
||||||
|
originBodyStr = strings.ReplaceAll(originStr, replaceStr, displayname + ":")
|
||||||
}
|
}
|
||||||
if len(backStr) == 0 {
|
if len(backStr) == 0 {
|
||||||
content.Format = event.FormatHTML
|
content.Format = event.FormatHTML
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -5,7 +5,7 @@ go 1.14
|
||||||
require (
|
require (
|
||||||
github.com/chai2010/webp v1.1.0
|
github.com/chai2010/webp v1.1.0
|
||||||
github.com/gorilla/websocket v1.4.2
|
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/lib/pq v1.7.0
|
||||||
github.com/mattn/go-sqlite3 v2.0.3+incompatible
|
github.com/mattn/go-sqlite3 v2.0.3+incompatible
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
|
|
2
go.sum
2
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.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 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.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/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
||||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
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=
|
github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4=
|
||||||
|
|
|
@ -257,7 +257,7 @@ func (mx *MatrixHandler) HandleMembership(evt *event.Event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
user := mx.bridge.GetUserByMXID(evt.Sender)
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -307,7 +307,7 @@ func (mx *MatrixHandler) HandleRoomMetadata(evt *event.Event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
portal := mx.bridge.GetPortalByMXID(evt.RoomID)
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -449,7 +449,7 @@ func (mx *MatrixHandler) HandleRedaction(evt *event.Event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
portal := mx.bridge.GetPortalByMXID(evt.RoomID)
|
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)
|
portal.HandleMatrixRedaction(user, evt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
16
portal.go
16
portal.go
|
@ -1420,8 +1420,8 @@ func (portal *Portal) sendMessage(intent *appservice.IntentAPI, eventType event.
|
||||||
"net.maunium.whatsapp.puppet": intent.IsCustomPuppet,
|
"net.maunium.whatsapp.puppet": intent.IsCustomPuppet,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fmt.Println()
|
fmt.Println("portal sendMessage timestamp:", timestamp)
|
||||||
fmt.Printf("portal sendMessage0: %+v", content)
|
fmt.Printf("portal sendMessage: %+v", content)
|
||||||
if portal.Encrypted && portal.bridge.Crypto != nil {
|
if portal.Encrypted && portal.bridge.Crypto != nil {
|
||||||
encrypted, err := portal.bridge.Crypto.Encrypt(portal.MXID, eventType, wrappedContent)
|
encrypted, err := portal.bridge.Crypto.Encrypt(portal.MXID, eventType, wrappedContent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -1431,12 +1431,8 @@ func (portal *Portal) sendMessage(intent *appservice.IntentAPI, eventType event.
|
||||||
wrappedContent.Parsed = encrypted
|
wrappedContent.Parsed = encrypted
|
||||||
}
|
}
|
||||||
if timestamp == 0 {
|
if timestamp == 0 {
|
||||||
fmt.Println()
|
|
||||||
fmt.Printf("portal sendMessage1: %+v", content)
|
|
||||||
return intent.SendMessageEvent(portal.MXID, eventType, &wrappedContent)
|
return intent.SendMessageEvent(portal.MXID, eventType, &wrappedContent)
|
||||||
} else {
|
} else {
|
||||||
fmt.Println()
|
|
||||||
fmt.Printf("portal sendMessage2: %+v", content)
|
|
||||||
return intent.SendMassagedMessageEvent(portal.MXID, eventType, &wrappedContent, timestamp)
|
return intent.SendMassagedMessageEvent(portal.MXID, eventType, &wrappedContent, timestamp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2042,7 +2038,7 @@ func (portal *Portal) convertMatrixMessageSkype(sender *User, evt *event.Event)
|
||||||
}
|
}
|
||||||
|
|
||||||
// mention user message
|
// mention user message
|
||||||
r := regexp.MustCompile(`(?m)<a[^>]+\bhref="(.*?)://` + portal.bridge.Config.Homeserver.Domain + `/#/@([^"]+):(.*?)">(.*?)</a>`)
|
r := regexp.MustCompile(`(?m)<a[^>]+\bhref="(.*?)://` + portal.bridge.Config.Homeserver.ServerName + `/#/@([^"]+):(.*?)">(.*?)</a>`)
|
||||||
matches := r.FindAllStringSubmatch(matchStr, -1)
|
matches := r.FindAllStringSubmatch(matchStr, -1)
|
||||||
fmt.Println("matches: ", matches)
|
fmt.Println("matches: ", matches)
|
||||||
if len(matches) > 0 {
|
if len(matches) > 0 {
|
||||||
|
@ -2226,6 +2222,7 @@ func (portal *Portal) HandleMatrixMessage(sender *User, evt *event.Event) {
|
||||||
|
|
||||||
func SendMsg(sender *User, chatThreadId string, content *skype.SendMessage, output chan<- error) (err error) {
|
func SendMsg(sender *User, chatThreadId string, content *skype.SendMessage, output chan<- error) (err error) {
|
||||||
fmt.Println("message SendMsg type: ", content.Type)
|
fmt.Println("message SendMsg type: ", content.Type)
|
||||||
|
if sender.Conn.LoginInfo != nil {
|
||||||
switch event.MessageType(content.Type) {
|
switch event.MessageType(content.Type) {
|
||||||
case event.MsgText, event.MsgEmote, event.MsgNotice:
|
case event.MsgText, event.MsgEmote, event.MsgNotice:
|
||||||
err = sender.Conn.SendText(chatThreadId, content)
|
err = sender.Conn.SendText(chatThreadId, content)
|
||||||
|
@ -2247,9 +2244,12 @@ func SendMsg(sender *User, chatThreadId string, content *skype.SendMessage, outp
|
||||||
default:
|
default:
|
||||||
err = errors.New("send to skype(unknown message type)")
|
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 {
|
if err != nil {
|
||||||
output <- fmt.Errorf("message sending responded with %d", err)
|
output <- err
|
||||||
} else {
|
} else {
|
||||||
output <- nil
|
output <- nil
|
||||||
}
|
}
|
||||||
|
|
54
user.go
54
user.go
|
@ -12,8 +12,6 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
//"github.com/pkg/errors"
|
|
||||||
"github.com/skip2/go-qrcode"
|
|
||||||
log "maunium.net/go/maulogger/v2"
|
log "maunium.net/go/maulogger/v2"
|
||||||
"maunium.net/go/mautrix"
|
"maunium.net/go/mautrix"
|
||||||
|
|
||||||
|
@ -328,58 +326,6 @@ func (user *User) IsLoginInProgress() bool {
|
||||||
return user.Conn != nil && user.Conn.IsLoginInProgress()
|
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) {
|
func (user *User) Login(ce *CommandEvent, name string, password string) (err error) {
|
||||||
if user.contactsPresence == nil {
|
if user.contactsPresence == nil {
|
||||||
user.contactsPresence = make(map[string]*skypeExt.Presence)
|
user.contactsPresence = make(map[string]*skypeExt.Presence)
|
||||||
|
|
Loading…
Reference in New Issue