impl: list command, send

This commit is contained in:
pyed 2016-06-20 05:09:41 +03:00
parent 7ab33cbf78
commit 7e026573b6

View File

@ -1,10 +1,12 @@
package main package main
import ( import (
"bytes"
"flag" "flag"
"fmt" "fmt"
"os" "os"
"strings" "strings"
"unicode/utf8"
"gopkg.in/telegram-bot-api.v4" "gopkg.in/telegram-bot-api.v4"
@ -53,6 +55,11 @@ func init() {
flag.Usage() flag.Usage()
os.Exit(1) os.Exit(1)
} }
// make sure that the handler doesn't contain @
if strings.Contains(Master, "@") {
Master = strings.Replace(Master, "@", "", -1)
}
} }
// init transmission // init transmission
@ -91,6 +98,7 @@ func init() {
fmt.Fprintf(os.Stderr, "Telegram Error: %s\n", err) fmt.Fprintf(os.Stderr, "Telegram Error: %s\n", err)
os.Exit(1) os.Exit(1)
} }
fmt.Fprintf(os.Stdout, "Authorized on %s", Bot.Self.UserName)
// get a channel and sign it to 'Updates' // get a channel and sign it to 'Updates'
u := tgbotapi.NewUpdate(0) u := tgbotapi.NewUpdate(0)
@ -106,7 +114,7 @@ func init() {
func main() { func main() {
for update := range Updates { for update := range Updates {
// ignore anyone other than 'master' // ignore anyone other than 'master'
if update.Message.From.UserName != Master { if strings.ToLower(update.Message.From.UserName) != strings.ToLower(Master) {
continue continue
} }
// ignore edited messages // ignore edited messages
@ -121,6 +129,8 @@ func main() {
switch command { switch command {
case "list", "/list": case "list", "/list":
// list torrents // list torrents
go list(&update)
case "downs", "/downs": case "downs", "/downs":
// list downloading // list downloading
case "active", "/active": case "active", "/active":
@ -163,3 +173,54 @@ func main() {
} }
} }
} }
// list will form and send a list of all the torrents
func list(ud *tgbotapi.Update) {
torrents, err := Client.GetTorrents()
if err != nil {
send("list: "+err.Error(), ud.Message.Chat.ID)
return
}
buf := new(bytes.Buffer)
for i := range torrents {
buf.WriteString(fmt.Sprintf("<%d> %s\n", torrents[i].ID, torrents[i].Name))
}
if buf.Len() == 0 {
send("No torrents exist!", ud.Message.Chat.ID)
return
}
send(buf.String(), ud.Message.Chat.ID)
}
// send takes a chat id and a message to send.
func send(text string, chatID int64) {
// set typing action
action := tgbotapi.NewChatAction(chatID, tgbotapi.ChatTyping)
Bot.Send(action)
// check the rune count, telegram is limited to 4096 chars per message;
// so if our message is > 4096, split it in chunks the send them.
msgRuneCount := utf8.RuneCountInString(text)
LenCheck:
if msgRuneCount > 4096 {
msg := tgbotapi.NewMessage(chatID, text[:4095])
// send current chunk
if _, err := Bot.Send(msg); err != nil {
fmt.Fprintf(os.Stderr, "send error: %s\n", err)
}
// move to the next chunk
text = text[4095:]
msgRuneCount = utf8.RuneCountInString(text)
goto LenCheck
}
// if msgRuneCount < 4096, send it normally
msg := tgbotapi.NewMessage(chatID, text)
if _, err := Bot.Send(msg); err != nil {
fmt.Fprint(os.Stderr, "send error: %s\n", err)
}
}