forked from MirrorHub/mautrix-whatsapp
Handle WhatsApp invites. Fixes #120
This commit is contained in:
parent
326293303d
commit
8cfb04a5ed
3 changed files with 24 additions and 2 deletions
21
portal.go
21
portal.go
|
@ -549,7 +549,7 @@ func (portal *Portal) Sync(user *User, contact whatsapp.Contact) {
|
||||||
func (portal *Portal) GetBasePowerLevels() *event.PowerLevelsEventContent {
|
func (portal *Portal) GetBasePowerLevels() *event.PowerLevelsEventContent {
|
||||||
anyone := 0
|
anyone := 0
|
||||||
nope := 99
|
nope := 99
|
||||||
invite := 99
|
invite := 50
|
||||||
if portal.bridge.Config.Bridge.AllowUserInvite {
|
if portal.bridge.Config.Bridge.AllowUserInvite {
|
||||||
invite = 0
|
invite = 0
|
||||||
}
|
}
|
||||||
|
@ -1328,6 +1328,25 @@ func (portal *Portal) HandleWhatsAppKick(senderJID string, jids []string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (portal *Portal) HandleWhatsAppInvite(senderJID string, jids []string) {
|
||||||
|
senderIntent := portal.MainIntent()
|
||||||
|
if senderJID != "unknown" {
|
||||||
|
sender := portal.bridge.GetPuppetByJID(senderJID)
|
||||||
|
senderIntent = sender.IntentFor(portal)
|
||||||
|
}
|
||||||
|
for _, jid := range jids {
|
||||||
|
puppet := portal.bridge.GetPuppetByJID(jid)
|
||||||
|
_, err := senderIntent.InviteUser(portal.MXID, &mautrix.ReqInviteUser{UserID: puppet.MXID})
|
||||||
|
if err != nil {
|
||||||
|
portal.log.Warnfln("Failed to invite %s as %s: %v", puppet.MXID, senderIntent.UserID, err)
|
||||||
|
}
|
||||||
|
err = puppet.DefaultIntent().EnsureJoined(portal.MXID)
|
||||||
|
if err != nil {
|
||||||
|
portal.log.Errorfln("Failed to ensure %s is joined: %v", puppet.MXID, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type base struct {
|
type base struct {
|
||||||
download func() ([]byte, error)
|
download func() ([]byte, error)
|
||||||
info whatsapp.MessageInfo
|
info whatsapp.MessageInfo
|
||||||
|
|
2
user.go
2
user.go
|
@ -889,6 +889,8 @@ func (user *User) HandleChatUpdate(cmd whatsappExt.ChatUpdate) {
|
||||||
go portal.RestrictMetadataChanges(cmd.Data.Restrict)
|
go portal.RestrictMetadataChanges(cmd.Data.Restrict)
|
||||||
case whatsappExt.ChatActionRemove:
|
case whatsappExt.ChatActionRemove:
|
||||||
go portal.HandleWhatsAppKick(cmd.Data.SenderJID, cmd.Data.UserChange.JIDs)
|
go portal.HandleWhatsAppKick(cmd.Data.SenderJID, cmd.Data.UserChange.JIDs)
|
||||||
|
case whatsappExt.ChatActionAdd:
|
||||||
|
go portal.HandleWhatsAppInvite(cmd.Data.SenderJID, cmd.Data.UserChange.JIDs)
|
||||||
case whatsappExt.ChatActionIntroduce:
|
case whatsappExt.ChatActionIntroduce:
|
||||||
if cmd.Data.SenderJID != "unknown" {
|
if cmd.Data.SenderJID != "unknown" {
|
||||||
go portal.Sync(user, whatsapp.Contact{Jid: portal.Key.JID})
|
go portal.Sync(user, whatsapp.Contact{Jid: portal.Key.JID})
|
||||||
|
|
|
@ -47,6 +47,7 @@ const (
|
||||||
ChatActionDemote ChatActionType = "demote"
|
ChatActionDemote ChatActionType = "demote"
|
||||||
ChatActionIntroduce ChatActionType = "introduce"
|
ChatActionIntroduce ChatActionType = "introduce"
|
||||||
ChatActionRemove ChatActionType = "remove"
|
ChatActionRemove ChatActionType = "remove"
|
||||||
|
ChatActionAdd ChatActionType = "add"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ChatUpdateData struct {
|
type ChatUpdateData struct {
|
||||||
|
@ -128,7 +129,7 @@ func (cud *ChatUpdateData) UnmarshalJSON(data []byte) error {
|
||||||
unmarshalTo = &cud.Restrict
|
unmarshalTo = &cud.Restrict
|
||||||
case ChatActionAnnounce:
|
case ChatActionAnnounce:
|
||||||
unmarshalTo = &cud.Announce
|
unmarshalTo = &cud.Announce
|
||||||
case ChatActionPromote, ChatActionDemote, ChatActionRemove:
|
case ChatActionPromote, ChatActionDemote, ChatActionRemove, ChatActionAdd:
|
||||||
unmarshalTo = &cud.UserChange
|
unmarshalTo = &cud.UserChange
|
||||||
default:
|
default:
|
||||||
return nil
|
return nil
|
||||||
|
|
Loading…
Reference in a new issue