@phamleduy04/cheshire
v2.0.7
Published
TLRU / LRU cache based on @discordjs/collections
Downloads
15
Maintainers
Readme
Cheshire
Your maid catgirl cache manager based on Collections and TLRU
Supports both TLRU or LRU cache modes
The ShipGirl Project; ⓒ Azur Lane
Installation
- For stable release
npm i github:Deivu/Cheshire#2.0.2
Documentation
https://deivu.github.io/Cheshire/
What is LRU and TLRU?
LRU cache behavior can be found in: https://en.wikipedia.org/wiki/Cache_replacement_policies#Least_recently_used_(LRU)
TLRU cache behavior can be found in: https://en.wikipedia.org/wiki/Cache_replacement_policies#Time_aware_least_recently_used_(TLRU)
Example Usage (Discord.JS V13)
const { Collection } = require('@discordjs/collection');
const { Cheshire } = require('cheshire');
const MessageCache = new Cheshire({
limit: 100,
lifetime: 1.8e+6
});
/*
* A use case of custom executor, return true if an item must be deleted, or false if an item should be rescheduled for deletion
* The code below is an example of the usecase of an executor.
* Some key points points here is:
* "key" refers to the key of the item in this instance
* "value" refers to the value of the item in this instance
*/
const UserCache = new Cheshire({
lifetime: 3.6e+6,
executor: (key, value) => {
// In this case I don't want to touch my bot user cache, so it would just reschedule itself again
if (key === value.client.user.id) return false;
// In this example, I don't want to uncache users / members that is on a voice channel
const inVoice = value.client.guilds.cache.some(guild => guild.members.cache.some(member => key === member.id && member.voice.channelId));
if (inVoice) return false;
// You can also delete other caches in here, example member cache since we know this user isn't on voice
value.client.guilds.cache.each(guild => guild.members.cache.sweep(member => key === member.id));
// In this point since we already checked our filters, we can safetly say we want to delete this user
return true;
}
});
// Client is your Discord.JS client
const client = new Client({
makeCache: manager => {
if (manager.name === 'MessageManager') return MessageCache;
else if (manager.name === 'UserManager') return UserCache;
else return new Collection();
},
});