/
handlers.go
89 lines (73 loc) · 2.07 KB
/
handlers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package telegram
import (
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
"github.com/zetsub0/tts-telegram-bot/internal/tts"
"github.com/zetsub0/tts-telegram-bot/internal/whatlang"
"log"
"os"
"strconv"
"time"
)
const commandStart = "start"
func (b *Bot) handleCommand(message *tgbotapi.Message) {
msg := tgbotapi.NewMessage(message.Chat.ID, "I don't know that command")
switch message.Command() {
case commandStart:
msg.Text = "Just send me text"
tm := time.Unix(int64(message.Date), 0)
log.Printf("[%s] %s \t[%s]", message.From.UserName, message.Text, tm)
b.bot.Send(msg)
default:
tm := time.Unix(int64(message.Date), 0)
log.Printf("[%s] %s \t[%s]", message.From.UserName, message.Text, tm)
b.bot.Send(msg)
}
}
func (b *Bot) handleMessage(message *tgbotapi.Message) error {
userID := strconv.FormatInt(message.From.ID, 10)
audioFolder := "./audio/" + userID + "/"
tm := time.Unix(int64(message.Date), 0)
log.Printf("[%s] %s \t[%s]", message.From.UserName, message.Text, tm)
lang, err := whatlang.Analyze(message.Text)
if err != nil {
b.bot.Send(tgbotapi.NewMessage(message.Chat.ID, "Unable to determine the language"))
return err
}
err = tts.CreateSpeech(audioFolder, lang, message.Text)
if err != nil {
//return err
}
msg := tgbotapi.NewMessage(message.Chat.ID, "Creating audio. Please wait a moment.")
b.bot.Send(msg)
time.Sleep(time.Second * 10)
audioName := audioFolder + tts.GetFileName(audioFolder)
b.sendFile(audioName, message.From.ID)
time.Sleep(time.Second * 10)
tts.DelFile(audioFolder)
return nil
}
func (b *Bot) sendFile(fileName string, chatID int64) {
file, err := os.Open(fileName)
if err != nil {
log.Panic(err)
}
defer file.Close()
fileInfo, err := file.Stat()
if err != nil {
log.Panic(err)
}
fileBytes := make([]byte, fileInfo.Size())
_, err = file.Read(fileBytes)
if err != nil {
log.Panic(err)
}
fileData := tgbotapi.FileBytes{
Name: fileInfo.Name(),
Bytes: fileBytes,
}
audioConfig := tgbotapi.NewVoice(chatID, fileData)
_, err = b.bot.Send(audioConfig)
if err != nil {
log.Panic(err)
}
}