diff options
| author | Xe Iaso <me@xeiaso.net> | 2023-08-19 09:43:13 -0400 |
|---|---|---|
| committer | Xe Iaso <me@xeiaso.net> | 2023-08-19 09:43:13 -0400 |
| commit | 6812fc366ed53ed256daea93c48e095587e6c290 (patch) | |
| tree | 44a0c7f105d95557bf0c122d5e676359fe5af1bc /cmd | |
| parent | 3a99ad5429b92a10394a29789bea2890611fdbdd (diff) | |
| download | x-6812fc366ed53ed256daea93c48e095587e6c290.tar.xz x-6812fc366ed53ed256daea93c48e095587e6c290.zip | |
cmd/sanguisuga: telegram announcements
Signed-off-by: Xe Iaso <me@xeiaso.net>
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/sanguisuga/config.default.ts | 19 | ||||
| -rw-r--r-- | cmd/sanguisuga/config.go | 6 | ||||
| -rw-r--r-- | cmd/sanguisuga/config_test.go | 14 | ||||
| -rw-r--r-- | cmd/sanguisuga/dcc.go | 2 | ||||
| -rw-r--r-- | cmd/sanguisuga/main.go | 17 |
5 files changed, 58 insertions, 0 deletions
diff --git a/cmd/sanguisuga/config.default.ts b/cmd/sanguisuga/config.default.ts index 107f6b7..cd42ff4 100644 --- a/cmd/sanguisuga/config.default.ts +++ b/cmd/sanguisuga/config.default.ts @@ -27,6 +27,11 @@ export type Tailscale = { dataDir?: string; }; +export type Telegram = { + token: string; + mentionUser: number; +}; + export type Config = { irc: IRC; xdcc: IRC; @@ -35,6 +40,7 @@ export type Config = { rssKey: string; tailscale: Tailscale; baseDiskPath: string; + telegram: Telegram; }; export default { @@ -46,6 +52,14 @@ export default { user: "", real: "" }, + xdcc: { + server: "", + password: "", + channel: "", + nick: "", + user: "", + real: "" + }, transmission: { host: "", user: "", @@ -66,4 +80,9 @@ export default { authkey: "", dataDir: undefined, }, + baseDiskPath: "/data/TV/", + telegram: { + token: "", + mentionUser: 0, + }, } satisfies Config; diff --git a/cmd/sanguisuga/config.go b/cmd/sanguisuga/config.go index 8d91f6d..478dfad 100644 --- a/cmd/sanguisuga/config.go +++ b/cmd/sanguisuga/config.go @@ -28,6 +28,11 @@ type Tailscale struct { DataDir *string `json:"dataDir,omitempty"` } +type Telegram struct { + Token string `json:"token"` + MentionUser int64 `json:"mentionUser"` +} + type Config struct { IRC IRC `json:"irc"` XDCC IRC `json:"xdcc"` @@ -36,4 +41,5 @@ type Config struct { RSSKey string `json:"rssKey"` Tailscale Tailscale `json:"tailscale"` BaseDiskPath string `json:"baseDiskPath"` + Telegram Telegram `json:"telegram"` } diff --git a/cmd/sanguisuga/config_test.go b/cmd/sanguisuga/config_test.go new file mode 100644 index 0000000..f7d0f8c --- /dev/null +++ b/cmd/sanguisuga/config_test.go @@ -0,0 +1,14 @@ +package main + +import ( + "testing" + + "go.jetpack.io/tyson" +) + +func TestDefaultConfig(t *testing.T) { + var c Config + if err := tyson.Unmarshal("./config.default.ts", &c); err != nil { + t.Fatal(err) + } +} diff --git a/cmd/sanguisuga/dcc.go b/cmd/sanguisuga/dcc.go index fc44798..ca729de 100644 --- a/cmd/sanguisuga/dcc.go +++ b/cmd/sanguisuga/dcc.go @@ -331,6 +331,8 @@ outer: lg.Info("finished downloading", "dur", dur.String()) + s.Notify(fmt.Sprintf("Fetched %s episode %s", ann.ShowName, ann.Episode)) + _, err = crcCheck(fname, ann.CRC32) if err != nil { slog.Error("got wrong hash", "err", err) diff --git a/cmd/sanguisuga/main.go b/cmd/sanguisuga/main.go index 8029e56..9ff90a0 100644 --- a/cmd/sanguisuga/main.go +++ b/cmd/sanguisuga/main.go @@ -17,6 +17,8 @@ import ( "sync" "time" + "github.com/mymmrac/telego" + tu "github.com/mymmrac/telego/telegoutil" irc "github.com/thoj/go-ircevent" "go.jetpack.io/tyson" "golang.org/x/exp/slog" @@ -150,10 +152,18 @@ func main() { log.Fatalf("can't connect to transmission: %v", err) } + bot, err := telego.NewBot(c.Telegram.Token) + if err != nil { + log.Fatalf("can't connect to telegram: %v", err) + } + + defer bot.StopLongPolling() + s := &Sanguisuga{ Config: c, cl: cl, db: db, + bot: bot, animeInFlight: map[string]*SubspleaseAnnouncement{}, } @@ -186,11 +196,16 @@ type Sanguisuga struct { cl *transmission.Client db *jsondb.DB[State] dbLock sync.Mutex + bot *telego.Bot animeInFlight map[string]*SubspleaseAnnouncement aifLock sync.Mutex } +func (s *Sanguisuga) Notify(msg string) { + s.bot.SendMessage(tu.Message(tu.ID(s.Config.Telegram.MentionUser), msg)) +} + type State struct { // Name + " " + SeasonEpisode -> TorrentAnnouncement Seen map[string]TorrentAnnouncement @@ -387,6 +402,8 @@ func (s *Sanguisuga) HandleIRCMessage(ev *irc.Event) { lg.Info("added torrent", "title", ti.Title, "id", id, "path", downloadDir, "infohash", t.Hash, "tid", t.ID, "dupe", dupe) snatches.Add(1) + s.Notify(fmt.Sprintf("added torrent for %s %s", ti.Title, id)) + s.db.Data.Seen[stateKey] = *ta if err := s.db.Save(); err != nil { lg.Error("error saving state", "err", err) |
