Merge branch 'develop' into kelare-develop

This commit is contained in:
zhaoYangguang 2021-11-16 13:36:49 +08:00
commit a9c8ea7a73
3 changed files with 81 additions and 213 deletions

View File

@ -3,10 +3,11 @@ package main
import ( import (
"errors" "errors"
"fmt" "fmt"
"math"
skype "github.com/kelaresg/go-skypeapi" skype "github.com/kelaresg/go-skypeapi"
"github.com/kelaresg/matrix-skype/database" "github.com/kelaresg/matrix-skype/database"
skypeExt "github.com/kelaresg/matrix-skype/skype-ext" skypeExt "github.com/kelaresg/matrix-skype/skype-ext"
"math"
"maunium.net/go/mautrix/patch" "maunium.net/go/mautrix/patch"
"sort" "sort"
@ -96,24 +97,8 @@ func (handler *CommandHandler) CommandMux(ce *CommandEvent) {
handler.CommandHelp(ce) handler.CommandHelp(ce)
//case "version": //case "version":
// handler.CommandVersion(ce) // handler.CommandVersion(ce)
//case "reconnect":
// handler.CommandReconnect(ce)
//case "disconnect":
// handler.CommandDisconnect(ce)
case "ping": case "ping":
handler.CommandPing(ce) handler.CommandPing(ce)
//case "delete-connection":
// handler.CommandDeleteConnection(ce)
//case "delete-session":
// handler.CommandDeleteSession(ce)
//case "delete-portal":
// handler.CommandDeletePortal(ce)
//case "delete-all-portals":
// handler.CommandDeleteAllPortals(ce)
//case "dev-test":
// handler.CommandDevTest(ce)
//case "set-pl":
// handler.CommandSetPowerLevel(ce)
case "logout": case "logout":
handler.CommandLogout(ce) handler.CommandLogout(ce)
case "login-matrix", "sync", "list", "open", "pm", "invite", "kick", "leave", "join", "create", "share": case "login-matrix", "sync", "list", "open", "pm", "invite", "kick", "leave", "join", "create", "share":
@ -314,130 +299,6 @@ func leavePortals(ce *CommandEvent) {
} }
} }
const cmdDeleteSessionHelp = `delete-session - Delete session information and disconnect from WhatsApp without sending a logout request`
//func (handler *CommandHandler) CommandDeleteSession(ce *CommandEvent) {
// if ce.User.Session == nil && ce.User.Conn == nil {
// ce.Reply("Nothing to purge: no session information stored and no active connection.")
// return
// }
// ce.User.SetSession(nil)
// if ce.User.Conn != nil {
// _, _ = ce.User.Conn.Disconnect()
// ce.User.Conn.RemoveHandlers()
// ce.User.Conn = nil
// }
// ce.Reply("Session information purged")
//}
const cmdReconnectHelp = `reconnect - Reconnect to WhatsApp`
//func (handler *CommandHandler) CommandReconnect(ce *CommandEvent) {
// if ce.User.Conn == nil {
// if ce.User.Session == nil {
// ce.Reply("No existing connection and no session. Did you mean `login`?")
// } else {
// ce.Reply("No existing connection, creating one...")
// ce.User.Connect(false)
// }
// return
// }
//
// wasConnected := true
// sess, err := ce.User.Conn.Disconnect()
// if err == whatsapp.ErrNotConnected {
// wasConnected = false
// } else if err != nil {
// ce.User.log.Warnln("Error while disconnecting:", err)
// } else if len(sess.Wid) > 0 {
// ce.User.SetSession(&sess)
// }
//
// err = ce.User.Conn.Restore()
// if err == whatsapp.ErrInvalidSession {
// if ce.User.Session != nil {
// ce.User.log.Debugln("Got invalid session error when reconnecting, but user has session. Retrying using RestoreWithSession()...")
// var sess whatsapp.Session
// sess, err = ce.User.Conn.RestoreWithSession(*ce.User.Session)
// if err == nil {
// ce.User.SetSession(&sess)
// }
// } else {
// ce.Reply("You are not logged in.")
// return
// }
// } else if err == whatsapp.ErrLoginInProgress {
// ce.Reply("A login or reconnection is already in progress.")
// return
// } else if err == whatsapp.ErrAlreadyLoggedIn {
// ce.Reply("You were already connected.")
// return
// }
// if err != nil {
// ce.User.log.Warnln("Error while reconnecting:", err)
// if err.Error() == "restore session connection timed out" {
// ce.Reply("Reconnection timed out. Is WhatsApp on your phone reachable?")
// } else {
// ce.Reply("Unknown error while reconnecting: %v", err)
// }
// ce.User.log.Debugln("Disconnecting due to failed session restore in reconnect command...")
// sess, err := ce.User.Conn.Disconnect()
// if err != nil {
// ce.User.log.Errorln("Failed to disconnect after failed session restore in reconnect command:", err)
// } else if len(sess.Wid) > 0 {
// ce.User.SetSession(&sess)
// }
// return
// }
// ce.User.ConnectionErrors = 0
//
// var msg string
// if wasConnected {
// msg = "Reconnected successfully."
// } else {
// msg = "Connected successfully."
// }
// ce.Reply(msg)
// ce.User.PostLogin()
//}
const cmdDeleteConnectionHelp = `delete-connection - Disconnect ignoring errors and delete internal connection state.`
//func (handler *CommandHandler) CommandDeleteConnection(ce *CommandEvent) {
// if ce.User.Conn == nil {
// ce.Reply("You don't have a WhatsApp connection.")
// return
// }
// sess, err := ce.User.Conn.Disconnect()
// if err == nil && len(sess.Wid) > 0 {
// ce.User.SetSession(&sess)
// }
// ce.User.Conn.RemoveHandlers()
// ce.User.Conn = nil
// ce.Reply("Successfully disconnected. Use the `reconnect` command to reconnect.")
//}
const cmdDisconnectHelp = `disconnect - Disconnect from WhatsApp (without logging out)`
//func (handler *CommandHandler) CommandDisconnect(ce *CommandEvent) {
// if ce.User.Conn == nil {
// ce.Reply("You don't have a WhatsApp connection.")
// return
// }
// sess, err := ce.User.Conn.Disconnect()
// if err == whatsapp.ErrNotConnected {
// ce.Reply("You were not connected.")
// return
// } else if err != nil {
// ce.User.log.Warnln("Error while disconnecting:", err)
// ce.Reply("Unknown error while disconnecting: %v", err)
// return
// } else if len(sess.Wid) > 0 {
// ce.User.SetSession(&sess)
// }
// ce.Reply("Successfully disconnected. Use the `reconnect` command to reconnect.")
//}
const cmdPingHelp = `ping - Check your connection to Skype.` const cmdPingHelp = `ping - Check your connection to Skype.`
func (handler *CommandHandler) CommandPing(ce *CommandEvent) { func (handler *CommandHandler) CommandPing(ce *CommandEvent) {
@ -481,10 +342,6 @@ func (handler *CommandHandler) CommandHelp(ce *CommandEvent) {
cmdPrefix + cmdHelpHelp, cmdPrefix + cmdHelpHelp,
cmdPrefix + cmdLoginHelp, cmdPrefix + cmdLoginHelp,
cmdPrefix + cmdLogoutHelp, cmdPrefix + cmdLogoutHelp,
//cmdPrefix + cmdDeleteSessionHelp,
//cmdPrefix + cmdReconnectHelp,
//cmdPrefix + cmdDisconnectHelp,
//cmdPrefix + cmdDeleteConnectionHelp,
cmdPrefix + cmdPingHelp, cmdPrefix + cmdPingHelp,
//cmdPrefix + cmdLoginMatrixHelp, //cmdPrefix + cmdLoginMatrixHelp,
//cmdPrefix + cmdLogoutMatrixHelp, //cmdPrefix + cmdLogoutMatrixHelp,
@ -492,16 +349,12 @@ func (handler *CommandHandler) CommandHelp(ce *CommandEvent) {
cmdPrefix + cmdListHelp, cmdPrefix + cmdListHelp,
cmdPrefix + cmdOpenHelp, cmdPrefix + cmdOpenHelp,
cmdPrefix + cmdPMHelp, cmdPrefix + cmdPMHelp,
//cmdPrefix + cmdSetPowerLevelHelp,
//cmdPrefix + cmdDeletePortalHelp,
//cmdPrefix + cmdDeleteAllPortalsHelp,
cmdPrefix + cmdCreateHelp, cmdPrefix + cmdCreateHelp,
cmdPrefix + cmdInviteHelp, cmdPrefix + cmdInviteHelp,
cmdPrefix + cmdKickHelp, cmdPrefix + cmdKickHelp,
cmdPrefix + cmdLeaveHelp, cmdPrefix + cmdLeaveHelp,
cmdPrefix + cmdJoinHelp, cmdPrefix + cmdJoinHelp,
cmdPrefix + cmdShareHelp, cmdPrefix + cmdShareHelp,
}, "\n* ")) }, "\n* "))
} }
@ -1040,7 +893,7 @@ func (handler *CommandHandler) CommandLeave(ce *CommandEvent) {
if len(portal.MXID) > 0 { if len(portal.MXID) > 0 {
cli := handler.bridge.Bot cli := handler.bridge.Bot
fmt.Println("cli appurl:", cli.Prefix, cli.AppServiceUserID, cli.HomeserverURL.String(), ) fmt.Println("cli appurl:", cli.Prefix, cli.AppServiceUserID, cli.HomeserverURL.String())
//res, errLeave := cli.LeaveRoom(portal.MXID) //res, errLeave := cli.LeaveRoom(portal.MXID)
//cli.AppServiceUserID = ce.User.MXID //cli.AppServiceUserID = ce.User.MXID
u := cli.BuildURL("rooms", portal.MXID, "leave") u := cli.BuildURL("rooms", portal.MXID, "leave")
@ -1062,6 +915,7 @@ func (handler *CommandHandler) CommandLeave(ce *CommandEvent) {
ce.Reply("Leave operation completed and successful.") ce.Reply("Leave operation completed and successful.")
} }
const cmdShareHelp = `share <_group ID_> - Generate a link to join the group.` const cmdShareHelp = `share <_group ID_> - Generate a link to join the group.`
func (handler *CommandHandler) CommandShare(ce *CommandEvent) { func (handler *CommandHandler) CommandShare(ce *CommandEvent) {

View File

@ -101,11 +101,14 @@ func (puppet *Puppet) StartCustomMXID() error {
} }
resp, err := intent.Whoami() resp, err := intent.Whoami()
if err != nil { if err != nil {
if strings.Index(err.Error(), "M_UNKNOWN_TOKEN (HTTP 401)") > -1 { // if strings.Index(err.Error(), "M_UNKNOWN_TOKEN (HTTP 401)") > -1 {
puppet.log.Debugln("StartCustomMXID UpdateAccessToken: ", puppet.MXID) // puppet.log.Debugln("StartCustomMXID UpdateAccessToken: ", puppet.MXID)
// if puppet.customUser != nil {
// err, _ = puppet.customUser.UpdateAccessToken(puppet)
// }
// }
if puppet.customUser != nil { if puppet.customUser != nil {
err, _ = puppet.customUser.UpdateAccessToken(puppet) err, _ = puppet.updateCustomAccessTokenIfExpired(err, puppet.customUser)
}
} }
if err != nil { if err != nil {
puppet.clearCustomMXID() puppet.clearCustomMXID()
@ -123,6 +126,17 @@ func (puppet *Puppet) StartCustomMXID() error {
return nil return nil
} }
func (puppet *Puppet) updateCustomAccessTokenIfExpired(err error, user *User) (newErr error, accessToken string) {
if user == nil {
return err, ""
}
puppet.log.Debugln("StartCustomMXID UpdateAccessToken: ", puppet.MXID)
if strings.Index(err.Error(), "M_UNKNOWN_TOKEN (HTTP 401)") > -1 {
return user.UpdateAccessToken(puppet)
}
return err, ""
}
func (puppet *Puppet) startSyncing() { func (puppet *Puppet) startSyncing() {
if !puppet.bridge.Config.Bridge.SyncWithCustomPuppets { if !puppet.bridge.Config.Bridge.SyncWithCustomPuppets {
return return
@ -146,7 +160,7 @@ func (puppet *Puppet) stopSyncing() {
func (puppet *Puppet) ProcessResponse(resp *mautrix.RespSync, since string) error { func (puppet *Puppet) ProcessResponse(resp *mautrix.RespSync, since string) error {
if !puppet.customUser.IsConnected() { if !puppet.customUser.IsConnected() {
puppet.log.Debugln("Skipping sync processing: custom user not connected to whatsapp") puppet.log.Debugln("Skipping sync processing: custom user not connected to skype")
return nil return nil
} }
for roomID, events := range resp.Rooms.Join { for roomID, events := range resp.Rooms.Join {
@ -237,7 +251,8 @@ func (puppet *Puppet) handleTypingEvent(portal *Portal, evt *event.Event) {
func (puppet *Puppet) OnFailedSync(res *mautrix.RespSync, err error) (time.Duration, error) { func (puppet *Puppet) OnFailedSync(res *mautrix.RespSync, err error) (time.Duration, error) {
puppet.log.Warnln("Sync error:", err) puppet.log.Warnln("Sync error:", err)
return 10 * time.Second, nil err, _ = puppet.updateCustomAccessTokenIfExpired(err, puppet.customUser)
return 10 * time.Second, err
} }
func (puppet *Puppet) GetFilterJSON(_ id.UserID) *mautrix.Filter { func (puppet *Puppet) GetFilterJSON(_ id.UserID) *mautrix.Filter {

View File

@ -1086,7 +1086,6 @@ func (user *User) HandleChatUpdate(cmd skype.Resource) {
} }
} }
//func (user *User) HandleChatUpdate(cmd whatsappExt.ChatUpdate) { //func (user *User) HandleChatUpdate(cmd whatsappExt.ChatUpdate) {
// if cmd.Command != whatsappExt.ChatUpdateCommandAction { // if cmd.Command != whatsappExt.ChatUpdateCommandAction {
// return // return