diff --git a/discord/commands/handler.go b/discord/commands/handler.go index 3368269..315a5ef 100644 --- a/discord/commands/handler.go +++ b/discord/commands/handler.go @@ -83,6 +83,10 @@ func OnDiscordMessage(s *discordgo.Session, m *discordgo.MessageCreate) { logger.SugarLogger.Errorf("Failed to persist discord message: %v", err) } + if enforceVerificationChannel(s, m) { + return + } + if !strings.HasPrefix(m.Content, config.DiscordPrefix) { return } diff --git a/discord/commands/verify.go b/discord/commands/verify.go index 54ba5f3..fccaa7e 100644 --- a/discord/commands/verify.go +++ b/discord/commands/verify.go @@ -3,6 +3,7 @@ package commands import ( "fmt" "net/url" + "strings" "time" "github.com/bwmarrin/discordgo" @@ -13,6 +14,25 @@ import ( const verifyReplyTTL = 5 * time.Second +// enforceVerificationChannel deletes non-verification messages in +// DISCORD_VERIFICATION_CHANNEL and posts a disappearing reminder. +func enforceVerificationChannel(s *discordgo.Session, m *discordgo.MessageCreate) bool { + if config.DiscordVerificationChannel == "" || m.ChannelID != config.DiscordVerificationChannel { + return false + } + if strings.Contains(m.Content, "!verify") { + return false + } + + _ = s.ChannelMessageDelete(m.ChannelID, m.ID) + service.SendDisappearingMessage( + m.ChannelID, + fmt.Sprintf("<@%s> please run `%sverify` to verify.", m.Author.ID, config.DiscordPrefix), + verifyReplyTTL, + ) + return true +} + func Verify(args []string, s *discordgo.Session, m *discordgo.MessageCreate) { defer s.ChannelMessageDelete(m.ChannelID, m.ID) diff --git a/discord/config/config.go b/discord/config/config.go index 75c144f..af82079 100644 --- a/discord/config/config.go +++ b/discord/config/config.go @@ -31,6 +31,7 @@ var DatabaseName = os.Getenv("DATABASE_NAME") var DiscordToken = os.Getenv("DISCORD_TOKEN") var DiscordGuild = os.Getenv("DISCORD_GUILD") var DiscordPrefix = os.Getenv("DISCORD_PREFIX") +var DiscordVerificationChannel = os.Getenv("DISCORD_VERIFICATION_CHANNEL") var WebBaseURL = os.Getenv("WEB_BASE_URL") diff --git a/discord/config/verify.go b/discord/config/verify.go index f3783f6..b2292d0 100644 --- a/discord/config/verify.go +++ b/discord/config/verify.go @@ -43,6 +43,11 @@ func Verify() { DiscordPrefix = "d!" logger.SugarLogger.Infof("DISCORD_PREFIX is not set, defaulting to %s", DiscordPrefix) } + if DiscordVerificationChannel == "" { + logger.SugarLogger.Infoln("DISCORD_VERIFICATION_CHANNEL is not set — verification channel gate disabled") + } else { + logger.SugarLogger.Infof("DISCORD_VERIFICATION_CHANNEL set to %s", DiscordVerificationChannel) + } if WebBaseURL == "" { WebBaseURL = "http://localhost:10310" logger.SugarLogger.Infof("WEB_BASE_URL is not set, defaulting to %s", WebBaseURL)