mirror of
https://mau.dev/mautrix/go.git
synced 2026-03-14 14:25:53 +01:00
bridgev2/portal: auto-accept message requests on message (#451)
This commit is contained in:
parent
28bcc356db
commit
e28f7170bc
2 changed files with 46 additions and 0 deletions
|
|
@ -1223,6 +1223,12 @@ func (portal *Portal) handleMatrixMessage(ctx context.Context, sender *UserLogin
|
|||
}
|
||||
}
|
||||
|
||||
err = portal.autoAcceptMessageRequest(ctx, evt, sender, origSender, caps)
|
||||
if err != nil {
|
||||
log.Warn().Err(err).Msg("Failed to auto-accept message request on message")
|
||||
// TODO stop processing?
|
||||
}
|
||||
|
||||
var resp *MatrixMessageResponse
|
||||
if msgContent != nil {
|
||||
resp, err = sender.Client.HandleMatrixMessage(ctx, wrappedMsgEvt)
|
||||
|
|
@ -1502,6 +1508,12 @@ func (portal *Portal) handleMatrixReaction(ctx context.Context, sender *UserLogi
|
|||
log.Warn().Msg("Reaction target message not found in database")
|
||||
return EventHandlingResultFailed.WithMSSError(fmt.Errorf("reaction %w", ErrTargetMessageNotFound))
|
||||
}
|
||||
caps := sender.Client.GetCapabilities(ctx, portal)
|
||||
err = portal.autoAcceptMessageRequest(ctx, evt, sender, nil, caps)
|
||||
if err != nil {
|
||||
log.Warn().Err(err).Msg("Failed to auto-accept message request on reaction")
|
||||
// TODO stop processing?
|
||||
}
|
||||
log.UpdateContext(func(c zerolog.Context) zerolog.Context {
|
||||
return c.Str("reaction_target_remote_id", string(reactionTarget.ID))
|
||||
})
|
||||
|
|
@ -1801,6 +1813,38 @@ func (portal *Portal) handleMatrixAcceptMessageRequest(
|
|||
return EventHandlingResultSuccess.WithMSS()
|
||||
}
|
||||
|
||||
func (portal *Portal) autoAcceptMessageRequest(
|
||||
ctx context.Context, evt *event.Event, sender *UserLogin, origSender *OrigSender, caps *event.RoomFeatures,
|
||||
) error {
|
||||
if !portal.MessageRequest || caps.MessageRequest == nil || caps.MessageRequest.AcceptWithMessage == event.CapLevelFullySupported {
|
||||
return nil
|
||||
}
|
||||
mran, ok := sender.Client.(MessageRequestAcceptingNetworkAPI)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
err := mran.HandleMatrixAcceptMessageRequest(ctx, &MatrixAcceptMessageRequest{
|
||||
Event: evt,
|
||||
Content: &event.BeeperAcceptMessageRequestEventContent{
|
||||
IsImplicit: true,
|
||||
},
|
||||
Portal: portal,
|
||||
OrigSender: origSender,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if portal.MessageRequest {
|
||||
portal.MessageRequest = false
|
||||
portal.UpdateBridgeInfo(ctx)
|
||||
err = portal.Save(ctx)
|
||||
if err != nil {
|
||||
zerolog.Ctx(ctx).Err(err).Msg("Failed to save portal after accepting message request")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (portal *Portal) handleMatrixDeleteChat(
|
||||
ctx context.Context,
|
||||
sender *UserLogin,
|
||||
|
|
|
|||
|
|
@ -94,6 +94,8 @@ type BeeperChatDeleteEventContent struct {
|
|||
}
|
||||
|
||||
type BeeperAcceptMessageRequestEventContent struct {
|
||||
// Whether this was triggered by a message rather than an explicit event
|
||||
IsImplicit bool `json:"-"`
|
||||
}
|
||||
|
||||
type BeeperSendStateEventContent struct {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue