From 66e344bd5050c7b4844798214cb1bc2d658f95dc Mon Sep 17 00:00:00 2001 From: ByteAlex Date: Thu, 16 Sep 2021 18:38:12 +0200 Subject: [PATCH 01/12] Make MasterGateway an interface and provide DefaultMasterGateway --- core/src/main/kotlin/Kord.kt | 2 +- .../main/kotlin/builder/kord/KordBuilder.kt | 4 +- .../builder/kord/KordRestOnlyBuilder.kt | 4 +- .../kotlin/gateway/DefaultMasterGateway.kt | 42 +++++++++++++++ core/src/main/kotlin/gateway/MasterGateway.kt | 52 ++++++------------- .../test/kotlin/gateway/MasterGatewayTest.kt | 10 ++-- .../kotlin/live/AbstractLiveEntityTest.kt | 4 +- .../kotlin/performance/KordEventDropTest.kt | 4 +- .../kotlin/regression/CacheMissRegression.kt | 4 +- .../supplier/CacheEntitySupplierTest.kt | 4 +- 10 files changed, 77 insertions(+), 53 deletions(-) create mode 100644 core/src/main/kotlin/gateway/DefaultMasterGateway.kt diff --git a/core/src/main/kotlin/Kord.kt b/core/src/main/kotlin/Kord.kt index cbec8526cdf7..8fa884ec4137 100644 --- a/core/src/main/kotlin/Kord.kt +++ b/core/src/main/kotlin/Kord.kt @@ -3,7 +3,6 @@ package dev.kord.core import dev.kord.cache.api.DataCache import dev.kord.common.annotation.DeprecatedSinceKord import dev.kord.common.annotation.KordExperimental -import dev.kord.common.annotation.KordPreview import dev.kord.common.annotation.KordUnsafe import dev.kord.common.entity.DiscordShard import dev.kord.common.entity.PresenceStatus @@ -22,6 +21,7 @@ import dev.kord.core.exception.EntityNotFoundException import dev.kord.core.exception.KordInitializationException import dev.kord.core.gateway.MasterGateway import dev.kord.core.gateway.handler.GatewayEventInterceptor +import dev.kord.core.gateway.start import dev.kord.core.supplier.* import dev.kord.gateway.Gateway import dev.kord.gateway.builder.PresenceBuilder diff --git a/core/src/main/kotlin/builder/kord/KordBuilder.kt b/core/src/main/kotlin/builder/kord/KordBuilder.kt index 910ef1d71c35..e2996704de84 100644 --- a/core/src/main/kotlin/builder/kord/KordBuilder.kt +++ b/core/src/main/kotlin/builder/kord/KordBuilder.kt @@ -13,7 +13,7 @@ import dev.kord.core.cache.createView import dev.kord.core.cache.registerKordData import dev.kord.core.event.Event import dev.kord.core.exception.KordInitializationException -import dev.kord.core.gateway.MasterGateway +import dev.kord.core.gateway.DefaultMasterGateway import dev.kord.core.supplier.EntitySupplyStrategy import dev.kord.gateway.DefaultGateway import dev.kord.gateway.Gateway @@ -245,7 +245,7 @@ class KordBuilder(val token: String) { put(shard, gateways[index]) } } - MasterGateway(gateways) + DefaultMasterGateway(gateways) } val self = getBotIdFromToken(token) diff --git a/core/src/main/kotlin/builder/kord/KordRestOnlyBuilder.kt b/core/src/main/kotlin/builder/kord/KordRestOnlyBuilder.kt index c6b267ea1dfb..c2e6bdb0a693 100644 --- a/core/src/main/kotlin/builder/kord/KordRestOnlyBuilder.kt +++ b/core/src/main/kotlin/builder/kord/KordRestOnlyBuilder.kt @@ -7,7 +7,7 @@ import dev.kord.core.ClientResources import dev.kord.core.Kord import dev.kord.core.event.Event import dev.kord.core.exception.KordInitializationException -import dev.kord.core.gateway.MasterGateway +import dev.kord.core.gateway.DefaultMasterGateway import dev.kord.core.supplier.EntitySupplyStrategy import dev.kord.gateway.Gateway import dev.kord.gateway.Intents @@ -75,7 +75,7 @@ class KordRestOnlyBuilder(val token: String) { return Kord( resources, DataCache.none(), - MasterGateway(mapOf(0 to Gateway.none())), + DefaultMasterGateway(mapOf(0 to Gateway.none())), rest, selfId, MutableSharedFlow(), diff --git a/core/src/main/kotlin/gateway/DefaultMasterGateway.kt b/core/src/main/kotlin/gateway/DefaultMasterGateway.kt new file mode 100644 index 000000000000..4cb37a902a40 --- /dev/null +++ b/core/src/main/kotlin/gateway/DefaultMasterGateway.kt @@ -0,0 +1,42 @@ +package dev.kord.core.gateway + +import dev.kord.gateway.* +import kotlinx.coroutines.FlowPreview +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.flattenMerge +import kotlinx.coroutines.flow.map +import kotlin.time.Duration + +data class ShardEvent(val event: Event, val gateway: Gateway, val shard: Int) + +class DefaultMasterGateway( + override val gateways: Map, +): MasterGateway { + + /** + * Calculates the average [Gateway.ping] of all running [gateways]. + * + * Gateways that return `null` are not counted into the average, if all [gateways] + * return `null` then this property will return `null` as well. + */ + override val averagePing + get(): Duration? { + val pings = gateways.values.mapNotNull { it.ping.value?.inWholeMicroseconds } + if (pings.isEmpty()) return null + + return Duration.microseconds(pings.average()) + } + + + @OptIn(FlowPreview::class) + override val events: Flow = gateways.entries.asFlow() + .map { (shard, gateway) -> gateway.events.map { ShardEvent(it, gateway, shard) } } + .flattenMerge(gateways.size.coerceAtLeast(1)) + + + override fun toString(): String { + return "MasterGateway(gateways=$gateways)" + } + +} diff --git a/core/src/main/kotlin/gateway/MasterGateway.kt b/core/src/main/kotlin/gateway/MasterGateway.kt index fc1d68a879f1..dc2e190fa45d 100644 --- a/core/src/main/kotlin/gateway/MasterGateway.kt +++ b/core/src/main/kotlin/gateway/MasterGateway.kt @@ -1,21 +1,18 @@ package dev.kord.core.gateway -import dev.kord.gateway.* +import dev.kord.gateway.Command +import dev.kord.gateway.Gateway +import dev.kord.gateway.GatewayConfiguration +import dev.kord.gateway.GatewayConfigurationBuilder import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.asFlow -import kotlinx.coroutines.flow.flattenMerge -import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import kotlin.time.Duration -import kotlin.time.microseconds +import kotlin.time.ExperimentalTime -data class ShardEvent(val event: Event, val gateway: Gateway, val shard: Int) - -class MasterGateway( - val gateways: Map, -) { +interface MasterGateway { + val gateways: Map /** * Calculates the average [Gateway.ping] of all running [gateways]. @@ -23,24 +20,14 @@ class MasterGateway( * Gateways that return `null` are not counted into the average, if all [gateways] * return `null` then this property will return `null` as well. */ - val averagePing - get(): Duration? { - val pings = gateways.values.mapNotNull { it.ping.value?.inWholeMicroseconds } - if (pings.isEmpty()) return null - - return Duration.microseconds(pings.average()) - } + @OptIn(ExperimentalTime::class) + val averagePing: Duration? @OptIn(FlowPreview::class) - val events: Flow = gateways.entries.asFlow() - .map { (shard, gateway) -> gateway.events.map { ShardEvent(it, gateway, shard) } } - .flattenMerge(gateways.size.coerceAtLeast(1)) + val events: Flow - /** - * Calls [Gateway.start] on each Gateway in [gateways], changing the [GatewayConfiguration.shard] for each Gateway. - */ - suspend fun start(configuration: GatewayConfiguration): Unit = coroutineScope { + suspend fun startWithConfig(configuration: GatewayConfiguration): Unit = coroutineScope { gateways.entries.forEach { (shard, gateway) -> val config = configuration.copy(shard = configuration.shard.copy(index = shard)) launch { @@ -49,20 +36,15 @@ class MasterGateway( } } - suspend inline fun start(token: String, config: GatewayConfigurationBuilder.() -> Unit = {}) { - val builder = GatewayConfigurationBuilder(token) - builder.apply(config) - start(builder.build()) - } - suspend fun sendAll(command: Command) = gateways.values.forEach { it.send(command) } suspend fun detachAll() = gateways.values.forEach { it.detach() } suspend fun stopAll() = gateways.values.forEach { it.stop() } - - override fun toString(): String { - return "MasterGateway(gateways=$gateways)" - } - } + +suspend inline fun MasterGateway.start(token: String, config: GatewayConfigurationBuilder.() -> Unit = {}) { + val builder = GatewayConfigurationBuilder(token) + builder.apply(config) + startWithConfig(builder.build()) +} \ No newline at end of file diff --git a/core/src/test/kotlin/gateway/MasterGatewayTest.kt b/core/src/test/kotlin/gateway/MasterGatewayTest.kt index b39c4c0cae79..14a1dc009930 100644 --- a/core/src/test/kotlin/gateway/MasterGatewayTest.kt +++ b/core/src/test/kotlin/gateway/MasterGatewayTest.kt @@ -1,6 +1,6 @@ package gateway -import dev.kord.core.gateway.MasterGateway +import dev.kord.core.gateway.DefaultMasterGateway import dev.kord.gateway.Command import dev.kord.gateway.Event import dev.kord.gateway.Gateway @@ -14,7 +14,7 @@ import kotlin.coroutines.CoroutineContext import kotlin.coroutines.EmptyCoroutineContext import kotlin.time.Duration -internal class MasterGatewayTest { +internal class DefaultMasterGatewayTest { @Test fun `Gateway takes ping of single child`(){ @@ -23,7 +23,7 @@ internal class MasterGatewayTest { dummy.ping.value = ping - val gateway = MasterGateway( + val gateway = DefaultMasterGateway( mapOf(0 to dummy) ) @@ -40,7 +40,7 @@ internal class MasterGatewayTest { dummy1.ping.value = ping1 dummy2.ping.value = ping2 - val gateway = MasterGateway( + val gateway = DefaultMasterGateway( mapOf(0 to dummy1, 1 to dummy2) ) @@ -51,7 +51,7 @@ internal class MasterGatewayTest { fun `Gateway returns null ping when no gateway pings`(){ val dummy = DummyGateway() - val gateway = MasterGateway( + val gateway = DefaultMasterGateway( mapOf(0 to dummy) ) diff --git a/core/src/test/kotlin/live/AbstractLiveEntityTest.kt b/core/src/test/kotlin/live/AbstractLiveEntityTest.kt index a4327a556c85..9b12ba75db9d 100644 --- a/core/src/test/kotlin/live/AbstractLiveEntityTest.kt +++ b/core/src/test/kotlin/live/AbstractLiveEntityTest.kt @@ -6,7 +6,7 @@ import dev.kord.common.entity.Snowflake import dev.kord.core.ClientResources import dev.kord.core.Kord import dev.kord.core.builder.kord.Shards -import dev.kord.core.gateway.MasterGateway +import dev.kord.core.gateway.DefaultMasterGateway import dev.kord.core.live.AbstractLiveKordEntity import dev.kord.core.supplier.EntitySupplyStrategy import dev.kord.gateway.* @@ -105,7 +105,7 @@ abstract class AbstractLiveEntityTest { return Kord( resources = ClientResources("token", Snowflake(0u), Shards(1), HttpClient(), EntitySupplyStrategy.cache, Intents.none), cache = DataCache.none(), - MasterGateway(mapOf(0 to gateway)), + DefaultMasterGateway(mapOf(0 to gateway)), RestClient(KtorRequestHandler(token = "token")), randomId(), MutableSharedFlow(extraBufferCapacity = Int.MAX_VALUE), diff --git a/core/src/test/kotlin/performance/KordEventDropTest.kt b/core/src/test/kotlin/performance/KordEventDropTest.kt index a91d9a3f0794..7f2d2986e716 100644 --- a/core/src/test/kotlin/performance/KordEventDropTest.kt +++ b/core/src/test/kotlin/performance/KordEventDropTest.kt @@ -6,7 +6,7 @@ import dev.kord.core.ClientResources import dev.kord.core.Kord import dev.kord.core.builder.kord.Shards import dev.kord.core.event.guild.GuildCreateEvent -import dev.kord.core.gateway.MasterGateway +import dev.kord.core.gateway.DefaultMasterGateway import dev.kord.core.on import dev.kord.core.supplier.EntitySupplyStrategy import dev.kord.gateway.* @@ -49,7 +49,7 @@ class KordEventDropTest { val kord = Kord( resources = ClientResources("token", Snowflake(0u), Shards(1), HttpClient(), EntitySupplyStrategy.cache, Intents.none), cache = DataCache.none(), - MasterGateway(mapOf(0 to SpammyGateway)), + DefaultMasterGateway(mapOf(0 to SpammyGateway)), RestClient(KtorRequestHandler("token", clock = Clock.System)), Snowflake("420"), MutableSharedFlow(extraBufferCapacity = Int.MAX_VALUE), diff --git a/core/src/test/kotlin/regression/CacheMissRegression.kt b/core/src/test/kotlin/regression/CacheMissRegression.kt index 34aaa8e4fabe..c5e2bcf60a78 100644 --- a/core/src/test/kotlin/regression/CacheMissRegression.kt +++ b/core/src/test/kotlin/regression/CacheMissRegression.kt @@ -11,7 +11,7 @@ import dev.kord.core.builder.kord.configure import dev.kord.core.builder.kord.getBotIdFromToken import dev.kord.core.cache.data.ChannelData import dev.kord.core.cache.registerKordData -import dev.kord.core.gateway.MasterGateway +import dev.kord.core.gateway.DefaultMasterGateway import dev.kord.core.supplier.EntitySupplyStrategy import dev.kord.gateway.* import dev.kord.rest.request.JsonRequest @@ -131,7 +131,7 @@ class CacheMissingRegressions { kord = Kord( resources, MapDataCache().also { it.registerKordData() }, - MasterGateway(mapOf(0 to FakeGateway)), + DefaultMasterGateway(mapOf(0 to FakeGateway)), RestClient(CrashingHandler(resources.httpClient)), getBotIdFromToken(token), MutableSharedFlow(extraBufferCapacity = Int.MAX_VALUE), diff --git a/core/src/test/kotlin/supplier/CacheEntitySupplierTest.kt b/core/src/test/kotlin/supplier/CacheEntitySupplierTest.kt index 45476939e875..b544d89e46fe 100644 --- a/core/src/test/kotlin/supplier/CacheEntitySupplierTest.kt +++ b/core/src/test/kotlin/supplier/CacheEntitySupplierTest.kt @@ -7,7 +7,7 @@ import dev.kord.core.ClientResources import dev.kord.core.Kord import dev.kord.core.builder.kord.Shards import dev.kord.core.cache.KordCacheBuilder -import dev.kord.core.gateway.MasterGateway +import dev.kord.core.gateway.DefaultMasterGateway import dev.kord.gateway.Gateway import dev.kord.gateway.Intents import dev.kord.gateway.PrivilegedIntent @@ -28,7 +28,7 @@ internal class CacheEntitySupplierTest { val kord = Kord( ClientResources("", Snowflake(0u), Shards(0), HttpClient(), EntitySupplyStrategy.cache, Intents.all), KordCacheBuilder().build(), - MasterGateway(mapOf(0 to Gateway.none())), + DefaultMasterGateway(mapOf(0 to Gateway.none())), RestClient(KtorRequestHandler("")), Snowflake(0u), MutableSharedFlow(), From 7c637f36fff833705b274541ec590bf18eddc189 Mon Sep 17 00:00:00 2001 From: ByteAlex Date: Thu, 16 Sep 2021 18:42:17 +0200 Subject: [PATCH 02/12] Declare ShardEvent in MasterGateway instead of DefaultMasterGateway --- core/src/main/kotlin/gateway/DefaultMasterGateway.kt | 2 -- core/src/main/kotlin/gateway/MasterGateway.kt | 7 +++---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/core/src/main/kotlin/gateway/DefaultMasterGateway.kt b/core/src/main/kotlin/gateway/DefaultMasterGateway.kt index 4cb37a902a40..f520722d4967 100644 --- a/core/src/main/kotlin/gateway/DefaultMasterGateway.kt +++ b/core/src/main/kotlin/gateway/DefaultMasterGateway.kt @@ -8,8 +8,6 @@ import kotlinx.coroutines.flow.flattenMerge import kotlinx.coroutines.flow.map import kotlin.time.Duration -data class ShardEvent(val event: Event, val gateway: Gateway, val shard: Int) - class DefaultMasterGateway( override val gateways: Map, ): MasterGateway { diff --git a/core/src/main/kotlin/gateway/MasterGateway.kt b/core/src/main/kotlin/gateway/MasterGateway.kt index dc2e190fa45d..4d527377009a 100644 --- a/core/src/main/kotlin/gateway/MasterGateway.kt +++ b/core/src/main/kotlin/gateway/MasterGateway.kt @@ -1,9 +1,6 @@ package dev.kord.core.gateway -import dev.kord.gateway.Command -import dev.kord.gateway.Gateway -import dev.kord.gateway.GatewayConfiguration -import dev.kord.gateway.GatewayConfigurationBuilder +import dev.kord.gateway.* import kotlinx.coroutines.FlowPreview import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.Flow @@ -11,6 +8,8 @@ import kotlinx.coroutines.launch import kotlin.time.Duration import kotlin.time.ExperimentalTime +data class ShardEvent(val event: Event, val gateway: Gateway, val shard: Int) + interface MasterGateway { val gateways: Map From eaeb041042443ed8c1b68a66716a9ca93223785c Mon Sep 17 00:00:00 2001 From: ByteAlex Date: Thu, 16 Sep 2021 18:43:20 +0200 Subject: [PATCH 03/12] Remove OptIn: My IDE complained, but it was not in the original source --- core/src/main/kotlin/gateway/MasterGateway.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/core/src/main/kotlin/gateway/MasterGateway.kt b/core/src/main/kotlin/gateway/MasterGateway.kt index 4d527377009a..a20ca4e636de 100644 --- a/core/src/main/kotlin/gateway/MasterGateway.kt +++ b/core/src/main/kotlin/gateway/MasterGateway.kt @@ -6,7 +6,6 @@ import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.launch import kotlin.time.Duration -import kotlin.time.ExperimentalTime data class ShardEvent(val event: Event, val gateway: Gateway, val shard: Int) @@ -19,7 +18,6 @@ interface MasterGateway { * Gateways that return `null` are not counted into the average, if all [gateways] * return `null` then this property will return `null` as well. */ - @OptIn(ExperimentalTime::class) val averagePing: Duration? From 7347f0b05dc911fb4fe19ba6bf0f6937209d208a Mon Sep 17 00:00:00 2001 From: ByteAlex Date: Thu, 16 Sep 2021 23:40:15 +0200 Subject: [PATCH 04/12] Add extraContext field to kord --- core/src/main/kotlin/Kord.kt | 6 +++++- core/src/main/kotlin/builder/kord/KordBuilder.kt | 3 ++- .../kotlin/builder/kord/KordRestOnlyBuilder.kt | 3 ++- core/src/main/kotlin/event/Event.kt | 2 +- .../test/kotlin/live/AbstractLiveEntityTest.kt | 3 ++- .../test/kotlin/performance/KordEventDropTest.kt | 3 ++- .../test/kotlin/regression/CacheMissRegression.kt | 3 ++- .../kotlin/supplier/CacheEntitySupplierTest.kt | 15 ++++++++------- 8 files changed, 24 insertions(+), 14 deletions(-) diff --git a/core/src/main/kotlin/Kord.kt b/core/src/main/kotlin/Kord.kt index 8fa884ec4137..84f74bb6a37c 100644 --- a/core/src/main/kotlin/Kord.kt +++ b/core/src/main/kotlin/Kord.kt @@ -53,6 +53,7 @@ class Kord( val selfId: Snowflake, private val eventFlow: MutableSharedFlow, dispatcher: CoroutineDispatcher, + val extraContext: (Event.() -> CoroutineContext)? ) : CoroutineScope { private val interceptor = GatewayEventInterceptor(this, gateway, cache, eventFlow) @@ -596,6 +597,9 @@ suspend inline fun Kord(token: String, builder: KordBuilder.() -> Unit = {}): Ko inline fun Kord.on(scope: CoroutineScope = this, noinline consumer: suspend T.() -> Unit): Job = events.buffer(CoroutineChannel.UNLIMITED).filterIsInstance() .onEach { - scope.launch { runCatching { consumer(it) }.onFailure { kordLogger.catching(it) } } + val context = extraContext + ?.let { builder -> scope.coroutineContext + builder.invoke(it) } + ?: scope.coroutineContext + scope.launch(context) { runCatching { consumer(it) }.onFailure { kordLogger.catching(it) } } } .launchIn(scope) diff --git a/core/src/main/kotlin/builder/kord/KordBuilder.kt b/core/src/main/kotlin/builder/kord/KordBuilder.kt index e2996704de84..9b3e3e4f848a 100644 --- a/core/src/main/kotlin/builder/kord/KordBuilder.kt +++ b/core/src/main/kotlin/builder/kord/KordBuilder.kt @@ -265,7 +265,8 @@ class KordBuilder(val token: String) { rest, self, eventFlow, - defaultDispatcher + defaultDispatcher, + null ) } diff --git a/core/src/main/kotlin/builder/kord/KordRestOnlyBuilder.kt b/core/src/main/kotlin/builder/kord/KordRestOnlyBuilder.kt index c2e6bdb0a693..208cdbaa1350 100644 --- a/core/src/main/kotlin/builder/kord/KordRestOnlyBuilder.kt +++ b/core/src/main/kotlin/builder/kord/KordRestOnlyBuilder.kt @@ -79,7 +79,8 @@ class KordRestOnlyBuilder(val token: String) { rest, selfId, MutableSharedFlow(), - defaultDispatcher + defaultDispatcher, + null ) } } \ No newline at end of file diff --git a/core/src/main/kotlin/event/Event.kt b/core/src/main/kotlin/event/Event.kt index e9c5b6d69bfb..3618e140f935 100644 --- a/core/src/main/kotlin/event/Event.kt +++ b/core/src/main/kotlin/event/Event.kt @@ -7,7 +7,7 @@ import kotlin.coroutines.CoroutineContext interface Event : CoroutineScope { override val coroutineContext: CoroutineContext - get() = kord.coroutineContext + get() = kord.extraContext?.let { kord.coroutineContext + it.invoke(this) } ?: kord.coroutineContext /** * The Gateway that spawned this event. diff --git a/core/src/test/kotlin/live/AbstractLiveEntityTest.kt b/core/src/test/kotlin/live/AbstractLiveEntityTest.kt index 9b12ba75db9d..bc625d02dfdb 100644 --- a/core/src/test/kotlin/live/AbstractLiveEntityTest.kt +++ b/core/src/test/kotlin/live/AbstractLiveEntityTest.kt @@ -109,7 +109,8 @@ abstract class AbstractLiveEntityTest { RestClient(KtorRequestHandler(token = "token")), randomId(), MutableSharedFlow(extraBufferCapacity = Int.MAX_VALUE), - Dispatchers.Default + Dispatchers.Default, + null ) } diff --git a/core/src/test/kotlin/performance/KordEventDropTest.kt b/core/src/test/kotlin/performance/KordEventDropTest.kt index 7f2d2986e716..c8e38a4d2724 100644 --- a/core/src/test/kotlin/performance/KordEventDropTest.kt +++ b/core/src/test/kotlin/performance/KordEventDropTest.kt @@ -53,7 +53,8 @@ class KordEventDropTest { RestClient(KtorRequestHandler("token", clock = Clock.System)), Snowflake("420"), MutableSharedFlow(extraBufferCapacity = Int.MAX_VALUE), - Dispatchers.Default + Dispatchers.Default, + null ) @Test diff --git a/core/src/test/kotlin/regression/CacheMissRegression.kt b/core/src/test/kotlin/regression/CacheMissRegression.kt index c5e2bcf60a78..fb945d3ba4a8 100644 --- a/core/src/test/kotlin/regression/CacheMissRegression.kt +++ b/core/src/test/kotlin/regression/CacheMissRegression.kt @@ -135,7 +135,8 @@ class CacheMissingRegressions { RestClient(CrashingHandler(resources.httpClient)), getBotIdFromToken(token), MutableSharedFlow(extraBufferCapacity = Int.MAX_VALUE), - Dispatchers.Default + Dispatchers.Default, + null ) } diff --git a/core/src/test/kotlin/supplier/CacheEntitySupplierTest.kt b/core/src/test/kotlin/supplier/CacheEntitySupplierTest.kt index b544d89e46fe..302529faac22 100644 --- a/core/src/test/kotlin/supplier/CacheEntitySupplierTest.kt +++ b/core/src/test/kotlin/supplier/CacheEntitySupplierTest.kt @@ -26,13 +26,14 @@ internal class CacheEntitySupplierTest { @OptIn(PrivilegedIntent::class, KordUnsafe::class, KordExperimental::class) fun `cache does not throw when accessing unregistered entities`(): Unit = runBlocking { val kord = Kord( - ClientResources("", Snowflake(0u), Shards(0), HttpClient(), EntitySupplyStrategy.cache, Intents.all), - KordCacheBuilder().build(), - DefaultMasterGateway(mapOf(0 to Gateway.none())), - RestClient(KtorRequestHandler("")), - Snowflake(0u), - MutableSharedFlow(), - Dispatchers.Default + ClientResources("", Snowflake(0u), Shards(0), HttpClient(), EntitySupplyStrategy.cache, Intents.all), + KordCacheBuilder().build(), + DefaultMasterGateway(mapOf(0 to Gateway.none())), + RestClient(KtorRequestHandler("")), + Snowflake(0u), + MutableSharedFlow(), + Dispatchers.Default, + null ) kord.unsafe.guild(Snowflake(0u)).regions.toList() From 31387a2b7acdf6f45b08c2dd4999b832171792ee Mon Sep 17 00:00:00 2001 From: ByteAlex Date: Fri, 17 Sep 2021 00:09:17 +0200 Subject: [PATCH 05/12] add "guildId" abstraction to Event --- core/src/main/kotlin/event/Event.kt | 3 +++ .../main/kotlin/event/channel/ChannelCreateEvent.kt | 3 +++ .../main/kotlin/event/channel/ChannelDeleteEvent.kt | 3 +++ .../kotlin/event/channel/ChannelPinsUpdateEvent.kt | 2 +- .../main/kotlin/event/channel/ChannelUpdateEvent.kt | 3 +++ .../src/main/kotlin/event/channel/TypingStartEvent.kt | 2 +- .../kotlin/event/channel/thread/ThreadDeleteEvent.kt | 3 +++ .../event/channel/thread/ThreadListSyncEvent.kt | 2 +- .../event/channel/thread/ThreadMemberUpdateEvent.kt | 6 +++++- .../event/channel/thread/ThreadMembersUpdateEvent.kt | 2 +- core/src/main/kotlin/event/gateway/Events.kt | 11 +++++++++-- core/src/main/kotlin/event/guild/BanAddEvent.kt | 2 +- core/src/main/kotlin/event/guild/BanRemoveEvent.kt | 2 +- core/src/main/kotlin/event/guild/EmojisUpdateEvent.kt | 2 +- core/src/main/kotlin/event/guild/GuildCreateEvent.kt | 3 +++ core/src/main/kotlin/event/guild/GuildDeleteEvent.kt | 2 +- core/src/main/kotlin/event/guild/GuildUpdateEvent.kt | 3 +++ .../kotlin/event/guild/IntegrationsUpdateEvent.kt | 2 +- core/src/main/kotlin/event/guild/InviteCreateEvent.kt | 2 +- core/src/main/kotlin/event/guild/InviteDeleteEvent.kt | 2 +- core/src/main/kotlin/event/guild/MemberJoinEvent.kt | 2 +- core/src/main/kotlin/event/guild/MemberLeaveEvent.kt | 2 +- core/src/main/kotlin/event/guild/MemberUpdateEvent.kt | 2 +- core/src/main/kotlin/event/guild/MembersChunkEvent.kt | 2 +- .../main/kotlin/event/guild/VoiceServerUpdateEvent.kt | 2 +- .../src/main/kotlin/event/guild/WebhookUpdateEvent.kt | 2 +- .../event/interaction/ApplicationCommandCreate.kt | 3 +++ .../event/interaction/ApplicationCommandDelete.kt | 3 +++ .../event/interaction/ApplicationCommandUpdate.kt | 3 +++ .../kotlin/event/interaction/ApplicationCreate.kt | 3 +++ .../main/kotlin/event/interaction/ComponentCreate.kt | 3 +++ .../kotlin/event/message/MessageBulkDeleteEvent.kt | 2 +- .../main/kotlin/event/message/MessageCreateEvent.kt | 2 +- .../main/kotlin/event/message/MessageDeleteEvent.kt | 2 +- .../main/kotlin/event/message/MessageUpdateEvent.kt | 3 +++ .../src/main/kotlin/event/message/ReactionAddEvent.kt | 2 +- .../kotlin/event/message/ReactionRemoveAllEvent.kt | 2 +- .../kotlin/event/message/ReactionRemoveEmojiEvent.kt | 2 +- .../main/kotlin/event/message/ReactionRemoveEvent.kt | 2 +- core/src/main/kotlin/event/role/RoleCreateEvent.kt | 2 +- core/src/main/kotlin/event/role/RoleDeleteEvent.kt | 2 +- core/src/main/kotlin/event/role/RoleUpdateEvent.kt | 2 +- .../src/main/kotlin/event/user/PresenceUpdateEvent.kt | 2 +- core/src/main/kotlin/event/user/UserUpdateEvent.kt | 3 +++ .../main/kotlin/event/user/VoiceStateUpdateEvent.kt | 3 +++ 45 files changed, 87 insertions(+), 31 deletions(-) diff --git a/core/src/main/kotlin/event/Event.kt b/core/src/main/kotlin/event/Event.kt index 3618e140f935..0ccf3758fffd 100644 --- a/core/src/main/kotlin/event/Event.kt +++ b/core/src/main/kotlin/event/Event.kt @@ -1,5 +1,6 @@ package dev.kord.core.event +import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.gateway.Gateway import kotlinx.coroutines.CoroutineScope @@ -21,4 +22,6 @@ interface Event : CoroutineScope { */ val shard: Int + val guildId: Snowflake? + } \ No newline at end of file diff --git a/core/src/main/kotlin/event/channel/ChannelCreateEvent.kt b/core/src/main/kotlin/event/channel/ChannelCreateEvent.kt index 8d459da834f0..9ba5217005e8 100644 --- a/core/src/main/kotlin/event/channel/ChannelCreateEvent.kt +++ b/core/src/main/kotlin/event/channel/ChannelCreateEvent.kt @@ -1,5 +1,6 @@ package dev.kord.core.event.channel +import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.channel.* import dev.kord.core.entity.channel.thread.NewsChannelThread @@ -8,6 +9,8 @@ import dev.kord.core.event.Event interface ChannelCreateEvent : Event { val channel: Channel + override val guildId: Snowflake? + get() = channel.data.guildId.value override val kord: Kord get() = channel.kord } diff --git a/core/src/main/kotlin/event/channel/ChannelDeleteEvent.kt b/core/src/main/kotlin/event/channel/ChannelDeleteEvent.kt index 5f2313dc19c6..4dc6ece68aac 100644 --- a/core/src/main/kotlin/event/channel/ChannelDeleteEvent.kt +++ b/core/src/main/kotlin/event/channel/ChannelDeleteEvent.kt @@ -1,5 +1,6 @@ package dev.kord.core.event.channel +import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.channel.* import dev.kord.core.entity.channel.thread.DeletedThreadChannel @@ -9,6 +10,8 @@ import dev.kord.core.event.Event interface ChannelDeleteEvent : Event { val channel: Channel + override val guildId: Snowflake? + get() = channel.data.guildId.value override val kord: Kord get() = channel.kord } diff --git a/core/src/main/kotlin/event/channel/ChannelPinsUpdateEvent.kt b/core/src/main/kotlin/event/channel/ChannelPinsUpdateEvent.kt index 875b0a1e40b2..c5cd699adaff 100644 --- a/core/src/main/kotlin/event/channel/ChannelPinsUpdateEvent.kt +++ b/core/src/main/kotlin/event/channel/ChannelPinsUpdateEvent.kt @@ -24,7 +24,7 @@ class ChannelPinsUpdateEvent( val channelId: Snowflake get() = data.channelId - val guildId: Snowflake? get() = data.guildId.value + override val guildId: Snowflake? get() = data.guildId.value val lastPinTimestamp: Instant? get() = data.lastPinTimestamp.value?.toInstant() diff --git a/core/src/main/kotlin/event/channel/ChannelUpdateEvent.kt b/core/src/main/kotlin/event/channel/ChannelUpdateEvent.kt index a56dc75a2201..55988af42386 100644 --- a/core/src/main/kotlin/event/channel/ChannelUpdateEvent.kt +++ b/core/src/main/kotlin/event/channel/ChannelUpdateEvent.kt @@ -1,5 +1,6 @@ package dev.kord.core.event.channel +import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.channel.* import dev.kord.core.entity.channel.thread.NewsChannelThread @@ -8,6 +9,8 @@ import dev.kord.core.event.Event interface ChannelUpdateEvent : Event { val channel: Channel + override val guildId: Snowflake? + get() = channel.data.guildId.value override val kord: Kord get() = channel.kord } diff --git a/core/src/main/kotlin/event/channel/TypingStartEvent.kt b/core/src/main/kotlin/event/channel/TypingStartEvent.kt index d44659a2a3c0..68456a36d3d1 100644 --- a/core/src/main/kotlin/event/channel/TypingStartEvent.kt +++ b/core/src/main/kotlin/event/channel/TypingStartEvent.kt @@ -31,7 +31,7 @@ class TypingStartEvent( val userId: Snowflake get() = data.userId - val guildId: Snowflake? get() = data.guildId.value + override val guildId: Snowflake? get() = data.guildId.value val started: Instant get() = data.timestamp.toInstant() diff --git a/core/src/main/kotlin/event/channel/thread/ThreadDeleteEvent.kt b/core/src/main/kotlin/event/channel/thread/ThreadDeleteEvent.kt index 4a51d51bee18..f960fe7a0b6e 100644 --- a/core/src/main/kotlin/event/channel/thread/ThreadDeleteEvent.kt +++ b/core/src/main/kotlin/event/channel/thread/ThreadDeleteEvent.kt @@ -1,5 +1,6 @@ package dev.kord.core.event.channel.thread +import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.channel.thread.DeletedThreadChannel import dev.kord.core.entity.channel.thread.NewsChannelThread @@ -17,6 +18,8 @@ sealed interface ThreadChannelDeleteEvent : Event { override val kord: Kord get() = channel.kord + override val guildId: Snowflake? + get() = channel.guildId } diff --git a/core/src/main/kotlin/event/channel/thread/ThreadListSyncEvent.kt b/core/src/main/kotlin/event/channel/thread/ThreadListSyncEvent.kt index bed9cd574523..6ccf6a69b3a5 100644 --- a/core/src/main/kotlin/event/channel/thread/ThreadListSyncEvent.kt +++ b/core/src/main/kotlin/event/channel/thread/ThreadListSyncEvent.kt @@ -26,7 +26,7 @@ class ThreadListSyncEvent( override val supplier: EntitySupplier = kord.defaultSupplier ) : Event, Strategizable { - val guildId: Snowflake get() = data.guildId + override val guildId: Snowflake get() = data.guildId val guild: GuildBehavior get() = GuildBehavior(guildId, kord) diff --git a/core/src/main/kotlin/event/channel/thread/ThreadMemberUpdateEvent.kt b/core/src/main/kotlin/event/channel/thread/ThreadMemberUpdateEvent.kt index 486e866719bb..08ea3ce8369d 100644 --- a/core/src/main/kotlin/event/channel/thread/ThreadMemberUpdateEvent.kt +++ b/core/src/main/kotlin/event/channel/thread/ThreadMemberUpdateEvent.kt @@ -1,5 +1,6 @@ package dev.kord.core.event.channel.thread +import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.channel.thread.ThreadMember import dev.kord.core.event.Event @@ -8,4 +9,7 @@ class ThreadMemberUpdateEvent( val member: ThreadMember, override val kord: Kord, override val shard: Int -) : Event \ No newline at end of file +) : Event { + override val guildId: Snowflake? + get() = null +} \ No newline at end of file diff --git a/core/src/main/kotlin/event/channel/thread/ThreadMembersUpdateEvent.kt b/core/src/main/kotlin/event/channel/thread/ThreadMembersUpdateEvent.kt index 6124276fac0b..e30da53f2bca 100644 --- a/core/src/main/kotlin/event/channel/thread/ThreadMembersUpdateEvent.kt +++ b/core/src/main/kotlin/event/channel/thread/ThreadMembersUpdateEvent.kt @@ -16,7 +16,7 @@ class ThreadMembersUpdateEvent( val id: Snowflake get() = data.id - val guildId: Snowflake get() = data.guildId + override val guildId: Snowflake get() = data.guildId val memberCount: Int get() = data.memberCount diff --git a/core/src/main/kotlin/event/gateway/Events.kt b/core/src/main/kotlin/event/gateway/Events.kt index ee238fc84cde..356bf1695893 100644 --- a/core/src/main/kotlin/event/gateway/Events.kt +++ b/core/src/main/kotlin/event/gateway/Events.kt @@ -18,9 +18,9 @@ import kotlinx.coroutines.flow.filter sealed class GatewayEvent : Event -class ConnectEvent(override val kord: Kord, override val shard: Int) : GatewayEvent() +class ConnectEvent(override val kord: Kord, override val shard: Int, override val guildId: Snowflake? = null) : GatewayEvent() -sealed class DisconnectEvent : GatewayEvent() { +sealed class DisconnectEvent(override val guildId: Snowflake? = null) : GatewayEvent() { /** * A Gateway was detached, all resources tied to that gateway should be freed. @@ -117,6 +117,9 @@ class ReadyEvent( val guilds: Set get() = guildIds.map { GuildBehavior(it, kord) }.toSet() + override val guildId: Snowflake? + get() = null + suspend fun getGuilds(): Flow = supplier.guilds.filter { it.id in guildIds } override fun withStrategy(strategy: EntitySupplyStrategy<*>): ReadyEvent = @@ -128,6 +131,10 @@ class ReadyEvent( } class ResumedEvent(override val kord: Kord, override val shard: Int) : GatewayEvent() { + + override val guildId: Snowflake? + get() = null + override fun toString(): String { return "ResumedEvent(kord=$kord, shard=$shard)" } diff --git a/core/src/main/kotlin/event/guild/BanAddEvent.kt b/core/src/main/kotlin/event/guild/BanAddEvent.kt index 6dfe92eea8b6..d91355eff4c1 100644 --- a/core/src/main/kotlin/event/guild/BanAddEvent.kt +++ b/core/src/main/kotlin/event/guild/BanAddEvent.kt @@ -15,7 +15,7 @@ import dev.kord.core.supplier.EntitySupplyStrategy class BanAddEvent( val user: User, - val guildId: Snowflake, + override val guildId: Snowflake, override val shard: Int, override val supplier: EntitySupplier = user.kord.defaultSupplier ) : Event, Strategizable { diff --git a/core/src/main/kotlin/event/guild/BanRemoveEvent.kt b/core/src/main/kotlin/event/guild/BanRemoveEvent.kt index d5cbedf300df..ef49942ae22f 100644 --- a/core/src/main/kotlin/event/guild/BanRemoveEvent.kt +++ b/core/src/main/kotlin/event/guild/BanRemoveEvent.kt @@ -12,7 +12,7 @@ import dev.kord.core.supplier.EntitySupplyStrategy class BanRemoveEvent( val user: User, - val guildId: Snowflake, + override val guildId: Snowflake, override val shard: Int, override val supplier: EntitySupplier = user.kord.defaultSupplier ) : Event, Strategizable { diff --git a/core/src/main/kotlin/event/guild/EmojisUpdateEvent.kt b/core/src/main/kotlin/event/guild/EmojisUpdateEvent.kt index 852c5dcab447..547f91510c83 100644 --- a/core/src/main/kotlin/event/guild/EmojisUpdateEvent.kt +++ b/core/src/main/kotlin/event/guild/EmojisUpdateEvent.kt @@ -11,7 +11,7 @@ import dev.kord.core.supplier.EntitySupplier import dev.kord.core.supplier.EntitySupplyStrategy class EmojisUpdateEvent( - val guildId: Snowflake, + override val guildId: Snowflake, val emojis: Set, override val kord: Kord, override val shard: Int, diff --git a/core/src/main/kotlin/event/guild/GuildCreateEvent.kt b/core/src/main/kotlin/event/guild/GuildCreateEvent.kt index 43cb02728c34..080cebff1ffc 100644 --- a/core/src/main/kotlin/event/guild/GuildCreateEvent.kt +++ b/core/src/main/kotlin/event/guild/GuildCreateEvent.kt @@ -1,11 +1,14 @@ package dev.kord.core.event.guild +import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.Guild import dev.kord.core.event.Event class GuildCreateEvent(val guild: Guild, override val shard: Int) : Event { override val kord: Kord get() = guild.kord + override val guildId: Snowflake + get() = guild.id override fun toString(): String { return "GuildCreateEvent(guild=$guild, shard=$shard)" diff --git a/core/src/main/kotlin/event/guild/GuildDeleteEvent.kt b/core/src/main/kotlin/event/guild/GuildDeleteEvent.kt index a5785a0194b3..92135afeef2e 100644 --- a/core/src/main/kotlin/event/guild/GuildDeleteEvent.kt +++ b/core/src/main/kotlin/event/guild/GuildDeleteEvent.kt @@ -6,7 +6,7 @@ import dev.kord.core.entity.Guild import dev.kord.core.event.Event class GuildDeleteEvent( - val guildId: Snowflake, + override val guildId: Snowflake, val unavailable: Boolean, val guild: Guild?, override val kord: Kord, diff --git a/core/src/main/kotlin/event/guild/GuildUpdateEvent.kt b/core/src/main/kotlin/event/guild/GuildUpdateEvent.kt index 844a3261e6df..93f054536305 100644 --- a/core/src/main/kotlin/event/guild/GuildUpdateEvent.kt +++ b/core/src/main/kotlin/event/guild/GuildUpdateEvent.kt @@ -1,11 +1,14 @@ package dev.kord.core.event.guild +import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.Guild import dev.kord.core.event.Event class GuildUpdateEvent(val guild: Guild, override val shard: Int) : Event { override val kord: Kord get() = guild.kord + override val guildId: Snowflake? + get() = guild.id override fun toString(): String { return "GuildUpdateEvent(guild=$guild, shard=$shard)" } diff --git a/core/src/main/kotlin/event/guild/IntegrationsUpdateEvent.kt b/core/src/main/kotlin/event/guild/IntegrationsUpdateEvent.kt index d10b19d1139e..df4d037a8f7e 100644 --- a/core/src/main/kotlin/event/guild/IntegrationsUpdateEvent.kt +++ b/core/src/main/kotlin/event/guild/IntegrationsUpdateEvent.kt @@ -10,7 +10,7 @@ import dev.kord.core.supplier.EntitySupplier import dev.kord.core.supplier.EntitySupplyStrategy class IntegrationsUpdateEvent( - val guildId: Snowflake, + override val guildId: Snowflake, override val kord: Kord, override val shard: Int, override val supplier: EntitySupplier = kord.defaultSupplier diff --git a/core/src/main/kotlin/event/guild/InviteCreateEvent.kt b/core/src/main/kotlin/event/guild/InviteCreateEvent.kt index 39a1d24dafb5..276e02f3b423 100644 --- a/core/src/main/kotlin/event/guild/InviteCreateEvent.kt +++ b/core/src/main/kotlin/event/guild/InviteCreateEvent.kt @@ -57,7 +57,7 @@ class InviteCreateEvent( /** * The [Guild] of the invite. */ - val guildId: Snowflake? get() = data.guildId.value + override val guildId: Snowflake? get() = data.guildId.value /** * The behavior of the [Guild] of the invite. diff --git a/core/src/main/kotlin/event/guild/InviteDeleteEvent.kt b/core/src/main/kotlin/event/guild/InviteDeleteEvent.kt index f5bd327c30ee..7acfa65c66a9 100644 --- a/core/src/main/kotlin/event/guild/InviteDeleteEvent.kt +++ b/core/src/main/kotlin/event/guild/InviteDeleteEvent.kt @@ -38,7 +38,7 @@ class InviteDeleteEvent( /** * The [Guild] of the invite. */ - val guildId: Snowflake get() = data.guildId + override val guildId: Snowflake get() = data.guildId /** * The behavior of the [Guild] of the invite. diff --git a/core/src/main/kotlin/event/guild/MemberJoinEvent.kt b/core/src/main/kotlin/event/guild/MemberJoinEvent.kt index ea10369d2856..0d8a9fd46c6a 100644 --- a/core/src/main/kotlin/event/guild/MemberJoinEvent.kt +++ b/core/src/main/kotlin/event/guild/MemberJoinEvent.kt @@ -18,7 +18,7 @@ class MemberJoinEvent( override val kord: Kord get() = member.kord - val guildId: Snowflake get() = member.guildId + override val guildId: Snowflake get() = member.guildId val guild: GuildBehavior get() = member.guild diff --git a/core/src/main/kotlin/event/guild/MemberLeaveEvent.kt b/core/src/main/kotlin/event/guild/MemberLeaveEvent.kt index 1cd6c2d24fea..d68c7fddeca5 100644 --- a/core/src/main/kotlin/event/guild/MemberLeaveEvent.kt +++ b/core/src/main/kotlin/event/guild/MemberLeaveEvent.kt @@ -7,7 +7,7 @@ import dev.kord.core.entity.Guild import dev.kord.core.entity.User import dev.kord.core.event.Event -class MemberLeaveEvent(val user: User, val guildId: Snowflake, override val shard: Int) : Event { +class MemberLeaveEvent(val user: User, override val guildId: Snowflake, override val shard: Int) : Event { override val kord: Kord get() = user.kord diff --git a/core/src/main/kotlin/event/guild/MemberUpdateEvent.kt b/core/src/main/kotlin/event/guild/MemberUpdateEvent.kt index c42ce7a0811f..1d64eba2e9ea 100644 --- a/core/src/main/kotlin/event/guild/MemberUpdateEvent.kt +++ b/core/src/main/kotlin/event/guild/MemberUpdateEvent.kt @@ -21,7 +21,7 @@ class MemberUpdateEvent( override val supplier: EntitySupplier = kord.defaultSupplier, ) : Event, Strategizable { - val guildId: Snowflake get() = member.guildId + override val guildId: Snowflake get() = member.guildId @DeprecatedSinceKord("0.7.0") @Deprecated(deprecationMessage, ReplaceWith("member.id"), level = DeprecationLevel.ERROR) diff --git a/core/src/main/kotlin/event/guild/MembersChunkEvent.kt b/core/src/main/kotlin/event/guild/MembersChunkEvent.kt index a87c6e68d7ac..c4b1790b3618 100644 --- a/core/src/main/kotlin/event/guild/MembersChunkEvent.kt +++ b/core/src/main/kotlin/event/guild/MembersChunkEvent.kt @@ -29,7 +29,7 @@ class MembersChunkEvent( override val supplier: EntitySupplier = kord.defaultSupplier ) : Event, Strategizable { - val guildId: Snowflake get() = data.guildId + override val guildId: Snowflake get() = data.guildId val guild: GuildBehavior get() = GuildBehavior(guildId, kord) diff --git a/core/src/main/kotlin/event/guild/VoiceServerUpdateEvent.kt b/core/src/main/kotlin/event/guild/VoiceServerUpdateEvent.kt index 8741dcda336b..e6fe070a00d2 100644 --- a/core/src/main/kotlin/event/guild/VoiceServerUpdateEvent.kt +++ b/core/src/main/kotlin/event/guild/VoiceServerUpdateEvent.kt @@ -11,7 +11,7 @@ import dev.kord.core.supplier.EntitySupplyStrategy class VoiceServerUpdateEvent( val token: String, - val guildId: Snowflake, + override val guildId: Snowflake, val endpoint: String?, override val kord: Kord, override val shard: Int, diff --git a/core/src/main/kotlin/event/guild/WebhookUpdateEvent.kt b/core/src/main/kotlin/event/guild/WebhookUpdateEvent.kt index 634d925ec282..32b149c9e1e2 100644 --- a/core/src/main/kotlin/event/guild/WebhookUpdateEvent.kt +++ b/core/src/main/kotlin/event/guild/WebhookUpdateEvent.kt @@ -15,7 +15,7 @@ import dev.kord.core.supplier.getChannelOf import dev.kord.core.supplier.getChannelOfOrNull class WebhookUpdateEvent( - val guildId: Snowflake, + override val guildId: Snowflake, val channelId: Snowflake, override val kord: Kord, override val shard: Int, diff --git a/core/src/main/kotlin/event/interaction/ApplicationCommandCreate.kt b/core/src/main/kotlin/event/interaction/ApplicationCommandCreate.kt index b1fdc19fc722..f0771009eb47 100644 --- a/core/src/main/kotlin/event/interaction/ApplicationCommandCreate.kt +++ b/core/src/main/kotlin/event/interaction/ApplicationCommandCreate.kt @@ -1,6 +1,7 @@ package dev.kord.core.event.interaction import dev.kord.common.annotation.KordPreview +import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.application.* import dev.kord.core.event.Event @@ -8,6 +9,8 @@ import dev.kord.core.event.Event sealed interface ApplicationCommandCreateEvent : Event { val command: GuildApplicationCommand + override val guildId: Snowflake? + get() = command.guildId } class ChatInputCommandCreateEvent( diff --git a/core/src/main/kotlin/event/interaction/ApplicationCommandDelete.kt b/core/src/main/kotlin/event/interaction/ApplicationCommandDelete.kt index f76957994ab5..e4f8e7a5d13e 100644 --- a/core/src/main/kotlin/event/interaction/ApplicationCommandDelete.kt +++ b/core/src/main/kotlin/event/interaction/ApplicationCommandDelete.kt @@ -1,6 +1,7 @@ package dev.kord.core.event.interaction import dev.kord.common.annotation.KordPreview +import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.application.* import dev.kord.core.event.Event @@ -8,6 +9,8 @@ import dev.kord.core.event.Event sealed interface ApplicationCommandDeleteEvent : Event { val command: GuildApplicationCommand + override val guildId: Snowflake? + get() = command.guildId } class ChatInputCommandDeleteEvent( diff --git a/core/src/main/kotlin/event/interaction/ApplicationCommandUpdate.kt b/core/src/main/kotlin/event/interaction/ApplicationCommandUpdate.kt index 5369df6d22b8..fbee1ce4ec58 100644 --- a/core/src/main/kotlin/event/interaction/ApplicationCommandUpdate.kt +++ b/core/src/main/kotlin/event/interaction/ApplicationCommandUpdate.kt @@ -1,6 +1,7 @@ package dev.kord.core.event.interaction import dev.kord.common.annotation.KordPreview +import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.application.* import dev.kord.core.event.Event @@ -8,6 +9,8 @@ import dev.kord.core.event.Event sealed interface ApplicationCommandUpdateEvent : Event { val command: GuildApplicationCommand + override val guildId: Snowflake? + get() = command.guildId } class ChatInputCommandUpdateEvent( diff --git a/core/src/main/kotlin/event/interaction/ApplicationCreate.kt b/core/src/main/kotlin/event/interaction/ApplicationCreate.kt index be05dd782d26..7d4cc842a787 100644 --- a/core/src/main/kotlin/event/interaction/ApplicationCreate.kt +++ b/core/src/main/kotlin/event/interaction/ApplicationCreate.kt @@ -1,5 +1,6 @@ package dev.kord.core.event.interaction +import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.behavior.interaction.* import dev.kord.core.entity.application.* @@ -34,6 +35,8 @@ import dev.kord.core.event.Event sealed interface ApplicationInteractionCreateEvent : InteractionCreateEvent { override val interaction: ApplicationCommandInteraction + override val guildId: Snowflake? + get() = interaction.data.guildId.value } sealed interface GlobalApplicationInteractionCreateEvent : ApplicationInteractionCreateEvent { diff --git a/core/src/main/kotlin/event/interaction/ComponentCreate.kt b/core/src/main/kotlin/event/interaction/ComponentCreate.kt index 80ba4bc8a8b2..fb1a7f2df853 100644 --- a/core/src/main/kotlin/event/interaction/ComponentCreate.kt +++ b/core/src/main/kotlin/event/interaction/ComponentCreate.kt @@ -1,5 +1,6 @@ package dev.kord.core.event.interaction +import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.interaction.ButtonInteraction import dev.kord.core.entity.interaction.ComponentInteraction @@ -8,6 +9,8 @@ import dev.kord.core.entity.interaction.SelectMenuInteraction sealed interface ComponentInteractionCreateEvent : InteractionCreateEvent { override val interaction: ComponentInteraction + override val guildId: Snowflake? + get() = interaction.data.guildId.value } diff --git a/core/src/main/kotlin/event/message/MessageBulkDeleteEvent.kt b/core/src/main/kotlin/event/message/MessageBulkDeleteEvent.kt index 26ce489fcd4c..9d3b66876b7c 100644 --- a/core/src/main/kotlin/event/message/MessageBulkDeleteEvent.kt +++ b/core/src/main/kotlin/event/message/MessageBulkDeleteEvent.kt @@ -18,7 +18,7 @@ class MessageBulkDeleteEvent( val messageIds: Set, val messages: Set, val channelId: Snowflake, - val guildId: Snowflake?, + override val guildId: Snowflake?, override val kord: Kord, override val shard: Int, override val supplier: EntitySupplier = kord.defaultSupplier diff --git a/core/src/main/kotlin/event/message/MessageCreateEvent.kt b/core/src/main/kotlin/event/message/MessageCreateEvent.kt index 3699322aa9ff..a9c64fb81bcc 100644 --- a/core/src/main/kotlin/event/message/MessageCreateEvent.kt +++ b/core/src/main/kotlin/event/message/MessageCreateEvent.kt @@ -14,7 +14,7 @@ import dev.kord.core.entity.channel.DmChannel class MessageCreateEvent( val message: Message, - val guildId: Snowflake?, + override val guildId: Snowflake?, val member: Member?, override val shard: Int, override val supplier: EntitySupplier = message.kord.defaultSupplier diff --git a/core/src/main/kotlin/event/message/MessageDeleteEvent.kt b/core/src/main/kotlin/event/message/MessageDeleteEvent.kt index 8fb89c956f10..e186b9ac8759 100644 --- a/core/src/main/kotlin/event/message/MessageDeleteEvent.kt +++ b/core/src/main/kotlin/event/message/MessageDeleteEvent.kt @@ -17,7 +17,7 @@ import dev.kord.core.supplier.getChannelOfOrNull class MessageDeleteEvent( val messageId: Snowflake, val channelId: Snowflake, - val guildId: Snowflake?, + override val guildId: Snowflake?, val message: Message?, override val kord: Kord, override val shard: Int, diff --git a/core/src/main/kotlin/event/message/MessageUpdateEvent.kt b/core/src/main/kotlin/event/message/MessageUpdateEvent.kt index 21232036c38d..c9da46b40f70 100644 --- a/core/src/main/kotlin/event/message/MessageUpdateEvent.kt +++ b/core/src/main/kotlin/event/message/MessageUpdateEvent.kt @@ -21,6 +21,9 @@ class MessageUpdateEvent( override val supplier: EntitySupplier = kord.defaultSupplier ) : Event, Strategizable { + override val guildId: Snowflake? + get() = new.guildId.value + /** * The behavior of the message that was updated. */ diff --git a/core/src/main/kotlin/event/message/ReactionAddEvent.kt b/core/src/main/kotlin/event/message/ReactionAddEvent.kt index 33fd0b1fc458..3df6dd33e235 100644 --- a/core/src/main/kotlin/event/message/ReactionAddEvent.kt +++ b/core/src/main/kotlin/event/message/ReactionAddEvent.kt @@ -19,7 +19,7 @@ class ReactionAddEvent( val userId: Snowflake, val channelId: Snowflake, val messageId: Snowflake, - val guildId: Snowflake?, + override val guildId: Snowflake?, val emoji: ReactionEmoji, override val kord: Kord, override val shard: Int, diff --git a/core/src/main/kotlin/event/message/ReactionRemoveAllEvent.kt b/core/src/main/kotlin/event/message/ReactionRemoveAllEvent.kt index 8c5c072cb6e7..5c303ac24fd4 100644 --- a/core/src/main/kotlin/event/message/ReactionRemoveAllEvent.kt +++ b/core/src/main/kotlin/event/message/ReactionRemoveAllEvent.kt @@ -18,7 +18,7 @@ import dev.kord.core.supplier.getChannelOfOrNull class ReactionRemoveAllEvent( val channelId: Snowflake, val messageId: Snowflake, - val guildId: Snowflake?, + override val guildId: Snowflake?, override val kord: Kord, override val shard: Int, override val supplier: EntitySupplier = kord.defaultSupplier diff --git a/core/src/main/kotlin/event/message/ReactionRemoveEmojiEvent.kt b/core/src/main/kotlin/event/message/ReactionRemoveEmojiEvent.kt index 3a86b933a4d1..e62a80b571a0 100644 --- a/core/src/main/kotlin/event/message/ReactionRemoveEmojiEvent.kt +++ b/core/src/main/kotlin/event/message/ReactionRemoveEmojiEvent.kt @@ -40,7 +40,7 @@ class ReactionRemoveEmojiEvent( /** * The id of the [Guild]. */ - val guildId: Snowflake get() = data.guildId + override val guildId: Snowflake get() = data.guildId val guild: GuildBehavior get() = GuildBehavior(id = guildId, kord = kord) diff --git a/core/src/main/kotlin/event/message/ReactionRemoveEvent.kt b/core/src/main/kotlin/event/message/ReactionRemoveEvent.kt index da10b2ee74af..6d8d7313273b 100644 --- a/core/src/main/kotlin/event/message/ReactionRemoveEvent.kt +++ b/core/src/main/kotlin/event/message/ReactionRemoveEvent.kt @@ -19,7 +19,7 @@ class ReactionRemoveEvent( val userId: Snowflake, val channelId: Snowflake, val messageId: Snowflake, - val guildId: Snowflake?, + override val guildId: Snowflake?, val emoji: ReactionEmoji, override val kord: Kord, override val shard: Int, diff --git a/core/src/main/kotlin/event/role/RoleCreateEvent.kt b/core/src/main/kotlin/event/role/RoleCreateEvent.kt index d6a7f17ee7a3..3dfa575aff8a 100644 --- a/core/src/main/kotlin/event/role/RoleCreateEvent.kt +++ b/core/src/main/kotlin/event/role/RoleCreateEvent.kt @@ -18,7 +18,7 @@ class RoleCreateEvent( override val kord: Kord get() = role.kord - val guildId: Snowflake get() = role.guildId + override val guildId: Snowflake get() = role.guildId val guild: GuildBehavior get() = GuildBehavior(guildId, kord) diff --git a/core/src/main/kotlin/event/role/RoleDeleteEvent.kt b/core/src/main/kotlin/event/role/RoleDeleteEvent.kt index 2484772f95c1..12db384ef6b7 100644 --- a/core/src/main/kotlin/event/role/RoleDeleteEvent.kt +++ b/core/src/main/kotlin/event/role/RoleDeleteEvent.kt @@ -11,7 +11,7 @@ import dev.kord.core.supplier.EntitySupplier import dev.kord.core.supplier.EntitySupplyStrategy class RoleDeleteEvent( - val guildId: Snowflake, + override val guildId: Snowflake, val roleId: Snowflake, val role: Role?, override val kord: Kord, diff --git a/core/src/main/kotlin/event/role/RoleUpdateEvent.kt b/core/src/main/kotlin/event/role/RoleUpdateEvent.kt index a7c1ad4c7311..d843ac586d7e 100644 --- a/core/src/main/kotlin/event/role/RoleUpdateEvent.kt +++ b/core/src/main/kotlin/event/role/RoleUpdateEvent.kt @@ -18,7 +18,7 @@ class RoleUpdateEvent( override val kord: Kord get() = role.kord - val guildId: Snowflake get() = role.guildId + override val guildId: Snowflake get() = role.guildId val guild: GuildBehavior get() = GuildBehavior(guildId, kord) diff --git a/core/src/main/kotlin/event/user/PresenceUpdateEvent.kt b/core/src/main/kotlin/event/user/PresenceUpdateEvent.kt index bff7a579b0e2..0650e8d55515 100644 --- a/core/src/main/kotlin/event/user/PresenceUpdateEvent.kt +++ b/core/src/main/kotlin/event/user/PresenceUpdateEvent.kt @@ -15,7 +15,7 @@ import dev.kord.core.supplier.EntitySupplyStrategy class PresenceUpdateEvent( val oldUser: User?, val user: DiscordPresenceUser, - val guildId: Snowflake, + override val guildId: Snowflake, val old: Presence?, val presence: Presence, override val shard: Int, diff --git a/core/src/main/kotlin/event/user/UserUpdateEvent.kt b/core/src/main/kotlin/event/user/UserUpdateEvent.kt index 674428b2dda6..6166d228d97a 100644 --- a/core/src/main/kotlin/event/user/UserUpdateEvent.kt +++ b/core/src/main/kotlin/event/user/UserUpdateEvent.kt @@ -1,5 +1,6 @@ package dev.kord.core.event.user +import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.User import dev.kord.core.event.Event @@ -10,6 +11,8 @@ class UserUpdateEvent( override val shard: Int ) : Event { override val kord: Kord get() = user.kord + override val guildId: Snowflake? + get() = null override fun toString(): String { return "UserUpdateEvent(old=$old, user=$user, shard=$shard)" diff --git a/core/src/main/kotlin/event/user/VoiceStateUpdateEvent.kt b/core/src/main/kotlin/event/user/VoiceStateUpdateEvent.kt index 42b9a582519f..066b8f33a866 100644 --- a/core/src/main/kotlin/event/user/VoiceStateUpdateEvent.kt +++ b/core/src/main/kotlin/event/user/VoiceStateUpdateEvent.kt @@ -1,5 +1,6 @@ package dev.kord.core.event.user +import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.VoiceState import dev.kord.core.event.Event @@ -10,6 +11,8 @@ class VoiceStateUpdateEvent( override val shard: Int ) : Event { override val kord: Kord get() = state.kord + override val guildId: Snowflake? + get() = state.guildId override fun toString(): String { return "VoiceStateUpdateEvent(old=$old, state=$state, shard=$shard)" From 60a5df206fabb8ddbb83d2ccf1ea7bf62072e237 Mon Sep 17 00:00:00 2001 From: ByteAlex Date: Thu, 16 Sep 2021 15:24:13 +0200 Subject: [PATCH 06/12] StageInstance is missing default supplier --- core/src/main/kotlin/entity/StageInstance.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/kotlin/entity/StageInstance.kt b/core/src/main/kotlin/entity/StageInstance.kt index 5987e4d95e09..84907706d95c 100644 --- a/core/src/main/kotlin/entity/StageInstance.kt +++ b/core/src/main/kotlin/entity/StageInstance.kt @@ -7,7 +7,7 @@ import dev.kord.core.cache.data.StageInstanceData import dev.kord.core.supplier.EntitySupplier import dev.kord.core.supplier.EntitySupplyStrategy -class StageInstance(val data: StageInstanceData, override val kord: Kord, override val supplier: EntitySupplier) : StageInstanceBehavior { +class StageInstance(val data: StageInstanceData, override val kord: Kord, override val supplier: EntitySupplier = kord.defaultSupplier) : StageInstanceBehavior { override val id: Snowflake get() = data.id val guildId: Snowflake get() = data.guildId override val channelId: Snowflake get() = data.channelId From a51ca7f04d81aef8f2a096ba85c79c6f8823a7b9 Mon Sep 17 00:00:00 2001 From: ByteAlex Date: Thu, 16 Sep 2021 15:32:29 +0200 Subject: [PATCH 07/12] Region is a channel field in v9 --- .../src/main/kotlin/entity/DiscordChannel.kt | 2 ++ common/src/main/kotlin/entity/DiscordGuild.kt | 1 - core/src/main/kotlin/cache/data/ChannelData.kt | 2 ++ core/src/main/kotlin/cache/data/GuildData.kt | 2 -- core/src/main/kotlin/entity/Guild.kt | 14 -------------- .../main/kotlin/entity/channel/VoiceChannel.kt | 18 ++++++++++++++++++ 6 files changed, 22 insertions(+), 17 deletions(-) diff --git a/common/src/main/kotlin/entity/DiscordChannel.kt b/common/src/main/kotlin/entity/DiscordChannel.kt index 1290aea11cf5..2a9b39bb33c4 100644 --- a/common/src/main/kotlin/entity/DiscordChannel.kt +++ b/common/src/main/kotlin/entity/DiscordChannel.kt @@ -65,6 +65,8 @@ data class DiscordChannel( val parentId: OptionalSnowflake? = OptionalSnowflake.Missing, @SerialName("last_pin_timestamp") val lastPinTimestamp: Optional = Optional.Missing(), + @SerialName("rtc_region") + val rtcRegion: Optional = Optional.Missing(), val permissions: Optional = Optional.Missing(), @SerialName("message_count") val messageCount: OptionalInt = OptionalInt.Missing, diff --git a/common/src/main/kotlin/entity/DiscordGuild.kt b/common/src/main/kotlin/entity/DiscordGuild.kt index c125b69884e7..2bd54135d1d0 100644 --- a/common/src/main/kotlin/entity/DiscordGuild.kt +++ b/common/src/main/kotlin/entity/DiscordGuild.kt @@ -90,7 +90,6 @@ data class DiscordGuild( @SerialName("owner_id") val ownerId: Snowflake, val permissions: Optional = Optional.Missing(), - val region: String, @SerialName("afk_channel_id") val afkChannelId: Snowflake?, @SerialName("afk_timeout") diff --git a/core/src/main/kotlin/cache/data/ChannelData.kt b/core/src/main/kotlin/cache/data/ChannelData.kt index 5c530247d014..2d12ce571d20 100644 --- a/core/src/main/kotlin/cache/data/ChannelData.kt +++ b/core/src/main/kotlin/cache/data/ChannelData.kt @@ -25,6 +25,7 @@ data class ChannelData( val applicationId: OptionalSnowflake = OptionalSnowflake.Missing, val parentId: OptionalSnowflake? = OptionalSnowflake.Missing, val lastPinTimestamp: Optional = Optional.Missing(), + val rtcRegion: Optional = Optional.Missing(), val permissions: Optional = Optional.Missing(), val threadMetadata: Optional = Optional.Missing(), val messageCount: OptionalInt = OptionalInt.Missing, @@ -57,6 +58,7 @@ data class ChannelData( applicationId, parentId, lastPinTimestamp, + rtcRegion, permissions, threadMetadata.map { ThreadMetadataData.from(it) }, messageCount, diff --git a/core/src/main/kotlin/cache/data/GuildData.kt b/core/src/main/kotlin/cache/data/GuildData.kt index a321c657cf26..2e87bbbbc92f 100644 --- a/core/src/main/kotlin/cache/data/GuildData.kt +++ b/core/src/main/kotlin/cache/data/GuildData.kt @@ -20,7 +20,6 @@ data class GuildData( //val owner: OptionalBoolean = OptionalBoolean.Missing, useless? val ownerId: Snowflake, val permissions: Optional = Optional.Missing(), - val region: String, val afkChannelId: Snowflake? = null, val afkTimeout: Int, val widgetEnabled: OptionalBoolean = OptionalBoolean.Missing, @@ -82,7 +81,6 @@ data class GuildData( //owner = owner, ownerId = ownerId, permissions = permissions, - region = region, afkChannelId = afkChannelId, afkTimeout = afkTimeout, widgetEnabled = widgetEnabled, diff --git a/core/src/main/kotlin/entity/Guild.kt b/core/src/main/kotlin/entity/Guild.kt index c990aa31b218..7f13b680c94b 100644 --- a/core/src/main/kotlin/entity/Guild.kt +++ b/core/src/main/kotlin/entity/Guild.kt @@ -259,11 +259,6 @@ class Guild( */ val defaultMessageNotificationLevel: DefaultMessageNotificationLevel get() = data.defaultMessageNotifications - /** - * The voice region id for the guild. - */ - val regionId: String get() = data.region - /** * The id of the channel in which a discoverable server's rules should be found **/ @@ -464,15 +459,6 @@ class Guild( */ suspend fun getPublicUpdatesChannel(): TopGuildMessageChannel? = publicUpdatesChannel?.asChannel() - /** - * Requests to get the [voice region][Region] of this guild. - * - * @throws [RequestException] if anything went wrong during the request. - * @throws [EntityNotFoundException] if the [Region] wasn't present. - * @throws [NoSuchElementException] if the [regionId] is not in the available [regions]. - */ - suspend fun getRegion(): Region = regions.first { it.id == regionId } - /** * Requests to get the the channel in which a discoverable server's rules should be found represented *, returns null if the [TopGuildMessageChannel] isn't present, or [rulesChannelId] is null. diff --git a/core/src/main/kotlin/entity/channel/VoiceChannel.kt b/core/src/main/kotlin/entity/channel/VoiceChannel.kt index 731ef5377242..d5bdcc77a45a 100644 --- a/core/src/main/kotlin/entity/channel/VoiceChannel.kt +++ b/core/src/main/kotlin/entity/channel/VoiceChannel.kt @@ -2,17 +2,21 @@ package dev.kord.core.entity.channel import dev.kord.common.annotation.KordVoice import dev.kord.common.entity.optional.getOrThrow +import dev.kord.common.exception.RequestException import dev.kord.core.Kord import dev.kord.core.behavior.channel.ChannelBehavior import dev.kord.core.behavior.channel.GuildChannelBehavior import dev.kord.core.behavior.channel.TopGuildChannelBehavior import dev.kord.core.behavior.channel.VoiceChannelBehavior import dev.kord.core.cache.data.ChannelData +import dev.kord.core.entity.Region +import dev.kord.core.exception.EntityNotFoundException import dev.kord.core.exception.GatewayNotFoundException import dev.kord.core.supplier.EntitySupplier import dev.kord.core.supplier.EntitySupplyStrategy import dev.kord.voice.VoiceConnection import dev.kord.voice.VoiceConnectionBuilder +import kotlinx.coroutines.flow.first import java.util.* /** @@ -35,6 +39,20 @@ class VoiceChannel( */ val userLimit: Int get() = data.userLimit.getOrThrow() + /** + * The region name of the voice channel + */ + val rtcRegion: String? get() = data.rtcRegion.value + + /** + * Requests to get the [voice region][Region] of this guild. + * + * @throws [RequestException] if anything went wrong during the request. + * @throws [EntityNotFoundException] if the [Region] wasn't present. + * @throws [NoSuchElementException] if the [rtcRegion] is not in the available. + */ + suspend fun getRegion(): Region = guild.regions.first { it.id == rtcRegion } + /** * returns a new [VoiceChannel] with the given [strategy]. * From 33951bcf0842ed47854ea4253fedda88d430e1b5 Mon Sep 17 00:00:00 2001 From: ByteAlex Date: Thu, 16 Sep 2021 15:36:24 +0200 Subject: [PATCH 08/12] Missing "toData" extension on Emoji-,Role-,StageInstance-,ThreadMember- "Data" --- core/src/main/kotlin/cache/data/EmojiData.kt | 4 ++++ core/src/main/kotlin/cache/data/RoleData.kt | 4 ++++ core/src/main/kotlin/cache/data/StageInstanceData.kt | 4 ++++ core/src/main/kotlin/cache/data/ThreadMemberData.kt | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/core/src/main/kotlin/cache/data/EmojiData.kt b/core/src/main/kotlin/cache/data/EmojiData.kt index 1e3d64629fd5..bbccecc62e8c 100644 --- a/core/src/main/kotlin/cache/data/EmojiData.kt +++ b/core/src/main/kotlin/cache/data/EmojiData.kt @@ -37,3 +37,7 @@ data class EmojiData( } } } + +fun DiscordEmoji.toData(guildId: Snowflake, id: Snowflake): EmojiData { + return EmojiData.from(guildId, id, this) +} \ No newline at end of file diff --git a/core/src/main/kotlin/cache/data/RoleData.kt b/core/src/main/kotlin/cache/data/RoleData.kt index 8ddf2bcd64f4..2d04e85e9f71 100644 --- a/core/src/main/kotlin/cache/data/RoleData.kt +++ b/core/src/main/kotlin/cache/data/RoleData.kt @@ -43,3 +43,7 @@ data class RoleData( } } + +fun DiscordRole.toData(guildId: Snowflake): RoleData { + return RoleData.from(DiscordGuildRole(guildId, this)) +} diff --git a/core/src/main/kotlin/cache/data/StageInstanceData.kt b/core/src/main/kotlin/cache/data/StageInstanceData.kt index 43e6af3ba954..743ab4a3d0b1 100644 --- a/core/src/main/kotlin/cache/data/StageInstanceData.kt +++ b/core/src/main/kotlin/cache/data/StageInstanceData.kt @@ -17,3 +17,7 @@ data class StageInstanceData( } } } + +fun DiscordStageInstance.toData(): StageInstanceData { + return StageInstanceData.from(this) +} \ No newline at end of file diff --git a/core/src/main/kotlin/cache/data/ThreadMemberData.kt b/core/src/main/kotlin/cache/data/ThreadMemberData.kt index c4a618930c1e..1e049b8b93e0 100644 --- a/core/src/main/kotlin/cache/data/ThreadMemberData.kt +++ b/core/src/main/kotlin/cache/data/ThreadMemberData.kt @@ -27,3 +27,7 @@ data class ThreadMemberData( } } } + +fun DiscordThreadMember.toData(threadId: Snowflake?): ThreadMemberData { + return ThreadMemberData.from(this, threadId) +} \ No newline at end of file From 2358b3fc1b3e881c5d9cbc9c0ff7d707892fbd94 Mon Sep 17 00:00:00 2001 From: ByteAlex Date: Fri, 17 Sep 2021 16:15:57 +0200 Subject: [PATCH 09/12] Extra-Context can default to null for compat --- core/src/main/kotlin/Kord.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/kotlin/Kord.kt b/core/src/main/kotlin/Kord.kt index 84f74bb6a37c..5d7ae7263675 100644 --- a/core/src/main/kotlin/Kord.kt +++ b/core/src/main/kotlin/Kord.kt @@ -53,7 +53,7 @@ class Kord( val selfId: Snowflake, private val eventFlow: MutableSharedFlow, dispatcher: CoroutineDispatcher, - val extraContext: (Event.() -> CoroutineContext)? + val extraContext: (Event.() -> CoroutineContext)? = null ) : CoroutineScope { private val interceptor = GatewayEventInterceptor(this, gateway, cache, eventFlow) From f3a3a70dff3adb95d34d75c06fa86f65a48a4344 Mon Sep 17 00:00:00 2001 From: ByteAlex Date: Fri, 17 Sep 2021 20:32:06 +0200 Subject: [PATCH 10/12] Revert "add "guildId" abstraction to Event" This reverts commit 9a034682 --- core/src/main/kotlin/event/Event.kt | 3 --- .../main/kotlin/event/channel/ChannelCreateEvent.kt | 3 --- .../main/kotlin/event/channel/ChannelDeleteEvent.kt | 3 --- .../kotlin/event/channel/ChannelPinsUpdateEvent.kt | 2 +- .../main/kotlin/event/channel/ChannelUpdateEvent.kt | 3 --- .../src/main/kotlin/event/channel/TypingStartEvent.kt | 2 +- .../kotlin/event/channel/thread/ThreadDeleteEvent.kt | 3 --- .../event/channel/thread/ThreadListSyncEvent.kt | 2 +- .../event/channel/thread/ThreadMemberUpdateEvent.kt | 6 +----- .../event/channel/thread/ThreadMembersUpdateEvent.kt | 2 +- core/src/main/kotlin/event/gateway/Events.kt | 11 ++--------- core/src/main/kotlin/event/guild/BanAddEvent.kt | 2 +- core/src/main/kotlin/event/guild/BanRemoveEvent.kt | 2 +- core/src/main/kotlin/event/guild/EmojisUpdateEvent.kt | 2 +- core/src/main/kotlin/event/guild/GuildCreateEvent.kt | 3 --- core/src/main/kotlin/event/guild/GuildDeleteEvent.kt | 2 +- core/src/main/kotlin/event/guild/GuildUpdateEvent.kt | 3 --- .../kotlin/event/guild/IntegrationsUpdateEvent.kt | 2 +- core/src/main/kotlin/event/guild/InviteCreateEvent.kt | 2 +- core/src/main/kotlin/event/guild/InviteDeleteEvent.kt | 2 +- core/src/main/kotlin/event/guild/MemberJoinEvent.kt | 2 +- core/src/main/kotlin/event/guild/MemberLeaveEvent.kt | 2 +- core/src/main/kotlin/event/guild/MemberUpdateEvent.kt | 2 +- core/src/main/kotlin/event/guild/MembersChunkEvent.kt | 2 +- .../main/kotlin/event/guild/VoiceServerUpdateEvent.kt | 2 +- .../src/main/kotlin/event/guild/WebhookUpdateEvent.kt | 2 +- .../event/interaction/ApplicationCommandCreate.kt | 3 --- .../event/interaction/ApplicationCommandDelete.kt | 3 --- .../event/interaction/ApplicationCommandUpdate.kt | 3 --- .../kotlin/event/interaction/ApplicationCreate.kt | 3 --- .../main/kotlin/event/interaction/ComponentCreate.kt | 3 --- .../kotlin/event/message/MessageBulkDeleteEvent.kt | 2 +- .../main/kotlin/event/message/MessageCreateEvent.kt | 2 +- .../main/kotlin/event/message/MessageDeleteEvent.kt | 2 +- .../main/kotlin/event/message/MessageUpdateEvent.kt | 3 --- .../src/main/kotlin/event/message/ReactionAddEvent.kt | 2 +- .../kotlin/event/message/ReactionRemoveAllEvent.kt | 2 +- .../kotlin/event/message/ReactionRemoveEmojiEvent.kt | 2 +- .../main/kotlin/event/message/ReactionRemoveEvent.kt | 2 +- core/src/main/kotlin/event/role/RoleCreateEvent.kt | 2 +- core/src/main/kotlin/event/role/RoleDeleteEvent.kt | 2 +- core/src/main/kotlin/event/role/RoleUpdateEvent.kt | 2 +- .../src/main/kotlin/event/user/PresenceUpdateEvent.kt | 2 +- core/src/main/kotlin/event/user/UserUpdateEvent.kt | 3 --- .../main/kotlin/event/user/VoiceStateUpdateEvent.kt | 3 --- 45 files changed, 31 insertions(+), 87 deletions(-) diff --git a/core/src/main/kotlin/event/Event.kt b/core/src/main/kotlin/event/Event.kt index 0ccf3758fffd..3618e140f935 100644 --- a/core/src/main/kotlin/event/Event.kt +++ b/core/src/main/kotlin/event/Event.kt @@ -1,6 +1,5 @@ package dev.kord.core.event -import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.gateway.Gateway import kotlinx.coroutines.CoroutineScope @@ -22,6 +21,4 @@ interface Event : CoroutineScope { */ val shard: Int - val guildId: Snowflake? - } \ No newline at end of file diff --git a/core/src/main/kotlin/event/channel/ChannelCreateEvent.kt b/core/src/main/kotlin/event/channel/ChannelCreateEvent.kt index 9ba5217005e8..8d459da834f0 100644 --- a/core/src/main/kotlin/event/channel/ChannelCreateEvent.kt +++ b/core/src/main/kotlin/event/channel/ChannelCreateEvent.kt @@ -1,6 +1,5 @@ package dev.kord.core.event.channel -import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.channel.* import dev.kord.core.entity.channel.thread.NewsChannelThread @@ -9,8 +8,6 @@ import dev.kord.core.event.Event interface ChannelCreateEvent : Event { val channel: Channel - override val guildId: Snowflake? - get() = channel.data.guildId.value override val kord: Kord get() = channel.kord } diff --git a/core/src/main/kotlin/event/channel/ChannelDeleteEvent.kt b/core/src/main/kotlin/event/channel/ChannelDeleteEvent.kt index 4dc6ece68aac..5f2313dc19c6 100644 --- a/core/src/main/kotlin/event/channel/ChannelDeleteEvent.kt +++ b/core/src/main/kotlin/event/channel/ChannelDeleteEvent.kt @@ -1,6 +1,5 @@ package dev.kord.core.event.channel -import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.channel.* import dev.kord.core.entity.channel.thread.DeletedThreadChannel @@ -10,8 +9,6 @@ import dev.kord.core.event.Event interface ChannelDeleteEvent : Event { val channel: Channel - override val guildId: Snowflake? - get() = channel.data.guildId.value override val kord: Kord get() = channel.kord } diff --git a/core/src/main/kotlin/event/channel/ChannelPinsUpdateEvent.kt b/core/src/main/kotlin/event/channel/ChannelPinsUpdateEvent.kt index c5cd699adaff..875b0a1e40b2 100644 --- a/core/src/main/kotlin/event/channel/ChannelPinsUpdateEvent.kt +++ b/core/src/main/kotlin/event/channel/ChannelPinsUpdateEvent.kt @@ -24,7 +24,7 @@ class ChannelPinsUpdateEvent( val channelId: Snowflake get() = data.channelId - override val guildId: Snowflake? get() = data.guildId.value + val guildId: Snowflake? get() = data.guildId.value val lastPinTimestamp: Instant? get() = data.lastPinTimestamp.value?.toInstant() diff --git a/core/src/main/kotlin/event/channel/ChannelUpdateEvent.kt b/core/src/main/kotlin/event/channel/ChannelUpdateEvent.kt index 55988af42386..a56dc75a2201 100644 --- a/core/src/main/kotlin/event/channel/ChannelUpdateEvent.kt +++ b/core/src/main/kotlin/event/channel/ChannelUpdateEvent.kt @@ -1,6 +1,5 @@ package dev.kord.core.event.channel -import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.channel.* import dev.kord.core.entity.channel.thread.NewsChannelThread @@ -9,8 +8,6 @@ import dev.kord.core.event.Event interface ChannelUpdateEvent : Event { val channel: Channel - override val guildId: Snowflake? - get() = channel.data.guildId.value override val kord: Kord get() = channel.kord } diff --git a/core/src/main/kotlin/event/channel/TypingStartEvent.kt b/core/src/main/kotlin/event/channel/TypingStartEvent.kt index 68456a36d3d1..d44659a2a3c0 100644 --- a/core/src/main/kotlin/event/channel/TypingStartEvent.kt +++ b/core/src/main/kotlin/event/channel/TypingStartEvent.kt @@ -31,7 +31,7 @@ class TypingStartEvent( val userId: Snowflake get() = data.userId - override val guildId: Snowflake? get() = data.guildId.value + val guildId: Snowflake? get() = data.guildId.value val started: Instant get() = data.timestamp.toInstant() diff --git a/core/src/main/kotlin/event/channel/thread/ThreadDeleteEvent.kt b/core/src/main/kotlin/event/channel/thread/ThreadDeleteEvent.kt index f960fe7a0b6e..4a51d51bee18 100644 --- a/core/src/main/kotlin/event/channel/thread/ThreadDeleteEvent.kt +++ b/core/src/main/kotlin/event/channel/thread/ThreadDeleteEvent.kt @@ -1,6 +1,5 @@ package dev.kord.core.event.channel.thread -import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.channel.thread.DeletedThreadChannel import dev.kord.core.entity.channel.thread.NewsChannelThread @@ -18,8 +17,6 @@ sealed interface ThreadChannelDeleteEvent : Event { override val kord: Kord get() = channel.kord - override val guildId: Snowflake? - get() = channel.guildId } diff --git a/core/src/main/kotlin/event/channel/thread/ThreadListSyncEvent.kt b/core/src/main/kotlin/event/channel/thread/ThreadListSyncEvent.kt index 6ccf6a69b3a5..bed9cd574523 100644 --- a/core/src/main/kotlin/event/channel/thread/ThreadListSyncEvent.kt +++ b/core/src/main/kotlin/event/channel/thread/ThreadListSyncEvent.kt @@ -26,7 +26,7 @@ class ThreadListSyncEvent( override val supplier: EntitySupplier = kord.defaultSupplier ) : Event, Strategizable { - override val guildId: Snowflake get() = data.guildId + val guildId: Snowflake get() = data.guildId val guild: GuildBehavior get() = GuildBehavior(guildId, kord) diff --git a/core/src/main/kotlin/event/channel/thread/ThreadMemberUpdateEvent.kt b/core/src/main/kotlin/event/channel/thread/ThreadMemberUpdateEvent.kt index 08ea3ce8369d..486e866719bb 100644 --- a/core/src/main/kotlin/event/channel/thread/ThreadMemberUpdateEvent.kt +++ b/core/src/main/kotlin/event/channel/thread/ThreadMemberUpdateEvent.kt @@ -1,6 +1,5 @@ package dev.kord.core.event.channel.thread -import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.channel.thread.ThreadMember import dev.kord.core.event.Event @@ -9,7 +8,4 @@ class ThreadMemberUpdateEvent( val member: ThreadMember, override val kord: Kord, override val shard: Int -) : Event { - override val guildId: Snowflake? - get() = null -} \ No newline at end of file +) : Event \ No newline at end of file diff --git a/core/src/main/kotlin/event/channel/thread/ThreadMembersUpdateEvent.kt b/core/src/main/kotlin/event/channel/thread/ThreadMembersUpdateEvent.kt index e30da53f2bca..6124276fac0b 100644 --- a/core/src/main/kotlin/event/channel/thread/ThreadMembersUpdateEvent.kt +++ b/core/src/main/kotlin/event/channel/thread/ThreadMembersUpdateEvent.kt @@ -16,7 +16,7 @@ class ThreadMembersUpdateEvent( val id: Snowflake get() = data.id - override val guildId: Snowflake get() = data.guildId + val guildId: Snowflake get() = data.guildId val memberCount: Int get() = data.memberCount diff --git a/core/src/main/kotlin/event/gateway/Events.kt b/core/src/main/kotlin/event/gateway/Events.kt index 356bf1695893..ee238fc84cde 100644 --- a/core/src/main/kotlin/event/gateway/Events.kt +++ b/core/src/main/kotlin/event/gateway/Events.kt @@ -18,9 +18,9 @@ import kotlinx.coroutines.flow.filter sealed class GatewayEvent : Event -class ConnectEvent(override val kord: Kord, override val shard: Int, override val guildId: Snowflake? = null) : GatewayEvent() +class ConnectEvent(override val kord: Kord, override val shard: Int) : GatewayEvent() -sealed class DisconnectEvent(override val guildId: Snowflake? = null) : GatewayEvent() { +sealed class DisconnectEvent : GatewayEvent() { /** * A Gateway was detached, all resources tied to that gateway should be freed. @@ -117,9 +117,6 @@ class ReadyEvent( val guilds: Set get() = guildIds.map { GuildBehavior(it, kord) }.toSet() - override val guildId: Snowflake? - get() = null - suspend fun getGuilds(): Flow = supplier.guilds.filter { it.id in guildIds } override fun withStrategy(strategy: EntitySupplyStrategy<*>): ReadyEvent = @@ -131,10 +128,6 @@ class ReadyEvent( } class ResumedEvent(override val kord: Kord, override val shard: Int) : GatewayEvent() { - - override val guildId: Snowflake? - get() = null - override fun toString(): String { return "ResumedEvent(kord=$kord, shard=$shard)" } diff --git a/core/src/main/kotlin/event/guild/BanAddEvent.kt b/core/src/main/kotlin/event/guild/BanAddEvent.kt index d91355eff4c1..6dfe92eea8b6 100644 --- a/core/src/main/kotlin/event/guild/BanAddEvent.kt +++ b/core/src/main/kotlin/event/guild/BanAddEvent.kt @@ -15,7 +15,7 @@ import dev.kord.core.supplier.EntitySupplyStrategy class BanAddEvent( val user: User, - override val guildId: Snowflake, + val guildId: Snowflake, override val shard: Int, override val supplier: EntitySupplier = user.kord.defaultSupplier ) : Event, Strategizable { diff --git a/core/src/main/kotlin/event/guild/BanRemoveEvent.kt b/core/src/main/kotlin/event/guild/BanRemoveEvent.kt index ef49942ae22f..d5cbedf300df 100644 --- a/core/src/main/kotlin/event/guild/BanRemoveEvent.kt +++ b/core/src/main/kotlin/event/guild/BanRemoveEvent.kt @@ -12,7 +12,7 @@ import dev.kord.core.supplier.EntitySupplyStrategy class BanRemoveEvent( val user: User, - override val guildId: Snowflake, + val guildId: Snowflake, override val shard: Int, override val supplier: EntitySupplier = user.kord.defaultSupplier ) : Event, Strategizable { diff --git a/core/src/main/kotlin/event/guild/EmojisUpdateEvent.kt b/core/src/main/kotlin/event/guild/EmojisUpdateEvent.kt index 547f91510c83..852c5dcab447 100644 --- a/core/src/main/kotlin/event/guild/EmojisUpdateEvent.kt +++ b/core/src/main/kotlin/event/guild/EmojisUpdateEvent.kt @@ -11,7 +11,7 @@ import dev.kord.core.supplier.EntitySupplier import dev.kord.core.supplier.EntitySupplyStrategy class EmojisUpdateEvent( - override val guildId: Snowflake, + val guildId: Snowflake, val emojis: Set, override val kord: Kord, override val shard: Int, diff --git a/core/src/main/kotlin/event/guild/GuildCreateEvent.kt b/core/src/main/kotlin/event/guild/GuildCreateEvent.kt index 080cebff1ffc..43cb02728c34 100644 --- a/core/src/main/kotlin/event/guild/GuildCreateEvent.kt +++ b/core/src/main/kotlin/event/guild/GuildCreateEvent.kt @@ -1,14 +1,11 @@ package dev.kord.core.event.guild -import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.Guild import dev.kord.core.event.Event class GuildCreateEvent(val guild: Guild, override val shard: Int) : Event { override val kord: Kord get() = guild.kord - override val guildId: Snowflake - get() = guild.id override fun toString(): String { return "GuildCreateEvent(guild=$guild, shard=$shard)" diff --git a/core/src/main/kotlin/event/guild/GuildDeleteEvent.kt b/core/src/main/kotlin/event/guild/GuildDeleteEvent.kt index 92135afeef2e..a5785a0194b3 100644 --- a/core/src/main/kotlin/event/guild/GuildDeleteEvent.kt +++ b/core/src/main/kotlin/event/guild/GuildDeleteEvent.kt @@ -6,7 +6,7 @@ import dev.kord.core.entity.Guild import dev.kord.core.event.Event class GuildDeleteEvent( - override val guildId: Snowflake, + val guildId: Snowflake, val unavailable: Boolean, val guild: Guild?, override val kord: Kord, diff --git a/core/src/main/kotlin/event/guild/GuildUpdateEvent.kt b/core/src/main/kotlin/event/guild/GuildUpdateEvent.kt index 93f054536305..844a3261e6df 100644 --- a/core/src/main/kotlin/event/guild/GuildUpdateEvent.kt +++ b/core/src/main/kotlin/event/guild/GuildUpdateEvent.kt @@ -1,14 +1,11 @@ package dev.kord.core.event.guild -import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.Guild import dev.kord.core.event.Event class GuildUpdateEvent(val guild: Guild, override val shard: Int) : Event { override val kord: Kord get() = guild.kord - override val guildId: Snowflake? - get() = guild.id override fun toString(): String { return "GuildUpdateEvent(guild=$guild, shard=$shard)" } diff --git a/core/src/main/kotlin/event/guild/IntegrationsUpdateEvent.kt b/core/src/main/kotlin/event/guild/IntegrationsUpdateEvent.kt index df4d037a8f7e..d10b19d1139e 100644 --- a/core/src/main/kotlin/event/guild/IntegrationsUpdateEvent.kt +++ b/core/src/main/kotlin/event/guild/IntegrationsUpdateEvent.kt @@ -10,7 +10,7 @@ import dev.kord.core.supplier.EntitySupplier import dev.kord.core.supplier.EntitySupplyStrategy class IntegrationsUpdateEvent( - override val guildId: Snowflake, + val guildId: Snowflake, override val kord: Kord, override val shard: Int, override val supplier: EntitySupplier = kord.defaultSupplier diff --git a/core/src/main/kotlin/event/guild/InviteCreateEvent.kt b/core/src/main/kotlin/event/guild/InviteCreateEvent.kt index 276e02f3b423..39a1d24dafb5 100644 --- a/core/src/main/kotlin/event/guild/InviteCreateEvent.kt +++ b/core/src/main/kotlin/event/guild/InviteCreateEvent.kt @@ -57,7 +57,7 @@ class InviteCreateEvent( /** * The [Guild] of the invite. */ - override val guildId: Snowflake? get() = data.guildId.value + val guildId: Snowflake? get() = data.guildId.value /** * The behavior of the [Guild] of the invite. diff --git a/core/src/main/kotlin/event/guild/InviteDeleteEvent.kt b/core/src/main/kotlin/event/guild/InviteDeleteEvent.kt index 7acfa65c66a9..f5bd327c30ee 100644 --- a/core/src/main/kotlin/event/guild/InviteDeleteEvent.kt +++ b/core/src/main/kotlin/event/guild/InviteDeleteEvent.kt @@ -38,7 +38,7 @@ class InviteDeleteEvent( /** * The [Guild] of the invite. */ - override val guildId: Snowflake get() = data.guildId + val guildId: Snowflake get() = data.guildId /** * The behavior of the [Guild] of the invite. diff --git a/core/src/main/kotlin/event/guild/MemberJoinEvent.kt b/core/src/main/kotlin/event/guild/MemberJoinEvent.kt index 0d8a9fd46c6a..ea10369d2856 100644 --- a/core/src/main/kotlin/event/guild/MemberJoinEvent.kt +++ b/core/src/main/kotlin/event/guild/MemberJoinEvent.kt @@ -18,7 +18,7 @@ class MemberJoinEvent( override val kord: Kord get() = member.kord - override val guildId: Snowflake get() = member.guildId + val guildId: Snowflake get() = member.guildId val guild: GuildBehavior get() = member.guild diff --git a/core/src/main/kotlin/event/guild/MemberLeaveEvent.kt b/core/src/main/kotlin/event/guild/MemberLeaveEvent.kt index d68c7fddeca5..1cd6c2d24fea 100644 --- a/core/src/main/kotlin/event/guild/MemberLeaveEvent.kt +++ b/core/src/main/kotlin/event/guild/MemberLeaveEvent.kt @@ -7,7 +7,7 @@ import dev.kord.core.entity.Guild import dev.kord.core.entity.User import dev.kord.core.event.Event -class MemberLeaveEvent(val user: User, override val guildId: Snowflake, override val shard: Int) : Event { +class MemberLeaveEvent(val user: User, val guildId: Snowflake, override val shard: Int) : Event { override val kord: Kord get() = user.kord diff --git a/core/src/main/kotlin/event/guild/MemberUpdateEvent.kt b/core/src/main/kotlin/event/guild/MemberUpdateEvent.kt index 1d64eba2e9ea..c42ce7a0811f 100644 --- a/core/src/main/kotlin/event/guild/MemberUpdateEvent.kt +++ b/core/src/main/kotlin/event/guild/MemberUpdateEvent.kt @@ -21,7 +21,7 @@ class MemberUpdateEvent( override val supplier: EntitySupplier = kord.defaultSupplier, ) : Event, Strategizable { - override val guildId: Snowflake get() = member.guildId + val guildId: Snowflake get() = member.guildId @DeprecatedSinceKord("0.7.0") @Deprecated(deprecationMessage, ReplaceWith("member.id"), level = DeprecationLevel.ERROR) diff --git a/core/src/main/kotlin/event/guild/MembersChunkEvent.kt b/core/src/main/kotlin/event/guild/MembersChunkEvent.kt index c4b1790b3618..a87c6e68d7ac 100644 --- a/core/src/main/kotlin/event/guild/MembersChunkEvent.kt +++ b/core/src/main/kotlin/event/guild/MembersChunkEvent.kt @@ -29,7 +29,7 @@ class MembersChunkEvent( override val supplier: EntitySupplier = kord.defaultSupplier ) : Event, Strategizable { - override val guildId: Snowflake get() = data.guildId + val guildId: Snowflake get() = data.guildId val guild: GuildBehavior get() = GuildBehavior(guildId, kord) diff --git a/core/src/main/kotlin/event/guild/VoiceServerUpdateEvent.kt b/core/src/main/kotlin/event/guild/VoiceServerUpdateEvent.kt index e6fe070a00d2..8741dcda336b 100644 --- a/core/src/main/kotlin/event/guild/VoiceServerUpdateEvent.kt +++ b/core/src/main/kotlin/event/guild/VoiceServerUpdateEvent.kt @@ -11,7 +11,7 @@ import dev.kord.core.supplier.EntitySupplyStrategy class VoiceServerUpdateEvent( val token: String, - override val guildId: Snowflake, + val guildId: Snowflake, val endpoint: String?, override val kord: Kord, override val shard: Int, diff --git a/core/src/main/kotlin/event/guild/WebhookUpdateEvent.kt b/core/src/main/kotlin/event/guild/WebhookUpdateEvent.kt index 32b149c9e1e2..634d925ec282 100644 --- a/core/src/main/kotlin/event/guild/WebhookUpdateEvent.kt +++ b/core/src/main/kotlin/event/guild/WebhookUpdateEvent.kt @@ -15,7 +15,7 @@ import dev.kord.core.supplier.getChannelOf import dev.kord.core.supplier.getChannelOfOrNull class WebhookUpdateEvent( - override val guildId: Snowflake, + val guildId: Snowflake, val channelId: Snowflake, override val kord: Kord, override val shard: Int, diff --git a/core/src/main/kotlin/event/interaction/ApplicationCommandCreate.kt b/core/src/main/kotlin/event/interaction/ApplicationCommandCreate.kt index f0771009eb47..b1fdc19fc722 100644 --- a/core/src/main/kotlin/event/interaction/ApplicationCommandCreate.kt +++ b/core/src/main/kotlin/event/interaction/ApplicationCommandCreate.kt @@ -1,7 +1,6 @@ package dev.kord.core.event.interaction import dev.kord.common.annotation.KordPreview -import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.application.* import dev.kord.core.event.Event @@ -9,8 +8,6 @@ import dev.kord.core.event.Event sealed interface ApplicationCommandCreateEvent : Event { val command: GuildApplicationCommand - override val guildId: Snowflake? - get() = command.guildId } class ChatInputCommandCreateEvent( diff --git a/core/src/main/kotlin/event/interaction/ApplicationCommandDelete.kt b/core/src/main/kotlin/event/interaction/ApplicationCommandDelete.kt index e4f8e7a5d13e..f76957994ab5 100644 --- a/core/src/main/kotlin/event/interaction/ApplicationCommandDelete.kt +++ b/core/src/main/kotlin/event/interaction/ApplicationCommandDelete.kt @@ -1,7 +1,6 @@ package dev.kord.core.event.interaction import dev.kord.common.annotation.KordPreview -import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.application.* import dev.kord.core.event.Event @@ -9,8 +8,6 @@ import dev.kord.core.event.Event sealed interface ApplicationCommandDeleteEvent : Event { val command: GuildApplicationCommand - override val guildId: Snowflake? - get() = command.guildId } class ChatInputCommandDeleteEvent( diff --git a/core/src/main/kotlin/event/interaction/ApplicationCommandUpdate.kt b/core/src/main/kotlin/event/interaction/ApplicationCommandUpdate.kt index fbee1ce4ec58..5369df6d22b8 100644 --- a/core/src/main/kotlin/event/interaction/ApplicationCommandUpdate.kt +++ b/core/src/main/kotlin/event/interaction/ApplicationCommandUpdate.kt @@ -1,7 +1,6 @@ package dev.kord.core.event.interaction import dev.kord.common.annotation.KordPreview -import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.application.* import dev.kord.core.event.Event @@ -9,8 +8,6 @@ import dev.kord.core.event.Event sealed interface ApplicationCommandUpdateEvent : Event { val command: GuildApplicationCommand - override val guildId: Snowflake? - get() = command.guildId } class ChatInputCommandUpdateEvent( diff --git a/core/src/main/kotlin/event/interaction/ApplicationCreate.kt b/core/src/main/kotlin/event/interaction/ApplicationCreate.kt index 7d4cc842a787..be05dd782d26 100644 --- a/core/src/main/kotlin/event/interaction/ApplicationCreate.kt +++ b/core/src/main/kotlin/event/interaction/ApplicationCreate.kt @@ -1,6 +1,5 @@ package dev.kord.core.event.interaction -import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.behavior.interaction.* import dev.kord.core.entity.application.* @@ -35,8 +34,6 @@ import dev.kord.core.event.Event sealed interface ApplicationInteractionCreateEvent : InteractionCreateEvent { override val interaction: ApplicationCommandInteraction - override val guildId: Snowflake? - get() = interaction.data.guildId.value } sealed interface GlobalApplicationInteractionCreateEvent : ApplicationInteractionCreateEvent { diff --git a/core/src/main/kotlin/event/interaction/ComponentCreate.kt b/core/src/main/kotlin/event/interaction/ComponentCreate.kt index fb1a7f2df853..80ba4bc8a8b2 100644 --- a/core/src/main/kotlin/event/interaction/ComponentCreate.kt +++ b/core/src/main/kotlin/event/interaction/ComponentCreate.kt @@ -1,6 +1,5 @@ package dev.kord.core.event.interaction -import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.interaction.ButtonInteraction import dev.kord.core.entity.interaction.ComponentInteraction @@ -9,8 +8,6 @@ import dev.kord.core.entity.interaction.SelectMenuInteraction sealed interface ComponentInteractionCreateEvent : InteractionCreateEvent { override val interaction: ComponentInteraction - override val guildId: Snowflake? - get() = interaction.data.guildId.value } diff --git a/core/src/main/kotlin/event/message/MessageBulkDeleteEvent.kt b/core/src/main/kotlin/event/message/MessageBulkDeleteEvent.kt index 9d3b66876b7c..26ce489fcd4c 100644 --- a/core/src/main/kotlin/event/message/MessageBulkDeleteEvent.kt +++ b/core/src/main/kotlin/event/message/MessageBulkDeleteEvent.kt @@ -18,7 +18,7 @@ class MessageBulkDeleteEvent( val messageIds: Set, val messages: Set, val channelId: Snowflake, - override val guildId: Snowflake?, + val guildId: Snowflake?, override val kord: Kord, override val shard: Int, override val supplier: EntitySupplier = kord.defaultSupplier diff --git a/core/src/main/kotlin/event/message/MessageCreateEvent.kt b/core/src/main/kotlin/event/message/MessageCreateEvent.kt index a9c64fb81bcc..3699322aa9ff 100644 --- a/core/src/main/kotlin/event/message/MessageCreateEvent.kt +++ b/core/src/main/kotlin/event/message/MessageCreateEvent.kt @@ -14,7 +14,7 @@ import dev.kord.core.entity.channel.DmChannel class MessageCreateEvent( val message: Message, - override val guildId: Snowflake?, + val guildId: Snowflake?, val member: Member?, override val shard: Int, override val supplier: EntitySupplier = message.kord.defaultSupplier diff --git a/core/src/main/kotlin/event/message/MessageDeleteEvent.kt b/core/src/main/kotlin/event/message/MessageDeleteEvent.kt index e186b9ac8759..8fb89c956f10 100644 --- a/core/src/main/kotlin/event/message/MessageDeleteEvent.kt +++ b/core/src/main/kotlin/event/message/MessageDeleteEvent.kt @@ -17,7 +17,7 @@ import dev.kord.core.supplier.getChannelOfOrNull class MessageDeleteEvent( val messageId: Snowflake, val channelId: Snowflake, - override val guildId: Snowflake?, + val guildId: Snowflake?, val message: Message?, override val kord: Kord, override val shard: Int, diff --git a/core/src/main/kotlin/event/message/MessageUpdateEvent.kt b/core/src/main/kotlin/event/message/MessageUpdateEvent.kt index c9da46b40f70..21232036c38d 100644 --- a/core/src/main/kotlin/event/message/MessageUpdateEvent.kt +++ b/core/src/main/kotlin/event/message/MessageUpdateEvent.kt @@ -21,9 +21,6 @@ class MessageUpdateEvent( override val supplier: EntitySupplier = kord.defaultSupplier ) : Event, Strategizable { - override val guildId: Snowflake? - get() = new.guildId.value - /** * The behavior of the message that was updated. */ diff --git a/core/src/main/kotlin/event/message/ReactionAddEvent.kt b/core/src/main/kotlin/event/message/ReactionAddEvent.kt index 3df6dd33e235..33fd0b1fc458 100644 --- a/core/src/main/kotlin/event/message/ReactionAddEvent.kt +++ b/core/src/main/kotlin/event/message/ReactionAddEvent.kt @@ -19,7 +19,7 @@ class ReactionAddEvent( val userId: Snowflake, val channelId: Snowflake, val messageId: Snowflake, - override val guildId: Snowflake?, + val guildId: Snowflake?, val emoji: ReactionEmoji, override val kord: Kord, override val shard: Int, diff --git a/core/src/main/kotlin/event/message/ReactionRemoveAllEvent.kt b/core/src/main/kotlin/event/message/ReactionRemoveAllEvent.kt index 5c303ac24fd4..8c5c072cb6e7 100644 --- a/core/src/main/kotlin/event/message/ReactionRemoveAllEvent.kt +++ b/core/src/main/kotlin/event/message/ReactionRemoveAllEvent.kt @@ -18,7 +18,7 @@ import dev.kord.core.supplier.getChannelOfOrNull class ReactionRemoveAllEvent( val channelId: Snowflake, val messageId: Snowflake, - override val guildId: Snowflake?, + val guildId: Snowflake?, override val kord: Kord, override val shard: Int, override val supplier: EntitySupplier = kord.defaultSupplier diff --git a/core/src/main/kotlin/event/message/ReactionRemoveEmojiEvent.kt b/core/src/main/kotlin/event/message/ReactionRemoveEmojiEvent.kt index e62a80b571a0..3a86b933a4d1 100644 --- a/core/src/main/kotlin/event/message/ReactionRemoveEmojiEvent.kt +++ b/core/src/main/kotlin/event/message/ReactionRemoveEmojiEvent.kt @@ -40,7 +40,7 @@ class ReactionRemoveEmojiEvent( /** * The id of the [Guild]. */ - override val guildId: Snowflake get() = data.guildId + val guildId: Snowflake get() = data.guildId val guild: GuildBehavior get() = GuildBehavior(id = guildId, kord = kord) diff --git a/core/src/main/kotlin/event/message/ReactionRemoveEvent.kt b/core/src/main/kotlin/event/message/ReactionRemoveEvent.kt index 6d8d7313273b..da10b2ee74af 100644 --- a/core/src/main/kotlin/event/message/ReactionRemoveEvent.kt +++ b/core/src/main/kotlin/event/message/ReactionRemoveEvent.kt @@ -19,7 +19,7 @@ class ReactionRemoveEvent( val userId: Snowflake, val channelId: Snowflake, val messageId: Snowflake, - override val guildId: Snowflake?, + val guildId: Snowflake?, val emoji: ReactionEmoji, override val kord: Kord, override val shard: Int, diff --git a/core/src/main/kotlin/event/role/RoleCreateEvent.kt b/core/src/main/kotlin/event/role/RoleCreateEvent.kt index 3dfa575aff8a..d6a7f17ee7a3 100644 --- a/core/src/main/kotlin/event/role/RoleCreateEvent.kt +++ b/core/src/main/kotlin/event/role/RoleCreateEvent.kt @@ -18,7 +18,7 @@ class RoleCreateEvent( override val kord: Kord get() = role.kord - override val guildId: Snowflake get() = role.guildId + val guildId: Snowflake get() = role.guildId val guild: GuildBehavior get() = GuildBehavior(guildId, kord) diff --git a/core/src/main/kotlin/event/role/RoleDeleteEvent.kt b/core/src/main/kotlin/event/role/RoleDeleteEvent.kt index 12db384ef6b7..2484772f95c1 100644 --- a/core/src/main/kotlin/event/role/RoleDeleteEvent.kt +++ b/core/src/main/kotlin/event/role/RoleDeleteEvent.kt @@ -11,7 +11,7 @@ import dev.kord.core.supplier.EntitySupplier import dev.kord.core.supplier.EntitySupplyStrategy class RoleDeleteEvent( - override val guildId: Snowflake, + val guildId: Snowflake, val roleId: Snowflake, val role: Role?, override val kord: Kord, diff --git a/core/src/main/kotlin/event/role/RoleUpdateEvent.kt b/core/src/main/kotlin/event/role/RoleUpdateEvent.kt index d843ac586d7e..a7c1ad4c7311 100644 --- a/core/src/main/kotlin/event/role/RoleUpdateEvent.kt +++ b/core/src/main/kotlin/event/role/RoleUpdateEvent.kt @@ -18,7 +18,7 @@ class RoleUpdateEvent( override val kord: Kord get() = role.kord - override val guildId: Snowflake get() = role.guildId + val guildId: Snowflake get() = role.guildId val guild: GuildBehavior get() = GuildBehavior(guildId, kord) diff --git a/core/src/main/kotlin/event/user/PresenceUpdateEvent.kt b/core/src/main/kotlin/event/user/PresenceUpdateEvent.kt index 0650e8d55515..bff7a579b0e2 100644 --- a/core/src/main/kotlin/event/user/PresenceUpdateEvent.kt +++ b/core/src/main/kotlin/event/user/PresenceUpdateEvent.kt @@ -15,7 +15,7 @@ import dev.kord.core.supplier.EntitySupplyStrategy class PresenceUpdateEvent( val oldUser: User?, val user: DiscordPresenceUser, - override val guildId: Snowflake, + val guildId: Snowflake, val old: Presence?, val presence: Presence, override val shard: Int, diff --git a/core/src/main/kotlin/event/user/UserUpdateEvent.kt b/core/src/main/kotlin/event/user/UserUpdateEvent.kt index 6166d228d97a..674428b2dda6 100644 --- a/core/src/main/kotlin/event/user/UserUpdateEvent.kt +++ b/core/src/main/kotlin/event/user/UserUpdateEvent.kt @@ -1,6 +1,5 @@ package dev.kord.core.event.user -import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.User import dev.kord.core.event.Event @@ -11,8 +10,6 @@ class UserUpdateEvent( override val shard: Int ) : Event { override val kord: Kord get() = user.kord - override val guildId: Snowflake? - get() = null override fun toString(): String { return "UserUpdateEvent(old=$old, user=$user, shard=$shard)" diff --git a/core/src/main/kotlin/event/user/VoiceStateUpdateEvent.kt b/core/src/main/kotlin/event/user/VoiceStateUpdateEvent.kt index 066b8f33a866..42b9a582519f 100644 --- a/core/src/main/kotlin/event/user/VoiceStateUpdateEvent.kt +++ b/core/src/main/kotlin/event/user/VoiceStateUpdateEvent.kt @@ -1,6 +1,5 @@ package dev.kord.core.event.user -import dev.kord.common.entity.Snowflake import dev.kord.core.Kord import dev.kord.core.entity.VoiceState import dev.kord.core.event.Event @@ -11,8 +10,6 @@ class VoiceStateUpdateEvent( override val shard: Int ) : Event { override val kord: Kord get() = state.kord - override val guildId: Snowflake? - get() = state.guildId override fun toString(): String { return "VoiceStateUpdateEvent(old=$old, state=$state, shard=$shard)" From 0b95995e81cd0db1b0f9db67ddf77d2448c754fa Mon Sep 17 00:00:00 2001 From: ByteAlex Date: Mon, 20 Sep 2021 13:21:22 +0200 Subject: [PATCH 11/12] deploy to own repo --- buildSrc/src/main/kotlin/Projects.kt | 14 +---- .../src/main/kotlin/kord-module.gradle.kts | 59 ++----------------- 2 files changed, 5 insertions(+), 68 deletions(-) diff --git a/buildSrc/src/main/kotlin/Projects.kt b/buildSrc/src/main/kotlin/Projects.kt index 4516899e4e27..24c76d65d876 100644 --- a/buildSrc/src/main/kotlin/Projects.kt +++ b/buildSrc/src/main/kotlin/Projects.kt @@ -15,19 +15,7 @@ val isJitPack get() = "true" == System.getenv("JITPACK") object Library { const val name = "kord" const val group = "dev.kord" - val version: String - get() = if (isJitPack) System.getenv("RELEASE_TAG") - else { - val tag = System.getenv("GITHUB_TAG_NAME") - val branch = System.getenv("GITHUB_BRANCH_NAME") - when { - !tag.isNullOrBlank() -> tag - !branch.isNullOrBlank() && branch.startsWith("refs/heads/") -> - branch.substringAfter("refs/heads/").replace("/", "-") + "-SNAPSHOT" - else -> "undefined" - } - - } + val version: String = "zerotwo-SNAPSHOT" const val description = "Idiomatic Kotlin Wrapper for The Discord API" const val projectUrl = "https://github.com/kordlib/kord" diff --git a/buildSrc/src/main/kotlin/kord-module.gradle.kts b/buildSrc/src/main/kotlin/kord-module.gradle.kts index fa6fbb0bf74d..ca4b3d30e883 100644 --- a/buildSrc/src/main/kotlin/kord-module.gradle.kts +++ b/buildSrc/src/main/kotlin/kord-module.gradle.kts @@ -1,4 +1,5 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import java.net.URI import java.util.Base64 plugins { @@ -37,58 +38,20 @@ tasks { } } - withType { - useJUnitPlatform() - } - - dokkaHtml.configure { - this.outputDirectory.set(project.projectDir.resolve("dokka").resolve("kord")) - - dokkaSourceSets { - configureEach { - platform.set(org.jetbrains.dokka.Platform.jvm) - - sourceLink { - localDirectory.set(file("src/main/kotlin")) - remoteUrl.set(uri("https://github.com/kordlib/kord/tree/master/${project.name}/src/main/kotlin/").toURL()) - - remoteLineSuffix.set("#L") - } - - jdkVersion.set(8) - } - } - } - val sourcesJar by registering(Jar::class) { archiveClassifier.set("sources") from(sourceSets.main.get().allSource) } - val dokkaHtml by getting - - val dokkaJar by registering(Jar::class) { - group = JavaBasePlugin.DOCUMENTATION_GROUP - description = "Assembles Kotlin docs with Dokka" - archiveClassifier.set("javadoc") - from(dokkaHtml) - dependsOn(dokkaHtml) - } - - withType().configureEach { - doFirst { require(!Library.isUndefined) { "No release/snapshot version found." } } - } - publishing { publications { create(Library.name) { from(components["kotlin"]) - groupId = Library.group + groupId = "dev.kord" artifactId = "kord-${project.name}" - version = Library.version + version = "zerotwo-SNAPSHOT" artifact(sourcesJar.get()) - artifact(dokkaJar.get()) pom { name.set(Library.name) @@ -124,11 +87,9 @@ tasks { } } - if (!isJitPack) { repositories { maven { - url = if (Library.isSnapshot) uri(Repo.snapshotsUrl) - else uri(Repo.releasesUrl) + url = URI("https://nexus.zerotwo.bot/repository/m2-snapshots-public/") credentials { username = System.getenv("NEXUS_USER") @@ -136,19 +97,7 @@ tasks { } } } - } - } - } - } - - if (!isJitPack && Library.isRelease) { - signing { - val signingKey = findProperty("signingKey")?.toString() - val signingPassword = findProperty("signingPassword")?.toString() - if (signingKey != null && signingPassword != null) { - useInMemoryPgpKeys(Base64.getDecoder().decode(signingKey).toString(), signingPassword) } - sign(publishing.publications[Library.name]) } } } From 3bd4e7736387f2378fc9d51ba4548b24ecd8793a Mon Sep 17 00:00:00 2001 From: ByteAlex Date: Fri, 24 Sep 2021 10:56:12 +0200 Subject: [PATCH 12/12] Behaviour improvement --- core/src/main/kotlin/behavior/RoleBehavior.kt | 18 ++++++++++++++++++ .../kotlin/behavior/StageInstanceBehavior.kt | 16 ++++++++++++++++ core/src/main/kotlin/entity/Guild.kt | 4 ++++ core/src/main/kotlin/entity/Member.kt | 14 +++++++++++++- core/src/main/kotlin/entity/Message.kt | 2 ++ core/src/main/kotlin/entity/Role.kt | 4 ++++ core/src/main/kotlin/entity/StageInstance.kt | 3 +++ core/src/main/kotlin/entity/User.kt | 8 ++++++++ .../src/main/kotlin/entity/channel/Category.kt | 2 ++ .../main/kotlin/entity/channel/DmChannel.kt | 4 ++++ .../main/kotlin/entity/channel/NewsChannel.kt | 6 ++++-- .../kotlin/entity/channel/ResolvedChannel.kt | 5 ++++- .../kotlin/entity/channel/StageVoiceChannel.kt | 3 ++- .../main/kotlin/entity/channel/StoreChannel.kt | 2 ++ .../main/kotlin/entity/channel/TextChannel.kt | 4 ++++ .../main/kotlin/entity/channel/VoiceChannel.kt | 2 ++ .../entity/channel/thread/NewsChannelThread.kt | 4 ++-- .../entity/channel/thread/TextChannelThread.kt | 4 ++-- 18 files changed, 96 insertions(+), 9 deletions(-) diff --git a/core/src/main/kotlin/behavior/RoleBehavior.kt b/core/src/main/kotlin/behavior/RoleBehavior.kt index 40c19460e4f7..a492082bbe59 100644 --- a/core/src/main/kotlin/behavior/RoleBehavior.kt +++ b/core/src/main/kotlin/behavior/RoleBehavior.kt @@ -1,11 +1,13 @@ package dev.kord.core.behavior import dev.kord.common.entity.Snowflake +import dev.kord.common.exception.RequestException import dev.kord.core.Kord import dev.kord.core.cache.data.RoleData import dev.kord.core.entity.KordEntity import dev.kord.core.entity.Role import dev.kord.core.entity.Strategizable +import dev.kord.core.exception.EntityNotFoundException import dev.kord.core.indexOfFirstOrNull import dev.kord.core.sorted import dev.kord.core.supplier.EntitySupplier @@ -43,6 +45,22 @@ interface RoleBehavior : KordEntity, Strategizable { else "<@&${id.asString}>" } + /** + * Requests to get the this behavior as a [Role] if it's not an instance of a [Role]. + * + * @throws [RequestException] if anything went wrong during the request. + * @throws [EntityNotFoundException] if the user wasn't present. + */ + suspend fun asRole(): Role = supplier.getRole(guildId, id) + + /** + * Requests to get this behavior as a [Role] if its not an instance of a [Role], + * returns null if the user isn't present. + * + * @throws [RequestException] if anything went wrong during the request. + */ + suspend fun asRoleOrNull(): Role? = supplier.getRoleOrNull(guildId, id) + /** * Requests to change the [position] of this role. * diff --git a/core/src/main/kotlin/behavior/StageInstanceBehavior.kt b/core/src/main/kotlin/behavior/StageInstanceBehavior.kt index f043cfc6b9c7..b306d82d0d1e 100644 --- a/core/src/main/kotlin/behavior/StageInstanceBehavior.kt +++ b/core/src/main/kotlin/behavior/StageInstanceBehavior.kt @@ -1,11 +1,13 @@ package dev.kord.core.behavior import dev.kord.common.entity.Snowflake +import dev.kord.common.exception.RequestException import dev.kord.core.Kord import dev.kord.core.cache.data.StageInstanceData import dev.kord.core.entity.KordEntity import dev.kord.core.entity.StageInstance import dev.kord.core.entity.Strategizable +import dev.kord.core.exception.EntityNotFoundException import dev.kord.core.supplier.EntitySupplier import dev.kord.core.supplier.EntitySupplyStrategy import dev.kord.rest.json.request.StageInstanceUpdateRequest @@ -22,8 +24,22 @@ interface StageInstanceBehavior : KordEntity, Strategizable { return StageInstance(data, kord, supplier) } + /** + * Requests to get the this behavior as a [StageInstance] if it's not an instance of a [StageInstance]. + * + * @throws [RequestException] if anything went wrong during the request. + * @throws [EntityNotFoundException] if the user wasn't present. + */ suspend fun asStageInstance(): StageInstance = supplier.getStageInstance(channelId) + /** + * Requests to get this behavior as a [StageInstance] if its not an instance of a [StageInstance], + * returns null if the user isn't present. + * + * @throws [RequestException] if anything went wrong during the request. + */ + suspend fun asStageInstanceOrNull(): StageInstance? = supplier.getStageInstanceOrNull(channelId) + override fun withStrategy(strategy: EntitySupplyStrategy<*>): StageInstanceBehavior = StageInstanceBehavior(id, channelId, kord, strategy.supply(kord)) } diff --git a/core/src/main/kotlin/entity/Guild.kt b/core/src/main/kotlin/entity/Guild.kt index 7f13b680c94b..5ea5ecc1e40c 100644 --- a/core/src/main/kotlin/entity/Guild.kt +++ b/core/src/main/kotlin/entity/Guild.kt @@ -46,6 +46,10 @@ class Guild( */ val afkChannelId: Snowflake? get() = data.afkChannelId + override suspend fun asGuild(): Guild = this + + override suspend fun asGuildOrNull(): Guild = this + val afkChannel: VoiceChannelBehavior? get() = afkChannelId?.let { VoiceChannelBehavior(guildId = id, id = it, kord = kord) } diff --git a/core/src/main/kotlin/entity/Member.kt b/core/src/main/kotlin/entity/Member.kt index 36a9744e47d8..58272e7e3ea9 100644 --- a/core/src/main/kotlin/entity/Member.kt +++ b/core/src/main/kotlin/entity/Member.kt @@ -13,8 +13,8 @@ import dev.kord.core.cache.data.UserData import dev.kord.core.supplier.EntitySupplier import dev.kord.core.supplier.EntitySupplyStrategy import kotlinx.coroutines.flow.* -import kotlinx.datetime.toInstant import kotlinx.datetime.Instant +import kotlinx.datetime.toInstant import java.util.* /** @@ -111,6 +111,18 @@ class Member( override fun withStrategy(strategy: EntitySupplyStrategy<*>): Member = Member(memberData, data, kord, strategy.supply(kord)) + override suspend fun asUser(): User = this + + override suspend fun asUserOrNull(): User = this + + override suspend fun asMember(guildId: Snowflake): Member = this + + override suspend fun asMember(): Member = this + + override suspend fun asMemberOrNull(guildId: Snowflake): Member = this + + override suspend fun asMemberOrNull(): Member = this + override fun hashCode(): Int = Objects.hash(id, guildId) diff --git a/core/src/main/kotlin/entity/Message.kt b/core/src/main/kotlin/entity/Message.kt index c7c9d0fd0a1e..5a49a396ac0a 100644 --- a/core/src/main/kotlin/entity/Message.kt +++ b/core/src/main/kotlin/entity/Message.kt @@ -47,6 +47,8 @@ class Message( override val channelId: Snowflake get() = data.channelId + override suspend fun asMessageOrNull(): Message = this + /** * The files attached to this message. */ diff --git a/core/src/main/kotlin/entity/Role.kt b/core/src/main/kotlin/entity/Role.kt index 5f8a88bc79de..23c7a90c2780 100644 --- a/core/src/main/kotlin/entity/Role.kt +++ b/core/src/main/kotlin/entity/Role.kt @@ -37,6 +37,10 @@ data class Role( val rawPosition: Int get() = data.position + override suspend fun asRole(): Role = this + + override suspend fun asRoleOrNull(): Role = this + /** * The tags of this role, if present. */ diff --git a/core/src/main/kotlin/entity/StageInstance.kt b/core/src/main/kotlin/entity/StageInstance.kt index 84907706d95c..579bcd5f6814 100644 --- a/core/src/main/kotlin/entity/StageInstance.kt +++ b/core/src/main/kotlin/entity/StageInstance.kt @@ -16,4 +16,7 @@ class StageInstance(val data: StageInstanceData, override val kord: Kord, overri override fun withStrategy(strategy: EntitySupplyStrategy<*>): StageInstanceBehavior = StageInstance(data, kord, strategy.supply(kord)) + override suspend fun asStageInstance(): StageInstance = this + + override suspend fun asStageInstanceOrNull(): StageInstance = this } diff --git a/core/src/main/kotlin/entity/User.kt b/core/src/main/kotlin/entity/User.kt index e9827a7c211f..0fb5da76449d 100644 --- a/core/src/main/kotlin/entity/User.kt +++ b/core/src/main/kotlin/entity/User.kt @@ -43,6 +43,14 @@ open class User( @DeprecatedSinceKord("0.7.0") val flags: UserFlags? by ::publicFlags + override suspend fun asUser(): User { + return this + } + + override suspend fun asUserOrNull(): User { + return this + } + /** * The flags on a user's account, if present. */ diff --git a/core/src/main/kotlin/entity/channel/Category.kt b/core/src/main/kotlin/entity/channel/Category.kt index 0e06a9b17e29..4ea211556d12 100644 --- a/core/src/main/kotlin/entity/channel/Category.kt +++ b/core/src/main/kotlin/entity/channel/Category.kt @@ -28,6 +28,8 @@ class Category( override suspend fun asChannel(): Category = this + override suspend fun asChannelOrNull(): Category = this + override fun compareTo(other: Entity): Int { return super.compareTo(other) } diff --git a/core/src/main/kotlin/entity/channel/DmChannel.kt b/core/src/main/kotlin/entity/channel/DmChannel.kt index 54059b09ce49..eed27b73d57d 100644 --- a/core/src/main/kotlin/entity/channel/DmChannel.kt +++ b/core/src/main/kotlin/entity/channel/DmChannel.kt @@ -49,6 +49,10 @@ data class DmChannel( .map { supplier.getUserOrNull(it) } .filterNotNull() + override suspend fun asChannel(): MessageChannel = this + + override suspend fun asChannelOrNull(): MessageChannel = this + /** * returns a new [DmChannel] with the given [strategy]. */ diff --git a/core/src/main/kotlin/entity/channel/NewsChannel.kt b/core/src/main/kotlin/entity/channel/NewsChannel.kt index bb7a0809ae0a..5ce65e2300a6 100644 --- a/core/src/main/kotlin/entity/channel/NewsChannel.kt +++ b/core/src/main/kotlin/entity/channel/NewsChannel.kt @@ -18,8 +18,6 @@ class NewsChannel( override val supplier: EntitySupplier = kord.defaultSupplier ) : CategorizableChannel, TopGuildMessageChannel, ThreadParentChannel, NewsChannelBehavior { - override suspend fun asChannel(): NewsChannel = this - override fun hashCode(): Int = Objects.hash(id, guildId) override fun equals(other: Any?): Boolean = when (other) { @@ -28,6 +26,10 @@ class NewsChannel( else -> false } + override suspend fun asChannel(): NewsChannel = this + + override suspend fun asChannelOrNull(): NewsChannel = this + /** * Returns a new [NewsChannel] with the given [strategy]. */ diff --git a/core/src/main/kotlin/entity/channel/ResolvedChannel.kt b/core/src/main/kotlin/entity/channel/ResolvedChannel.kt index 7694ac58012f..c21695d32bb2 100644 --- a/core/src/main/kotlin/entity/channel/ResolvedChannel.kt +++ b/core/src/main/kotlin/entity/channel/ResolvedChannel.kt @@ -1,6 +1,5 @@ package dev.kord.core.entity.channel -import dev.kord.common.annotation.KordPreview import dev.kord.common.entity.Permissions import dev.kord.core.Kord import dev.kord.core.cache.data.ChannelData @@ -19,6 +18,10 @@ class ResolvedChannel( val permissions: Permissions get() = data.permissions.value!! + override suspend fun asChannel(): Channel = this + + override suspend fun asChannelOrNull(): Channel = this + override val supplier: EntitySupplier get() = strategy.supply(kord) diff --git a/core/src/main/kotlin/entity/channel/StageVoiceChannel.kt b/core/src/main/kotlin/entity/channel/StageVoiceChannel.kt index 43344d33fbc9..e4dcedb3a857 100644 --- a/core/src/main/kotlin/entity/channel/StageVoiceChannel.kt +++ b/core/src/main/kotlin/entity/channel/StageVoiceChannel.kt @@ -5,7 +5,6 @@ import dev.kord.common.entity.optional.getOrThrow import dev.kord.core.Kord import dev.kord.core.behavior.channel.ChannelBehavior import dev.kord.core.behavior.channel.GuildChannelBehavior -import dev.kord.core.behavior.channel.TopGuildChannelBehavior import dev.kord.core.behavior.channel.StageChannelBehavior import dev.kord.core.cache.data.ChannelData import dev.kord.core.exception.GatewayNotFoundException @@ -45,6 +44,8 @@ class StageChannel( override suspend fun asChannel(): StageChannel = this + override suspend fun asChannelOrNull(): StageChannel = this + override fun hashCode(): Int = Objects.hash(id, guildId) override fun equals(other: Any?): Boolean = when (other) { diff --git a/core/src/main/kotlin/entity/channel/StoreChannel.kt b/core/src/main/kotlin/entity/channel/StoreChannel.kt index d26aca55ea30..b4f2453228b7 100644 --- a/core/src/main/kotlin/entity/channel/StoreChannel.kt +++ b/core/src/main/kotlin/entity/channel/StoreChannel.kt @@ -22,6 +22,8 @@ data class StoreChannel( override suspend fun asChannel(): StoreChannel = this + override suspend fun asChannelOrNull(): StoreChannel = this + /** * Returns a new [StoreChannel] with the given [strategy]. */ diff --git a/core/src/main/kotlin/entity/channel/TextChannel.kt b/core/src/main/kotlin/entity/channel/TextChannel.kt index cf6c91c8a1a8..f813f33f2c6e 100644 --- a/core/src/main/kotlin/entity/channel/TextChannel.kt +++ b/core/src/main/kotlin/entity/channel/TextChannel.kt @@ -38,6 +38,10 @@ class TextChannel( override fun withStrategy(strategy: EntitySupplyStrategy<*>): TextChannel = TextChannel(data, kord, strategy.supply(kord)) + override suspend fun asChannel(): TextChannel = this + + override suspend fun asChannelOrNull(): TextChannel = this + override fun hashCode(): Int = Objects.hash(id, guildId) override fun equals(other: Any?): Boolean = when (other) { diff --git a/core/src/main/kotlin/entity/channel/VoiceChannel.kt b/core/src/main/kotlin/entity/channel/VoiceChannel.kt index d5bdcc77a45a..10203e9ade12 100644 --- a/core/src/main/kotlin/entity/channel/VoiceChannel.kt +++ b/core/src/main/kotlin/entity/channel/VoiceChannel.kt @@ -62,6 +62,8 @@ class VoiceChannel( VoiceChannel(data, kord, strategy.supply(kord)) override suspend fun asChannel(): VoiceChannel = this + + override suspend fun asChannelOrNull(): VoiceChannel = this override fun hashCode(): Int = Objects.hash(id, guildId) diff --git a/core/src/main/kotlin/entity/channel/thread/NewsChannelThread.kt b/core/src/main/kotlin/entity/channel/thread/NewsChannelThread.kt index 30ef737dbe93..38f8ceb04036 100644 --- a/core/src/main/kotlin/entity/channel/thread/NewsChannelThread.kt +++ b/core/src/main/kotlin/entity/channel/thread/NewsChannelThread.kt @@ -19,9 +19,9 @@ class NewsChannelThread( ) : ThreadChannel { - override suspend fun asChannel(): NewsChannelThread = super.asChannel() as NewsChannelThread + override suspend fun asChannel(): NewsChannelThread = this - override suspend fun asChannelOrNull(): NewsChannelThread? = super.asChannelOrNull() as? NewsChannelThread + override suspend fun asChannelOrNull(): NewsChannelThread? = this override suspend fun getParent(): NewsChannel { diff --git a/core/src/main/kotlin/entity/channel/thread/TextChannelThread.kt b/core/src/main/kotlin/entity/channel/thread/TextChannelThread.kt index 69c740acd516..345a16209fb1 100644 --- a/core/src/main/kotlin/entity/channel/thread/TextChannelThread.kt +++ b/core/src/main/kotlin/entity/channel/thread/TextChannelThread.kt @@ -34,9 +34,9 @@ class TextChannelThread( override val guildId: Snowflake get() = data.guildId.value!! - override suspend fun asChannel(): TextChannelThread = super.asChannel() as TextChannelThread + override suspend fun asChannel(): TextChannelThread = this - override suspend fun asChannelOrNull(): TextChannelThread? = super.asChannelOrNull() as? TextChannelThread + override suspend fun asChannelOrNull(): TextChannelThread = this override fun withStrategy(strategy: EntitySupplyStrategy<*>): TextChannelThread { return TextChannelThread(data, kord, strategy.supply(kord))