connector: break out guild bridging logic into method
This commit is contained in:
@@ -360,52 +360,62 @@ func (d *DiscordClient) syncGuilds(ctx context.Context) {
|
|||||||
Str("action", "sync guild").
|
Str("action", "sync guild").
|
||||||
Logger()
|
Logger()
|
||||||
|
|
||||||
guild, err := d.Session.State.Guild(guildID)
|
err := d.bridgeGuild(log.WithContext(ctx), guildID)
|
||||||
if errors.Is(err, discordgo.ErrStateNotFound) || guild == nil {
|
|
||||||
log.Err(err).Msg("Couldn't find guild, user isn't a member?")
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
err = d.syncGuildSpace(ctx, guild)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Err(err).Msg("Couldn't sync guild space portal")
|
log.Err(err).Msg("Couldn't bridge guild during sync")
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, guildCh := range guild.Channels {
|
|
||||||
if guildCh.Type != discordgo.ChannelTypeGuildText {
|
|
||||||
// TODO implement categories (spaces) and news channels
|
|
||||||
log.Trace().
|
|
||||||
Str("channel_id", guildCh.ID).
|
|
||||||
Int("channel_type", int(guildCh.Type)).
|
|
||||||
Msg("Not bridging guild channel due to type")
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if !d.canSeeGuildChannel(ctx, guildCh) {
|
|
||||||
log.Trace().
|
|
||||||
Str("channel_id", guildCh.ID).
|
|
||||||
Int("channel_type", int(guildCh.Type)).
|
|
||||||
Msg("Not bridging guild channel that the user doesn't have permission to view")
|
|
||||||
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
d.syncChannel(ctx, guildCh)
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Debug().Msg("Subscribing to guild after bridging")
|
|
||||||
err = d.Session.SubscribeGuild(discordgo.GuildSubscribeData{
|
|
||||||
GuildID: guild.ID,
|
|
||||||
Typing: true,
|
|
||||||
Activities: true,
|
|
||||||
Threads: true,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
log.Warn().Err(err).Msg("Failed to subscribe to guild")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DiscordClient) bridgeGuild(ctx context.Context, guildID string) error {
|
||||||
|
log := zerolog.Ctx(ctx)
|
||||||
|
|
||||||
|
guild, err := d.Session.State.Guild(guildID)
|
||||||
|
if errors.Is(err, discordgo.ErrStateNotFound) || guild == nil {
|
||||||
|
log.Err(err).Msg("Couldn't find guild, user isn't a member?")
|
||||||
|
return errors.New("couldn't find guild in state")
|
||||||
|
}
|
||||||
|
|
||||||
|
err = d.syncGuildSpace(ctx, guild)
|
||||||
|
if err != nil {
|
||||||
|
log.Err(err).Msg("Couldn't sync guild space portal")
|
||||||
|
return fmt.Errorf("couldn't sync guild space portal: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, guildCh := range guild.Channels {
|
||||||
|
if guildCh.Type != discordgo.ChannelTypeGuildText {
|
||||||
|
// TODO implement categories (spaces) and news channels
|
||||||
|
log.Trace().
|
||||||
|
Str("channel_id", guildCh.ID).
|
||||||
|
Int("channel_type", int(guildCh.Type)).
|
||||||
|
Msg("Not bridging guild channel due to type")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if !d.canSeeGuildChannel(ctx, guildCh) {
|
||||||
|
log.Trace().
|
||||||
|
Str("channel_id", guildCh.ID).
|
||||||
|
Int("channel_type", int(guildCh.Type)).
|
||||||
|
Msg("Not bridging guild channel that the user doesn't have permission to view")
|
||||||
|
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
d.syncChannel(ctx, guildCh)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debug().Msg("Subscribing to guild after bridging")
|
||||||
|
err = d.Session.SubscribeGuild(discordgo.GuildSubscribeData{
|
||||||
|
GuildID: guild.ID,
|
||||||
|
Typing: true,
|
||||||
|
Activities: true,
|
||||||
|
Threads: true,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
log.Warn().Err(err).Msg("Failed to subscribe to guild; proceeding")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func simpleDownload(ctx context.Context, url, thing string) ([]byte, error) {
|
func simpleDownload(ctx context.Context, url, thing string) ([]byte, error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user