diff --git a/cmd/checkin.go b/cmd/checkin.go new file mode 100644 index 0000000..9496b2d --- /dev/null +++ b/cmd/checkin.go @@ -0,0 +1,56 @@ +package cmd + +import ( + "context" + "fmt" + cdp "github.com/chromedp/chromedp" + "os" + "path/filepath" + "time" +) + +func CheckIn() { + + dir, _ := os.UserHomeDir() + LocalAppData := filepath.Join(dir, "/AppData/Local") + cookiesFile := filepath.Join(LocalAppData, "/Google/Chrome/User Data/Default/Network/Cookies") + println(cookiesFile) + cookie := ReadDomainCookieFromChrome(".m-team.cc", cookiesFile) + cookie = fmt.Sprintf(`%s;%s`, cookie, ReadDomainCookieFromChrome("kp.m-team.cc", cookiesFile)) + m := &MTeam{ + //ChromeFilePath: "D:\\Portable\\chrome-win\\chrome.exe", + Cookie: cookie, + Timeout: time.Duration(60 * 3), + Proxy: "http://127.0.0.1:1080", + } + + m.InitOptions() + + execAllocator, cancel := cdp.NewExecAllocator( + context.Background(), + //cdp.WithDebugf(log.Printf), + m.Options..., + ) + defer cancel() + + ctx, cancel := cdp.NewContext(execAllocator) + defer cancel() + + tctx, cancel := context.WithTimeout(ctx, m.Timeout*time.Second) + defer cancel() + + visibleTag := "table.torrents" + rootPath, _ := os.Getwd() + for page := 0; page < 3; page++ { + adultURL := fmt.Sprintf(`https://kp.m-team.cc/adult.php?inclbookmarked=0&incldead=1&spstate=0&cat410=1&cat429=1&page=%d`, page) + source, err := m.DownloadListHtmlByCDP(tctx, adultURL, visibleTag, filepath.Join(rootPath, "temp", fmt.Sprintf("page_%d.json", page))) + if err != nil { + XWarning(fmt.Sprintf("cdpc.DownloadHtmlByCDP error : %v", err)) + continue + } + + ParseMteamList(source, filepath.Join(rootPath, "temp", fmt.Sprintf("page_%d.json", page))) + + time.Sleep(1 * time.Second) + } +} diff --git a/cmd/cmd.go b/cmd/cmd.go new file mode 100644 index 0000000..84b78ae --- /dev/null +++ b/cmd/cmd.go @@ -0,0 +1,91 @@ +package cmd + +import ( + "context" + "fmt" + cdpNetwork "github.com/chromedp/cdproto/network" + cdp "github.com/chromedp/chromedp" + "io/ioutil" + "os" + "time" +) + +type MTeam struct { + ChromeFilePath string `json:"chrome_file_path"` + Cookie string `json:"cookie"` //domain cookie + Options []cdp.ExecAllocatorOption `json:"options"` + Timeout time.Duration `json:"timeout"` //cdp context timetout + Proxy string `json:"proxy"` +} + +func (m *MTeam) InitOptions() { + m.Options = []cdp.ExecAllocatorOption{ + //cdp.ExecPath(m.ChromeFilePath), + cdp.Flag("headless", false), + cdp.Flag("start-maximized", true), + //cdp.Flag("disable-infobars", true),//此参数无效 + cdp.Flag("enable-automation", false), + cdp.ProxyServer(m.Proxy), + //cdp.Flag("hide-scrollbars", true), + //cdp.Flag("mute-audio", false), + //cdp.UserDataDir(""), + + //cdp.WindowSize(1920, 1080), // init with a mobile view + cdp.UserAgent(`Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36`), + } + m.Options = append(cdp.DefaultExecAllocatorOptions[:], + m.Options...) + +} + +func (m *MTeam) DownloadListHtmlByCDP(ctx context.Context, url, htmlTag, htmlFilePath string) (src string, err error) { + + //run until to timeout + err = cdp.Run( + ctx, + SetHeaders(map[string]interface{}{"cookie": m.Cookie}), + cdp.Navigate(url), + ) + if err != nil { + XWarning(fmt.Sprintf(`cdp.Navigate error : %v`, err)) + return src, err + } + + //run until to timeout + err = cdp.Run( + ctx, + cdp.WaitVisible(htmlTag), //by css selector + ) + if err != nil { + XWarning(fmt.Sprintf(`util.RunWithTimeOut error : %v`, err)) + return src, err + } + + err = cdp.Run( + ctx, + cdp.OuterHTML("html", &src), + ) + if err != nil { + XWarning(fmt.Sprintf(`cdp.OuterHTML error : %v`, err)) + return src, err + } + ioutil.WriteFile(htmlFilePath, []byte(src), os.ModePerm) + return src, nil +} +func SetHeaders(headers map[string]interface{}) cdp.Tasks { + return cdp.Tasks{ + cdpNetwork.Enable(), + cdpNetwork.SetExtraHTTPHeaders(headers), + } +} + +//@Title: WaitUntil +// @Description: https://github.com/chromedp/chromedp/issues/37 + +func RunWithTimeOut(ctx *context.Context, timeout time.Duration, tasks cdp.Tasks) cdp.ActionFunc { + return func(ctx context.Context) error { + timeoutContext, cancel := context.WithTimeout(ctx, timeout*time.Second) + defer cancel() + return tasks.Do(timeoutContext) + } +} diff --git a/cmd/cookie.go b/cmd/cookie.go new file mode 100644 index 0000000..7ffdecc --- /dev/null +++ b/cmd/cookie.go @@ -0,0 +1,27 @@ +package cmd + +import ( + "fmt" + "github.com/zellyn/kooky/browser/chrome" + "log" + "strings" +) + +func ReadDomainCookieFromChrome(domain, cookieFilePath string) (cook string) { + + cookies, err := chrome.ReadCookies(cookieFilePath) + if err != nil { + log.Fatal(err) + } + cookieData := []string{} + for _, cookie := range cookies { + if cookie.Domain == domain { + cookieData = append(cookieData, fmt.Sprintf("%v=%v", cookie.Name, cookie.Value)) + } + } + + cook = strings.Join(cookieData, ";") + + return + +} diff --git a/cmd/log.go b/cmd/log.go new file mode 100644 index 0000000..4095f87 --- /dev/null +++ b/cmd/log.go @@ -0,0 +1,31 @@ +package cmd + +import ( + "log" + "os" + "strings" + "time" +) + +// @title XWarning +// @description warning日志输出 +// @param +// @return +func XWarning(content string) { + log.Printf(content) + LogWrite(content) +} + +// @title LogWrite +// @description log信息写入log文件 +// @param +// @return +func LogWrite(content string) { + //使用当前项目路径 + fd, _ := os.OpenFile("log.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644) + fd_time := time.Now().Format("2006-01-02 15:04:05") + fd_content := strings.Join([]string{"======", fd_time, "=====", content, "\n"}, "") + buf := []byte(fd_content) + fd.Write(buf) + fd.Close() +} diff --git a/cmd/parse.go b/cmd/parse.go new file mode 100644 index 0000000..e6454ea --- /dev/null +++ b/cmd/parse.go @@ -0,0 +1,33 @@ +package cmd + +import ( + "encoding/json" + "fmt" + "github.com/PuerkitoBio/goquery" + "io/ioutil" + "os" + "strings" +) + +func ParseMteamList(source, jsonFilePath string) { + soup, _ := goquery.NewDocumentFromReader(strings.NewReader(source)) + datas := map[string][]string{} + domain := "https://kp.m-team.cc/" + soup.Find(`tr>td[class='torrentimg']>a[href*='details']:nth-child(1)`).Each(func(i int, a *goquery.Selection) { + data := []string{} + + title, _ := a.Attr("title") + data = append(data, title) + + href, _ := a.Attr("href") + href = fmt.Sprintf(`%s%s`, domain, href) + + src, _ := a.Find("img").Attr("src") + data = append(data, src) + + datas[href] = data + }) + //fmt.Printf("%v\n", data) + jsonData, _ := json.MarshalIndent(datas, "", "\t") + ioutil.WriteFile(jsonFilePath, jsonData, os.ModePerm) +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..7811efc --- /dev/null +++ b/go.mod @@ -0,0 +1,28 @@ +module mteam_checkin + +go 1.18 + +require ( + github.com/PuerkitoBio/goquery v1.8.1 + github.com/chromedp/cdproto v0.0.0-20231011050154-1d073bb38998 + github.com/chromedp/chromedp v0.9.3 + github.com/zellyn/kooky v0.0.0-20221025221128-3e66d684c4db +) + +require ( + github.com/andybalholm/cascadia v1.3.1 // indirect + github.com/chromedp/sysutil v1.0.0 // indirect + github.com/go-sqlite/sqlite3 v0.0.0-20180313105335-53dd8e640ee7 // indirect + github.com/gobwas/httphead v0.1.0 // indirect + github.com/gobwas/pool v0.2.1 // indirect + github.com/gobwas/ws v1.3.0 // indirect + github.com/godbus/dbus/v5 v5.1.0 // indirect + github.com/gonuts/binary v0.2.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/keybase/go-keychain v0.0.0-20220408132150-ad3b4a8fd4a7 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/zalando/go-keyring v0.2.1 // indirect + golang.org/x/crypto v0.0.0-20220408190544-5352b0902921 // indirect + golang.org/x/net v0.7.0 // indirect + golang.org/x/sys v0.6.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..d808d96 --- /dev/null +++ b/go.sum @@ -0,0 +1,94 @@ +github.com/PuerkitoBio/goquery v1.8.1 h1:uQxhNlArOIdbrH1tr0UXwdVFgDcZDrZVdcpygAcwmWM= +github.com/PuerkitoBio/goquery v1.8.1/go.mod h1:Q8ICL1kNUJ2sXGoAhPGUdYDJvgQgHzJsnnd3H7Ho5jQ= +github.com/Velocidex/json v0.0.0-20220224052537-92f3c0326e5a h1:AeXPUzhU0yhID/v5JJEIkjaE85ASe+Vh4Kuv1RSLL+4= +github.com/Velocidex/ordereddict v0.0.0-20220411103415-79032cf99b1d h1:XnifmnLRjinjYzZgbog7LQr2XbmEFI81kuiufpn+JUQ= +github.com/Velocidex/yaml/v2 v2.2.8 h1:GUrSy4SBJ6RjGt43k6MeBKtw2z/27gh4A3hfFmFY3No= +github.com/alessio/shellescape v1.4.1/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30= +github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c= +github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA= +github.com/bobesa/go-domain-util v0.0.0-20190911083921-4033b5f7dd89 h1:2pkAuIM8OF1fy4ToFpMnI4oE+VeUNRbGrpSLKshK0oQ= +github.com/chromedp/cdproto v0.0.0-20231011050154-1d073bb38998 h1:2zipcnjfFdqAjOQa8otCCh0Lk1M7RBzciy3s80YAKHk= +github.com/chromedp/cdproto v0.0.0-20231011050154-1d073bb38998/go.mod h1:GKljq0VrfU4D5yc+2qA6OVr8pmO/MBbPEWqWQ/oqGEs= +github.com/chromedp/chromedp v0.9.3 h1:Wq58e0dZOdHsxaj9Owmfcf+ibtpYN1N0FWVbaxa/esg= +github.com/chromedp/chromedp v0.9.3/go.mod h1:NipeUkUcuzIdFbBP8eNNvl9upcceOfWzoJn6cRe4ksA= +github.com/chromedp/sysutil v1.0.0 h1:+ZxhTpfpZlmchB58ih/LBHX52ky7w2VhQVKQMucy3Ic= +github.com/chromedp/sysutil v1.0.0/go.mod h1:kgWmDdq8fTzXYcKIBqIYvRRTnYb9aNS9moAV0xufSww= +github.com/danieljoos/wincred v1.1.0/go.mod h1:XYlo+eRTsVA9aHGp7NGjFkPla4m+DCL7hqDjlFjiygg= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/go-ini/ini v1.66.4 h1:dKjMqkcbkzfddhIhyglTPgMoJnkvmG+bSLrU9cTHc5M= +github.com/go-sqlite/sqlite3 v0.0.0-20180313105335-53dd8e640ee7 h1:ow5vK9Q/DSKkxbEIJHBST6g+buBDwdaDIyk1dGGwpQo= +github.com/go-sqlite/sqlite3 v0.0.0-20180313105335-53dd8e640ee7/go.mod h1:JxSQ+SvsjFb+p8Y+bn+GhTkiMfKVGBD0fq43ms2xw04= +github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU= +github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= +github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= +github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.3.0 h1:sbeU3Y4Qzlb+MOzIe6mQGf7QR4Hkv6ZD0qhGkBFL2O0= +github.com/gobwas/ws v1.3.0/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY= +github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= +github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gonuts/binary v0.2.0 h1:caITwMWAoQWlL0RNvv2lTU/AHqAJlVuu6nZmNgfbKW4= +github.com/gonuts/binary v0.2.0/go.mod h1:kM+CtBrCGDSKdv8WXTuCUsw+loiy8f/QEI8YCCC0M/E= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/keybase/go-keychain v0.0.0-20220408132150-ad3b4a8fd4a7 h1:ttxQhWhqiYEOVLMhmhIRQnZDLmYaBJVP7goucV3FJxM= +github.com/keybase/go-keychain v0.0.0-20220408132150-ad3b4a8fd4a7/go.mod h1:enrU/ug069Om7vWxuFE6nikLI2BZNwevMiGSo43Kt5w= +github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80 h1:6Yzfa6GP0rIo/kULo2bwGEkFvCePZ3qHDDTC3/J9Swo= +github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80/go.mod h1:imJHygn/1yfhB7XSJJKlFZKl/J+dCPAknuiaGOshXAs= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/orisano/pixelmatch v0.0.0-20220722002657-fb0b55479cde h1:x0TT0RDC7UhAVbbWWBzr41ElhJx5tXPWkIHA2HWPRuw= +github.com/orisano/pixelmatch v0.0.0-20220722002657-fb0b55479cde/go.mod h1:nZgzbfBr3hhjoZnS66nKrHmduYNpc34ny7RK4z5/HM0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zalando/go-keyring v0.2.1 h1:MBRN/Z8H4U5wEKXiD67YbDAr5cj/DOStmSga70/2qKc= +github.com/zalando/go-keyring v0.2.1/go.mod h1:g63M2PPn0w5vjmEbwAX3ib5I+41zdm4esSETOn9Y6Dw= +github.com/zellyn/kooky v0.0.0-20221025221128-3e66d684c4db h1:GiYcv6tEo8yme647CfG3tUydWi7LQG55oNb5bZ2ZeUM= +github.com/zellyn/kooky v0.0.0-20221025221128-3e66d684c4db/go.mod h1:6JjIozsIKDJ2H0S0ePLIoVbhhBvI15a/oFlMYsfIsSA= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220408190544-5352b0902921 h1:iU7T1X1J6yxDr0rda54sWGkHgOp5XJrqm79gcNlC2VM= +golang.org/x/crypto v0.0.0-20220408190544-5352b0902921/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +www.velocidex.com/golang/go-ese v0.1.0 h1:LObdPh6uoAAbz50MqF4WdJHAn9+Fcr/9kyW0fMsjxlc= diff --git a/main.go b/main.go new file mode 100644 index 0000000..d5c9a12 --- /dev/null +++ b/main.go @@ -0,0 +1,7 @@ +package main + +import "mteam_checkin/cmd" + +func main() { + cmd.CheckIn() +}