This commit refactors the whole package gateway as well as utils/ws
(formerly utils/wsutil) and voice/voicegateway. The new refactor
utilizes a design pattern involving a concurrent loop and an arriving
event channel.
An additional change was made to the way gateway events are typed.
Before, pretty much any type will satisfy a gateway event type, since
the actual type was just interface{}. The new refactor defines a
concrete interface that events can implement:
type Event interface {
Op() OpCode
EventType() EventType
}
Using this interface, the user can easily add custom gateway events
independently of the library without relying on string maps. This adds a
lot of type safety into the library and makes type-switching on Event
types much more reasonable.
Gateway error callbacks are also almost entirely removed in favor of
custom gateway events. A catch-all can easily be added like this:
s.AddHandler(func(err error) {
log.Println("gateway error:, err")
})
This commit gets rid of contain-it-all structs and instead opt for
interface union types containing underlying concrete types with no
overloading.
The code is much more verbose by doing this, but the API is much nicer
to use. The only disadvantage in that regard is the interface assertion
being too verbose and risky for users at times.
* discord: update permission constants
* discord: update MessageType constants, add ephemeral field to Attachment
Renamed ApplicationCommandMessage to ChatInputCommandMessage and add
ContextMenuCommand. Add the ephemeral field to Attachment.
* discord: add version field to Command
* gateway: remove ApplicationCommandUpdateEvent
52f1824451
- Moved gateway.InteractionCreateData to discord.Interaction, now
gateway.InteractionCreateData is a struct that wraps
discord.Interaction.
- Split InteractionData into CommandInteractionData and
ComponentInteractionData.
- Renamed ButtonInteraction to ComponentInteraction.
- Updated api.CommandCreateData to add new fields.
- Update Component types' Type() methods to pointer receivers.
* feat(discord): add banner & accent_color field to User struct
* feat(discord): use type Color (uint32) for User.AccentColor
* discord: change field name to Accent
* Update Sticker struct & add missing fields
* Remove PreviewAsset field from Sticker
Co-authored-by: Maximilian von Lindern <maximilian.v.lindern@gmail.com>
* Update discord/message.go
Co-authored-by: Maximilian von Lindern <maximilian.v.lindern@gmail.com>
* Change Sticker.User type to *User
Co-authored-by: Maximilian von Lindern <maximilian.v.lindern@gmail.com>
* Update discord/message.go
Co-authored-by: Maximilian von Lindern <maximilian.v.lindern@gmail.com>
* Sticker types start from 0
Co-authored-by: Maximilian von Lindern <maximilian.v.lindern@gmail.com>
* Change Sticker.SortValue type to *int
Co-authored-by: Maximilian von Lindern <maximilian.v.lindern@gmail.com>
* Remove extra space
* Un-ignore Sticker.Tags field
Co-authored-by: Maximilian von Lindern <maximilian.v.lindern@gmail.com>
Co-authored-by: Maximilian von Lindern <maximilian.v.lindern@gmail.com>
api.{Send,Edit}MessageData and their equivalents in package api/webhook
have been updated to add some fields added in Discord API v9.
(webhook.Client).EditMessage now also returns a message, because that
endpoint returns a message on success.