From adc72574909b5dd6f5aaa7a3c74306b5eec8ac05 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Tue, 21 May 2019 21:06:27 +0300 Subject: [PATCH] Add admin command to delete portal and fix some other things --- commands.go | 19 +++++++++++++++++++ portal.go | 8 ++++++-- whatsapp-ext/protomessage.go | 6 +++--- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/commands.go b/commands.go index b50ad09..a84d84d 100644 --- a/commands.go +++ b/commands.go @@ -85,6 +85,8 @@ func (handler *CommandHandler) Handle(roomID types.MatrixRoomID, user *User, mes handler.CommandReconnect(ce) case "delete-session": handler.CommandDeleteSession(ce) + case "delete-portal": + handler.CommandDeletePortal(ce) case "logout", "disconnect", "sync", "list", "open", "pm": if ce.User.Conn == nil { ce.Reply("You are not logged in. Use the `login` command to log into WhatsApp.") @@ -277,6 +279,23 @@ func (handler *CommandHandler) CommandSync(ce *CommandEvent) { ce.Reply("Imported contacts successfully.") } +func (handler *CommandHandler) CommandDeletePortal(ce *CommandEvent) { + if !ce.User.Admin { + ce.Reply("Only bridge admins can delete portals") + return + } + + portal := ce.Bridge.GetPortalByMXID(ce.RoomID) + if portal == nil { + ce.Reply("You must be in a portal room to use that command") + return + } + + portal.log.Infoln(ce.User.MXID, "requested deletion of portal.") + portal.Delete() + portal.Cleanup(false) +} + const cmdListHelp = `list - Get a list of all contacts and groups.` func (handler *CommandHandler) CommandList(ce *CommandEvent) { diff --git a/portal.go b/portal.go index 0e60525..3d0ea34 100644 --- a/portal.go +++ b/portal.go @@ -1021,10 +1021,14 @@ func (portal *Portal) Cleanup(puppetsOnly bool) { puppet := portal.bridge.GetPuppetByMXID(member) if puppet != nil { _, err = puppet.Intent().LeaveRoom(portal.MXID) - portal.log.Errorln("Error leaving as puppet while cleaning up portal:", err) + if err != nil { + portal.log.Errorln("Error leaving as puppet while cleaning up portal:", err) + } } else if !puppetsOnly { _, err = intent.KickUser(portal.MXID, &mautrix.ReqKickUser{UserID: member, Reason: "Deleting portal"}) - portal.log.Errorln("Error kicking user while cleaning up portal:", err) + if err != nil { + portal.log.Errorln("Error kicking user while cleaning up portal:", err) + } } } } diff --git a/whatsapp-ext/protomessage.go b/whatsapp-ext/protomessage.go index 00520ed..ad7e76e 100644 --- a/whatsapp-ext/protomessage.go +++ b/whatsapp-ext/protomessage.go @@ -38,9 +38,9 @@ func (ext *ExtendedConn) HandleRawMessage(message *proto.WebMessageInfo) { if protoMsg.GetType() == proto.ProtocolMessage_REVOKE { key := protoMsg.GetKey() deletedMessage := MessageRevocation{ - Id: key.GetId(), - RemoteJid: key.GetRemoteJid(), - FromMe: key.GetFromMe(), + Id: key.GetId(), + RemoteJid: key.GetRemoteJid(), + FromMe: key.GetFromMe(), Participant: key.GetParticipant(), } for _, handler := range ext.handlers {