commit a062e37a4c6ed1abdeae63fc74cc58cd52c5e2b5
| author | 斟酌 鵬兄 <tgckpg@gmail.com> |
| date | 2022-10-18T08:20:58Z |
| subject | Simplify query calls |
commit a062e37a4c6ed1abdeae63fc74cc58cd52c5e2b5
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date: 2022-10-18T08:20:58Z
Simplify query calls
---
datasources/mtr/bus/QueryResult.go | 17 +++++----
main.go | 73 +++++++++++++-------------------------
2 files changed, 35 insertions(+), 55 deletions(-)
diff --git a/datasources/mtr/bus/QueryResult.go b/datasources/mtr/bus/QueryResult.go
index 321c1d4..482663d 100644
--- a/datasources/mtr/bus/QueryResult.go
+++ b/datasources/mtr/bus/QueryResult.go
@@ -45,6 +45,15 @@ func ( this QueryResult ) Message() ( string, error ) {
if this.Schedules == nil {
q := *this.Query
+
+ if len( *q.Results ) == 0 {
+ terms := make( []string, len(*q.SearchTerms), len(*q.SearchTerms) )
+ for i, term := range *q.SearchTerms {
+ terms[i] = term.Org
+ }
+ return "", fmt.Errorf( "Not Found: \"%s\"", strings.Join( terms, "\", \"" ) )
+ }
+
if q.Key == "" {
sort.Sort( query.ByKey( *q.Results ) )
for _, entry := range *q.Results {
@@ -53,7 +62,7 @@ func ( this QueryResult ) Message() ( string, error ) {
sb.WriteString( " " )
writeShortRoute( &this.Lang, &sb, busStop )
}
- } else if 1 == len( *q.SearchTerms ) && 0 < len( *q.Results ) {
+ } else if 1 == len( *q.SearchTerms ) {
// Route listing
st := map[string] *BusStop{}
@@ -101,12 +110,6 @@ func ( this QueryResult ) Message() ( string, error ) {
sb.WriteString( "\n" )
}
- } else if 1 < len( *q.SearchTerms ) && len( *q.Results ) == 0 {
- terms := make( []string, len(*q.SearchTerms), len(*q.SearchTerms) )
- for i, term := range *q.SearchTerms {
- terms[i] = term.Org
- }
- return "", fmt.Errorf( "Not Found: \"%s\"", strings.Join( terms, "\", \"" ) )
} else {
return "", fmt.Errorf( "%s", "Unreachable condition occured!?" )
}
diff --git a/main.go b/main.go
index 09fd0fa..8559168 100644
--- a/main.go
+++ b/main.go
@@ -6,9 +6,19 @@ import (
"os"
mtrbus "github.com/tgckpg/golifehk/datasources/mtr/bus"
kmb "github.com/tgckpg/golifehk/datasources/kmb"
+ query "github.com/tgckpg/golifehk/query"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
)
+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 {
@@ -30,62 +40,29 @@ func main() {
}
log.Printf( "[%s] %s", update.Message.From.UserName, update.Message.Text )
-
- mesg, err := mtrbus.Query( "zh-Hant", update.Message.Text ).Message()
-
isGroup := ( update.Message.Chat.ID < 0 )
- if isGroup {
- if err == nil {
- msg := tgbotapi.NewMessage( update.Message.Chat.ID, mesg )
- msg.ParseMode = "MarkdownV2"
- msg.ReplyToMessageID = update.Message.MessageID
-
- bot.Send( msg )
- }
-
- } else {
-
- var msg tgbotapi.MessageConfig
- if err == nil {
- msg = tgbotapi.NewMessage( update.Message.Chat.ID, mesg )
- msg.ParseMode = "MarkdownV2"
- } else {
- msg = tgbotapi.NewMessage( update.Message.Chat.ID, fmt.Sprintf( "%s", err ) )
- }
-
- msg.ReplyToMessageID = update.Message.MessageID
- bot.Send( msg )
+ f_queries := []func( string, string ) query.IQueryResult{
+ mtrbus.Query,
+ kmb.Query,
}
- mesg, err2 := kmb.Query( "zh-Hant", update.Message.Text ).Message()
-
- if err != nil && err2 != nil {
- continue
- }
+ var f_sent bool = false
+ var f_err error = nil
+ for _, Query := range f_queries {
+ mesg, err := Query( "zh-Hant", update.Message.Text ).Message()
- err = err2
- if isGroup {
if err == nil {
- msg := tgbotapi.NewMessage( update.Message.Chat.ID, mesg )
- msg.ParseMode = "MarkdownV2"
- msg.ReplyToMessageID = update.Message.MessageID
-
- bot.Send( msg )
- }
-
- } else {
-
- var msg tgbotapi.MessageConfig
- if err == nil {
- msg = tgbotapi.NewMessage( update.Message.Chat.ID, mesg )
- msg.ParseMode = "MarkdownV2"
- } else {
- msg = tgbotapi.NewMessage( update.Message.Chat.ID, fmt.Sprintf( "%s", err ) )
+ f_sent = true
+ botsend( bot, &update, &mesg )
+ } else if f_err == nil {
+ f_err = err
}
+ }
- msg.ReplyToMessageID = update.Message.MessageID
- bot.Send( msg )
+ if !isGroup && !f_sent && f_err != nil {
+ mesg := fmt.Sprintf( "%s", f_err )
+ botsend( bot, &update, &mesg )
}
}
}