The Events
object
Let’s look a bit more in-depth into how the Events
object in AckCord works.
The cache
The main thing stored in here is the cache. Not a snapshot of the cache,
just the cache. At its core, the cache is a sink, which takes cache updates,
a source which supplies these cache updates, and a flow which applies the
updates to the current state. Both of these streams can be materialized as
many times as needed. Currently the only update types
are APIMessageCacheUpdate
and MiscCacheUpdate
. Use MiscCacheUpdate
if you
want to modify the cache in some way yourself.
APIMessage
So, what is an APIMessage
then? An APIMessage
is a more straightforward
type for working with cache updates, where the update type
is APIMessageCacheUpdate
.
Publishing to the cache
You can also publish other changes to the cache. In most cases, you can use the
utility methods on the cache object itself (publishSingle
, publishMany
)
Gateway events
Something else that the events object also gives you access to is the raw events
coming from the Discord gateway. These are not processed in any way. This can be
both a positive and negative. Postive as you will always receive the event,
even if something went wrong in creating the APIMessage
object. Negative as
you need to handle the raw version of the objects coming from the gateway.
Publishing to the gateway
While most requests are made through HTTP requests, there are some that are done
through the gateway. The Cache
object contains a Sink
called sendGatewayPublish
that you use, to publish these requests. The valid requests to send to this Sink
are StatusUpdate
, VoiceStateUpdate
, VoiceServerUpdate
and RequestGuildMembers
.