From f9050e1089378372303edf5cc10838c98bf91003 Mon Sep 17 00:00:00 2001 From: milarin Date: Sun, 15 Jan 2023 21:09:26 +0100 Subject: [PATCH] telegram bot added --- envvars.go | 14 ++++++++++---- go.mod | 16 +++++++++------- go.sum | 27 +++++++++++++++++---------- handle_file.go | 1 + main.go | 4 ++++ telegram.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 84 insertions(+), 21 deletions(-) create mode 100644 telegram.go diff --git a/envvars.go b/envvars.go index b44eb81..2469a2e 100644 --- a/envvars.go +++ b/envvars.go @@ -4,17 +4,23 @@ import ( "os/user" "runtime" "strconv" + "text/template" + + "git.milar.in/nyaanime/logic" "git.milar.in/milarin/envvars/v2" ) var ( - DownloadPath = envvars.String("DOWNLOAD_PATH", "") - - ThreadCount = envvars.Int("THREADS", runtime.NumCPU()) - + DownloadPath = envvars.String("DOWNLOAD_PATH", "") + ThreadCount = envvars.Int("THREADS", runtime.NumCPU()) DeleteLowPriorityFiles = envvars.Bool("DELETE_LOW_PRIORITY_FILES", false) + TelegramBotToken = envvars.String("TELEGRAM_API_TOKEN", "") + TelegramChatID = envvars.Int64("TELEGRAM_CHAT_ID", 0) + TelegramOrganizeMessagePatternStr = logic.EscSeqReplacer.Replace(envvars.String("TELEGRAM_ORGANIZE_MESSAGE_PATTERN", `Download finished\n\n{{.Title.UserPreferred}} episode {{.Episode}}`)) + TelegramOrganizeMessagePattern = template.Must(template.New("telegram-organize-message-pattern").Parse(TelegramOrganizeMessagePatternStr)) + Uid = envvars.Object("UID", 1000, func(s string) (int, error) { if uid, err := strconv.Atoi(s); err == nil { return uid, nil diff --git a/go.mod b/go.mod index 4f54a5c..db99771 100644 --- a/go.mod +++ b/go.mod @@ -3,25 +3,27 @@ module git.milar.in/nyaanime/organizer go 1.19 require ( + git.milar.in/milarin/adverr v1.1.0 git.milar.in/milarin/channel v0.0.14 git.milar.in/milarin/envvars/v2 v2.0.0 - git.milar.in/nyaanime/logic v0.0.0-20230114105336-6bfb7dce349f + git.milar.in/milarin/gmath v0.0.3 + git.milar.in/nyaanime/logic v0.0.0-20230115195351-8ed3e407ee72 git.milar.in/nyaanime/model v0.0.0-20230113095840-5eb2822653c3 git.milar.in/nyaanime/parsers v0.0.0-20230115135225-d80026a240a2 github.com/fatih/color v1.13.0 - github.com/fsnotify/fsnotify v1.5.4 + github.com/fsnotify/fsnotify v1.6.0 + github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible ) require ( - git.milar.in/milarin/adverr v1.1.0 // indirect git.milar.in/milarin/anilist v1.5.1 // indirect - git.milar.in/milarin/gmath v0.0.3 // indirect git.milar.in/milarin/slices v0.0.6 // indirect git.milar.in/milarin/tprint v0.0.7 // indirect - github.com/mattn/go-colorable v0.1.9 // indirect - github.com/mattn/go-isatty v0.0.14 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.17 // indirect github.com/mattn/go-runewidth v0.0.14 // indirect github.com/rivo/uniseg v0.4.3 // indirect - golang.org/x/sys v0.0.0-20220412211240-33da011f77ad // indirect + github.com/technoweenie/multipartstreamer v1.0.1 // indirect + golang.org/x/sys v0.4.0 // indirect gopkg.in/vansante/go-ffprobe.v2 v2.1.1 // indirect ) diff --git a/go.sum b/go.sum index 5c73570..372c596 100644 --- a/go.sum +++ b/go.sum @@ -12,32 +12,39 @@ git.milar.in/milarin/slices v0.0.6 h1:AQoSarZ58WHYol9c6woWJSe8wFpPC2RC4cvIlZpfg9 git.milar.in/milarin/slices v0.0.6/go.mod h1:NOr53AOeur/qscu/FBj3lsFR262PNYBccLYSTCAXRk4= git.milar.in/milarin/tprint v0.0.7 h1:dvm4l4BhXOie4vtnRMZii0WTLTz2wju8wyUPB/lNeVo= git.milar.in/milarin/tprint v0.0.7/go.mod h1:UwW/B+0cTCbN5hi0bQBE9rIRgLkq+x4V751rrS2KVoI= -git.milar.in/nyaanime/logic v0.0.0-20230114105336-6bfb7dce349f h1:tc8hQpZprt8/yedVSPmkftKOI2+P7twFc7BEov5RTBc= -git.milar.in/nyaanime/logic v0.0.0-20230114105336-6bfb7dce349f/go.mod h1:cLuIBDTtpXdzprOIsz73r6ZCE5s0k+o6HA7fH9OuW/M= +git.milar.in/nyaanime/logic v0.0.0-20230115195351-8ed3e407ee72 h1:/kSY7P/NNaUmkxCJMKmB5YbhIA9owX9pErPxREuBAog= +git.milar.in/nyaanime/logic v0.0.0-20230115195351-8ed3e407ee72/go.mod h1:cLuIBDTtpXdzprOIsz73r6ZCE5s0k+o6HA7fH9OuW/M= git.milar.in/nyaanime/model v0.0.0-20230113095840-5eb2822653c3 h1:mXcEA47FQQzeSDXE3UvhNfIt4fBfpDSq1/f0r+jbHpY= git.milar.in/nyaanime/model v0.0.0-20230113095840-5eb2822653c3/go.mod h1:kPWLDvFrhc1Uf77gxsBOxNeJ5JTVF2HhVs1IdVcw0tg= -git.milar.in/nyaanime/parsers v0.0.0-20230113101942-2c9bc6925201 h1:glTG4IeuIvD4mVwJyCF5SYMawCRcZZ01pz4AUyWTEP8= -git.milar.in/nyaanime/parsers v0.0.0-20230113101942-2c9bc6925201/go.mod h1:GG4vtUIfxopZc/+Y8OAa//vWJw/m6aeoGN7fw6SLiEM= git.milar.in/nyaanime/parsers v0.0.0-20230115135225-d80026a240a2 h1:Q95JBR9mXENAjRhvzPAsFjPfxY0ljUiLVlhfAO4q6UY= git.milar.in/nyaanime/parsers v0.0.0-20230115135225-d80026a240a2/go.mod h1:GG4vtUIfxopZc/+Y8OAa//vWJw/m6aeoGN7fw6SLiEM= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/mattn/go-colorable v0.1.9 h1:sqDoxXbdeALODt0DAeJCVp38ps9ZogZEAXjus69YV3U= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +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/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/technoweenie/multipartstreamer v1.0.1 h1:XRztA5MXiR1TIRHxH2uNxXxaIkKQDeX7m2XsSOlQEnM= +github.com/technoweenie/multipartstreamer v1.0.1/go.mod h1:jNVxdtShOxzAsukZwTSw6MDx5eUJoiEBsSvzDU9uzog= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= gopkg.in/vansante/go-ffprobe.v2 v2.1.1 h1:DIh5fMn+tlBvG7pXyUZdemVmLdERnf2xX6XOFF+0BBU= gopkg.in/vansante/go-ffprobe.v2 v2.1.1/go.mod h1:qF0AlAjk7Nqzqf3y333Ly+KxN3cKF2JqA3JT5ZheUGE= diff --git a/handle_file.go b/handle_file.go index 22c49ff..6de5578 100644 --- a/handle_file.go +++ b/handle_file.go @@ -44,6 +44,7 @@ func HandleFile(fh *FileHandle) { parsedFile.Anime = anime HandleParsedFile(w, parsedFile) + SendTelegramAnimeEpMessage(TelegramOrganizeMessagePattern, parsedFile.AnimeEpisode()) break } } diff --git a/main.go b/main.go index d4cecae..f6bf768 100644 --- a/main.go +++ b/main.go @@ -21,6 +21,10 @@ func main() { panic(err) // TODO error handling } + if err := InitTelegramBot(); err != nil { + panic(err) // TODO error handling + } + logic.PrintPriorityTables() fileChan, err := WatchDirectory(fsnotify.Create, DownloadPath) diff --git a/telegram.go b/telegram.go new file mode 100644 index 0000000..23a9f79 --- /dev/null +++ b/telegram.go @@ -0,0 +1,43 @@ +package main + +import ( + "strings" + "text/template" + + "git.milar.in/milarin/adverr" + "git.milar.in/nyaanime/model" + tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api" +) + +var TelegramBot *tgbotapi.BotAPI + +func InitTelegramBot() error { + if TelegramBotToken != "" && TelegramChatID != 0 { + bot, err := tgbotapi.NewBotAPI(TelegramBotToken) + if err != nil { + return err + } + TelegramBot = bot + } + return nil +} + +func SendTelegramMessage(text string) { + if TelegramBot == nil { + return + } + + msg := tgbotapi.NewMessage(TelegramChatID, text) + _, err := TelegramBot.Send(msg) + if err != nil { + adverr.Println(adverr.Wrap("could not send telegram message", err)) + } +} + +func SendTelegramAnimeEpMessage(messagePattern *template.Template, animeEp model.AnimeEpisode) { + b := new(strings.Builder) + if err := messagePattern.Execute(b, animeEp); err != nil { + adverr.Println(adverr.Wrap("could not send telegram message", err)) + } + SendTelegramMessage(b.String()) +}