aboutsummaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2023-08-19 09:43:13 -0400
committerXe Iaso <me@xeiaso.net>2023-08-19 09:43:13 -0400
commit6812fc366ed53ed256daea93c48e095587e6c290 (patch)
tree44a0c7f105d95557bf0c122d5e676359fe5af1bc /cmd
parent3a99ad5429b92a10394a29789bea2890611fdbdd (diff)
downloadx-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.ts19
-rw-r--r--cmd/sanguisuga/config.go6
-rw-r--r--cmd/sanguisuga/config_test.go14
-rw-r--r--cmd/sanguisuga/dcc.go2
-rw-r--r--cmd/sanguisuga/main.go17
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)