mirror of
https://github.com/Ernous/TorrServerJellyfin.git
synced 2025-12-20 22:16:09 +05:00
add tgbot
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"server/tgbot"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"server/log"
|
"server/log"
|
||||||
@@ -11,7 +12,7 @@ import (
|
|||||||
"server/web"
|
"server/web"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Start(port, ip, sslport, sslCert, sslKey string, sslEnabled, roSets, searchWA bool) {
|
func Start(port, ip, sslport, sslCert, sslKey string, sslEnabled, roSets, searchWA bool, tgtoken string) {
|
||||||
settings.InitSets(roSets, searchWA)
|
settings.InitSets(roSets, searchWA)
|
||||||
// https checks
|
// https checks
|
||||||
if sslEnabled {
|
if sslEnabled {
|
||||||
@@ -66,6 +67,8 @@ func Start(port, ip, sslport, sslCert, sslKey string, sslEnabled, roSets, search
|
|||||||
settings.Port = port
|
settings.Port = port
|
||||||
settings.SslPort = sslport
|
settings.SslPort = sslport
|
||||||
settings.IP = ip
|
settings.IP = ip
|
||||||
|
|
||||||
|
tgbot.Start(tgtoken)
|
||||||
web.Start()
|
web.Start()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
102
server/tgbot/bot.go
Normal file
102
server/tgbot/bot.go
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
package tgbot
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
tele "gopkg.in/telebot.v4"
|
||||||
|
"net/http"
|
||||||
|
"server/log"
|
||||||
|
"server/torr"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Start(token string) {
|
||||||
|
pref := tele.Settings{
|
||||||
|
Token: token,
|
||||||
|
Poller: &tele.LongPoller{Timeout: 5 * time.Minute},
|
||||||
|
ParseMode: tele.ModeHTML,
|
||||||
|
Client: &http.Client{Timeout: 5 * time.Minute},
|
||||||
|
}
|
||||||
|
|
||||||
|
log.TLogln("Starting Telegram Bot")
|
||||||
|
|
||||||
|
b, err := tele.NewBot(pref)
|
||||||
|
if err != nil {
|
||||||
|
log.TLogln("Error start tg bot:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//Commands
|
||||||
|
|
||||||
|
b.Handle("help", help)
|
||||||
|
b.Handle("Help", help)
|
||||||
|
b.Handle("/help", help)
|
||||||
|
b.Handle("/Help", help)
|
||||||
|
b.Handle("/start", help)
|
||||||
|
|
||||||
|
b.Handle("/list", list)
|
||||||
|
|
||||||
|
//Text
|
||||||
|
b.Handle(tele.OnText, func(c tele.Context) error {
|
||||||
|
txt := c.Text()
|
||||||
|
if strings.HasPrefix(strings.ToLower(txt), "magnet:") || isHash(txt) {
|
||||||
|
return addTorrent(c, txt)
|
||||||
|
} else {
|
||||||
|
return c.Send("Вставьте магнет/хэш торрента чтоб добавить его на сервер")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
b.Handle(tele.OnCallback, func(c tele.Context) error {
|
||||||
|
args := c.Args()
|
||||||
|
if len(args) > 0 {
|
||||||
|
if args[0] == "\ffiles" {
|
||||||
|
t := torr.GetTorrent(args[1])
|
||||||
|
if t == nil {
|
||||||
|
c.Send("Torrent not connected:", args[1])
|
||||||
|
} else {
|
||||||
|
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if args[0] == "\fdelete" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return errors.New("Ошибка кнопка не распознана")
|
||||||
|
})
|
||||||
|
|
||||||
|
go b.Start()
|
||||||
|
}
|
||||||
|
|
||||||
|
func help(c tele.Context) error {
|
||||||
|
return c.Send("Бот для управления TorrServer\n\n" +
|
||||||
|
"Список комманд:\n" +
|
||||||
|
" /help - эта справка\n" +
|
||||||
|
" /list - показать список торрентов на сервере")
|
||||||
|
}
|
||||||
|
|
||||||
|
func list(c tele.Context) error {
|
||||||
|
list := torr.ListTorrent()
|
||||||
|
|
||||||
|
for _, t := range list {
|
||||||
|
btnFiles := tele.InlineButton{Text: "Файлы", Unique: "files", Data: t.Hash().String()}
|
||||||
|
btnDelete := tele.InlineButton{Text: "Удалить", Unique: "delete", Data: t.Hash().String()}
|
||||||
|
torrKbd := &tele.ReplyMarkup{InlineKeyboard: [][]tele.InlineButton{{btnFiles, btnDelete}}}
|
||||||
|
c.Send(t.Title, torrKbd)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func isHash(txt string) bool {
|
||||||
|
if len(txt) == 40 {
|
||||||
|
for _, c := range strings.ToLower(txt) {
|
||||||
|
switch c {
|
||||||
|
case 'a', 'b', 'c', 'd', 'e', 'f', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
58
server/tgbot/tshelper.go
Normal file
58
server/tgbot/tshelper.go
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
package tgbot
|
||||||
|
|
||||||
|
import (
|
||||||
|
tele "gopkg.in/telebot.v4"
|
||||||
|
"server/log"
|
||||||
|
set "server/settings"
|
||||||
|
"server/torr"
|
||||||
|
"server/web/api/utils"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func addTorrent(c tele.Context, link string) error {
|
||||||
|
log.TLogln("tg add torrent", link)
|
||||||
|
link = strings.ReplaceAll(link, "&", "&")
|
||||||
|
torrSpec, err := utils.ParseLink(link)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.TLogln("tg error parse link:", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
tor, err := torr.AddTorrent(torrSpec, "", "", "", "")
|
||||||
|
|
||||||
|
if tor.Data != "" && set.BTsets.EnableDebug {
|
||||||
|
log.TLogln("torrent data:", tor.Data)
|
||||||
|
}
|
||||||
|
if tor.Category != "" && set.BTsets.EnableDebug {
|
||||||
|
log.TLogln("torrent category:", tor.Category)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.TLogln("tg error add torrent:", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
if !tor.GotInfo() {
|
||||||
|
log.TLogln("tg error add torrent: timeout connection get torrent info")
|
||||||
|
c.Send("Ошибка при добаваления торрента: timeout connection get torrent info")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if tor.Title == "" {
|
||||||
|
tor.Title = torrSpec.DisplayName // prefer dn over name
|
||||||
|
tor.Title = strings.ReplaceAll(tor.Title, "rutor.info", "")
|
||||||
|
tor.Title = strings.ReplaceAll(tor.Title, "_", " ")
|
||||||
|
tor.Title = strings.Trim(tor.Title, " ")
|
||||||
|
if tor.Title == "" {
|
||||||
|
tor.Title = tor.Name()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
torr.SaveTorrentToDB(tor)
|
||||||
|
c.Send("Торрент добавлен: <code>" + link + "</code>")
|
||||||
|
}()
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user