user: catch 40002 responses
This commit is contained in:
@@ -151,6 +151,9 @@ func (portal *Portal) collectBackfillMessages(log zerolog.Logger, source *User,
|
|||||||
func (portal *Portal) backfillLimited(log zerolog.Logger, source *User, limit int, after string, thread *Thread) {
|
func (portal *Portal) backfillLimited(log zerolog.Logger, source *User, limit int, after string, thread *Thread) {
|
||||||
messages, foundAll, err := portal.collectBackfillMessages(log, source, limit, after, thread)
|
messages, foundAll, err := portal.collectBackfillMessages(log, source, limit, after, thread)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if source.handlePossible40002(err) {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
log.Err(err).Msg("Error collecting messages to forward backfill")
|
log.Err(err).Msg("Error collecting messages to forward backfill")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1680,6 +1680,7 @@ func (portal *Portal) handleMatrixMessage(sender *User, evt *event.Event) {
|
|||||||
AllowedMentions: sendReq.AllowedMentions,
|
AllowedMentions: sendReq.AllowedMentions,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
sender.handlePossible40002(err)
|
||||||
go portal.sendMessageMetrics(evt, err, "Error sending")
|
go portal.sendMessageMetrics(evt, err, "Error sending")
|
||||||
if msg != nil {
|
if msg != nil {
|
||||||
dbMsg := portal.bridge.DB.Message.New()
|
dbMsg := portal.bridge.DB.Message.New()
|
||||||
|
|||||||
19
user.go
19
user.go
@@ -7,6 +7,7 @@ import (
|
|||||||
"math/rand"
|
"math/rand"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
"runtime/debug"
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -579,6 +580,15 @@ func (user *User) eventHandlerSync(rawEvt any) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (user *User) eventHandler(rawEvt any) {
|
func (user *User) eventHandler(rawEvt any) {
|
||||||
|
defer func() {
|
||||||
|
err := recover()
|
||||||
|
if err != nil {
|
||||||
|
user.log.Error().
|
||||||
|
Bytes(zerolog.ErrorStackFieldName, debug.Stack()).
|
||||||
|
Any(zerolog.ErrorFieldName, err).
|
||||||
|
Msg("Panic in Discord event handler")
|
||||||
|
}
|
||||||
|
}()
|
||||||
switch evt := rawEvt.(type) {
|
switch evt := rawEvt.(type) {
|
||||||
case *discordgo.Ready:
|
case *discordgo.Ready:
|
||||||
user.readyHandler(evt)
|
user.readyHandler(evt)
|
||||||
@@ -999,6 +1009,15 @@ func (user *User) invalidAuthHandler(_ *discordgo.InvalidAuth) {
|
|||||||
go user.Logout(false)
|
go user.Logout(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (user *User) handlePossible40002(err error) bool {
|
||||||
|
var restErr *discordgo.RESTError
|
||||||
|
if !errors.As(err, &restErr) || restErr.Message == nil || restErr.Message.Code != discordgo.ErrCodeActionRequiredVerifiedAccount {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
user.BridgeState.Send(status.BridgeState{StateEvent: status.StateBadCredentials, Error: "dc-http-40002", Message: restErr.Message.Message})
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func (user *User) guildCreateHandler(g *discordgo.GuildCreate) {
|
func (user *User) guildCreateHandler(g *discordgo.GuildCreate) {
|
||||||
user.log.Info().
|
user.log.Info().
|
||||||
Str("guild_id", g.ID).
|
Str("guild_id", g.ID).
|
||||||
|
|||||||
Reference in New Issue
Block a user