init code

This commit is contained in:
thuanle
2024-10-24 09:53:23 +07:00
parent a7559b3f9d
commit 92a63c7885
43 changed files with 1115 additions and 0 deletions

View 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()
}

View 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
}

View 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()
}

View 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)
}