From e69884ce52fa4b86a0e840959fe4dc365617933e Mon Sep 17 00:00:00 2001 From: Artyom Belousov Date: Sun, 6 Jun 2021 12:22:36 +0300 Subject: [PATCH] Added telegram version --- .gitlab-ci.yml | 12 ++++++--- Dockerfile | 7 +++-- cmd/telegram/main.go | 48 +++++++++++++++++++++++++++++++++++ cmd/{go-mtg-vk => vk}/main.go | 18 ++++++------- docker-compose-dev.yaml | 15 +++++++++-- docker-compose.yaml | 7 ++++- go.mod | 2 ++ go.sum | 10 +++----- internal/telegram/sender.go | 16 ++++++++++++ 9 files changed, 111 insertions(+), 24 deletions(-) create mode 100644 cmd/telegram/main.go rename cmd/{go-mtg-vk => vk}/main.go (75%) create mode 100644 internal/telegram/sender.go diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2db135f..feaafca 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -10,14 +10,18 @@ deploy: - apk add curl variables: DOCKER_TLS_CERTDIR: "/certs" - IMAGE_NAME: "$DOCKER_IMAGE_TAG:$CI_JOB_ID.$CI_COMMIT_SHORT_SHA" + IMAGE_NAME_VK: "$DOCKER_IMAGE_TAG_VK:$CI_JOB_ID.$CI_COMMIT_SHORT_SHA" + IMAGE_NAME_TG: "$DOCKER_IMAGE_TAG_TG:$CI_JOB_ID.$CI_COMMIT_SHORT_SHA" services: - docker:19.03.12-dind script: - - docker build . -t $DOCKER_IMAGE_TAG -t $IMAGE_NAME + - docker build . -t $DOCKER_IMAGE_TAG_VK -t $IMAGE_NAME_VK --build-arg VERSION=vk + - docker build . -t $DOCKER_IMAGE_TAG_TG -t $IMAGE_NAME_TG --build-arg VERSION=telegram - docker login $REGISTRY_NAME -u $DOCKER_USER -p $DOCKER_PASSWORD - - docker push $IMAGE_NAME - - docker push $DOCKER_IMAGE_TAG + - docker push $IMAGE_NAME_VK + - docker push $DOCKER_IMAGE_TAG_VK + - docker push $IMAGE_NAME_TG + - docker push $DOCKER_IMAGE_TAG_TG - "curl -X POST -H \"Authorization: Bearer $GOCD_ACCESS_TOKEN\" -d '{\"repository_url\": \"https://gitlab.com/flygrounder/go-mtg-vk\"}' -H \"Accept: application/vnd.go.cd.v2+json\" -H \"Content-Type: application/json\" https://gocd.flygrounder.ru/go/api/admin/materials/git/notify" only: - master diff --git a/Dockerfile b/Dockerfile index 56aa070..6fd581a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,11 @@ FROM golang:1.15.4-alpine3.12 +ARG VERSION +ENV VERSION=$VERSION + COPY . /go/src/go-mtg-vk WORKDIR /go/src/go-mtg-vk -RUN go build ./cmd/go-mtg-vk +RUN go build ./cmd/$VERSION RUN mkdir logs ENV GIN_MODE=release -ENTRYPOINT ./go-mtg-vk +ENTRYPOINT ./$VERSION diff --git a/cmd/telegram/main.go b/cmd/telegram/main.go new file mode 100644 index 0000000..a6d91a4 --- /dev/null +++ b/cmd/telegram/main.go @@ -0,0 +1,48 @@ +package main + +import ( + "encoding/json" + "io/ioutil" + "log" + "os" + "time" + + tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api" + "gitlab.com/flygrounder/go-mtg-vk/internal/cardsinfo" + "gitlab.com/flygrounder/go-mtg-vk/internal/scenario" + + "gitlab.com/flygrounder/go-mtg-vk/internal/caching" + "gitlab.com/flygrounder/go-mtg-vk/internal/telegram" +) + +func main() { + dict, _ := os.Open("./assets/additional_cards.json") + dictBytes, _ := ioutil.ReadAll(dict) + var dictMap map[string]string + _ = json.Unmarshal(dictBytes, &dictMap) + bot, _ := tgbotapi.NewBotAPI(os.Getenv("TG_TOKEN")) + sender := &telegram.Sender{ + API: bot, + } + sc := &scenario.Scenario{ + Sender: sender, + Logger: log.New(os.Stdout, "", 0), + Cache: caching.NewClient("redis:6379", "", time.Hour*24, 0), + InfoFetcher: &cardsinfo.Fetcher{ + Dict: dictMap, + }, + } + + u := tgbotapi.NewUpdate(0) + updates, _ := bot.GetUpdatesChan(u) + for update := range updates { + if update.Message == nil { + continue + } + + go sc.HandleSearch(&scenario.UserMessage{ + Body: update.Message.Text, + UserId: update.Message.Chat.ID, + }) + } +} diff --git a/cmd/go-mtg-vk/main.go b/cmd/vk/main.go similarity index 75% rename from cmd/go-mtg-vk/main.go rename to cmd/vk/main.go index 0c16b19..0157e57 100644 --- a/cmd/go-mtg-vk/main.go +++ b/cmd/vk/main.go @@ -28,15 +28,15 @@ func main() { var dictMap map[string]string _ = json.Unmarshal(dictBytes, &dictMap) handler := vk.Handler{ - Scenario: &scenario.Scenario{ - Sender: &vk.ApiSender{ - Token: os.Getenv("VK_TOKEN"), - }, - Logger: log.New(os.Stdout, "", 0), - Cache: caching.NewClient("redis:6379", "", time.Hour*24, 0), - InfoFetcher: &cardsinfo.Fetcher{ - Dict: dictMap, - }, + Scenario: &scenario.Scenario{ + Sender: &vk.ApiSender{ + Token: os.Getenv("VK_TOKEN"), + }, + Logger: log.New(os.Stdout, "", 0), + Cache: caching.NewClient("redis:6379", "", time.Hour*24, 0), + InfoFetcher: &cardsinfo.Fetcher{ + Dict: dictMap, + }, }, SecretKey: os.Getenv("VK_SECRET_KEY"), GroupId: groupId, diff --git a/docker-compose-dev.yaml b/docker-compose-dev.yaml index d194851..a4446df 100644 --- a/docker-compose-dev.yaml +++ b/docker-compose-dev.yaml @@ -1,7 +1,10 @@ version: "3.3" services: - web: - build: . + vk: + build: + context: . + args: + VERSION: vk environment: - VK_TOKEN - VK_SECRET_KEY @@ -11,6 +14,14 @@ services: ports: - "127.0.0.1:8888:8000" restart: "always" + telegram: + build: + context: . + args: + VERSION: telegram + environment: + - TG_TOKEN + restart: "always" redis: image: "redis:6.0.9" restart: "always" diff --git a/docker-compose.yaml b/docker-compose.yaml index b0a433d..67b6989 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,6 +1,6 @@ version: "3.3" services: - web: + vk: image: flygrounder/go-mtg-vk:latest environment: - VK_TOKEN @@ -11,6 +11,11 @@ services: ports: - "127.0.0.1:8888:8000" restart: "always" + telegram: + image: flygrounder/go-mtg-telegram:latest + environment: + - TG_TOKEN + restart: "always" redis: image: "redis:6.0.9" restart: "always" diff --git a/go.mod b/go.mod index af7542e..1cce626 100644 --- a/go.mod +++ b/go.mod @@ -8,10 +8,12 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/gin-gonic/gin v1.4.0 github.com/go-redis/redis v6.15.2+incompatible + github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible // indirect github.com/onsi/ginkgo v1.10.3 // indirect github.com/onsi/gomega v1.7.1 // indirect github.com/pkg/errors v0.9.1 github.com/stretchr/testify v1.5.1 + github.com/technoweenie/multipartstreamer v1.0.1 // indirect github.com/texttheater/golang-levenshtein/levenshtein v0.0.0-20200805054039-cae8b0eaed6c github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da // indirect gopkg.in/h2non/gock.v1 v1.0.16 diff --git a/go.sum b/go.sum index d5b0d6b..5e3aa83 100644 --- a/go.sum +++ b/go.sum @@ -9,7 +9,6 @@ github.com/antchfx/xpath v1.1.6/go.mod h1:Yee4kTMuNiPYJ7nSNorELQMr1J33uOpXDMByNY github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= 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= @@ -21,6 +20,8 @@ github.com/gin-gonic/gin v1.4.0 h1:3tMoCCfM7ppqsR0ptz/wi1impNpT7/9wQtMZ8lr1mCQ= github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4= github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible h1:2cauKuaELYAEARXRkq2LrJ0yDDv1rW7+wrTEdVL3uaU= +github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible/go.mod h1:qf9acutJ8cwBUhm1bqgz6Bei9/C/c93FPDljKWwsOgM= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -50,10 +51,11 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE 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.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= 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/technoweenie/multipartstreamer v1.0.1 h1:XRztA5MXiR1TIRHxH2uNxXxaIkKQDeX7m2XsSOlQEnM= +github.com/technoweenie/multipartstreamer v1.0.1/go.mod h1:jNVxdtShOxzAsukZwTSw6MDx5eUJoiEBsSvzDU9uzog= github.com/texttheater/golang-levenshtein/levenshtein v0.0.0-20200805054039-cae8b0eaed6c h1:HelZ2kAFadG0La9d+4htN4HzQ68Bm2iM9qKMSMES6xg= github.com/texttheater/golang-levenshtein/levenshtein v0.0.0-20200805054039-cae8b0eaed6c/go.mod h1:JlzghshsemAMDGZLytTFY8C1JQxQPhnatWqNwUXjggo= github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw= @@ -61,10 +63,8 @@ github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGr github.com/yuin/gopher-lua v0.0.0-20191220021717-ab39c6098bdb/go.mod h1:gqRgreBUhTSL0GeU64rtZ3Uq3wtjOa/TB2YfrtkCbVQ= github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da h1:NimzV1aGyq29m5ukMK0AMWEhFaL/lrEOaephfuoiARg= github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c h1:uOCk1iQW6Vc18bnC13MfzScl+wdKBmM9Y9kU7Z83/lw= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20191021144547-ec77196f6094/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200421231249-e086a090c8fd h1:QPwSajcTUrFriMF1nJ3XzgoqakqQEsnZf9LdXdi2nkI= @@ -73,7 +73,6 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223 h1:DH4skfRX4EBpamg7iV4ZlCpblAHI6s6TDM39bFZumv8= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -92,7 +91,6 @@ gopkg.in/h2non/gock.v1 v1.0.16 h1:F11k+OafeuFENsjei5t2vMTSTs9L62AdyTe4E1cgdG8= gopkg.in/h2non/gock.v1 v1.0.16/go.mod h1:XVuDAssexPLwgxCLMvDTWNU5eqklsydR6I5phZ9oPB8= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/internal/telegram/sender.go b/internal/telegram/sender.go new file mode 100644 index 0000000..e7e6bed --- /dev/null +++ b/internal/telegram/sender.go @@ -0,0 +1,16 @@ +package telegram + +import ( + tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api" +) + +type Sender struct { + API *tgbotapi.BotAPI +} + +func (h *Sender) Send(userId int64, message string) { + msg := tgbotapi.NewMessage(userId, message) + msg.DisableWebPagePreview = true + h.API.Send(msg) +} +