Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "database/sql"
- "encoding/json"
- "fmt"
- "io/ioutil"
- "log"
- "net/http"
- "os"
- "time"
- "gopkg.in/telegram-bot-api.v4"
- _ "github.com/lib/pq"
- )
- var (
- config Config
- db *sql.DB
- )
- type Config struct {
- // Database settings
- Host string `json:"host"`
- Port string `json:"port"`
- Username string `json:"username"`
- Password string `json:"password"`
- Database string `json:"database"`
- // Telegram settings
- TgToken string `json:"tgtoken"`
- TgDomain string `json:"tgdomain"`
- TgPort string `json:"tgport"`
- }
- func main() {
- log.Println("Starting application...")
- // Load configuration settings.
- data, err := ioutil.ReadFile("/etc/bot/config.json")
- switch {
- case os.IsNotExist(err):
- log.Println("Config file missing, using defaults")
- config = Config{
- // Database settings
- Host: "localhost",
- Port: "5432",
- Database: "postgres",
- Username: "postgres",
- Password: "postgres",
- // Telegram settings
- TgToken: "",
- TgDomain: "",
- TgPort: "443",
- }
- case err == nil:
- if err := json.Unmarshal(data, &config); err != nil {
- log.Fatal(err)
- }
- default:
- log.Println(err)
- }
- log.Println("Overriding configuration from environment variables")
- // Database settings
- if os.Getenv("APP_HOST") != "" {
- config.Host = os.Getenv("APP_HOST")
- }
- if os.Getenv("APP_PORT") != "" {
- config.Port = os.Getenv("APP_PORT")
- }
- if os.Getenv("APP_USERNAME") != "" {
- config.Username = os.Getenv("APP_USERNAME")
- }
- if os.Getenv("APP_PASSWORD") != "" {
- config.Password = os.Getenv("APP_PASSWORD")
- }
- if os.Getenv("APP_DATABASE") != "" {
- config.Database = os.Getenv("APP_DATABASE")
- }
- // Telegram settings
- if os.Getenv("TELEGRAM_TOKEN") != "" {
- config.TgToken = os.Getenv("TELEGRAM_TOKEN")
- }
- if os.Getenv("TELEGRAM_DOMAIN") != "" {
- config.TgDomain = os.Getenv("TELEGRAM_DOMAIN")
- }
- if os.Getenv("TELEGRAM_PORT") != "" {
- config.TgPort = os.Getenv("TELEGRAM_PORT")
- }
- // Connect to database
- log.Println(fmt.Sprintf("Connecting to database at %s:%s", config.Host, config.Port))
- psqlInfo := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=disable",
- config.Host, config.Port, config.Username, config.Password, config.Database)
- db, err = sql.Open("postgres", psqlInfo)
- if err != nil {
- log.Println(err)
- }
- var dbError error
- maxAttempts := 20
- for attempts := 1; attempts <= maxAttempts; attempts++ {
- dbError = db.Ping()
- if dbError == nil {
- break
- }
- log.Println(dbError)
- time.Sleep(time.Duration(attempts) * time.Second)
- }
- if dbError != nil {
- log.Fatal(dbError)
- }
- log.Println("Application started successfully.")
- // Main Telegram Bot
- bot, err := tgbotapi.NewBotAPI(config.TgToken)
- if err != nil {
- log.Fatal(err)
- }
- bot.Debug = false
- log.Printf("Authorized on account %s", bot.Self.UserName)
- _, err = bot.SetWebhook(tgbotapi.NewWebhook("https://" + config.TgDomain + ":" + config.TgPort + "/" + config.TgToken))
- if err != nil {
- log.Fatal(err)
- }
- updates := bot.ListenForWebhook("/" + bot.Token)
- go http.ListenAndServe("0.0.0.0:"+config.TgPort, nil)
- for update := range updates {
- if update.Message == nil {
- continue
- }
- log.Printf("[%s] %s", update.Message.From.UserName, update.Message.Text)
- msg := tgbotapi.NewMessage(update.Message.Chat.ID, update.Message.Text)
- msg.ReplyToMessageID = update.Message.MessageID
- bot.Send(msg)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement