Skip to content

Commit

Permalink
fix(misc): reduce DB footprint
Browse files Browse the repository at this point in the history
  • Loading branch information
tyzbit committed Mar 20, 2024
1 parent e6a7474 commit 23c1b79
Show file tree
Hide file tree
Showing 8 changed files with 27 additions and 417 deletions.
182 changes: 2 additions & 180 deletions bot/discord_handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,21 +153,6 @@ func (bot *ArchiverBot) MessageReactionAddHandler(s *discordgo.Session, r *disco
}

for _, messagesToSend := range replies {
if r.MessageReaction.GuildID != "" {
g, err := bot.DG.Guild(r.MessageReaction.GuildID)
if err != nil {
g.Name = "None"
}
bot.createMessageEvent(MessageEvent{
AuthorId: r.Member.User.ID,
AuthorUsername: r.Member.User.Username,
MessageId: r.MessageReaction.MessageID,
ChannelId: r.MessageReaction.ChannelID,
ServerID: r.MessageReaction.GuildID,
ServerName: g.Name,
})
}

typingStop <- true
err := bot.sendArchiveResponse(m, messagesToSend)
if err != nil {
Expand Down Expand Up @@ -206,85 +191,6 @@ func (bot *ArchiverBot) InteractionHandler(s *discordgo.Session, i *discordgo.In
globals.Archive: func(s *discordgo.Session, i *discordgo.InteractionCreate) { bot.archiveInteraction(i, false, true) },
globals.ArchiveMessage: func(s *discordgo.Session, i *discordgo.InteractionCreate) { bot.archiveInteraction(i, false, true) },
globals.ArchiveMessageNewSnapshot: func(s *discordgo.Session, i *discordgo.InteractionCreate) { bot.archiveInteraction(i, true, true) },
// Stats does not create an InteractionEvent
globals.Stats: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
directMessage := (i.GuildID == "")
var stats botStats
logMessage := ""
if !directMessage {
log.Debug("handling stats request")
stats = bot.getServerStats(i.GuildID)
guild, err := bot.DG.Guild(i.GuildID)
if err != nil {
log.Errorf("unable to look up server by id: %v", i.GuildID+", "+fmt.Sprintf("%v", err))
return
}
logMessage = "sending stats response to " + i.Member.User.Username + "(" + i.Member.User.ID + ") in " +
guild.Name + "(" + guild.ID + ")"
} else {
log.Debug("handling stats DM request")
// We can be sure now the request was a direct message
// Deny by default
administrator := false

out:
for _, id := range bot.Config.AdminIds {
if i.User.ID == id {
administrator = true

// This prevents us from checking all IDs now that
// we found a match but is a fairly ineffectual
// optimization since config.AdminIds will probably
// only have dozens of IDs at most
break out
}
}

if !administrator {
log.Errorf("did not respond to global stats command from %v(%v), because user is not an administrator",
i.User.Username, i.User.ID)

err := bot.DG.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Embeds: []*discordgo.MessageEmbed{
{
Title: "Stats are not available in DMs",
Color: globals.FrenchGray,
},
},
},
})

if err != nil {
log.Errorf("error responding to slash command "+globals.Stats+", err: %v", err)
}
return
}
stats = bot.getGlobalStats()
logMessage = "sending global " + globals.Stats + " response to " + i.User.Username + "(" + i.User.ID + ")"
}

log.Info(logMessage)

err := bot.DG.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseChannelMessageWithSource,
Data: &discordgo.InteractionResponseData{
Flags: discordgo.MessageFlagsEphemeral,
Embeds: []*discordgo.MessageEmbed{
{
Title: "🏛️ Archive.org Bot Stats",
Fields: structToPrettyDiscordFields(stats, directMessage),
Color: globals.FrenchGray,
},
},
},
})

if err != nil {
log.Errorf("error responding to slash command "+globals.Stats+", err: %v", err)
}
},
globals.Settings: func(s *discordgo.Session, i *discordgo.InteractionCreate) {
log.Debug("handling settings request")
if i.GuildID == "" {
Expand All @@ -303,15 +209,6 @@ func (bot *ArchiverBot) InteractionHandler(s *discordgo.Session, i *discordgo.In
guild.Name = "GuildLookupError"
}

bot.createInteractionEvent(InteractionEvent{
UserID: i.Interaction.Member.User.ID,
Username: i.Interaction.Member.User.Username,
InteractionId: i.ID,
ChannelId: i.Interaction.ChannelID,
ServerID: i.Interaction.GuildID,
ServerName: guild.Name,
})

sc := bot.getServerConfig(i.GuildID)
resp := bot.SettingsIntegrationResponse(sc)
err = bot.DG.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Expand All @@ -336,16 +233,8 @@ func (bot *ArchiverBot) InteractionHandler(s *discordgo.Session, i *discordgo.In

guild, err := bot.DG.Guild(i.Interaction.GuildID)
if err != nil {
guild.Name = "None"
guild.Name = "GuildLookupError"
}
bot.createInteractionEvent(InteractionEvent{
UserID: i.Member.User.ID,
Username: i.Member.User.Username,
InteractionId: i.Message.ID,
ChannelId: i.Message.ChannelID,
ServerID: guild.ID,
ServerName: guild.Name,
})

interactionErr := bot.DG.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
Type: discordgo.InteractionResponseUpdateMessage,
Expand Down Expand Up @@ -402,14 +291,6 @@ func (bot *ArchiverBot) InteractionHandler(s *discordgo.Session, i *discordgo.In
guild.ID = "0"
}
}
bot.createMessageEvent(MessageEvent{
AuthorId: s.State.User.ID,
AuthorUsername: i.Member.User.Username,
MessageId: i.Message.ID,
ChannelId: i.Message.ChannelID,
ServerID: guild.ID,
ServerName: guild.Name,
})

err = bot.sendArchiveResponse(&m, messagesToSend)

Expand Down Expand Up @@ -481,38 +362,6 @@ func (bot *ArchiverBot) archiveInteraction(i *discordgo.InteractionCreate, newSn
Flags: flags,
},
})
guild := &discordgo.Guild{}
var err error
if i.GuildID == "" {
guild.Name = "DirectMessage"
} else {
guild, err = bot.DG.Guild(i.Interaction.GuildID)
if err != nil {
guild.Name = "GuildLookupError"
}
}

// If i.Interaction.User is not nil, then this is a DM
if i.Interaction.User != nil {
bot.createInteractionEvent(InteractionEvent{
UserID: i.Interaction.User.ID,
Username: i.Interaction.User.Username,
InteractionId: i.ID,
ChannelId: i.ChannelID,
ServerID: i.GuildID,
ServerName: guild.Name,
})
} else {
bot.createInteractionEvent(InteractionEvent{
UserID: i.Interaction.Member.User.ID,
Username: i.Interaction.Member.User.Username,
InteractionId: i.ID,
ChannelId: i.ChannelID,
ServerID: i.GuildID,
ServerName: guild.Name,
})
}

messagesToSend, errs := bot.buildInteractionResponse(i, newSnapshot)
for _, err := range errs {
if err != nil {
Expand All @@ -525,34 +374,7 @@ func (bot *ArchiverBot) archiveInteraction(i *discordgo.InteractionCreate, newSn
return
}

for index, message := range messagesToSend {
if len(errs) > 0 {
if errs[index] != nil {
guild.Name = "None"
guild.ID = "0"
}
}

if i.Interaction.User != nil {
bot.createMessageEvent(MessageEvent{
AuthorId: i.Interaction.User.ID,
AuthorUsername: i.Interaction.User.Username,
MessageId: "",
ChannelId: i.Interaction.ChannelID,
ServerID: guild.ID,
ServerName: guild.Name,
})
} else {
bot.createMessageEvent(MessageEvent{
AuthorId: i.Interaction.Member.User.ID,
AuthorUsername: i.Interaction.Member.User.Username,
MessageId: "",
ChannelId: i.Interaction.ChannelID,
ServerID: guild.ID,
ServerName: guild.Name,
})
}

for _, message := range messagesToSend {
if message == nil {
log.Errorf("empty message")
}
Expand Down
33 changes: 0 additions & 33 deletions bot/events.go

This file was deleted.

14 changes: 0 additions & 14 deletions bot/messaging.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,6 @@ func (bot *ArchiverBot) sendArchiveResponse(userMessage *discordgo.Message, mess
if gErr != nil {
return gErr
}
bot.createMessageEvent(MessageEvent{
AuthorId: user.ID,
AuthorUsername: user.Username,
MessageId: userMessage.ID,
ChannelId: userMessage.ChannelID,
ServerID: userMessage.GuildID,
})
log.Debugf("sending archive message response in %s(%s), calling user: %s(%s)",
guild.Name, guild.ID, username, userMessage.Member.User.ID)
}
Expand Down Expand Up @@ -77,13 +70,6 @@ func (bot *ArchiverBot) sendArchiveCommandResponse(i *discordgo.Interaction, mes
if gErr != nil {
return gErr
}
bot.createMessageEvent(MessageEvent{
AuthorId: user.ID,
AuthorUsername: user.Username,
MessageId: i.ID,
ChannelId: i.ChannelID,
ServerID: i.GuildID,
})
log.Debugf("sending archive message response in %s(%s), calling user: %s(%s)",
guild.Name, guild.ID, username, user.ID)
}
Expand Down
37 changes: 13 additions & 24 deletions bot/responses.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ func (bot *ArchiverBot) buildMessageResponse(m *discordgo.Message, newSnapshot b
}
}

messagesToSend, errs = bot.buildArchiveReply(archives, archivedLinks, messageUrls, sc, false)
messagesToSend, errs = bot.buildArchiveReply(archivedLinks, messageUrls, sc, false)

// Interactions don't populate the Author field, so we add that manually
if m.Author == nil {
Expand All @@ -140,22 +140,14 @@ func (bot *ArchiverBot) buildMessageResponse(m *discordgo.Message, newSnapshot b
}
}

for index, _ := range archivedLinks {
for index := range archivedLinks {
if len(archives) == index+1 {
archives[index].ResponseURL = archivedLinks[index]
}
}

// Create a call to Archiver API event
tx := bot.DB.Create(&ArchiveEventEvent{
UUID: archives[0].ArchiveEventEventUUID,
AuthorId: m.Author.ID,
AuthorUsername: m.Author.Username,
ChannelId: m.ChannelID,
MessageId: m.ID,
ServerID: guild.ID,
ArchiveEvents: archives,
})
tx := bot.DB.Create(&archives)

if tx.RowsAffected != 1 {
errs = append(errs, fmt.Errorf("unexpected number of rows affected inserting archive event: %v", tx.RowsAffected))
Expand Down Expand Up @@ -202,7 +194,11 @@ func (bot *ArchiverBot) buildInteractionResponse(i *discordgo.InteractionCreate,
}
}

archives, errs = bot.populateArchiveEventCache(messageUrls, false, discordgo.Guild{ID: "", Name: "ArchiveCommand"})
guild, err := bot.DG.Guild(i.Interaction.GuildID)
if err != nil {
guild.Name = "GuildLookupError"
}
archives, errs = bot.populateArchiveEventCache(messageUrls, false, *guild)
for _, err := range errs {
if err != nil {
log.Error("error populating archive cache: ", err)
Expand Down Expand Up @@ -230,7 +226,7 @@ func (bot *ArchiverBot) buildInteractionResponse(i *discordgo.InteractionCreate,
}
}

messagesToSend, errs = bot.buildArchiveReply(archives, archivedLinks, messageUrls, sc, true)
messagesToSend, errs = bot.buildArchiveReply(archivedLinks, messageUrls, sc, true)

for _, err := range errs {
if err != nil {
Expand All @@ -241,15 +237,7 @@ func (bot *ArchiverBot) buildInteractionResponse(i *discordgo.InteractionCreate,
// Don't create an event if there were no archives
if len(archives) > 0 {
// Create a call to Archiver API event
tx := bot.DB.Create(&ArchiveEventEvent{
UUID: archives[0].ArchiveEventEventUUID,
AuthorId: i.Interaction.Member.User.ID,
AuthorUsername: i.Interaction.Member.User.Username,
ChannelId: i.Interaction.ChannelID,
MessageId: i.Interaction.ID,
ServerID: "DirectMessage",
ArchiveEvents: archives,
})
tx := bot.DB.Create(&archives)

if tx.RowsAffected != 1 {
errs = append(errs, fmt.Errorf("unexpected number of rows affected inserting archive event: %v", tx.RowsAffected))
Expand Down Expand Up @@ -351,6 +339,7 @@ func (bot *ArchiverBot) executeArchiveEventRequest(archiveEvents *[]ArchiveEvent
log.Errorf("unable to get domain name for url: %v", archive.ResponseURL)
}
(*archiveEvents)[i].ResponseDomainName = domainName
(*archiveEvents)[i].ResponseURL = url
} else {
log.Info("could not get latest archive.org url for url: ", url)
continue
Expand All @@ -369,9 +358,9 @@ func (bot *ArchiverBot) executeArchiveEventRequest(archiveEvents *[]ArchiveEvent
return archivedLinks, errs
}

// executeArchiveRequest takes a slice of ArchiveEvents and returns a slice of
// executeArchiveRequest takes a slice of archive links and returns a slice of
// messages to send
func (bot *ArchiverBot) buildArchiveReply(archives []ArchiveEvent, archivedLinks []string, messageUrls []string, sc ServerConfig, ephemeral bool) (messagesToSend []*discordgo.MessageSend, errs []error) {
func (bot *ArchiverBot) buildArchiveReply(archivedLinks []string, messageUrls []string, sc ServerConfig, ephemeral bool) (messagesToSend []*discordgo.MessageSend, errs []error) {
var embeds []*discordgo.MessageEmbed
var components []discordgo.MessageComponent

Expand Down
Loading

0 comments on commit 23c1b79

Please sign in to comment.