penguin/golifehk

@golifehk bot in Telegram

main.go

raw ยท 1784 bytes

package main

import (
	"fmt"
	"log"
	"os"

	tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
	cjlookup "github.com/tgckpg/golifehk/datasources/cjlookup"
	kmb "github.com/tgckpg/golifehk/datasources/kmb"
	mtrbus "github.com/tgckpg/golifehk/datasources/mtr/bus"
	query "github.com/tgckpg/golifehk/query"
	utils "github.com/tgckpg/golifehk/utils"
)

func botsend(bot *tgbotapi.BotAPI, update *tgbotapi.Update, mesg *string) {
	var msg tgbotapi.MessageConfig
	msg = tgbotapi.NewMessage(update.Message.Chat.ID, *mesg)
	msg.ParseMode = "MarkdownV2"

	msg.ReplyToMessageID = update.Message.MessageID
	bot.Send(msg)
}

func main() {
	bot, err := tgbotapi.NewBotAPI(os.Getenv("TELEGRAM_API_TOKEN"))
	if err != nil {
		log.Panic(err)
	}

	bot.Debug = true

	log.Printf("Authorized on account %s", bot.Self.UserName)

	u := tgbotapi.NewUpdate(0)
	u.Timeout = 60

	updates := bot.GetUpdatesChan(u)

	for update := range updates {
		if update.Message == nil {
			continue
		}

		log.Printf("[%s] %s", update.Message.From.UserName, update.Message.Text)
		isGroup := (update.Message.Chat.ID < 0)

		mesg, processed := utils.SystemControl(update.Message)
		if processed {
			if mesg != "" {
				botsend(bot, &update, &mesg)
			}
			continue
		}

		f_queries := []func(string, string) query.IQueryResult{
			cjlookup.Query,
			mtrbus.Query,
			kmb.Query,
		}

		var f_sent bool = false
		var f_err error = nil
		for _, Query := range f_queries {
			var err error
			mesg, err = Query("zh-Hant", update.Message.Text).Message()

			if err == nil {
				f_sent = true
				botsend(bot, &update, &mesg)
			} else if f_err == nil {
				f_err = err
			}
		}

		if !isGroup && !f_sent && f_err != nil {
			mesg := utils.MDv2Text(fmt.Sprintf("%s", f_err))
			botsend(bot, &update, &mesg)
		}
	}
}