add line api object
This commit is contained in:
parent
58ca729d68
commit
b2a6f95229
87
modules/apiact/line/component.go
Normal file
87
modules/apiact/line/component.go
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
package line
|
||||||
|
|
||||||
|
// Component -
|
||||||
|
type Component struct {
|
||||||
|
Type string `json:"type"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// BoxComponent -
|
||||||
|
type BoxComponent struct {
|
||||||
|
Component
|
||||||
|
Layout string `json:"layout"`
|
||||||
|
Contents []interface{} `json:"contents"`
|
||||||
|
Spacing NullString `json:"spacing,omitempty"`
|
||||||
|
Action interface{} `json:"action,omitempty"`
|
||||||
|
Flex NullInt `json:"flex,omitempty"`
|
||||||
|
Margin NullString `json:"margin,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ButtonComponent -
|
||||||
|
type ButtonComponent struct {
|
||||||
|
Component
|
||||||
|
Action interface{} `json:"action"`
|
||||||
|
Height NullString `json:"height,omitempty"`
|
||||||
|
Style NullString `json:"style,omitempty"`
|
||||||
|
Color NullString `json:"color,omitempty"`
|
||||||
|
Gravity NullString `json:"gravity,omitempty"`
|
||||||
|
Flex NullInt `json:"flex,omitempty"`
|
||||||
|
Margin NullString `json:"margin,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// FillerComponent -
|
||||||
|
type FillerComponent struct {
|
||||||
|
Component
|
||||||
|
}
|
||||||
|
|
||||||
|
// IconComponent -
|
||||||
|
type IconComponent struct {
|
||||||
|
Component
|
||||||
|
URL string `json:"url"`
|
||||||
|
Margin NullString `json:"margin,omitempty"`
|
||||||
|
Size NullString `json:"size,omitempty"`
|
||||||
|
AspectRatio NullString `json:"aspectRatio,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ImageComponent -
|
||||||
|
type ImageComponent struct {
|
||||||
|
Component
|
||||||
|
URL string `json:"url"`
|
||||||
|
Flex NullInt `json:"flex,omitempty"`
|
||||||
|
Margin NullString `json:"margin,omitempty"`
|
||||||
|
Align NullString `json:"align,omitempty"`
|
||||||
|
Gravity NullString `json:"gravity,omitempty"`
|
||||||
|
Size NullString `json:"size,omitempty"`
|
||||||
|
AspectRatio NullString `json:"aspectRatio,omitempty"`
|
||||||
|
AspectMode NullString `json:"aspectMode,omitempty"`
|
||||||
|
BackgroundColor NullString `json:"backgroundColor,omitempty"`
|
||||||
|
Action interface{} `json:"action,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// SeparatorComponent -
|
||||||
|
type SeparatorComponent struct {
|
||||||
|
Component
|
||||||
|
Margin NullString `json:"margin,omitempty"`
|
||||||
|
Color NullString `json:"color,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// SpacerComponent -
|
||||||
|
type SpacerComponent struct {
|
||||||
|
Component
|
||||||
|
Size NullString `json:"size,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// TextComponent -
|
||||||
|
type TextComponent struct {
|
||||||
|
Component
|
||||||
|
Text string `json:"text"`
|
||||||
|
Flex NullInt `json:"flex,omitempty"`
|
||||||
|
Margin NullString `json:"margin,omitempty"`
|
||||||
|
Size NullString `json:"size,omitempty"`
|
||||||
|
Align NullString `json:"align,omitempty"`
|
||||||
|
Gravity NullString `json:"gravity,omitempty"`
|
||||||
|
Wrap bool `json:"wrap"`
|
||||||
|
MaxLines NullInt `json:"maxLines,omitempty"`
|
||||||
|
Weight NullString `json:"weight,omitempty"`
|
||||||
|
Color NullString `json:"color,omitempty"`
|
||||||
|
Action interface{} `json:"action,omitempty"`
|
||||||
|
}
|
52
modules/apiact/line/container.go
Normal file
52
modules/apiact/line/container.go
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
package line
|
||||||
|
|
||||||
|
import "errors"
|
||||||
|
|
||||||
|
// BubbleContainer -
|
||||||
|
type BubbleContainer struct {
|
||||||
|
Type string `json:"type"`
|
||||||
|
Direction NullString `json:"direction"`
|
||||||
|
Header *BoxComponent `json:"header,omitempty"`
|
||||||
|
Hero *ImageComponent `json:"hero,omitempty"`
|
||||||
|
Body *BoxComponent `json:"body,omitempty"`
|
||||||
|
Footer *BoxComponent `json:"footer,omitempty"`
|
||||||
|
Styles interface{} `json:"styles,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// CarouselContainer -
|
||||||
|
type CarouselContainer struct {
|
||||||
|
Type string `json:"type"`
|
||||||
|
Contents []*BubbleContainer `json:"contents"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewBubbleContainer -
|
||||||
|
func NewBubbleContainer(direction string) *BubbleContainer {
|
||||||
|
obj := &BubbleContainer{}
|
||||||
|
obj.Type = "bubble"
|
||||||
|
|
||||||
|
switch direction {
|
||||||
|
case "ltr":
|
||||||
|
case "rtl":
|
||||||
|
obj.Direction = String(direction)
|
||||||
|
default:
|
||||||
|
obj.Direction = String("ltr")
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCarouselContainer -
|
||||||
|
func NewCarouselContainer() *CarouselContainer {
|
||||||
|
obj := &CarouselContainer{}
|
||||||
|
obj.Type = "carousel"
|
||||||
|
|
||||||
|
return obj
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddContent -
|
||||||
|
func (p *CarouselContainer) AddContent(obj ...*BubbleContainer) (err error) {
|
||||||
|
if len(obj) == 0 {
|
||||||
|
return errors.New("no item")
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
@ -16,6 +16,22 @@ import (
|
|||||||
|
|
||||||
var json = jsoniter.ConfigCompatibleWithStandardLibrary
|
var json = jsoniter.ConfigCompatibleWithStandardLibrary
|
||||||
|
|
||||||
|
// NullString -
|
||||||
|
type NullString *string
|
||||||
|
|
||||||
|
// String -
|
||||||
|
func String(s string) NullString {
|
||||||
|
return &s
|
||||||
|
}
|
||||||
|
|
||||||
|
// NullInt -
|
||||||
|
type NullInt *int
|
||||||
|
|
||||||
|
// Int -
|
||||||
|
func Int(i int) NullInt {
|
||||||
|
return &i
|
||||||
|
}
|
||||||
|
|
||||||
// Line -
|
// Line -
|
||||||
type Line struct {
|
type Line struct {
|
||||||
URL string
|
URL string
|
||||||
@ -23,31 +39,6 @@ type Line struct {
|
|||||||
AccessToken string
|
AccessToken string
|
||||||
}
|
}
|
||||||
|
|
||||||
// Message -
|
|
||||||
type Message struct {
|
|
||||||
Type string `json:"type"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// TextMessage -
|
|
||||||
type TextMessage struct {
|
|
||||||
Message
|
|
||||||
Text string `json:"text"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// ImageMessage -
|
|
||||||
type ImageMessage struct {
|
|
||||||
Message
|
|
||||||
OriginalContentURL string `json:"originalContentUrl"`
|
|
||||||
PreviewImageURL string `json:"previewImageUrl"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// VideoMessage -
|
|
||||||
type VideoMessage struct {
|
|
||||||
Message
|
|
||||||
OriginalContentURL string `json:"originalContentUrl"`
|
|
||||||
PreviewImageURL string `json:"previewImageUrl"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// UserInfo -
|
// UserInfo -
|
||||||
type UserInfo struct {
|
type UserInfo struct {
|
||||||
DisplayName string `json:"displayName"`
|
DisplayName string `json:"displayName"`
|
||||||
@ -103,42 +94,6 @@ func (p *Line) getHeader() (header map[string]string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewTextMessage -
|
|
||||||
func NewTextMessage(text string) (msg TextMessage, err error) {
|
|
||||||
msg = TextMessage{}
|
|
||||||
if len(text) == 0 {
|
|
||||||
return msg, errors.New("message is empty")
|
|
||||||
}
|
|
||||||
|
|
||||||
msg.Type = "text"
|
|
||||||
msg.Text = text
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewImageMessage -
|
|
||||||
func NewImageMessage(originalURL, previewURL string) (msg ImageMessage, err error) {
|
|
||||||
msg = ImageMessage{}
|
|
||||||
if len(originalURL) == 0 || len(previewURL) == 0 {
|
|
||||||
return msg, errors.New("original url or preview url is empty")
|
|
||||||
}
|
|
||||||
msg.Type = "image"
|
|
||||||
msg.OriginalContentURL = originalURL
|
|
||||||
msg.PreviewImageURL = previewURL
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewVideoMessage -
|
|
||||||
func NewVideoMessage(originalURL, previewURL string) (msg VideoMessage, err error) {
|
|
||||||
msg = VideoMessage{}
|
|
||||||
if len(originalURL) == 0 || len(previewURL) == 0 {
|
|
||||||
return msg, errors.New("original url or preview url is empty")
|
|
||||||
}
|
|
||||||
msg.Type = "video"
|
|
||||||
msg.OriginalContentURL = originalURL
|
|
||||||
msg.PreviewImageURL = previewURL
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func checkMessageStruct(msg interface{}) (valid bool) {
|
func checkMessageStruct(msg interface{}) (valid bool) {
|
||||||
switch msg.(type) {
|
switch msg.(type) {
|
||||||
case TextMessage:
|
case TextMessage:
|
||||||
|
71
modules/apiact/line/message.go
Normal file
71
modules/apiact/line/message.go
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
package line
|
||||||
|
|
||||||
|
import "errors"
|
||||||
|
|
||||||
|
// Message -
|
||||||
|
type Message struct {
|
||||||
|
Type string `json:"type"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// TextMessage -
|
||||||
|
type TextMessage struct {
|
||||||
|
Message
|
||||||
|
Text string `json:"text"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ImageMessage -
|
||||||
|
type ImageMessage struct {
|
||||||
|
Message
|
||||||
|
OriginalContentURL string `json:"originalContentUrl"`
|
||||||
|
PreviewImageURL string `json:"previewImageUrl"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// VideoMessage -
|
||||||
|
type VideoMessage struct {
|
||||||
|
Message
|
||||||
|
OriginalContentURL string `json:"originalContentUrl"`
|
||||||
|
PreviewImageURL string `json:"previewImageUrl"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// FlexMessage -
|
||||||
|
type FlexMessage struct {
|
||||||
|
Message
|
||||||
|
AltText string `json:"altText"`
|
||||||
|
Contents interface{} `json:"contents"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewTextMessage -
|
||||||
|
func NewTextMessage(text string) (msg TextMessage, err error) {
|
||||||
|
msg = TextMessage{}
|
||||||
|
if len(text) == 0 {
|
||||||
|
return msg, errors.New("message is empty")
|
||||||
|
}
|
||||||
|
|
||||||
|
msg.Type = "text"
|
||||||
|
msg.Text = text
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewImageMessage -
|
||||||
|
func NewImageMessage(originalURL, previewURL string) (msg ImageMessage, err error) {
|
||||||
|
msg = ImageMessage{}
|
||||||
|
if len(originalURL) == 0 || len(previewURL) == 0 {
|
||||||
|
return msg, errors.New("original url or preview url is empty")
|
||||||
|
}
|
||||||
|
msg.Type = "image"
|
||||||
|
msg.OriginalContentURL = originalURL
|
||||||
|
msg.PreviewImageURL = previewURL
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewVideoMessage -
|
||||||
|
func NewVideoMessage(originalURL, previewURL string) (msg VideoMessage, err error) {
|
||||||
|
msg = VideoMessage{}
|
||||||
|
if len(originalURL) == 0 || len(previewURL) == 0 {
|
||||||
|
return msg, errors.New("original url or preview url is empty")
|
||||||
|
}
|
||||||
|
msg.Type = "video"
|
||||||
|
msg.OriginalContentURL = originalURL
|
||||||
|
msg.PreviewImageURL = previewURL
|
||||||
|
return
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user