penguin/golifehk

@golifehk bot in Telegram

utils/shortcuts.go

raw ยท 2134 bytes

package utils

import (
    "bytes"
    "os"
    "strconv"
    "strings"
)

var MARKDOWN_ESC []string = []string{"_", "*", "[", "]", "(", ")", "~", "`", ">", "#", "+", "-", "=", "|", "{", "}", ".", "!"}

func WriteMDv2Text( sb *strings.Builder, t string ) {
    for _, c := range MARKDOWN_ESC {
        t = strings.Replace( t, c, "\\" + c, -1 )
    }

    sb.WriteString( t )
}

func MDv2Text( t string ) string {
    sb := strings.Builder{}

    for _, c := range MARKDOWN_ESC {
        t = strings.Replace( t, c, "\\" + c, -1 )
    }

    sb.WriteString( t )
    return sb.String()
}

func ToPower( t string ) string {
    for s, r := range POWER_NUMBERS {
        t = strings.ReplaceAll( t, s, r )
    }
    return t
}

func ReadBOM( buff *bytes.Buffer ) {
    b, _ := buff.ReadByte()
    if b != 0xef {
        buff.UnreadByte()
        return
    }
    b, _ = buff.ReadByte()
    if b != 0xbb {
        buff.UnreadByte()
        buff.UnreadByte()
        return
    }
    b, _ = buff.ReadByte()
    if b != 0xbf {
        buff.UnreadByte()
        buff.UnreadByte()
        buff.UnreadByte()
    }
}

func TryGetEnv[T any]( name string, fallback T ) T {
    v := os.Getenv( name )

    if v != "" {
        switch any( fallback ).(type) {
        case uint64:
            p, err := strconv.ParseUint( v, 10, 64 )
            if err == nil {
                return any( uint64( p ) ).(T)
            }
        case uint32:
            p, err := strconv.ParseUint( v, 10, 32 )
            if err == nil {
                return any( uint32( p ) ).(T)
            }
        case int:
            p, err := strconv.ParseInt( v, 10, 32 )
            if err == nil {
                return any( int( p ) ).(T)
            }
        case float64:
            p, err := strconv.ParseFloat( v, 64 )
            if err == nil {
                return any( float64( p ) ).(T)
            }
        case float32:
            p, err := strconv.ParseFloat( v, 32 )
            if err == nil {
                return any( float32( p ) ).(T)
            }
        default:
            return any( v ).(T)
        }

    }

    return fallback
}