| Crates.io | twilight-cache-inmemory |
| lib.rs | twilight-cache-inmemory |
| version | 0.16.0 |
| created_at | 2020-08-30 02:55:24.406929+00 |
| updated_at | 2025-01-12 09:44:16.645228+00 |
| description | In-process-memory based cache for the Twilight ecosystem. |
| homepage | https://twilight.rs/chapter_1_crates/section_4_cache_inmemory.html |
| repository | https://github.com/twilight-rs/twilight.git |
| max_upload_size | |
| id | 282538 |
| size | 311,018 |
twilight-cache-inmemory is an in-process-memory cache for the
twilight-rs ecosystem. It's responsible for processing events and
caching things like guilds, channels, users, and voice states.
Statistics can be an important debugging tool for determining how large a
cache is or determining whether a cache has an expected amount of resources
within it. An interface for retrieving statistics about the amount of a
resource within the cache as a whole or on a guild-level can be retrieved
via [InMemoryCache::stats].
By default no feature is enabled.
permission-calculatorThe permission-calculator feature flag will bring in support for the
PermissionCalculator; an API for calculating permissions through it is
exposed via InMemoryCache::permissions. Support for calculating the
permissions of a member on a root guild-level and in a guild channel is
included.
Refer to the permission module for more documentation.
Update a cache with events that come in through the gateway:
use std::{env, error::Error};
use twilight_cache_inmemory::DefaultInMemoryCache;
use twilight_gateway::{EventTypeFlags, Intents, Shard, ShardId, StreamExt as _};
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
// Initialize the tracing subscriber.
tracing_subscriber::fmt::init();
let token = env::var("DISCORD_TOKEN")?;
let mut shard = Shard::new(ShardId::ONE, token, Intents::GUILD_MESSAGES);
// Create a cache, caching up to 10 messages per channel:
let cache = DefaultInMemoryCache::builder().message_cache_size(10).build();
while let Some(item) = shard.next_event(EventTypeFlags::all()).await {
let Ok(event) = item else {
tracing::warn!(source = ?item.unwrap_err(), "error receiving event");
continue;
};
// Update the cache with the event.
cache.update(&event);
}
Ok(())
}
All first-party crates are licensed under ISC