discordoo v0.12.5
WARNING
THIS LIBRARY IS UNDER DEVELOPMENT! Parts of the stuff described here is not done yet, and we are just planning to implement it.
About
Discordoo is a Discord API library interface. It was built from ground-up to provide better and faster APIs, both internal and external, than existing Node.js libraries offer.
Features
- Very scalable in any way — inter-machines sharding, custom modules for events queue
- Really fast — this is not a promise, but real tests
- Convenient to development — we create predictable APIs and take care of the convenience of development
- Caching policies — do not store a cache that your bot does not need
- Flexible in everything — you can replace parts of the library as you need using our providers
- Safe for large bots — global-rate-limit synchronization between shards on one machine, the ability to limit the number of events sent by gateway to your bot per second
- Convenient to monitor — any statistics, from v8 to eventloop lag and events per second, are available for each sharding instance
- Good TypeScript support — the library written in TypeScript, so we naturally support integration with TypeScript well
- Well-documented — instructions for everything, starting from the installation, ending with inter-machines sharding
- Tested — critical components tested using various benchmarks, including testing using N|Solid platform
Let's start
Node.js v12.18 or newer required. 1. Installing 2. First code & starting
Benchmarks
While the library is under development, only Discordoo Collection Benchmarks are available.
D.js collection VS ddoo collection
You can find these benchmarks here.
Planned features
- Waifoo — a framework for creating discord bots based on Discordoo (commands, other features).
- Kawaioo — a library / nestjs microservice that will allow you to interact with the Discordoo ShardingManager over TCP and UDP, to create your own scalable REST API for the bot.
- Voice support — at this moment, the library does not support voice.
- Microservices — injection of microservices into the Client that can communicate with each other.
Release milestone
A complete description of everything that must be in Discordoo to be released
Release deadline: October 30, 2021
Sharding
- Implement sharding
- Shards spawning
- use processes for shards
- use workers for shards
- use clusters for shards (unfortunately, windows not supported)
- Shards communication
- Shards must be able to communicate in fast and scalable way
- Shards must use hello/identify algorithm
- Shards must use heartbeat algorithm
- Shards must be able to send, receive and handle CACHE_OPERATE messages
- Shards must be able to send errors to ShardingManager, manager must handle these errors
User-land APIs
- User must be able to spawn shards
- User must be able to restart specified shard(s)
- User must be able to destroy shard(s)
- User must be able to get shard(s) statistics
- v8 statistics
- eventloop lag
- custom statistics
- events per gateway shard per second statistics
- common statistics (guilds in cache, users in cache, channels in cache, other)
- User-friendly sharding APIs in sharding instances
Gateway
- Implement gateway
- Implement gateway provider
- Connecting to gateway
- Reconnecting/resuming in common/emergency cases
- Receive and send etf encoded messages
- Receive and decode zlib-compressed messages
- Multi gateway shards support in one WebSocketManager instance
- Processing events/s smoothing/limiting
- Handling gateway rate limits
- Send events to WebSocketManager, and then to GatewayProvider
- Gateway must be able to restart only specified shard(s)
Rest
- Implement rest
- Implement rest provider - rest request (like constructor) & rest provider (performs requests and handles rate-limits)
- Requests
- Sending requests to Discord
- Responses
- Unified response form for library internals
Rate-limits
- Rest must smartly-handle rate-limits using
remaining
header - Rest must synchronize global-rate-limit between shards on one machine
- Rest must smartly-handle rate-limits using
Cache
- Implement cache
- Implement cache provider
- Library must be able to store something
- Library must be able to delete something from cache
- Library must be able to check cache size
- Library must be able to sweep cache using predicate and cycle
- Library must be able to iterate cache
- Library must be able to operate with cache in a different shards from one shard
Caching policies
- Cache must handle GlobalCachingPolicy
- Cache must handle MessagesCachingPolicy
- Cache must handle GuildsCachingPolicy
- Cache must handle MembersCachingPolicy
- Cache must handle ChannelsCachingPolicy
- Cache must handle EmojisCachingPolicy
- Cache must handle RolesCachingPolicy
- Cache must handle PresencesCachingPolicy
- Cache must handle UsersCachingPolicy
- All the policies listed above must be able to handle custom caching functions
Entities (discord structures)
- Must be extendable
- Anti monkey-patch defence
- Implement Guilds
- Implement Messages
- Implement Channels
- Implement Emojis
- Implement Roles
- Implement Presences
- Implement Users
User-land APIs
- Collection
- Wrapper
- Entities managers
- BaseManager
- GuildsManager
- MessagesManager
- ChannelsManager
- EmojisManager
- RolesManager
- PresencesManager
- UsersManager
Contributing
Feel free to create a PR, but check if there is an existing one. See Contributing Guide.
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
3 years ago
3 years ago
3 years ago
4 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago