-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
116 lines (95 loc) · 2.5 KB
/
main.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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package main
import (
"context"
"fmt"
"furryplansbot.avbrand.com/dbHelper"
"furryplansbot.avbrand.com/dbInterface"
_ "furryplansbot.avbrand.com/internal/translations"
"furryplansbot.avbrand.com/localizer"
"furryplansbot.avbrand.com/tgPlansBot"
"furryplansbot.avbrand.com/tgWrapper"
"furryplansbot.avbrand.com/userManager"
"furryplansbot.avbrand.com/webserver"
"io"
"log"
"os"
"path/filepath"
"time"
)
var dbMain dbInterface.DBFeatures
var logFileName string
var logFile *os.File
func main() {
// Rotate the log output every day.
setLog()
go checkLog()
log.Println("== Furry Plans Bot Startup ==")
// Initialize the language list -- this must be called here since the translations package is now initialized.
localizer.InitLang()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
saltValue, err := os.ReadFile("salt.txt")
if err != nil {
panic(err)
}
log.Println("Connecting to database...")
db, err := dbHelper.InitDB("dsn.txt")
if err != nil {
log.Fatal(err)
}
log.Println("Connected.")
dbMain = db
userManager.Init(db)
log.Println("Starting telegram bot...")
tgBot := initTg()
// Create our telegram plans bot item
tgPlans := &tgPlansBot.TGPlansBot{}
go tgPlans.StartTG(ctx, string(saltValue), dbMain, tgBot)
// Wait until the application exits now
log.Println("Listening for updates.")
log.Println("Starting web server")
webserver.StartServer(string(saltValue), db)
}
func initTg() tgPlansBot.TelegramBot {
tg := tgWrapper.New()
err := tg.LoadKeyFromFile("token.txt")
if err != nil {
log.Fatal(err)
}
err = tg.Init()
if err != nil {
log.Fatal(err)
}
return tg
}
func setLog() {
// SET UP LOGGING
// get directory of app
if logFile != nil {
logFile.Close()
}
dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
log.Fatal(err)
}
logFileName = fmt.Sprintf("%s.log", time.Now().Format(time.DateOnly))
_ = os.MkdirAll(filepath.Join(dir, "logs"), 750)
logFile, err = os.OpenFile(filepath.Join(dir, "logs", logFileName), os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
log.Fatalf("error opening file: %v", err)
}
mw := io.MultiWriter(os.Stdout, logFile)
log.SetOutput(mw)
}
func checkLog() {
for {
// How much time is it until midnight?
tomorrow := time.Now().Add(time.Hour * 24)
midnight := time.Date(tomorrow.Year(), tomorrow.Month(), tomorrow.Day(), 0, 0, 0, 0, tomorrow.Location())
d := midnight.Sub(time.Now())
time.Sleep(d + time.Second)
// should now be midnight
// rotate the log.
setLog()
}
}