add tgbot

This commit is contained in:
YouROK
2025-02-28 22:54:55 +03:00
parent f2ffd092ff
commit 102cfbbff4
3 changed files with 164 additions and 1 deletions

View File

@@ -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
View 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
View 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
}