package cli import ( "flag" "fmt" "io" "os" "strings" "gitea.pglikers.com/tools/slacksend/internal/version" ) type Options struct { ShowVersion bool } func Run(args []string) int { return run(args, os.Stdin, os.Stdout, os.Stderr) } func run(args []string, stdin io.Reader, stdout, stderr io.Writer) int { fs := flag.NewFlagSet("slacksend", flag.ContinueOnError) fs.SetOutput(stderr) fs.Usage = func() { Usage(stdout) } var opt Options fs.BoolVar(&opt.ShowVersion, "version", false, "show version") fs.BoolVar(&opt.ShowVersion, "V", false, "show version (short)") if err := fs.Parse(args[1:]); err != nil { if err == flag.ErrHelp { Usage(stdout) return 0 } fmt.Fprintln(stderr, err) Usage(stderr) return 2 } if opt.ShowVersion { fmt.Fprintln(stdout, version.String()) return 0 } msg, err := message(fs.Args(), stdin) if err != nil { fmt.Fprintln(stderr, "read message error:", err) return 1 } if msg == "" { Usage(stderr) return 2 } // TODO: Slack送信(ここはあとで internal/slack に逃がす) fmt.Fprintln(stdout, msg) return 0 } func message(args []string, stdin io.Reader) (string, error) { if len(args) > 0 { return strings.Join(args, " "), nil } b, err := io.ReadAll(stdin) if err != nil { return "", err } return strings.TrimSpace(string(b)), nil }