init code
This commit is contained in:
34
internal/services/tele/view/fee.go
Normal file
34
internal/services/tele/view/fee.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package view
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/jedib0t/go-pretty/v6/table"
|
||||
"me.thuanle/bbot/internal/helper/binancex"
|
||||
"me.thuanle/bbot/internal/services/tele/view/helper"
|
||||
"me.thuanle/bbot/internal/utils/opx"
|
||||
"me.thuanle/bbot/internal/utils/timex"
|
||||
"time"
|
||||
)
|
||||
|
||||
func IconOfFundingFeeDirection(fund float64) string {
|
||||
return opx.Ite(fund > 0, "📉", "📈")
|
||||
}
|
||||
|
||||
func RenderOnGetTopFundingFeeMessage(sym []string, rate []float64, cd []int64) string {
|
||||
t := helper.NewNoBorderTableWriter("Symbol", "Rate", "Cd")
|
||||
|
||||
flag := true
|
||||
for i, s := range sym {
|
||||
if rate[i] > 0 && flag {
|
||||
t.AppendRow(table.Row{"...", "...", "..."})
|
||||
flag = false
|
||||
}
|
||||
t.AppendRow(table.Row{
|
||||
binancex.Symbol2Token(s),
|
||||
fmt.Sprintf("%.3f%%", rate[i]*100),
|
||||
fmt.Sprintf("%s", timex.CdMinuteStringTime(time.UnixMilli(cd[i]))),
|
||||
})
|
||||
}
|
||||
|
||||
return t.Render()
|
||||
}
|
||||
27
internal/services/tele/view/helper/table.go
Normal file
27
internal/services/tele/view/helper/table.go
Normal file
@@ -0,0 +1,27 @@
|
||||
package helper
|
||||
|
||||
import (
|
||||
"github.com/jedib0t/go-pretty/v6/table"
|
||||
"github.com/jedib0t/go-pretty/v6/text"
|
||||
)
|
||||
|
||||
func NewNoBorderTableWriter(headers ...string) table.Writer {
|
||||
t := table.NewWriter()
|
||||
t.Style().Options.DrawBorder = false
|
||||
t.Style().Options.SeparateColumns = false
|
||||
|
||||
var configs []table.ColumnConfig
|
||||
configs = append(configs, table.ColumnConfig{Number: 1, AlignHeader: text.AlignCenter, Align: text.AlignLeft, AlignFooter: text.AlignLeft})
|
||||
for i := 2; i <= len(headers); i++ {
|
||||
configs = append(configs, table.ColumnConfig{Number: i, AlignHeader: text.AlignCenter, Align: text.AlignRight, AlignFooter: text.AlignRight})
|
||||
}
|
||||
t.SetColumnConfigs(configs)
|
||||
|
||||
var h table.Row
|
||||
for _, header := range headers {
|
||||
h = append(h, header)
|
||||
}
|
||||
t.AppendHeader(h)
|
||||
|
||||
return t
|
||||
}
|
||||
60
internal/services/tele/view/price.go
Normal file
60
internal/services/tele/view/price.go
Normal file
@@ -0,0 +1,60 @@
|
||||
package view
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/jedib0t/go-pretty/v6/table"
|
||||
"golang.org/x/text/language"
|
||||
"golang.org/x/text/message"
|
||||
"me.thuanle/bbot/internal/helper/binancex"
|
||||
"me.thuanle/bbot/internal/services/tele/view/helper"
|
||||
"me.thuanle/bbot/internal/utils/timex"
|
||||
"time"
|
||||
)
|
||||
|
||||
func RenderPrice(price float64) string {
|
||||
mFmt := message.NewPrinter(language.AmericanEnglish)
|
||||
switch {
|
||||
case price > 1000:
|
||||
return mFmt.Sprintf("%0.0f", price)
|
||||
case price > 100:
|
||||
return mFmt.Sprintf("%0.1f", price)
|
||||
case price > 10:
|
||||
return mFmt.Sprintf("%0.2f", price)
|
||||
case price > 1:
|
||||
return mFmt.Sprintf("%0.3f", price)
|
||||
case price > 0.1:
|
||||
return mFmt.Sprintf("%0.4f", price)
|
||||
case price > 0.01:
|
||||
return mFmt.Sprintf("%0.5f", price)
|
||||
case price > 0.001:
|
||||
return mFmt.Sprintf("%0.6f", price)
|
||||
case price > 0.0001:
|
||||
return mFmt.Sprintf("%0.7f", price)
|
||||
default:
|
||||
return mFmt.Sprintf("%0.8f", price)
|
||||
}
|
||||
}
|
||||
|
||||
func RenderOnPriceMessage(symbol string, spotPrice float64, futurePrice float64, fundrate float64, fundtime int64) string {
|
||||
return fmt.Sprintf(
|
||||
"%s: %s\n"+
|
||||
"Fund rate: %.4f%% %s in %s\n"+
|
||||
"Spot: %s",
|
||||
RenderSymbolInfo(symbol), RenderPrice(futurePrice),
|
||||
fundrate*100, IconOfFundingFeeDirection(fundrate), timex.CdMinuteStringTime(time.UnixMilli(fundtime)),
|
||||
RenderPrice(spotPrice),
|
||||
)
|
||||
}
|
||||
|
||||
func RenderOnGetTopPricesMessage(symbols []string, price []float64, fundRate []float64) string {
|
||||
t := helper.NewNoBorderTableWriter("", "Price", "Rate")
|
||||
mFmt := message.NewPrinter(language.AmericanEnglish)
|
||||
for i, symbol := range symbols {
|
||||
t.AppendRow(table.Row{
|
||||
binancex.Symbol2Token(symbol),
|
||||
mFmt.Sprintf("%.2f", price[i]),
|
||||
mFmt.Sprintf("%.3f%%", fundRate[i]*100),
|
||||
})
|
||||
}
|
||||
return t.Render()
|
||||
}
|
||||
11
internal/services/tele/view/symbol.go
Normal file
11
internal/services/tele/view/symbol.go
Normal file
@@ -0,0 +1,11 @@
|
||||
package view
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"me.thuanle/bbot/internal/helper/binancex"
|
||||
)
|
||||
|
||||
func RenderSymbolInfo(sym string) string {
|
||||
token := binancex.Symbol2Token(sym)
|
||||
return fmt.Sprintf("<a href=\"https://www.binance.com/futures/%s\">%s</a>", sym, token)
|
||||
}
|
||||
Reference in New Issue
Block a user