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

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
}