kordlib / kord

Idiomatic Kotlin Wrapper for The Discord API
MIT License
929 stars 81 forks source link

Make Kord builder no longer suspend #146

Open BartArys opened 3 years ago

BartArys commented 3 years ago

Kord's builder DSL suspends to figure out the recommended amount of shards from Discord's REST API. When it was originally introduced, it was motivated as a way to automatically scale shards without input from the user. The truth is however, that most bot authors won't be running Kord bots on 1000+ guilds. Most will run a select few dedicated guilds instead, and those running on more won't be using a single kord instance for all their bots anyway.

As such, we should transform the builder to no longer suspend by default and assume a default shard config (1 shard, index 0) that can modified by the user, and allow them to call the suspending function manually. This makes building Kord nicer for third APIs and has the added bonus of skipping an HTTP request, speeding up the startup.

DRSchlaubi commented 3 years ago

I'll actually run Kord on a 4k guilds bot at some point so what about adding both ways

BartArys commented 3 years ago

I'll actually run Kord on a 4k guilds bot at some point so what about adding both ways

This doesn't intend remove the behavior, it merely doesn't make it the default:

and allow them to call the suspending function manually.

conceptually that'd translate itself to something like this:


val kord = Kord(token) {
    shards = fetchRecommendedShards()
}

It should only be a bit of extra work for those who need it, and a decent optimization for those who don't.

DRSchlaubi commented 3 years ago

The builder also calls DataCache.registerKordData() and DataCache.createView() the latter one is actually suspending for no reason but the first one is

DRSchlaubi commented 1 year ago

Relates to #807, #779