This commit introduces a slash commands and autocompletion router. It
abstracts the switch-cases that the user has to do in each
InteractionEvent handler away.
The router is largely inspired by go-chi's design. Refer to the tests
for examples.
* feat: add support for disabling signature verification
* feat: refactor solution to not break api
* feat: make InteractionServer.ServeHTTP use InteractionServer.httpHandler
* Add Tag and TagID for forum capabilities
* set correct json flags
* Fix up naming and minor fixes
Co-authored-by: diamondburned <diamond@arikawa-hi.me>
This commit adds Interaction webhook server support directly into the
library.
Bots can now support both receiving events through the Discord gateway
and the Interaction webhook handler within the same library.
This reverts commit 2aaa2002d8.
The initial goal of this addition is to be used for interaction
followups, but the interaction event already comes with the application
ID.
The addition was also not done properly, and no invalidation on event is
done.
* implement the gateway side of guild scheduled event
* Add proper punctuation to each docstring
* Fix UserAdd and UserRemove events
* Add MANAGE_EVENTS permission
* Implement the API-side of scheduled events
* Add ScheduledEvent method
* Cleanup
* Support modal interactions along with the TextInput component
* Replace ModalInteraction with Modal to prevent confusion
* Fix the required field from not being used correctly
* PR Fixes
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.
- 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.
* api: Adapt Client.EditMessage, SendEmbedReply, and SendMessageReply to take in
multiple embeds
* api: Fix incorrect use of Client.EditMessage
* api: Make EditMessage omit empty content or embeds from payload