Add pm command
This commit is contained in:
parent
f1857d515c
commit
f63dfbb3ed
1 changed files with 52 additions and 0 deletions
52
commands.go
52
commands.go
|
@ -18,6 +18,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/skip2/go-qrcode"
|
"github.com/skip2/go-qrcode"
|
||||||
"maunium.net/go/mautrix"
|
"maunium.net/go/mautrix"
|
||||||
|
@ -25,6 +26,8 @@ import (
|
||||||
"maunium.net/go/mautrix/bridge/status"
|
"maunium.net/go/mautrix/bridge/status"
|
||||||
"maunium.net/go/mautrix/event"
|
"maunium.net/go/mautrix/event"
|
||||||
"maunium.net/go/mautrix/id"
|
"maunium.net/go/mautrix/id"
|
||||||
|
|
||||||
|
"go.mau.fi/mautrix-gmessages/libgm/gmproto"
|
||||||
)
|
)
|
||||||
|
|
||||||
type WrappedCommandEvent struct {
|
type WrappedCommandEvent struct {
|
||||||
|
@ -44,6 +47,7 @@ func (br *GMBridge) RegisterCommands() {
|
||||||
cmdDisconnect,
|
cmdDisconnect,
|
||||||
cmdSetActive,
|
cmdSetActive,
|
||||||
cmdPing,
|
cmdPing,
|
||||||
|
cmdPM,
|
||||||
cmdDeletePortal,
|
cmdDeletePortal,
|
||||||
cmdDeleteAllPortals,
|
cmdDeleteAllPortals,
|
||||||
)
|
)
|
||||||
|
@ -294,6 +298,54 @@ func fnPing(ce *WrappedCommandEvent) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var cmdPM = &commands.FullHandler{
|
||||||
|
Func: wrapCommand(fnPM),
|
||||||
|
Name: "pm",
|
||||||
|
Help: commands.HelpMeta{
|
||||||
|
Section: HelpSectionPortalManagement,
|
||||||
|
Description: "Create a chat on Google Messages",
|
||||||
|
Args: "<phone numbers...>",
|
||||||
|
},
|
||||||
|
RequiresLogin: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
func fnPM(ce *WrappedCommandEvent) {
|
||||||
|
var reqData gmproto.GetOrCreateConversationRequest
|
||||||
|
reqData.Numbers = make([]*gmproto.ContactNumber, 0, len(ce.Args))
|
||||||
|
for _, number := range ce.Args {
|
||||||
|
number = strings.TrimSpace(number)
|
||||||
|
if number == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
reqData.Numbers = append(reqData.Numbers, &gmproto.ContactNumber{
|
||||||
|
// This should maybe sometimes be 7
|
||||||
|
MysteriousInt: 2,
|
||||||
|
Number: number,
|
||||||
|
Number2: number,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
resp, err := ce.User.Client.GetOrCreateConversation(&reqData)
|
||||||
|
if err != nil {
|
||||||
|
ce.ZLog.Err(err).Msg("Failed to start chat")
|
||||||
|
ce.Reply("Failed to start chat: request failed")
|
||||||
|
} else if len(reqData.Numbers) > 1 && resp.GetStatus() == gmproto.GetOrCreateConversationResponse_CREATE_RCS {
|
||||||
|
ce.Reply("All recipients are on RCS, but creating RCS groups via this command is not yet supported.")
|
||||||
|
} else if resp.GetConversation() == nil {
|
||||||
|
ce.ZLog.Warn().
|
||||||
|
Int("req_number_count", len(reqData.Numbers)).
|
||||||
|
Str("status", resp.GetStatus().String()).
|
||||||
|
Msg("No conversation in chat create response")
|
||||||
|
ce.Reply("Failed to start chat: no conversation in response")
|
||||||
|
} else if portal := ce.User.GetPortalByID(resp.Conversation.ConversationID); portal.MXID != "" {
|
||||||
|
ce.Reply("Chat already exists at [%s](https://matrix.to/#/%s)", portal.MXID, portal.MXID)
|
||||||
|
} else if err = portal.CreateMatrixRoom(ce.User, resp.Conversation); err != nil {
|
||||||
|
ce.ZLog.Err(err).Msg("Failed to create matrix room")
|
||||||
|
ce.Reply("Failed to create portal room for conversation")
|
||||||
|
} else {
|
||||||
|
ce.Reply("Chat created: [%s](https://matrix.to/#/%s)", portal.MXID, portal.MXID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var cmdDeletePortal = &commands.FullHandler{
|
var cmdDeletePortal = &commands.FullHandler{
|
||||||
Func: wrapCommand(fnDeletePortal),
|
Func: wrapCommand(fnDeletePortal),
|
||||||
Name: "delete-portal",
|
Name: "delete-portal",
|
||||||
|
|
Loading…
Reference in a new issue