Compare commits

..

No commits in common. "master" and "refactor_model" have entirely different histories.

31 changed files with 145 additions and 556 deletions

View File

@ -1,24 +1,9 @@
kind: pipeline pipeline:
name: build docker:
clone:
depth: 50
steps:
- name: submodules
image: plugins/git
commands:
- git submodule update --recursive --remote --init
- ls schema
- ls
- name: docker
image: plugins/docker image: plugins/docker
settings: registry: docker.mtfos.xyz
registry: docker.mtfos.xyz repo: docker.mtfos.xyz/mtfos/go-bot
repo: docker.mtfos.xyz/mtfos/go-bot dockerfile: Dockerfile
dockerfile: Dockerfile tags: [latest, "${DRONE_COMMIT}"]
tags: [latest, "${DRONE_COMMIT}"] when:
branch: master
trigger:
branch:
- master

View File

@ -1,13 +1,14 @@
FROM golang:1.12.1-alpine as builder FROM golang:1.12.1-alpine as builder
WORKDIR /data WORKDIR /go/src/git.trj.tw/golang/mtfosbot
RUN apk add --no-cache make git RUN apk add --no-cache make git \
&& go get -u github.com/otakukaze/go-bindata/...
COPY . . COPY . .
RUN make RUN make
FROM alpine:latest FROM alpine:latest
RUN apk add --no-cache ca-certificates RUN apk add --no-cache ca-certificates
WORKDIR /data WORKDIR /data
COPY --from=builder /data/mtfosbot /usr/bin COPY --from=builder /go/src/git.trj.tw/golang/mtfosbot/mtfosbot /usr/bin
COPY config.default.yml config.yml COPY config.default.yml config.yml
EXPOSE 10230 EXPOSE 10230
CMD ["/usr/bin/mtfosbot", "-f", "/data/config.yml", "-dbtool"] CMD ["/usr/bin/mtfosbot", "-f", "/data/config.yml", "-dbtool"]

View File

@ -2,7 +2,6 @@
.PHONY: clean build .PHONY: clean build
build: build:
GO111MODULE=off go get -u github.com/go-bindata/go-bindata/...
go-bindata -pkg schema -ignore .git -o module/schema/static.go schema/ go-bindata -pkg schema -ignore .git -o module/schema/static.go schema/
GOOS=linux go build -o mtfosbot -ldflags "-s -w" . GOOS=linux go build -o mtfosbot -ldflags "-s -w" .

View File

@ -1,3 +1,2 @@
### MTFoS Bot ### MTFoS Bot
[![Build Status](https://ci.trj.tw/api/badges/golang/mtfosbot/status.svg)](https://ci.trj.tw/golang/mtfosbot)

View File

@ -25,7 +25,5 @@ redis:
host: 'localhost' host: 'localhost'
port: 6379 port: 6379
elasticsearch: elasticsearch:
username: ''
password: ''
host: 'http://localhost:9200' host: 'http://localhost:9200'
index: 'mtfosbot' index: 'mtfosbot'

36
go.mod
View File

@ -1,32 +1,36 @@
module git.trj.tw/golang/mtfosbot module git.trj.tw/golang/mtfosbot
go 1.16
require ( require (
github.com/DeanThompson/ginpprof v0.0.0-20190408063150-3be636683586 github.com/DeanThompson/ginpprof v0.0.0-20170218162546-8c0e31bfeaa8
github.com/PuerkitoBio/goquery v1.5.0 github.com/PuerkitoBio/goquery v1.5.0
github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff // indirect github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff // indirect
github.com/fortytw2/leaktest v1.3.0 // indirect github.com/fortytw2/leaktest v1.3.0 // indirect
github.com/gin-contrib/cors v1.3.0 github.com/gin-contrib/cors v0.0.0-20190301062745-f9e10995c85a
github.com/gin-gonic/contrib v0.0.0-20190526021735-7fb7810ed2a0 github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3 // indirect
github.com/gin-gonic/gin v1.4.0 github.com/gin-gonic/contrib v0.0.0-20190302003538-54ff787f7c73
github.com/gin-gonic/gin v1.3.0
github.com/go-irc/irc v2.1.0+incompatible github.com/go-irc/irc v2.1.0+incompatible
github.com/go-sql-driver/mysql v1.4.1 // indirect github.com/go-sql-driver/mysql v1.4.1 // indirect
github.com/google/go-cmp v0.3.0 // indirect github.com/golang/protobuf v1.3.1 // indirect
github.com/google/go-cmp v0.2.0 // indirect
github.com/gorilla/sessions v1.1.3 // indirect github.com/gorilla/sessions v1.1.3 // indirect
github.com/jmoiron/sqlx v1.2.0 github.com/jmoiron/sqlx v1.2.0
github.com/json-iterator/go v1.1.6 github.com/json-iterator/go v1.1.6
github.com/lib/pq v1.1.1 github.com/kr/pretty v0.1.0 // indirect
github.com/mailru/easyjson v0.0.0-20190403194419-1ea4449da983 // indirect github.com/lib/pq v1.0.0
github.com/mattn/go-isatty v0.0.8 // indirect github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe // indirect
github.com/mattn/go-isatty v0.0.7 // indirect
github.com/mattn/go-sqlite3 v1.10.0 // indirect github.com/mattn/go-sqlite3 v1.10.0 // indirect
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
github.com/olivere/elastic v6.2.18+incompatible github.com/olivere/elastic v6.2.16+incompatible
github.com/pkg/errors v0.8.1 // indirect github.com/pkg/errors v0.8.1 // indirect
github.com/robfig/cron v1.1.0 github.com/robfig/cron v0.0.0-20180505203441-b41be1df6967
golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f github.com/stretchr/testify v1.3.0 // indirect
golang.org/x/net v0.0.0-20190522155817-f3200d17e092 // indirect github.com/ugorji/go/codec v0.0.0-20190320090025-2dc34c0b8780 // indirect
golang.org/x/sys v0.0.0-20190528012530-adf421d2caf4 // indirect golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c
google.golang.org/appengine v1.6.0 // indirect golang.org/x/net v0.0.0-20190328230028-74de082e2cca // indirect
golang.org/x/sys v0.0.0-20190329044733-9eb1bfa1ce65 // indirect
google.golang.org/appengine v1.5.0 // indirect
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
gopkg.in/yaml.v2 v2.2.2 gopkg.in/yaml.v2 v2.2.2
) )

81
go.sum
View File

@ -1,5 +1,5 @@
github.com/DeanThompson/ginpprof v0.0.0-20190408063150-3be636683586 h1:vDSj8WQZoe+dhK9JVwkSEBwtmcJw5rJ7l1L0Yik8Ku0= github.com/DeanThompson/ginpprof v0.0.0-20170218162546-8c0e31bfeaa8 h1:ciyrUaonhkfoqjGNUKzRVvpkugE+afQ7HKU2umHvANo=
github.com/DeanThompson/ginpprof v0.0.0-20190408063150-3be636683586/go.mod h1:kMi/fSDAgvjo9TYfYwYeQ2vkyj+VTR/tB6u/Tjh39t0= github.com/DeanThompson/ginpprof v0.0.0-20170218162546-8c0e31bfeaa8/go.mod h1:kMi/fSDAgvjo9TYfYwYeQ2vkyj+VTR/tB6u/Tjh39t0=
github.com/PuerkitoBio/goquery v1.5.0 h1:uGvmFXOA73IKluu/F84Xd1tt/z07GYm8X49XKHP7EJk= github.com/PuerkitoBio/goquery v1.5.0 h1:uGvmFXOA73IKluu/F84Xd1tt/z07GYm8X49XKHP7EJk=
github.com/PuerkitoBio/goquery v1.5.0/go.mod h1:qD2PgZ9lccMbQlc7eEOjaeRlFQON7xY8kdmcsrnKqMg= github.com/PuerkitoBio/goquery v1.5.0/go.mod h1:qD2PgZ9lccMbQlc7eEOjaeRlFQON7xY8kdmcsrnKqMg=
github.com/andybalholm/cascadia v1.0.0 h1:hOCXnnZ5A+3eVDX8pvgl4kofXv2ELss0bKcqRySc45o= github.com/andybalholm/cascadia v1.0.0 h1:hOCXnnZ5A+3eVDX8pvgl4kofXv2ELss0bKcqRySc45o=
@ -11,26 +11,30 @@ 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/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
github.com/gin-contrib/cors v1.3.0 h1:PolezCc89peu+NgkIWt9OB01Kbzt6IP0J/JvkG6xxlg= github.com/gin-contrib/cors v0.0.0-20190301062745-f9e10995c85a h1:zBycVvXa03SIX+jdMv8wGu9TMDMWdN8EhaR1FoeKHNo=
github.com/gin-contrib/cors v1.3.0/go.mod h1:artPvLlhkF7oG06nK8v3U8TNz6IeX+w1uzCSEId5/Vc= github.com/gin-contrib/cors v0.0.0-20190301062745-f9e10995c85a/go.mod h1:pL2kNE+DgDU+eQ+dary5bX0Z6LPP8nR6Mqs1iejILw4=
github.com/gin-contrib/sse v0.0.0-20170109093832-22d885f9ecc7 h1:AzN37oI0cOS+cougNAV9szl6CVoj2RYwzS3DpUQNtlY=
github.com/gin-contrib/sse v0.0.0-20170109093832-22d885f9ecc7/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3 h1:t8FVkw33L+wilf2QiWkw0UV77qRpcH/JHPKGpKa2E8g= github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3 h1:t8FVkw33L+wilf2QiWkw0UV77qRpcH/JHPKGpKa2E8g=
github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
github.com/gin-gonic/contrib v0.0.0-20190526021735-7fb7810ed2a0 h1:R0oj52DmXWiPxZEedx/Uxxbvs6yB0l8hLgrubGpKsq4= github.com/gin-gonic/contrib v0.0.0-20190302003538-54ff787f7c73 h1:dC6mPFx+I6Kkj/NJhI/ZVGVapv0u9tIEo6vp4ogXEjQ=
github.com/gin-gonic/contrib v0.0.0-20190526021735-7fb7810ed2a0/go.mod h1:iqneQ2Df3omzIVTkIfn7c1acsVnMGiSLn4XF5Blh3Yg= github.com/gin-gonic/contrib v0.0.0-20190302003538-54ff787f7c73/go.mod h1:iqneQ2Df3omzIVTkIfn7c1acsVnMGiSLn4XF5Blh3Yg=
github.com/gin-gonic/gin v1.4.0 h1:3tMoCCfM7ppqsR0ptz/wi1impNpT7/9wQtMZ8lr1mCQ= github.com/gin-gonic/gin v1.3.0 h1:kCmZyPklC0gVdL728E6Aj20uYBJV93nj/TkwBTKhFbs=
github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/gin-gonic/gin v1.3.0/go.mod h1:7cKuhb5qV2ggCFctp2fJQ+ErvciLZrIeoOSOm6mUr7Y=
github.com/go-irc/irc v2.1.0+incompatible h1:pg7pMVq5OYQbqTxceByD/EN8VIsba7DtKn49rsCnG8Y= github.com/go-irc/irc v2.1.0+incompatible h1:pg7pMVq5OYQbqTxceByD/EN8VIsba7DtKn49rsCnG8Y=
github.com/go-irc/irc v2.1.0+incompatible/go.mod h1:jJILTRy8s/qOvusiKifAEfhQMVwft1ZwQaVJnnzmyX4= github.com/go-irc/irc v2.1.0+incompatible/go.mod h1:jJILTRy8s/qOvusiKifAEfhQMVwft1ZwQaVJnnzmyX4=
github.com/go-sql-driver/mysql v1.4.0 h1:7LxgVwFb2hIQtMm87NdgAVfXjnt4OePseqT1tKx+opk=
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA= github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA=
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0=
github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ=
@ -40,6 +44,8 @@ github.com/gorilla/sessions v1.1.3 h1:uXoZdcdA5XdXF3QzuSlheVRUvjl+1rKY7zBXL68L9R
github.com/gorilla/sessions v1.1.3/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= github.com/gorilla/sessions v1.1.3/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w=
github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA= github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA=
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
github.com/json-iterator/go v1.1.5 h1:gL2yXlmiIo4+t+y32d4WGwOjKGYcGOuyrg46vadswDE=
github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs= github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
@ -47,14 +53,15 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A=
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe h1:W/GaMY0y69G4cFlmsC6B9sbuo2fP8OFP1ABjt4kPz+w=
github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190403194419-1ea4449da983 h1:wL11wNW7dhKIcRCHSm4sHKPWz0tt4mwBsVodG7+Xyqg= github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs=
github.com/mailru/easyjson v0.0.0-20190403194419-1ea4449da983/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.7 h1:UvyT9uN+3r7yLEYSlJsbQGdsaB/a0DlgWP3pql6iwOc=
github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= github.com/mattn/go-sqlite3 v1.9.0 h1:pDRiWfl+++eC2FEFRy6jXmQlvp4Yh3z1MJKg4UeYM/4=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o= github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o=
github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
@ -64,38 +71,44 @@ github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/olivere/elastic v6.2.18+incompatible h1:sd4eZY7YExzuvTz4tpBAvWY6go/SZLMj5GKl9vZgtwM= github.com/olivere/elastic v6.2.16+incompatible h1:+mQIHbkADkOgq9tFqnbyg7uNFVV6swGU07EoK1u0nEQ=
github.com/olivere/elastic v6.2.18+incompatible/go.mod h1:J+q1zQJTgAz9woqsbVRqGeB5G1iqDKVBWLNSYW8yfJ8= github.com/olivere/elastic v6.2.16+incompatible/go.mod h1:J+q1zQJTgAz9woqsbVRqGeB5G1iqDKVBWLNSYW8yfJ8=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 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/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/robfig/cron v1.1.0 h1:jk4/Hud3TTdcrJgUOBgsqrZBarcxl6ADIjSC2iniwLY= github.com/robfig/cron v0.0.0-20180505203441-b41be1df6967 h1:x7xEyJDP7Hv3LVgvWhzioQqbC/KtuUhTigKlH/8ehhE=
github.com/robfig/cron v1.1.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/robfig/cron v0.0.0-20180505203441-b41be1df6967/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= 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.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw= github.com/ugorji/go v1.1.2 h1:JON3E2/GPW2iDNGoSAusl1KDf5TRQ8k8q7Tp097pZGs=
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go v1.1.2/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=
github.com/ugorji/go/codec v0.0.0-20181209151446-772ced7fd4c2/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
github.com/ugorji/go/codec v0.0.0-20190320090025-2dc34c0b8780 h1:vG/gY/PxA3v3l04qxe3tDjXyu3bozii8ulSlIPOYKhI=
github.com/ugorji/go/codec v0.0.0-20190320090025-2dc34c0b8780/go.mod h1:iT03XoTwV7xq/+UGwKO3UbC1nNNlopQiY61beSdrtOA=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f h1:R423Cnkcp5JABoeemiGEPlt9tHXFfw5kvc0yqlxRPWo= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c h1:Vj5n4GlwjmQteupaxJ9+0FNOmBrHfq7vN4btdGoDZgI=
golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a h1:gOpx8G595UYyvj8UK4+OFyY4rx037g3fmfhe5SasG3U=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190328230028-74de082e2cca h1:hyA6yiAgbUwuWqtscNvWAI7U1CtlaD1KilQ6iudt1aI=
golang.org/x/net v0.0.0-20190522155817-f3200d17e092 h1:4QSRKanuywn15aTZvI/mIDEgPQpswuFndXpOj3rKEco= golang.org/x/net v0.0.0-20190328230028-74de082e2cca/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20181228144115-9a3f9b0469bb/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-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190329044733-9eb1bfa1ce65 h1:hOY+O8MxdkPV10pNf7/XEHaySCiPKxixMKUshfHsGn0=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190329044733-9eb1bfa1ce65/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190528012530-adf421d2caf4 h1:gd52YanAQJ4UkvuNi/7z63JEyc6ejHh9QwdzbTiEtAY=
golang.org/x/sys v0.0.0-20190528012530-adf421d2caf4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
google.golang.org/appengine v1.6.0 h1:Tfd7cKwKbFRsI8RMAD3oqqw7JPFRrvFlOsfbgVkjOOw= google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c=
google.golang.org/appengine v1.6.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

View File

@ -78,11 +78,6 @@ func main() {
log.Fatal(errors.New("log image root not exists")) log.Fatal(errors.New("log image root not exists"))
} }
// err = es.NewClient()
// if err != nil {
// log.Println("es create client error :: ", err)
// }
server.Run(strings.Join([]string{":", strconv.Itoa(config.GetConf().Port)}, "")) server.Run(strings.Join([]string{":", strconv.Itoa(config.GetConf().Port)}, ""))
} }

View File

@ -40,7 +40,7 @@ func GetAccount(account string) (acc *Account, err error) {
// CreateAccount - // CreateAccount -
func CreateAccount(account, password string) (acc *Account, err error) { func CreateAccount(account, password string) (acc *Account, err error) {
acc = &Account{} acc = &Account{}
err = x.Get(acc, `insert into "public"."account" ("account", "password", "ctime", "mtime") values ($1, $2, now(), now()) returning *`, account, password) err = x.Get(acc, `insert into "public"."account" ("account", "password", "ctime", "mtime") values ($1, $2, now(), now())`, account, password)
if err == sql.ErrNoRows { if err == sql.ErrNoRows {
return nil, nil return nil, nil
} }

View File

@ -1,74 +0,0 @@
package model
import (
"database/sql"
"time"
)
type IGGroup struct {
*LineGroup
Tmpl string `db:"tmpl"`
}
//Instagram -
type Instagram struct {
ID string `db:"id" cc:"id"`
LastPost string `db:"lastpost" cc:"lastpost"`
Ctime time.Time `db:"ctime" cc:"ctime"`
Mtime time.Time `db:"mtime" cc:"ctime"`
Groups []*IGGroup `db:"-"`
}
// GetAllInstagram -
func GetAllInstagram() (igs []*Instagram, err error) {
err = x.Select(&igs, `select * from "public"."instagram"`)
if err != nil {
return nil, err
}
return
}
// GetInstagram -
func GetInstagram(id string) (ig *Instagram, err error) {
ig = &Instagram{}
err = x.Get(ig, `select * from "public"."instagram" where "id" = $1`, id)
if err == sql.ErrNoRows {
return nil, nil
}
return
}
// AddIG -
func (p *Instagram) AddIG() (err error) {
stmt, err := x.PrepareNamed(`insert into "public"."instagram" ("id", "lastpost") values (:id, :lastpost) returning *`)
if err != nil {
return err
}
err = stmt.Get(p, p)
return
}
// UpdatePost -
func (p *Instagram) UpdatePost(postID string) (err error) {
query := `update "public"."instagram" set "lastpost" = $1, "mtime" = now() where "id" = $2`
_, err = x.Exec(query, postID, p.ID)
if err != nil {
return
}
p.LastPost = postID
return
}
// GetGroups -
func (p *Instagram) GetGroups() (err error) {
query := `select g.*, rt.tmpl as tmpl from "public"."instagram" p
left join "public"."line_ig_rt" rt
on rt."ig" = p.id
left join "public"."line_group" g
on g.id = rt."line"
where
p.id = $1
and rt.ig is not null`
err = x.Select(&p.Groups, query, p.ID)
return
}

View File

@ -1,37 +0,0 @@
package model
import (
"database/sql"
"errors"
"time"
)
// LineBot -
type LineBot struct {
ID string `db:"id" cc:"id"`
Name string `db:"name" cc:"name"`
AccessToken string `db:"access_token" cc:"access_token"`
Secret string `db:"secret" cc:"secret"`
Ctime time.Time `db:"ctime" cc:"ctime"`
Mtime time.Time `db:"mtime" cc:"mtime"`
}
// GetBotInfo -
func GetBotInfo(id string) (bot *LineBot, err error) {
if len(id) == 0 {
return nil, errors.New("id is emptu")
}
query := `select
"id", "name", "access_token", "secret", "ctime", "mtime"
from public."line_bot"
where
"id" = $1`
bot = &LineBot{}
err = x.Get(bot, query, id)
if err == sql.ErrNoRows {
return nil, nil
}
return
}

View File

@ -2,19 +2,17 @@ package model
import ( import (
"database/sql" "database/sql"
"errors"
"time" "time"
) )
// LineGroup - struct // LineGroup - struct
type LineGroup struct { type LineGroup struct {
ID string `db:"id" cc:"id"` ID string `db:"id" cc:"id"`
Name string `db:"name" cc:"name"` Name string `db:"name" cc:"name"`
Notify bool `db:"notify" cc:"notify"` Notify bool `db:"notify" cc:"notify"`
Owner string `db:"owner" cc:"owner"` Owner string `db:"owner" cc:"owner"`
Ctime time.Time `db:"ctime" cc:"ctime"` Ctime time.Time `db:"ctime" cc:"ctime"`
Mtime time.Time `db:"mtime" cc:"ctime"` Mtime time.Time `db:"mtime" cc:"ctime"`
BotID sql.NullString `db:"bot_id" cc:"bot_id"`
} }
// CheckGroup - // CheckGroup -
@ -77,18 +75,3 @@ func (p *LineGroup) DeleteGroup() (err error) {
_, err = x.Exec(`delete from "public"."line_group" where "id" = $1`, p.ID) _, err = x.Exec(`delete from "public"."line_group" where "id" = $1`, p.ID)
return return
} }
// GetBot - get group binding bot
func (p *LineGroup) GetBot() (bot *LineBot, err error) {
id, err := p.BotID.Value()
if err != nil {
return nil, err
}
var botid string
var ok bool
if botid, ok = id.(string); !ok {
return nil, errors.New("botid get fail")
}
bot, err = GetBotInfo(botid)
return
}

View File

@ -28,9 +28,3 @@ func (p *LineUser) Add() (err error) {
_, err = x.NamedExec(`insert into "public"."line_user" ("id", "name") values (:id, :name)`, p) _, err = x.NamedExec(`insert into "public"."line_user" ("id", "name") values (:id, :name)`, p)
return return
} }
// UpdateName -
func (p *LineUser) UpdateName() (err error) {
_, err = x.NamedExec(`update "public"."line_user" set "name" = :name, "mtime" = now() where "id" = :id`, p)
return
}

View File

@ -19,12 +19,6 @@ type LineYoutubeRT struct {
Tmpl string `db:"tmpl" cc:"tmpl"` Tmpl string `db:"tmpl" cc:"tmpl"`
} }
type LineIGRT struct {
Line string `db:"line" cc:"line"`
IG string `db:"ig" cc:"ig"`
Tmpl string `db:"tmpl" cc:"tmpl"`
}
// AddRT - add facebook line rt // AddRT - add facebook line rt
func (p *LineFacebookRT) AddRT() (err error) { func (p *LineFacebookRT) AddRT() (err error) {
_, err = x.NamedExec(`insert into "public"."line_fb_rt" ("line", "facebook", "tmpl") values (:line, :facebook, :tmpl)`, p) _, err = x.NamedExec(`insert into "public"."line_fb_rt" ("line", "facebook", "tmpl") values (:line, :facebook, :tmpl)`, p)
@ -70,15 +64,3 @@ func (p *LineYoutubeRT) DelRT() (err error) {
_, err = x.NamedExec(`delete from "public"."line_youtube_rt" where "line" = :line and "youtube" = :youtube`, p) _, err = x.NamedExec(`delete from "public"."line_youtube_rt" where "line" = :line and "youtube" = :youtube`, p)
return return
} }
// AddRT -
func (p *LineIGRT) AddRT() (err error) {
_, err = x.NamedExec(`insert into "public"."line_ig_rt" ("line", "ig", "tmpl") values (:line, :ig, :tmpl)`, p)
return
}
// DelRT -
func (p *LineIGRT) DelRT() (err error) {
_, err = x.NamedExec(`delete from "public"."line_ig_rt" where "line" = :line and "ig" = :ig`, p)
return
}

View File

@ -13,6 +13,7 @@ import (
"strings" "strings"
"git.trj.tw/golang/mtfosbot/module/apis" "git.trj.tw/golang/mtfosbot/module/apis"
"git.trj.tw/golang/mtfosbot/module/config"
) )
// TextMessage - line text message object // TextMessage - line text message object
@ -65,10 +66,11 @@ func getURL(p string) (string, bool) {
return str, true return str, true
} }
func getHeaders(token string) map[string]string { func getHeaders() map[string]string {
m := make(map[string]string) m := make(map[string]string)
conf := config.GetConf()
m["Content-Type"] = "application/json" m["Content-Type"] = "application/json"
m["Authorization"] = fmt.Sprintf("Bearer %s", token) m["Authorization"] = fmt.Sprintf("Bearer %s", conf.Line.Access)
return m return m
} }
@ -102,7 +104,7 @@ func checkMessageObject(m interface{}) interface{} {
} }
// PushMessage - // PushMessage -
func PushMessage(accessToken, target string, message ...interface{}) { func PushMessage(target string, message ...interface{}) {
log.Println("push target :::: ", target) log.Println("push target :::: ", target)
if len(target) == 0 || len(message) == 0 { if len(target) == 0 || len(message) == 0 {
return return
@ -143,7 +145,7 @@ func PushMessage(accessToken, target string, message ...interface{}) {
reqObj := apis.RequestObj{ reqObj := apis.RequestObj{
Method: "POST", Method: "POST",
URL: apiURL, URL: apiURL,
Headers: getHeaders(accessToken), Headers: getHeaders(),
Body: byteReader, Body: byteReader,
} }
@ -161,7 +163,7 @@ func PushMessage(accessToken, target string, message ...interface{}) {
} }
// ReplyMessage - // ReplyMessage -
func ReplyMessage(accessToken, replyToken string, message ...interface{}) { func ReplyMessage(replyToken string, message ...interface{}) {
if len(replyToken) == 0 || len(message) == 0 { if len(replyToken) == 0 || len(message) == 0 {
return return
} }
@ -199,7 +201,7 @@ func ReplyMessage(accessToken, replyToken string, message ...interface{}) {
reqObj := apis.RequestObj{ reqObj := apis.RequestObj{
Method: "POST", Method: "POST",
URL: apiURL, URL: apiURL,
Headers: getHeaders(accessToken), Headers: getHeaders(),
Body: byteReader, Body: byteReader,
} }
@ -215,9 +217,9 @@ func ReplyMessage(accessToken, replyToken string, message ...interface{}) {
} }
// GetUserInfo - // GetUserInfo -
func GetUserInfo(accessToken, u, g string) (user *LineUserInfo, err error) { func GetUserInfo(u, g string) (user *LineUserInfo, err error) {
urlPath := fmt.Sprintf("/v2/bot/group/%s/member/%s", g, u) urlPath := fmt.Sprintf("/v2/bot/group/%s/member/%s", g, u)
header := getHeaders(accessToken) header := getHeaders()
apiURL, ok := getURL(urlPath) apiURL, ok := getURL(urlPath)
if !ok { if !ok {
return nil, errors.New("url parser fail") return nil, errors.New("url parser fail")
@ -261,9 +263,9 @@ func GetUserInfo(accessToken, u, g string) (user *LineUserInfo, err error) {
} }
// GetContentHead - // GetContentHead -
func GetContentHead(accessToken, id string) (mime string, err error) { func GetContentHead(id string) (mime string, err error) {
urlPath := fmt.Sprintf("/v2/bot/message/%s/content", id) urlPath := fmt.Sprintf("/v2/bot/message/%s/content", id)
header := getHeaders(accessToken) header := getHeaders()
u, ok := getURL(urlPath) u, ok := getURL(urlPath)
if !ok { if !ok {
return "", errors.New("get url fail") return "", errors.New("get url fail")
@ -292,9 +294,9 @@ func GetContentHead(accessToken, id string) (mime string, err error) {
} }
// DownloadContent - // DownloadContent -
func DownloadContent(accessToken, id string, w io.Writer) (err error) { func DownloadContent(id string, w io.Writer) (err error) {
urlPath := fmt.Sprintf("/v2/bot/message/%s/content", id) urlPath := fmt.Sprintf("/v2/bot/message/%s/content", id)
header := getHeaders(accessToken) header := getHeaders()
u, ok := getURL(urlPath) u, ok := getURL(urlPath)
if !ok { if !ok {
return errors.New("get url fail") return errors.New("get url fail")

View File

@ -2,7 +2,6 @@ package background
import ( import (
"fmt" "fmt"
"log"
"net/http" "net/http"
"regexp" "regexp"
"sort" "sort"
@ -139,11 +138,6 @@ func getPageHTML(page *model.FacebookPage) {
for _, v := range page.Groups { for _, v := range page.Groups {
if v.Notify { if v.Notify {
bot, err := v.GetBot()
if err != nil || bot == nil {
log.Println("get group binding bot fail :: ", err)
continue
}
tmpl := v.Tmpl tmpl := v.Tmpl
if len(tmpl) > 0 { if len(tmpl) > 0 {
tmpl = strings.Replace(tmpl, "{link}", lastData.Link, -1) tmpl = strings.Replace(tmpl, "{link}", lastData.Link, -1)
@ -154,7 +148,7 @@ func getPageHTML(page *model.FacebookPage) {
msg := line.TextMessage{ msg := line.TextMessage{
Text: tmpl, Text: tmpl,
} }
line.PushMessage(bot.AccessToken, v.ID, msg) line.PushMessage(v.ID, msg)
} }
} }
} }

View File

@ -7,7 +7,7 @@ import (
"net/http" "net/http"
"strings" "strings"
twitchirc "git.trj.tw/golang/mtfosbot/module/twitch-irc" "git.trj.tw/golang/mtfosbot/module/twitch-irc"
"git.trj.tw/golang/mtfosbot/model" "git.trj.tw/golang/mtfosbot/model"
) )
@ -50,7 +50,7 @@ func getOpayData(ch *model.TwitchChannel) {
return return
} }
req.Header.Add("Content-Type", "application/json") req.Header.Add("Content-Type", "application/json")
req.Header.Add("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/80.0") req.Header.Add("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0")
resp, err := http.DefaultClient.Do(req) resp, err := http.DefaultClient.Do(req)
if err != nil { if err != nil {

View File

@ -2,7 +2,6 @@ package background
import ( import (
"fmt" "fmt"
"log"
"strings" "strings"
"time" "time"
@ -62,11 +61,6 @@ func checkStream(ch *model.TwitchChannel, info *twitch.StreamInfo) {
link := fmt.Sprintf("https://twitch.tv/%s", ch.Name) link := fmt.Sprintf("https://twitch.tv/%s", ch.Name)
for _, v := range ch.Groups { for _, v := range ch.Groups {
if v.Notify { if v.Notify {
bot, err := v.GetBot()
if err != nil || bot == nil {
log.Println("get group binding bot fail :: ", err)
continue
}
tmpl := v.Tmpl tmpl := v.Tmpl
if len(tmpl) > 0 { if len(tmpl) > 0 {
tmpl = strings.Replace(tmpl, "{txt}", info.Title, -1) tmpl = strings.Replace(tmpl, "{txt}", info.Title, -1)
@ -77,7 +71,7 @@ func checkStream(ch *model.TwitchChannel, info *twitch.StreamInfo) {
msg := line.TextMessage{ msg := line.TextMessage{
Text: tmpl, Text: tmpl,
} }
line.PushMessage(bot.AccessToken, v.ID, msg) line.PushMessage(v.ID, msg)
} }
} }
} }

View File

@ -43,11 +43,9 @@ type Config struct {
Host string `yaml:"host"` Host string `yaml:"host"`
Port int `yaml:"port"` Port int `yaml:"port"`
} `yaml:"redis"` } `yaml:"redis"`
Elasticsearch struct { Elasticsearch struct{
Username string `yaml:"username"` Host string `yaml:"host"`
Password string `yaml:"password"` Index string `yaml:"index"`
Host string `yaml:"host"`
Index string `yaml:"index"`
} `yaml:"elasticsearch"` } `yaml:"elasticsearch"`
} }

View File

@ -14,11 +14,7 @@ var client *elastic.Client
// NewClient - // NewClient -
func NewClient() (err error) { func NewClient() (err error) {
conf := config.GetConf() conf := config.GetConf()
client, err = elastic.NewClient( client, err = elastic.NewClient(elastic.SetSniff(false), elastic.SetURL(conf.Elasticsearch.Host))
elastic.SetSniff(false),
elastic.SetURL(conf.Elasticsearch.Host),
elastic.SetBasicAuth(conf.Elasticsearch.Username, conf.Elasticsearch.Password),
)
fmt.Println("host ", conf.Elasticsearch.Host) fmt.Println("host ", conf.Elasticsearch.Host)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
@ -28,11 +24,11 @@ func NewClient() (err error) {
} }
// PutLog - // PutLog -
func PutLog(logType string, body map[string]interface{}) (err error) { func PutLog(t string, body map[string]interface{}) (err error) {
if client == nil { if client == nil {
return return
} }
if len(logType) == 0 || body == nil { if len(t) == 0 || body == nil {
return return
} }
conf := config.GetConf() conf := config.GetConf()
@ -41,6 +37,6 @@ func PutLog(logType string, body map[string]interface{}) (err error) {
body["date"] = time.Now().UTC() body["date"] = time.Now().UTC()
nt := time.Now() nt := time.Now()
idx := fmt.Sprintf("%v-%v-%v-%v", conf.Elasticsearch.Index, nt.Year(), int(nt.Month()), nt.Day()) idx := fmt.Sprintf("%v-%v-%v-%v", conf.Elasticsearch.Index, nt.Year(), int(nt.Month()), nt.Day())
_, err = client.Index().Index(idx).Type(logType).BodyJson(body).Do(ctx) _, err = client.Index().Index(idx).Type(t).BodyJson(body).Do(ctx)
return return
} }

View File

@ -2,20 +2,16 @@ package linemsg
import ( import (
"fmt" "fmt"
"log"
lineobj "git.trj.tw/golang/mtfosbot/module/line-message/line-object" lineobj "git.trj.tw/golang/mtfosbot/module/line-message/line-object"
) )
// MessageEvent - // MessageEvent -
func MessageEvent(botid string, e *lineobj.EventObject) { func MessageEvent(e *lineobj.EventObject) {
log.Println("proc message evt :: ", botid, *e)
if len(botid) == 0 {
return
}
switch e.Type { switch e.Type {
case "message": case "message":
messageType(botid, e) messageType(e)
break break
default: default:
fmt.Println("line webhook type not match") fmt.Println("line webhook type not match")

View File

@ -2,22 +2,17 @@ package linemsg
import ( import (
"fmt" "fmt"
"log"
"net/url"
"os" "os"
"path" "path"
"time"
"git.trj.tw/golang/mtfosbot/model" "git.trj.tw/golang/mtfosbot/model"
"git.trj.tw/golang/mtfosbot/module/apis/line" "git.trj.tw/golang/mtfosbot/module/apis/line"
"git.trj.tw/golang/mtfosbot/module/config" "git.trj.tw/golang/mtfosbot/module/config"
"git.trj.tw/golang/mtfosbot/module/es"
lineobj "git.trj.tw/golang/mtfosbot/module/line-message/line-object" lineobj "git.trj.tw/golang/mtfosbot/module/line-message/line-object"
msgcmd "git.trj.tw/golang/mtfosbot/module/message-command" msgcmd "git.trj.tw/golang/mtfosbot/module/message-command"
) )
func messageType(botid string, e *lineobj.EventObject) { func messageType(e *lineobj.EventObject) {
log.Println("proc msg type text :: ", botid)
msg := e.Message msg := e.Message
mtype, ok := msg["type"] mtype, ok := msg["type"]
if !ok { if !ok {
@ -27,17 +22,17 @@ func messageType(botid string, e *lineobj.EventObject) {
if t, ok := mtype.(string); ok { if t, ok := mtype.(string); ok {
switch t { switch t {
case "text": case "text":
textMsg(botid, e) textMsg(e)
break break
case "image": case "image":
imageMsg(botid, e) imageMsg(e)
break break
} }
} }
return return
} }
func textMsg(botid string, e *lineobj.EventObject) { func textMsg(e *lineobj.EventObject) {
msg := e.Message msg := e.Message
mtxt, ok := msg["text"] mtxt, ok := msg["text"]
if !ok { if !ok {
@ -47,14 +42,14 @@ func textMsg(botid string, e *lineobj.EventObject) {
// group action // group action
if e.Source.Type == "group" { if e.Source.Type == "group" {
if txt, ok := mtxt.(string); ok { if txt, ok := mtxt.(string); ok {
msgcmd.ParseLineMsg(botid, txt, e.ReplyToken, e.Source) msgcmd.ParseLineMsg(txt, e.ReplyToken, e.Source)
saveTextMsgToLog(botid, txt, e.Source) saveTextMsgToLog(txt, e.Source)
} }
} }
return return
} }
func imageMsg(botid string, e *lineobj.EventObject) { func imageMsg(e *lineobj.EventObject) {
msg := e.Message msg := e.Message
imgID, ok := msg["id"] imgID, ok := msg["id"]
if !ok { if !ok {
@ -63,19 +58,18 @@ func imageMsg(botid string, e *lineobj.EventObject) {
// group action // group action
if e.Source.Type == "group" { if e.Source.Type == "group" {
if id, ok := imgID.(string); ok { if id, ok := imgID.(string); ok {
saveImageMsgToLog(botid, id, e.Source) saveImageMsgToLog(id, e.Source)
} }
} }
} }
func getSourceUser(accessToken, uid, gid string) (u *model.LineUser, err error) { func getSourceUser(uid, gid string) (u *model.LineUser, err error) {
userData, err := model.GetLineUserByID(uid) userData, err := model.GetLineUserByID(uid)
if err != nil { if err != nil {
return return
} }
if userData == nil { if userData == nil {
tmpu, err := line.GetUserInfo(accessToken, uid, gid) tmpu, err := line.GetUserInfo(uid, gid)
if err != nil || tmpu == nil { if err != nil || tmpu == nil {
return nil, err return nil, err
} }
@ -86,50 +80,27 @@ func getSourceUser(accessToken, uid, gid string) (u *model.LineUser, err error)
if err != nil { if err != nil {
return nil, err return nil, err
} }
} else {
if userData.Mtime.Unix() < (time.Now().Unix() - 86400) {
tmpu, err := line.GetUserInfo(accessToken, uid, gid)
if err != nil || tmpu == nil {
return nil, err
}
userData.Name = tmpu.DisplayName
err = userData.UpdateName()
if err != nil {
return nil, err
}
}
} }
return userData, nil return userData, nil
} }
func saveTextMsgToLog(botid, txt string, s *lineobj.SourceObject) { func saveTextMsgToLog(txt string, s *lineobj.SourceObject) {
bot, err := model.GetBotInfo(botid) u, err := getSourceUser(s.UserID, s.GroupID)
if err != nil || bot == nil {
fmt.Println("get bot info fail :: ", err)
return
}
u, err := getSourceUser(bot.AccessToken, s.UserID, s.GroupID)
if err != nil || u == nil { if err != nil || u == nil {
return return
} }
// go saveLineMessageLogToES(s.GroupID, s.UserID, txt, "text")
model.AddLineMessageLog(s.GroupID, s.UserID, txt, "text") model.AddLineMessageLog(s.GroupID, s.UserID, txt, "text")
} }
func saveImageMsgToLog(botid, id string, s *lineobj.SourceObject) { func saveImageMsgToLog(id string, s *lineobj.SourceObject) {
bot, err := model.GetBotInfo(botid) u, err := getSourceUser(s.UserID, s.GroupID)
if err != nil || bot == nil {
fmt.Println("get bot info fail :: ", err)
return
}
u, err := getSourceUser(bot.AccessToken, s.UserID, s.GroupID)
if err != nil || u == nil { if err != nil || u == nil {
return return
} }
mime, err := line.GetContentHead(bot.AccessToken, id) mime, err := line.GetContentHead(id)
if err != nil || len(mime) == 0 { if err != nil || len(mime) == 0 {
return return
} }
@ -161,46 +132,10 @@ func saveImageMsgToLog(botid, id string, s *lineobj.SourceObject) {
} }
defer w.Close() defer w.Close()
err = line.DownloadContent(bot.AccessToken, id, w) err = line.DownloadContent(id, w)
if err != nil { if err != nil {
return return
} }
furl, err := url.Parse(conf.URL)
if err == nil {
furl, err = furl.Parse(fmt.Sprintf("/image/line_log_image/%s", fname))
if err == nil {
fname = furl.String()
}
}
// go saveLineMessageLogToES(s.GroupID, s.UserID, fname, "image")
model.AddLineMessageLog(s.GroupID, s.UserID, fname, "image") model.AddLineMessageLog(s.GroupID, s.UserID, fname, "image")
} }
func saveLineMessageLogToES(gid, uid, content, msgType string) {
lineGroup, err := model.GetLineGroup(gid)
if err != nil {
log.Println("get line group error :: ", err)
return
}
lineUser, err := model.GetLineUserByID(uid)
if err != nil {
log.Println("get line user error :: ", err)
return
}
logMsg := make(map[string]interface{})
logMsg["message"] = content
logMsg["type"] = msgType
logMsg["group"] = lineGroup.ID
logMsg["group_name"] = lineGroup.Name
logMsg["user"] = lineUser.ID
logMsg["user_name"] = lineUser.Name
err = es.PutLog("log", logMsg)
if err != nil {
log.Println("put log fail :: ", err)
}
}

View File

@ -1,7 +1,6 @@
package msgcmd package msgcmd
import ( import (
"fmt"
"regexp" "regexp"
"strings" "strings"
@ -23,15 +22,10 @@ func parseCMD(in string) (c [][]string) {
} }
// ParseLineMsg - // ParseLineMsg -
func ParseLineMsg(botid, txt, replyToken string, source *lineobj.SourceObject) { func ParseLineMsg(txt, replyToken string, source *lineobj.SourceObject) {
if source.Type != "group" { if source.Type != "group" {
return return
} }
bot, err := model.GetBotInfo(botid)
if err != nil || bot == nil {
fmt.Println("get bot err or no bot :: ", err)
return
}
strs := strings.Split(strings.Trim(txt, " "), " ") strs := strings.Split(strings.Trim(txt, " "), " ")
// skip empty string // skip empty string
@ -63,7 +57,7 @@ func ParseLineMsg(botid, txt, replyToken string, source *lineobj.SourceObject) {
m := parseResult(v) m := parseResult(v)
msgs = append(msgs, m) msgs = append(msgs, m)
} }
line.ReplyMessage(bot.AccessToken, replyToken, msgs...) line.ReplyMessage(replyToken, msgs...)
} else { } else {
// key cmd // key cmd
@ -78,8 +72,7 @@ func ParseLineMsg(botid, txt, replyToken string, source *lineobj.SourceObject) {
m := parseResult(v) m := parseResult(v)
msgs = append(msgs, m) msgs = append(msgs, m)
} }
line.ReplyMessage(replyToken, msgs...)
line.ReplyMessage(bot.AccessToken, replyToken, msgs...)
} }
} }

View File

@ -27,20 +27,7 @@ func PushLineMessage(c *context.Context) {
textObj := line.TextMessage{} textObj := line.TextMessage{}
textObj.Text = bodyData.Message textObj.Text = bodyData.Message
group, err := model.GetLineGroup(bodyData.Group) line.PushMessage(bodyData.Group, textObj)
if err != nil {
c.ServerError(nil)
log.Println("get group :: ", err)
return
}
bot, err := group.GetBot()
if err != nil || bot == nil {
log.Println("get group binding bot fail :: ", err)
c.ServerError(nil)
return
}
line.PushMessage(bot.AccessToken, bodyData.Group, textObj)
c.Success(nil) c.Success(nil)
} }

View File

@ -1,13 +1,12 @@
package api package api
import ( import (
"fmt"
"time" "time"
"git.trj.tw/golang/mtfosbot/model" "git.trj.tw/golang/mtfosbot/model"
"git.trj.tw/golang/mtfosbot/module/apis/twitch" "git.trj.tw/golang/mtfosbot/module/apis/twitch"
"git.trj.tw/golang/mtfosbot/module/context" "git.trj.tw/golang/mtfosbot/module/context"
twitchirc "git.trj.tw/golang/mtfosbot/module/twitch-irc" "git.trj.tw/golang/mtfosbot/module/twitch-irc"
"git.trj.tw/golang/mtfosbot/module/utils" "git.trj.tw/golang/mtfosbot/module/utils"
"github.com/gin-gonic/contrib/sessions" "github.com/gin-gonic/contrib/sessions"
) )
@ -100,12 +99,7 @@ func hasChannel(id string, c *context.Context) *model.TwitchChannel {
return nil return nil
} }
fmt.Println("channels :: ", chs)
for _, v := range chs { for _, v := range chs {
if v == nil {
continue
}
if v.ID == id { if v.ID == id {
return v return v
} }

View File

@ -79,7 +79,6 @@ func GetNotifyWebhook(c *context.Context) {
c.DataFormat(nil) c.DataFormat(nil)
return return
} }
fmt.Println("Hook string ::: ", string(byteBody))
id, ok := c.GetQuery("id") id, ok := c.GetQuery("id")
if !ok { if !ok {
@ -129,11 +128,6 @@ func GetNotifyWebhook(c *context.Context) {
for _, v := range yt.Groups { for _, v := range yt.Groups {
log.Println("group data :::: ", v, v.Notify, v.Name, v.ID) log.Println("group data :::: ", v, v.Notify, v.Name, v.ID)
bot, err := v.GetBot()
if err != nil || bot == nil {
log.Println("get group binding bot fail :: ", err)
continue
}
if v.Notify == true { if v.Notify == true {
str := v.Tmpl str := v.Tmpl
log.Println("template :::: ", str) log.Println("template :::: ", str)
@ -149,7 +143,7 @@ func GetNotifyWebhook(c *context.Context) {
} }
log.Println("msg ::::: ", msg) log.Println("msg ::::: ", msg)
lineapi.PushMessage(bot.AccessToken, v.ID, msg) lineapi.PushMessage(v.ID, msg)
} }
} }

View File

@ -6,11 +6,10 @@ import (
"encoding/base64" "encoding/base64"
"encoding/json" "encoding/json"
"io/ioutil" "io/ioutil"
"log"
"git.trj.tw/golang/mtfosbot/model" "git.trj.tw/golang/mtfosbot/module/config"
"git.trj.tw/golang/mtfosbot/module/context" "git.trj.tw/golang/mtfosbot/module/context"
linemsg "git.trj.tw/golang/mtfosbot/module/line-message" "git.trj.tw/golang/mtfosbot/module/line-message"
lineobj "git.trj.tw/golang/mtfosbot/module/line-message/line-object" lineobj "git.trj.tw/golang/mtfosbot/module/line-message/line-object"
) )
@ -43,21 +42,10 @@ func VerifyLine(c *context.Context) {
return return
} }
botid, ok := c.GetQuery("id") conf := config.GetConf()
if !ok || len(botid) == 0 {
c.CustomRes(403, map[string]string{
"message": "no bot data",
})
}
bot, err := model.GetBotInfo(botid) hash := hmac.New(sha256.New, []byte(conf.Line.Secret))
if err != nil { _, err := hash.Write(raw)
c.ServerError(nil)
return
}
hash := hmac.New(sha256.New, []byte(bot.Secret))
_, err = hash.Write(raw)
if err != nil { if err != nil {
c.ServerError(nil) c.ServerError(nil)
return return
@ -82,12 +70,6 @@ func GetLineMessage(c *context.Context) {
if raw, ok = rawbody.([]byte); !ok { if raw, ok = rawbody.([]byte); !ok {
c.DataFormat("body type error") c.DataFormat("body type error")
} }
botid, ok := c.GetQuery("id")
if !ok || len(botid) == 0 {
c.CustomRes(403, map[string]string{
"message": "no bot data",
})
}
events := struct { events := struct {
Events []*lineobj.EventObject `json:"events"` Events []*lineobj.EventObject `json:"events"`
@ -101,8 +83,7 @@ func GetLineMessage(c *context.Context) {
if len(events.Events) > 0 { if len(events.Events) > 0 {
for _, v := range events.Events { for _, v := range events.Events {
log.Println("get line message :: ", v) go linemsg.MessageEvent(v)
go linemsg.MessageEvent(botid, v)
} }
} }

View File

@ -2,7 +2,6 @@ package private
import ( import (
"fmt" "fmt"
"log"
"strings" "strings"
"git.trj.tw/golang/mtfosbot/model" "git.trj.tw/golang/mtfosbot/model"
@ -47,24 +46,6 @@ func GetFacebookPageIDs(c *context.Context) {
}) })
} }
//GetInstagramIDs -
func GetInstagramIDs(c *context.Context) {
igs, err := model.GetAllInstagram()
if err != nil {
c.ServerError(nil)
return
}
ids := make([]string, 0, len(igs))
for _, v := range igs {
ids = append(ids, v.ID)
}
c.Success(map[string]interface{}{
"list": ids,
})
}
// UpdateFacebookPagePost - // UpdateFacebookPagePost -
func UpdateFacebookPagePost(c *context.Context) { func UpdateFacebookPagePost(c *context.Context) {
var err error var err error
@ -108,11 +89,6 @@ func UpdateFacebookPagePost(c *context.Context) {
for _, g := range page.Groups { for _, g := range page.Groups {
if g.Notify { if g.Notify {
bot, err := g.GetBot()
if err != nil || bot == nil {
log.Println("get group binding bot fail ::: ", err)
continue
}
tmpl := g.Tmpl tmpl := g.Tmpl
if len(tmpl) > 0 { if len(tmpl) > 0 {
tmpl = strings.Replace(tmpl, "{link}", v.Link, -1) tmpl = strings.Replace(tmpl, "{link}", v.Link, -1)
@ -123,73 +99,7 @@ func UpdateFacebookPagePost(c *context.Context) {
msg := line.TextMessage{ msg := line.TextMessage{
Text: tmpl, Text: tmpl,
} }
line.PushMessage(bot.AccessToken, g.ID, msg) line.PushMessage(g.ID, msg)
}
}
}
c.Success(nil)
}
// UpdateInstagramPost -
func UpdateInstagramPost(c *context.Context) {
var err error
type pageStruct struct {
ID string `json:"id"`
PostID string `json:"post_id"`
Link string `json:"link"`
Text string `json:"text"`
}
bodyArg := struct {
IGs []pageStruct `json:"igs"`
}{}
err = c.BindData(&bodyArg)
if err != nil {
c.DataFormat(nil)
return
}
for _, v := range bodyArg.IGs {
if len(v.ID) == 0 || len(v.PostID) == 0 || len(v.Link) == 0 {
continue
}
ig, err := model.GetInstagram(v.ID)
if err != nil {
continue
}
if ig.LastPost == v.PostID {
continue
}
err = ig.UpdatePost(v.PostID)
if err != nil {
continue
}
err = ig.GetGroups()
if err != nil {
fmt.Println("get group err :: ", err)
continue
}
for _, g := range ig.Groups {
if g.Notify {
bot, err := g.GetBot()
if err != nil || bot == nil {
log.Println("get group binding bot fail :: ", err)
continue
}
tmpl := g.Tmpl
if len(tmpl) > 0 {
tmpl = strings.Replace(tmpl, "{link}", v.Link, -1)
tmpl = strings.Replace(tmpl, "{txt}", v.Text, -1)
} else {
tmpl = fmt.Sprintf("%s\n%s", v.Text, v.Link)
}
msg := line.TextMessage{Text: tmpl}
line.PushMessage(bot.AccessToken, g.ID, msg)
} }
} }
} }

View File

@ -91,8 +91,6 @@ func SetRoutes(r *gin.Engine) {
{ {
privateAPIGroup.GET("/pages", context.PatchCtx(private.GetFacebookPageIDs)) privateAPIGroup.GET("/pages", context.PatchCtx(private.GetFacebookPageIDs))
privateAPIGroup.POST("/pageposts", context.PatchCtx(private.UpdateFacebookPagePost)) privateAPIGroup.POST("/pageposts", context.PatchCtx(private.UpdateFacebookPagePost))
privateAPIGroup.GET("/ig", context.PatchCtx(private.GetInstagramIDs))
privateAPIGroup.POST("/igposts", context.PatchCtx(private.UpdateInstagramPost))
} }
apiTwitchGroup := apiGroup.Group("/twitch", context.PatchCtx(api.CheckSession)) apiTwitchGroup := apiGroup.Group("/twitch", context.PatchCtx(api.CheckSession))
@ -124,7 +122,6 @@ func SetRoutes(r *gin.Engine) {
{ {
twitchApis.GET("/login", context.PatchCtx(twitch.OAuthLogin)) twitchApis.GET("/login", context.PatchCtx(twitch.OAuthLogin))
twitchApis.GET("/oauth", context.PatchCtx(twitch.OAuthProc)) twitchApis.GET("/oauth", context.PatchCtx(twitch.OAuthProc))
twitchApis.POST("/send", context.PatchCtx(twitch.SendToChannel))
} }
// set pprof router // set pprof router

View File

@ -8,7 +8,6 @@ import (
twitchapi "git.trj.tw/golang/mtfosbot/module/apis/twitch" twitchapi "git.trj.tw/golang/mtfosbot/module/apis/twitch"
"git.trj.tw/golang/mtfosbot/module/config" "git.trj.tw/golang/mtfosbot/module/config"
"git.trj.tw/golang/mtfosbot/module/context" "git.trj.tw/golang/mtfosbot/module/context"
twitchirc "git.trj.tw/golang/mtfosbot/module/twitch-irc"
"github.com/gin-gonic/contrib/sessions" "github.com/gin-gonic/contrib/sessions"
) )
@ -93,26 +92,3 @@ func OAuthProc(c *context.Context) {
session.Save() session.Save()
c.Redirect(301, goURL) c.Redirect(301, goURL)
} }
func SendToChannel(c *context.Context) {
key := c.GetHeader("x-private-key")
if key == "" || key != "mtfos" {
c.Forbidden(nil)
return
}
ch, ok := c.GetQuery("channel")
if !ok || ch == "" {
c.DataFormat(nil)
return
}
msg, ok := c.GetQuery("message")
if !ok || msg == "" {
c.DataFormat(nil)
return
}
twitchirc.SendMessage(ch, msg)
c.Success(nil)
}

2
schema

@ -1 +1 @@
Subproject commit 7928d0598bd06bf11305b543d3f1b4c20e3975dc Subproject commit bda09929578505cd4712856bee125b9838643d78