all repos — albus-go @ 1bfa2838c5f0158361bf532c8766cbef2d4efb23

albus.go (view raw)

 1package main
 2
 3import (
 4	"os"
 5
 6	tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
 7	"github.com/joho/godotenv"
 8)
 9
10const tokenEnvName = "TELEGRAM_BOT_TOKEN"
11
12func main() {
13	godotenv.Load()
14
15	tgToken := os.Getenv(tokenEnvName)
16	if tgToken == "" {
17		println("Please set the", tokenEnvName, "environment variable.")
18		os.Exit(1)
19	}
20
21	bot, err := tgbotapi.NewBotAPI(tgToken)
22	if err != nil {
23		println(err)
24		os.Exit(1)
25	}
26
27	bot.Debug = true
28
29	println("Authorized on account", bot.Self.UserName)
30
31	u := tgbotapi.NewUpdate(0)
32	u.Timeout = 60
33
34	updates := bot.GetUpdatesChan(u)
35
36	for update := range updates {
37		if update.Message == nil { // ignore any non-Message updates
38			continue
39		}
40
41		msg := tgbotapi.NewMessage(update.Message.Chat.ID, "")
42		msg.ReplyParameters.MessageID = update.Message.MessageID
43
44		messageDocument := update.Message.Document
45		if messageDocument == nil {
46			continue
47		}
48
49		msgFileNameFull := messageDocument.FileName
50		msgFileId := messageDocument.FileID
51
52		msgFile, err := bot.GetFile(tgbotapi.FileConfig{FileID: msgFileId})
53		if err != nil {
54			println("Error getting file:", err)
55			continue
56		}
57
58		msgFileName, msgFileExtension := SplitFilename(msgFileNameFull)
59		uniqueFileName := msgFileId + msgFileExtension
60
61		err = DownloadFile(uniqueFileName, msgFile.Link(bot.Token))
62		if err != nil {
63			println("Error downloading file:", err)
64			continue
65		}
66
67		outFileName, outExtension := ConvertFile(uniqueFileName)
68		os.Remove(uniqueFileName)
69		if outFileName == "" && outExtension == "" {
70			println("Error converting file:", uniqueFileName)
71			continue
72		}
73		outFileNameFull := JoinFilename(outFileName, outExtension)
74		finalFileName := JoinFilename(msgFileName, outExtension)
75
76		file, err := os.Open(outFileNameFull)
77		if err != nil {
78			println("Error opening new file: ", err)
79		}
80
81		fileReader := tgbotapi.FileReader{
82			Name:   finalFileName,
83			Reader: file,
84		}
85
86		newMsg := tgbotapi.NewDocument(update.Message.Chat.ID, fileReader)
87
88		if _, err := bot.Send(newMsg); err != nil {
89			println("Could not send message.")
90			os.Exit(1)
91		}
92
93		file.Close()
94		os.Remove(outFileNameFull)
95	}
96}