Using markdown v2

This commit is contained in:
斟酌 鵬兄 2022-09-15 21:38:04 +08:00
parent 25ccd64a88
commit 292665c49b
4 changed files with 44 additions and 33 deletions

View File

@ -25,3 +25,9 @@ func ( busStop BusStop ) NextStop() *BusStop {
} }
return nil return nil
} }
type ByRouteId []BusStop
func (a ByRouteId) Len() int { return len(a) }
func (a ByRouteId) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a ByRouteId) Less(i, j int) bool { return a[i].RouteId < a[j].RouteId }

View File

@ -13,30 +13,32 @@ type QueryResult struct {
Query *QueryObject Query *QueryObject
} }
var MARKDOWN_ESC []string = []string{"_", "*", "[", "]", "(", ")", "~", "`", ">", "#", "+", "-", "=", "|", "{", "}", ".", "!"}
func _escape( t string ) string {
for _, c := range MARKDOWN_ESC {
t = strings.Replace( t, c, "\\" + c, -1 )
}
return t
}
func writeShortRoute( lang *string, sb *strings.Builder, b *BusStop ) { func writeShortRoute( lang *string, sb *strings.Builder, b *BusStop ) {
if b.PrevStop() != nil { if b.PrevStop() != nil {
sb.WriteString( (*b.PrevStop().Name)[ *lang ] ) sb.WriteString( _escape( (*b.PrevStop().Name)[ *lang ] ) )
sb.WriteString( " > " ) sb.WriteString( " \\> " )
} }
sb.WriteString( "**" ) sb.WriteString( "*" )
sb.WriteString( (*b.Name)[ *lang ] ) sb.WriteString( _escape( (*b.Name)[ *lang ] ) )
sb.WriteString( "**" ) sb.WriteString( "*" )
if b.NextStop() != nil { if b.NextStop() != nil {
sb.WriteString( " > " ) sb.WriteString( " \\> " )
sb.WriteString( (*b.NextStop().Name)[ *lang ] ) sb.WriteString( _escape( (*b.NextStop().Name)[ *lang ] ) )
} }
sb.WriteString( "\n" ) sb.WriteString( "\n" )
} }
type ByRouteId []BusStop
func (a ByRouteId) Len() int { return len(a) }
func (a ByRouteId) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a ByRouteId) Less(i, j int) bool { return a[i].RouteId < a[j].RouteId }
func ( result QueryResult ) Message() string { func ( result QueryResult ) Message() string {
if result.Error != nil { if result.Error != nil {
@ -51,44 +53,48 @@ func ( result QueryResult ) Message() string {
if query.Route == "" { if query.Route == "" {
sort.Sort( ByRouteId( *query.BusStops ) ) sort.Sort( ByRouteId( *query.BusStops ) )
for _, busStop := range *query.BusStops { for _, busStop := range *query.BusStops {
sb.WriteString( busStop.RouteId ) sb.WriteString( _escape( busStop.RouteId ) )
sb.WriteString( " " ) sb.WriteString( " " )
writeShortRoute( &result.Lang, &sb, &busStop ) writeShortRoute( &result.Lang, &sb, &busStop )
} }
} else if query.BusStops == nil && query.RouteStarts != nil { } else if query.BusStops == nil && query.RouteStarts != nil {
for d, b := range *query.RouteStarts { for d, b := range *query.RouteStarts {
sb.WriteString( query.Route ) sb.WriteString( query.Route )
sb.WriteString( "-" ) sb.WriteString( "\\-" )
sb.WriteString( d ) sb.WriteString( _escape( d ) )
sb.WriteString( "\n " ) sb.WriteString( "\n " )
for { for {
sb.WriteString( (*b.Name)[ result.Lang ] ) sb.WriteString( _escape( (*b.Name)[ result.Lang ] ) )
b = b.NextStop() b = b.NextStop()
if b == nil { if b == nil {
break break
} }
sb.WriteString( " > " ) sb.WriteString( " \\> " )
} }
sb.WriteString( "\n" ) sb.WriteString( "\n" )
} }
} else { } else {
sb.WriteString( "Unreachable condition occured!?" ) sb.WriteString( _escape( "Unreachable condition occured!?" ) )
} }
} else { } else {
for busStop, buses := range *result.Schedules { if 0 < len(*result.Schedules) {
writeShortRoute( &result.Lang, &sb, &busStop ) for busStop, buses := range *result.Schedules {
for _, bus := range buses.Buses { writeShortRoute( &result.Lang, &sb, &busStop )
sb.WriteString( " * " ) for _, bus := range buses.Buses {
if bus.ETAText == "" { sb.WriteString( " \\* " )
sb.WriteString( bus.ETDText ) if bus.ETAText == "" {
} else { sb.WriteString( _escape( bus.ETDText ) )
sb.WriteString( bus.ETAText ) } else {
sb.WriteString( _escape( bus.ETAText ) )
}
sb.WriteString( "\n" )
} }
sb.WriteString( "\n" ) sb.WriteString( "\n" )
} }
sb.WriteString( "\n" ) } else {
sb.WriteString( _escape( "Schedules are empty...perhaps Out of Service Time?" ) )
} }
} }

View File

@ -65,7 +65,7 @@ func Query( lang string, message string ) *QueryResult {
} }
if len( schedules.BusStops ) == 0 { if len( schedules.BusStops ) == 0 {
qr.Error = errors.New( "Schedules are empty...perhaps Out of Service Time?" ) qr.Schedules = &map[BusStop] *BusStopBuses{}
return &qr return &qr
} }

View File

@ -3,7 +3,6 @@ package main
import ( import (
"log" "log"
"os" "os"
"strings"
mtrbus "github.com/tgckpg/golifehk/datasources/mtr/bus" mtrbus "github.com/tgckpg/golifehk/datasources/mtr/bus"
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
) )
@ -30,11 +29,11 @@ func main() {
log.Printf( "[%s] %s", update.Message.From.UserName, update.Message.Text ) log.Printf( "[%s] %s", update.Message.From.UserName, update.Message.Text )
if strings.Contains( update.Message.Text, "@golifehkbot" ){ result := mtrbus.Query( "zh", update.Message.Text )
result := mtrbus.Query( "zh", strings.Replace( update.Message.Text, "@golifehkbot", "", -1 ) )
if result.Error == nil || !update.Message.Chat.IsGroup() {
msg := tgbotapi.NewMessage( update.Message.Chat.ID, result.Message() ) msg := tgbotapi.NewMessage( update.Message.Chat.ID, result.Message() )
msg.ParseMode = "Markdown" msg.ParseMode = "MarkdownV2"
msg.ReplyToMessageID = update.Message.MessageID msg.ReplyToMessageID = update.Message.MessageID
bot.Send( msg ) bot.Send( msg )