package models import ( "strings" ) // botPatterns contains common bot/crawler/spider User-Agent patterns. var botPatterns = []string{ "bot", "crawler", "spider", "scraper", "scraping", "googlebot", "bingbot", "baiduspider", "yandexbot", "duckduckbot", "slurp", "teoma", "ia_archiver", "facebookexternalhit", "facebot", "twitterbot", "whatsapp", "telegram", "slackbot", "discordbot", "linkedinbot", "pinterestbot", "tumblr", "semrushbot", "ahrefsbot", "mj12bot", "dotbot", "archive.org_bot", "serpstatbot", "dataforseo", "petalbot", "gptbot", "claudebot", "anthropic-ai", "bytespider", "applebot", "seznambot", "headless", "phantom", "selenium", "puppeteer", } // IsBot checks if the given User-Agent string matches known bot patterns. // It performs a case-insensitive substring match against common bot identifiers. func IsBot(userAgent string) bool { if userAgent == "" { return false } ua := strings.ToLower(userAgent) for _, pattern := range botPatterns { if strings.Contains(ua, pattern) { return true } } return false }