Initial commit
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
package tgbot
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
||||
"strings"
|
||||
"unicode/utf16"
|
||||
)
|
||||
|
||||
type Entity struct {
|
||||
Title string
|
||||
Content string
|
||||
}
|
||||
|
||||
func (p *Entity) GetTitle() string {
|
||||
return fmt.Sprintf("%s", p.Title)
|
||||
}
|
||||
|
||||
func (p *Entity) Entity(startOffset int) ([]tgbotapi.MessageEntity, string) {
|
||||
ret := make([]tgbotapi.MessageEntity, 0)
|
||||
ret = append(ret, tgbotapi.MessageEntity{
|
||||
Type: "expandable_blockquote",
|
||||
Offset: startOffset,
|
||||
Length: p.TextU16Len(),
|
||||
})
|
||||
if p.TitleU16Len() > 0 {
|
||||
ret = append(ret, tgbotapi.MessageEntity{
|
||||
Type: "bold",
|
||||
Offset: startOffset,
|
||||
Length: p.TitleU16Len(),
|
||||
})
|
||||
}
|
||||
if p.ContentU16Len() > 0 {
|
||||
ret = append(ret, tgbotapi.MessageEntity{
|
||||
Type: "bold",
|
||||
Offset: startOffset + p.TitleU16Len() + 1,
|
||||
Length: p.ContentU16Len(),
|
||||
})
|
||||
}
|
||||
if p.TitleU16Len() > 0 {
|
||||
return ret, p.GetTitle() + "\n" + p.Content
|
||||
}
|
||||
return ret, p.Content
|
||||
}
|
||||
|
||||
func (p *Entity) TextU16Len() int {
|
||||
text := p.GetTitle()
|
||||
if text != "" {
|
||||
text += "\n"
|
||||
}
|
||||
text += p.Content
|
||||
return len(utf16.Encode([]rune(text)))
|
||||
}
|
||||
|
||||
func (p *Entity) TitleU16Len() int {
|
||||
return len(utf16.Encode([]rune(p.GetTitle())))
|
||||
}
|
||||
|
||||
func (p *Entity) ContentU16Len() int {
|
||||
return len(utf16.Encode([]rune(p.Content)))
|
||||
}
|
||||
|
||||
type EntityList struct {
|
||||
Title string
|
||||
Desc string
|
||||
Entities []*Entity
|
||||
}
|
||||
|
||||
func NewEntityList(title, desc string, entities []*Entity) *EntityList {
|
||||
return &EntityList{
|
||||
Title: strings.TrimSpace(title),
|
||||
Desc: strings.TrimSpace(desc),
|
||||
Entities: entities,
|
||||
}
|
||||
}
|
||||
|
||||
func (p *EntityList) ToEntities() ([]tgbotapi.MessageEntity, string) {
|
||||
ret := make([]tgbotapi.MessageEntity, 0)
|
||||
var text string
|
||||
var startOffset int
|
||||
// 添加总标题
|
||||
titleU16Len := len(utf16.Encode([]rune(p.Title)))
|
||||
ret = append(ret, tgbotapi.MessageEntity{
|
||||
Type: "bold",
|
||||
Offset: 0,
|
||||
Length: titleU16Len,
|
||||
})
|
||||
text += p.Title + "\n"
|
||||
startOffset += titleU16Len + 1
|
||||
// 添加总描述
|
||||
if p.Desc != "" {
|
||||
descU16Len := len(utf16.Encode([]rune(p.Desc)))
|
||||
ret = append(ret, tgbotapi.MessageEntity{
|
||||
Type: "bold",
|
||||
Offset: startOffset,
|
||||
Length: descU16Len,
|
||||
})
|
||||
text += p.Desc + "\n"
|
||||
startOffset += descU16Len + 1
|
||||
}
|
||||
// 添加每个Prompt
|
||||
for _, ent := range p.Entities {
|
||||
promptEntities, promptText := ent.Entity(startOffset)
|
||||
ret = append(ret, promptEntities...)
|
||||
text += promptText + "\n"
|
||||
startOffset += ent.TextU16Len() + 1
|
||||
}
|
||||
return ret, text
|
||||
}
|
||||
Reference in New Issue
Block a user