Files
golifehk/main.go

88 lines
1.8 KiB
Go

package main
import (
"fmt"
"log"
"os"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
tgadaptor "github.com/tgckpg/golifehk/adaptors/tg"
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 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 != "" {
tgadaptor.BotSendText(bot, &update, &mesg)
}
continue
}
f_queries := []func(query.QueryMessage) query.IQueryResult{
cjlookup.Query,
mtrbus.Query,
kmb.Query,
}
var f_sent bool = false
var f_err error = nil
tgMesg := update.Message
q := query.QueryMessage{Lang: "zh-Hant", Text: tgMesg.Text}
if tgMesg.Location != nil {
q.Location = &query.GeoLocation{tgMesg.Location.Latitude, tgMesg.Location.Longitude}
}
for _, Query := range f_queries {
qResult := Query(q)
sent, err := tgadaptor.BotSend(bot, &update, qResult)
if sent {
f_sent = true
}
if err != nil {
f_err = err
}
if qResult.Consumed() {
break
}
}
if !isGroup && !f_sent && f_err != nil {
mesg := utils.MDv2Text(fmt.Sprintf("%s", f_err))
tgadaptor.BotSendText(bot, &update, &mesg)
}
}
}