mirror of
https://github.com/mautrix/whatsapp.git
synced 2026-11-11 00:29:17 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
55dda534d2 |
2 changed files with 24 additions and 1 deletions
|
|
@ -67,6 +67,10 @@ var (
|
||||||
)
|
)
|
||||||
|
|
||||||
func (wa *WhatsAppClient) HandleMatrixPollStart(ctx context.Context, msg *bridgev2.MatrixPollStart) (result *bridgev2.MatrixMessageResponse, retErr error) {
|
func (wa *WhatsAppClient) HandleMatrixPollStart(ctx context.Context, msg *bridgev2.MatrixPollStart) (result *bridgev2.MatrixMessageResponse, retErr error) {
|
||||||
|
err := wa.checkCanSendAnnouncement(ctx, msg.Portal)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
waMsg, optionMap, err := wa.Main.MsgConv.PollStartToWhatsApp(ctx, msg.Content, msg.ReplyTo, msg.Portal)
|
waMsg, optionMap, err := wa.Main.MsgConv.PollStartToWhatsApp(ctx, msg.Content, msg.ReplyTo, msg.Portal)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to convert poll vote: %w", err)
|
return nil, fmt.Errorf("failed to convert poll vote: %w", err)
|
||||||
|
|
@ -96,6 +100,12 @@ func (wa *WhatsAppClient) HandleMatrixPollVote(ctx context.Context, msg *bridgev
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wa *WhatsAppClient) HandleMatrixMessage(ctx context.Context, msg *bridgev2.MatrixMessage) (result *bridgev2.MatrixMessageResponse, retErr error) {
|
func (wa *WhatsAppClient) HandleMatrixMessage(ctx context.Context, msg *bridgev2.MatrixMessage) (result *bridgev2.MatrixMessageResponse, retErr error) {
|
||||||
|
if msg.ThreadRoot == nil {
|
||||||
|
err := wa.checkCanSendAnnouncement(ctx, msg.Portal)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
waMsg, req, err := wa.Main.MsgConv.ToWhatsApp(ctx, wa.Client, msg.Event, msg.Content, msg.ReplyTo, msg.ThreadRoot, msg.Portal)
|
waMsg, req, err := wa.Main.MsgConv.ToWhatsApp(ctx, wa.Client, msg.Event, msg.Content, msg.ReplyTo, msg.ThreadRoot, msg.Portal)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to convert message: %w", err)
|
return nil, fmt.Errorf("failed to convert message: %w", err)
|
||||||
|
|
@ -104,8 +114,22 @@ func (wa *WhatsAppClient) HandleMatrixMessage(ctx context.Context, msg *bridgev2
|
||||||
return wa.handleConvertedMatrixMessage(ctx, msg, waMsg, req)
|
return wa.handleConvertedMatrixMessage(ctx, msg, waMsg, req)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (wa *WhatsAppClient) checkCanSendAnnouncement(ctx context.Context, portal *bridgev2.Portal) error {
|
||||||
|
if !portal.Metadata.(*waid.PortalMetadata).CommunityAnnouncementGroup {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
pls, err := wa.Main.Bridge.Matrix.GetPowerLevels(ctx, portal.MXID)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to get power levels: %w", err)
|
||||||
|
} else if pls.GetUserLevel(wa.UserLogin.UserMXID) < adminPL {
|
||||||
|
return ErrNotCommunityAdmin
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
var ErrBroadcastSendDisabled = bridgev2.WrapErrorInStatus(errors.New("sending status messages is disabled")).WithErrorAsMessage().WithIsCertain(true).WithSendNotice(true).WithErrorReason(event.MessageStatusUnsupported)
|
var ErrBroadcastSendDisabled = bridgev2.WrapErrorInStatus(errors.New("sending status messages is disabled")).WithErrorAsMessage().WithIsCertain(true).WithSendNotice(true).WithErrorReason(event.MessageStatusUnsupported)
|
||||||
var ErrBroadcastReactionUnsupported = bridgev2.WrapErrorInStatus(errors.New("reacting to status messages is not currently supported")).WithErrorAsMessage().WithIsCertain(true).WithSendNotice(true).WithErrorReason(event.MessageStatusUnsupported)
|
var ErrBroadcastReactionUnsupported = bridgev2.WrapErrorInStatus(errors.New("reacting to status messages is not currently supported")).WithErrorAsMessage().WithIsCertain(true).WithSendNotice(true).WithErrorReason(event.MessageStatusUnsupported)
|
||||||
|
var ErrNotCommunityAdmin = bridgev2.WrapErrorInStatus(errors.New("only community admins can send announcements")).WithErrorAsMessage().WithIsCertain(true).WithSendNotice(true).WithErrorReason(event.MessageStatusNoPermission)
|
||||||
|
|
||||||
func (wa *WhatsAppClient) handleConvertedMatrixMessage(ctx context.Context, msg *bridgev2.MatrixMessage, waMsg *waE2E.Message, req *whatsmeow.SendRequestExtra) (*bridgev2.MatrixMessageResponse, error) {
|
func (wa *WhatsAppClient) handleConvertedMatrixMessage(ctx context.Context, msg *bridgev2.MatrixMessage, waMsg *waE2E.Message, req *whatsmeow.SendRequestExtra) (*bridgev2.MatrixMessageResponse, error) {
|
||||||
if req == nil {
|
if req == nil {
|
||||||
|
|
|
||||||
|
|
@ -193,7 +193,6 @@ func (mc *MessageConverter) ToWhatsApp(
|
||||||
DeprecatedLIDSession: ptr.Ptr(false),
|
DeprecatedLIDSession: ptr.Ptr(false),
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// TODO check permissions?
|
|
||||||
message.MessageContextInfo = &waE2E.MessageContextInfo{
|
message.MessageContextInfo = &waE2E.MessageContextInfo{
|
||||||
MessageSecret: random.Bytes(32),
|
MessageSecret: random.Bytes(32),
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue