package cmd import ( "encoding/json" "fmt" "git.db.org.ai/dborg/internal/client" "git.db.org.ai/dborg/internal/config" "git.db.org.ai/dborg/internal/utils" "github.com/spf13/cobra" ) var xCmd = &cobra.Command{ Use: "x", Short: "Twitter/X tools and searches", Long: `Tools for searching Twitter/X username history and scraping tweets`, } var xHistoryCmd = &cobra.Command{ Use: "history [username]", Short: "Search Twitter/X username history", Long: `Search for Twitter/X username history and previous usernames`, Args: cobra.ExactArgs(1), RunE: runXHistorySearch, } var xTweetsCmd = &cobra.Command{ Use: "tweets [username]", Short: "Scrape tweets by username (Free OSINT)", Long: `Discovers tweet IDs from Internet Archive and fetches tweet content. Free and unauthenticated endpoint.`, Args: cobra.ExactArgs(1), RunE: runXTweetsSearch, } func init() { rootCmd.AddCommand(xCmd) xCmd.AddCommand(xHistoryCmd) xCmd.AddCommand(xTweetsCmd) } func runXHistorySearch(cmd *cobra.Command, args []string) error { apiKey, _ := cmd.Flags().GetString("api-key") cfg := config.New().WithAPIKey(apiKey) c, err := client.New(cfg) if err != nil { return err } response, err := c.SearchTwitterHistory(args[0]) if err != nil { return err } if response.Error != "" { return fmt.Errorf("API error: %s", response.Error) } if len(response.PreviousUsernames) > 0 { return utils.PrintJSON(response.PreviousUsernames) } else if response.Response != "" { fmt.Println(response.Response) } else if response.Data != nil { return utils.PrintJSON(response.Data) } else { fmt.Println("No username history found") } return nil } func runXTweetsSearch(cmd *cobra.Command, args []string) error { cfg := config.New() c, err := client.New(cfg) if err != nil { return err } err = c.FetchTweetsStream(args[0], func(result json.RawMessage) error { fmt.Println(string(result)) return nil }) if err != nil { return err } return nil }