Using markdown v2
This commit is contained in:
parent
25ccd64a88
commit
292665c49b
@ -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 }
|
||||||
|
@ -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?" ) )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
7
main.go
7
main.go
@ -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 )
|
||||||
|
Loading…
Reference in New Issue
Block a user