initial commit
This commit is contained in:
commit
313bd35b23
8 changed files with 591 additions and 0 deletions
205
component.go
Normal file
205
component.go
Normal file
|
|
@ -0,0 +1,205 @@
|
|||
package discord
|
||||
|
||||
type ComponentType int
|
||||
|
||||
const (
|
||||
ComponentTypeActionRow ComponentType = 1
|
||||
ComponentTypeButton ComponentType = 2
|
||||
ComponentTypeSection ComponentType = 9
|
||||
ComponentTypeText ComponentType = 10
|
||||
ComponentTypeThumbnail ComponentType = 11
|
||||
ComponentTypeSep ComponentType = 14
|
||||
ComponentTypeContainer ComponentType = 17
|
||||
)
|
||||
|
||||
type BaseComponent struct {
|
||||
ID *int `json:"id,omitempty"`
|
||||
Type ComponentType `json:"type"`
|
||||
}
|
||||
|
||||
type ComponentLike interface {
|
||||
Base() BaseComponent
|
||||
}
|
||||
|
||||
type AccessoryLike interface {
|
||||
AccessoryLike() bool
|
||||
}
|
||||
|
||||
type TextDisplayLike interface {
|
||||
TextDisplayLike() bool
|
||||
}
|
||||
|
||||
type ActionRowComponent struct {
|
||||
BaseComponent
|
||||
Components []ComponentLike `json:"components"`
|
||||
}
|
||||
|
||||
func (t ActionRowComponent) Base() BaseComponent {
|
||||
return t.BaseComponent
|
||||
}
|
||||
|
||||
func ActionRow(components ...ComponentLike) ActionRowComponent {
|
||||
return ActionRowComponent{
|
||||
BaseComponent: BaseComponent{
|
||||
Type: ComponentTypeActionRow,
|
||||
},
|
||||
Components: components,
|
||||
}
|
||||
}
|
||||
|
||||
type TextComponent struct {
|
||||
BaseComponent
|
||||
Content string `json:"content"`
|
||||
}
|
||||
|
||||
func (t TextComponent) Base() BaseComponent {
|
||||
return t.BaseComponent
|
||||
}
|
||||
|
||||
func (t TextComponent) TextDisplayLike() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
type ContainerComponent struct {
|
||||
BaseComponent
|
||||
Components any `json:"components"`
|
||||
Color *int `json:"accent_color,omitempty"`
|
||||
}
|
||||
|
||||
func (t ContainerComponent) Base() BaseComponent {
|
||||
return t.BaseComponent
|
||||
}
|
||||
|
||||
type UnfurledMedia struct {
|
||||
URL string `json:"url"`
|
||||
}
|
||||
|
||||
type ThumbnailComponent struct {
|
||||
BaseComponent
|
||||
Media UnfurledMedia `json:"unfurledMedia"`
|
||||
Description string `json:"description"`
|
||||
}
|
||||
|
||||
func (t ThumbnailComponent) Base() BaseComponent {
|
||||
return t.BaseComponent
|
||||
}
|
||||
|
||||
func (t ThumbnailComponent) AccessoryLike() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
type SectionComponent struct {
|
||||
BaseComponent
|
||||
Components []TextDisplayLike `json:"components"`
|
||||
Accessory AccessoryLike `json:"accessory"`
|
||||
}
|
||||
|
||||
func (t SectionComponent) Base() BaseComponent {
|
||||
return t.BaseComponent
|
||||
}
|
||||
|
||||
func Section(text []TextDisplayLike, accessory AccessoryLike) SectionComponent {
|
||||
return SectionComponent{
|
||||
BaseComponent: BaseComponent{
|
||||
Type: ComponentTypeSection,
|
||||
},
|
||||
Components: text,
|
||||
Accessory: accessory,
|
||||
}
|
||||
}
|
||||
|
||||
type SeparatorComponent struct {
|
||||
BaseComponent
|
||||
Divider bool `json:"divider"`
|
||||
Spacing int `json:"spacing"`
|
||||
}
|
||||
|
||||
func (t SeparatorComponent) Base() BaseComponent {
|
||||
return t.BaseComponent
|
||||
}
|
||||
|
||||
type ButtonStyle int
|
||||
|
||||
const (
|
||||
ButtonStylePrimary ButtonStyle = iota + 1
|
||||
ButtonStyleSecondary
|
||||
ButtonStyleSuccess
|
||||
ButtonStyleDanger
|
||||
ButtonStyleLink
|
||||
ButtonStylePremium
|
||||
)
|
||||
|
||||
type ButtonComponent struct {
|
||||
BaseComponent
|
||||
|
||||
Style ButtonStyle `json:"style"`
|
||||
Label string `json:"label"`
|
||||
|
||||
Emoji *PartialEmoji `json:"emoji,omitempty"`
|
||||
CustomID string `json:"custom_id,omitempty"`
|
||||
URL string `json:"url,omitempty"`
|
||||
}
|
||||
|
||||
func (t ButtonComponent) Base() BaseComponent {
|
||||
return t.BaseComponent
|
||||
}
|
||||
|
||||
func (t ButtonComponent) AccessoryLike() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func Container(id int, color *int, components ...any) ContainerComponent {
|
||||
return ContainerComponent{
|
||||
BaseComponent: BaseComponent{
|
||||
ID: &id,
|
||||
Type: ComponentTypeContainer,
|
||||
},
|
||||
Color: color,
|
||||
Components: components,
|
||||
}
|
||||
}
|
||||
|
||||
func Text(id int, content string) TextComponent {
|
||||
return TextComponent{
|
||||
BaseComponent: BaseComponent{
|
||||
ID: &id,
|
||||
Type: ComponentTypeText,
|
||||
},
|
||||
Content: content,
|
||||
}
|
||||
}
|
||||
|
||||
func Separator(id int, divider bool, spacing int) SeparatorComponent {
|
||||
return SeparatorComponent{
|
||||
BaseComponent: BaseComponent{
|
||||
ID: &id,
|
||||
Type: ComponentTypeSep,
|
||||
},
|
||||
Divider: divider,
|
||||
Spacing: spacing,
|
||||
}
|
||||
}
|
||||
|
||||
func Button(style ButtonStyle, customID, label string, emoji *PartialEmoji) ButtonComponent {
|
||||
return ButtonComponent{
|
||||
BaseComponent: BaseComponent{
|
||||
Type: ComponentTypeButton,
|
||||
},
|
||||
Style: style,
|
||||
CustomID: customID,
|
||||
Label: label,
|
||||
Emoji: emoji,
|
||||
}
|
||||
}
|
||||
|
||||
func LinkButton(label, url string, emoji *PartialEmoji) ButtonComponent {
|
||||
return ButtonComponent{
|
||||
BaseComponent: BaseComponent{
|
||||
Type: ComponentTypeButton,
|
||||
},
|
||||
Style: ButtonStyleLink,
|
||||
URL: url,
|
||||
Label: label,
|
||||
Emoji: emoji,
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue