connector/mss: humanise send errors

Signed-off-by: Sumner Evans <sumner.evans@automattic.com>
This commit is contained in:
Sumner Evans
2024-11-25 17:06:21 -07:00
parent 4b5ae24a67
commit e603aa6058
+24 -40
View File
@@ -29,6 +29,7 @@ import (
"maunium.net/go/mautrix/id" "maunium.net/go/mautrix/id"
"go.mau.fi/mautrix-telegram/pkg/connector/emojis" "go.mau.fi/mautrix-telegram/pkg/connector/emojis"
"go.mau.fi/mautrix-telegram/pkg/connector/humanise"
"go.mau.fi/mautrix-telegram/pkg/connector/ids" "go.mau.fi/mautrix-telegram/pkg/connector/ids"
"go.mau.fi/mautrix-telegram/pkg/connector/matrixfmt" "go.mau.fi/mautrix-telegram/pkg/connector/matrixfmt"
"go.mau.fi/mautrix-telegram/pkg/connector/waveform" "go.mau.fi/mautrix-telegram/pkg/connector/waveform"
@@ -134,47 +135,30 @@ func (t *TelegramClient) transferMediaToTelegram(ctx context.Context, content *e
}, nil }, nil
} }
func (t *TelegramClient) humanizeSendError(err error) bridgev2.MessageStatus { func (t *TelegramClient) humaniseSendError(err error) bridgev2.MessageStatus {
status := bridgev2.WrapErrorInStatus(err). status := bridgev2.WrapErrorInStatus(err).
WithErrorReason(event.MessageStatusNetworkError) WithErrorReason(event.MessageStatusNetworkError).
WithMessage(humanise.Error(err))
switch { switch {
case tg.IsYouBlockedUser(err): case tg.IsYouBlockedUser(err),
status = status.WithMessage("You blocked this user"). tg.IsUserIsBlocked(err),
WithErrorReason(event.MessageStatusNoPermission) tg.IsUserBlocked(err),
case tg.IsUserIsBlocked(err), tg.IsUserBlocked(err): tg.IsUserBannedInChannel(err),
status = status.WithMessage("You were blocked by this user"). tg.IsChatAdminRequired(err),
WithErrorReason(event.MessageStatusNoPermission) tg.IsChatRestricted(err),
case tg.IsUserBannedInChannel(err): tg.IsChatWriteForbidden(err):
status = status.WithMessage("You're banned from sending messages in supergroups/channels"). status = status.WithErrorReason(event.MessageStatusNoPermission)
WithErrorReason(event.MessageStatusNoPermission) case tg.IsMessageEmpty(err),
case tg.IsInputUserDeactivated(err): tg.IsMessageTooLong(err),
status = status.WithMessage("This user was deleted") tg.IsEntitiesTooLong(err),
case tg.IsChatAdminRequired(err): tg.IsEntityBoundsInvalid(err),
status = status.WithMessage("Only admins can do that"). tg.IsEntityMentionUserInvalid(err):
WithErrorReason(event.MessageStatusNoPermission) status = status.WithErrorReason(event.MessageStatusUnsupported)
case tg.IsChatRestricted(err), tg.IsChatWriteForbidden(err):
status = status.WithMessage("You can't send messages in this chat").
WithErrorReason(event.MessageStatusNoPermission)
case tg.IsSlowmodeWait(err):
// TODO tell user how long to wait (need to extract it from the error somehow)
status = status.WithMessage("Slow mode enabled, wait before sending")
case tg.IsMessageEmpty(err):
status = status.WithMessage("Message is empty").
WithErrorReason(event.MessageStatusUnsupported)
case tg.IsMessageTooLong(err):
status = status.WithMessage("Message is too long").
WithErrorReason(event.MessageStatusUnsupported)
case tg.IsEntitiesTooLong(err):
status = status.WithMessage("Message has too many formatting entities").
WithErrorReason(event.MessageStatusUnsupported)
case tg.IsEntityBoundsInvalid(err):
status = status.WithMessage("Message formatting entities are malformed").
WithErrorReason(event.MessageStatusUnsupported)
case tg.IsEntityMentionUserInvalid(err):
status = status.WithMessage("You mentioned an invalid user").
WithErrorReason(event.MessageStatusUnsupported)
case tg.IsMessageEditTimeExpired(err): case tg.IsMessageEditTimeExpired(err):
status = status.WithMessage("You can't edit this message anymore, too much time has passed since its creation.") return status.WithErrorReason(event.MessageStatusUnsupported)
case tg.IsMessageNotModified(err):
status = status.WithErrorReason(event.MessageStatusNetworkError)
default: default:
// Return a normal status with the default retriable status // Return a normal status with the default retriable status
return status return status
@@ -274,7 +258,7 @@ func (t *TelegramClient) HandleMatrixMessage(ctx context.Context, msg *bridgev2.
} }
if err != nil { if err != nil {
log.Err(err).Msg("failed to send message to Telegram") log.Err(err).Msg("failed to send message to Telegram")
return nil, t.humanizeSendError(err) return nil, t.humaniseSendError(err)
} }
hasher := sha256.New() hasher := sha256.New()
@@ -375,7 +359,7 @@ func (t *TelegramClient) HandleMatrixEdit(ctx context.Context, msg *bridgev2.Mat
} }
updates, err := t.client.API().MessagesEditMessage(ctx, &req) updates, err := t.client.API().MessagesEditMessage(ctx, &req)
if err != nil { if err != nil {
return t.humanizeSendError(err) return t.humaniseSendError(err)
} }
hasher := sha256.New() hasher := sha256.New()