-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.go
98 lines (79 loc) · 2.01 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
package main
import (
"fmt"
"log"
"os"
"os/signal"
"syscall"
"twittergram/twittergram"
"twittergram/twittergram/database"
"twittergram/twittergram/localization"
"github.com/caarlos0/env/v10"
_ "github.com/joho/godotenv/autoload"
"github.com/mymmrac/telego"
"github.com/mymmrac/telego/telegohandler"
)
type config struct {
TelegramToken string `env:"TELEGRAM_TOKEN" validate:"required"`
DatabaseFile string `env:"DATABASE_FILE" validate:"required"`
}
func main() {
// Get Bot from environment variables (.env)
cfg := config{}
if err := env.Parse(&cfg); err != nil {
log.Fatalf("%+v\n", err)
}
// Create bot
bot, err := telego.NewBot(cfg.TelegramToken)
if err != nil {
log.Fatal(err)
}
// Initialize signal handling
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
done := make(chan struct{}, 1)
// Get updates
updates, _ := bot.UpdatesViaLongPolling(nil)
// Handle updates
bh, _ := telegohandler.NewBotHandler(bot, updates)
handler := twittergram.NewHandler(bot, bh)
handler.RegisterHandlers()
bot.DeleteWebhook(&telego.DeleteWebhookParams{
DropPendingUpdates: true,
})
// Call method getMe
botUser, err := bot.GetMe()
if err != nil {
log.Fatal(err)
}
if err := localization.LoadLanguages(); err != nil {
fmt.Println("Error:", err)
return
}
// Open a new SQLite database file
if err := database.Open(cfg.DatabaseFile); err != nil {
log.Fatal(err)
}
// Define the tables
if err := database.CreateTables(); err != nil {
log.Fatal("Error creating table:", err)
return
}
go func() {
// Wait for stop signal
<-sigs
fmt.Println("\033[0;31mStopping...\033[0m")
bot.StopLongPolling()
fmt.Println("Long polling stopped")
bh.Stop()
fmt.Println("Bot handler stopped")
// Close the database connection
database.Close()
done <- struct{}{}
}()
go bh.Start()
fmt.Println("\033[0;32m\U0001F680 Bot Started\033[0m")
fmt.Printf("\033[0;36mBot Info:\033[0m %v - @%v\n", botUser.FirstName, botUser.Username)
<-done
fmt.Println("Done")
}