From 0be5976be2aa72eeece14a2681a65895ad3a7931 Mon Sep 17 00:00:00 2001 From: Jannik Reimers Date: Thu, 3 Apr 2025 19:59:31 +0200 Subject: [PATCH] test twitch stuff --- detekt.yml | 2 +- src/main/kotlin/dev/jansel/aglaea/App.kt | 9 ++++++- .../jansel/aglaea/extensions/EventHooks.kt | 25 +++++++++++++++++++ .../kotlin/dev/jansel/aglaea/utils/Twitch.kt | 18 +++++++++++++ .../kotlin/dev/jansel/aglaea/utils/_Utils.kt | 23 +++++++++++++++++ 5 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 src/main/kotlin/dev/jansel/aglaea/extensions/EventHooks.kt create mode 100644 src/main/kotlin/dev/jansel/aglaea/utils/Twitch.kt create mode 100644 src/main/kotlin/dev/jansel/aglaea/utils/_Utils.kt diff --git a/detekt.yml b/detekt.yml index e3ddb48..a0a0f5f 100644 --- a/detekt.yml +++ b/detekt.yml @@ -248,7 +248,7 @@ formatting: active: true autoCorrect: true Filename: - active: true + active: false FinalNewline: active: true autoCorrect: true diff --git a/src/main/kotlin/dev/jansel/aglaea/App.kt b/src/main/kotlin/dev/jansel/aglaea/App.kt index 925d1b0..708345c 100644 --- a/src/main/kotlin/dev/jansel/aglaea/App.kt +++ b/src/main/kotlin/dev/jansel/aglaea/App.kt @@ -3,12 +3,19 @@ */ package dev.jansel.aglaea +import com.github.twitch4j.TwitchClient import dev.jansel.aglaea.extensions.TestExtension +import dev.jansel.aglaea.utils.twitch import dev.kord.common.entity.Snowflake import dev.kordex.core.ExtensibleBot import dev.kordex.core.utils.env +import io.github.oshai.kotlinlogging.KotlinLogging import java.io.File +var twitchClient: TwitchClient? = null +val logger = KotlinLogging.logger { } +var botRef: ExtensibleBot? = null + val TEST_SERVER_ID = Snowflake( env("TEST_SERVER").toLong() // Get the test server ID from the env vars or a .env file ) @@ -20,7 +27,7 @@ suspend fun main() { extensions { add(::TestExtension) } - + twitch(true) if (devMode) { // In development mode, load any plugins from `src/main/dist/plugin` if it exists. plugins { diff --git a/src/main/kotlin/dev/jansel/aglaea/extensions/EventHooks.kt b/src/main/kotlin/dev/jansel/aglaea/extensions/EventHooks.kt new file mode 100644 index 0000000..454b0f4 --- /dev/null +++ b/src/main/kotlin/dev/jansel/aglaea/extensions/EventHooks.kt @@ -0,0 +1,25 @@ +package dev.jansel.aglaea.extensions + +import com.github.philippheuer.credentialmanager.domain.OAuth2Credential +import dev.jansel.aglaea.logger +import dev.jansel.aglaea.twitchClient +import dev.jansel.aglaea.utils.twitchcid +import dev.jansel.aglaea.utils.twitchcs +import dev.kord.core.event.gateway.ReadyEvent +import dev.kordex.core.extensions.Extension +import dev.kordex.core.extensions.event + +class EventHooks : Extension() { + override val name = "eventhooks" + + override suspend fun setup() { + event { + action { + // This is where you can add any code that should run when the bot is ready + // For example, you can initialize any services or start any background tasks + logger.info { "Bot is ready!" } + twitchClient!!.pubSub.listenForChannelPointsRedemptionEvents(OAuth2Credential(twitchcid, twitchcs), "120275141") + } + } + } +} diff --git a/src/main/kotlin/dev/jansel/aglaea/utils/Twitch.kt b/src/main/kotlin/dev/jansel/aglaea/utils/Twitch.kt new file mode 100644 index 0000000..86bdbb4 --- /dev/null +++ b/src/main/kotlin/dev/jansel/aglaea/utils/Twitch.kt @@ -0,0 +1,18 @@ +package dev.jansel.aglaea.utils + +import com.github.philippheuer.events4j.reactor.ReactorEventHandler +import com.github.twitch4j.TwitchClientBuilder +import dev.jansel.aglaea.twitchClient +import dev.kordex.core.koin.KordExKoinComponent + +class Twitch : KordExKoinComponent { + suspend fun init() { + twitchClient = TwitchClientBuilder.builder() + .withEnableHelix(true) + .withEnablePubSub(true) + .withDefaultEventHandler(ReactorEventHandler::class.java) + .withClientId(twitchcid) + .withClientSecret(twitchcs) + .build() + } +} diff --git a/src/main/kotlin/dev/jansel/aglaea/utils/_Utils.kt b/src/main/kotlin/dev/jansel/aglaea/utils/_Utils.kt new file mode 100644 index 0000000..89739fd --- /dev/null +++ b/src/main/kotlin/dev/jansel/aglaea/utils/_Utils.kt @@ -0,0 +1,23 @@ +package dev.jansel.aglaea.utils + +import dev.kordex.core.builders.ExtensibleBotBuilder +import dev.kordex.core.utils.env +import dev.kordex.core.utils.loadModule +import org.koin.dsl.bind + +val twitchcid = env("TWITCH_CLIENT_ID") +val twitchcs = env("TWITCH_CLIENT_SECRET") + +suspend inline fun ExtensibleBotBuilder.twitch(active: Boolean) { + hooks { + beforeKoinSetup { + loadModule { + single { Twitch() } bind Twitch::class + } + + if (active) { + Twitch().init() + } + } + } +}