add a possibility for a replay session
All checks were successful
Build & Publish / build (push) Successful in 3m59s
All checks were successful
Build & Publish / build (push) Successful in 3m59s
This commit is contained in:
parent
61ffaa7116
commit
3ae5407a2d
@ -1,11 +1,9 @@
|
|||||||
/*
|
|
||||||
* This Kotlin source file was generated by the Gradle 'init' task.
|
|
||||||
*/
|
|
||||||
package dev.jansel.aglaea
|
package dev.jansel.aglaea
|
||||||
|
|
||||||
import com.github.twitch4j.TwitchClient
|
import com.github.twitch4j.TwitchClient
|
||||||
import dev.jansel.aglaea.extensions.EventHooks
|
import dev.jansel.aglaea.extensions.EventHooks
|
||||||
import dev.jansel.aglaea.extensions.ReplayExtension
|
import dev.jansel.aglaea.extensions.ReplayExtension
|
||||||
|
import dev.jansel.aglaea.extensions.SessionExtension
|
||||||
import dev.jansel.aglaea.utils.database
|
import dev.jansel.aglaea.utils.database
|
||||||
import dev.jansel.aglaea.utils.twitch
|
import dev.jansel.aglaea.utils.twitch
|
||||||
import dev.kord.common.entity.Snowflake
|
import dev.kord.common.entity.Snowflake
|
||||||
@ -29,6 +27,7 @@ suspend fun main() {
|
|||||||
extensions {
|
extensions {
|
||||||
add(::ReplayExtension)
|
add(::ReplayExtension)
|
||||||
add(::EventHooks)
|
add(::EventHooks)
|
||||||
|
add(::SessionExtension)
|
||||||
}
|
}
|
||||||
database(true)
|
database(true)
|
||||||
twitch(true)
|
twitch(true)
|
||||||
|
@ -0,0 +1,27 @@
|
|||||||
|
package dev.jansel.aglaea.database.collections
|
||||||
|
|
||||||
|
import dev.jansel.aglaea.database.Database
|
||||||
|
import dev.jansel.aglaea.database.entities.ConfigData
|
||||||
|
import dev.kordex.core.koin.KordExKoinComponent
|
||||||
|
import org.koin.core.component.inject
|
||||||
|
import org.litote.kmongo.exists
|
||||||
|
|
||||||
|
class ConfigCollection : KordExKoinComponent {
|
||||||
|
private val db: Database by inject()
|
||||||
|
|
||||||
|
@PublishedApi
|
||||||
|
internal val collection = db.mongo.getCollection<ConfigData>()
|
||||||
|
suspend fun get(): ConfigData? =
|
||||||
|
collection.findOne()
|
||||||
|
suspend fun set(config: ConfigData) =
|
||||||
|
collection.insertOne(config)
|
||||||
|
suspend fun update(config: ConfigData) =
|
||||||
|
collection.findOneAndReplace(
|
||||||
|
ConfigData::replaySession exists true,
|
||||||
|
config
|
||||||
|
)
|
||||||
|
suspend fun delete() =
|
||||||
|
collection.deleteOne(ConfigData::replaySession exists true)
|
||||||
|
suspend fun deleteAll() =
|
||||||
|
collection.deleteMany(ConfigData::replaySession exists true)
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package dev.jansel.aglaea.database.entities
|
||||||
|
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
data class ConfigData(
|
||||||
|
val replaySession: Boolean?
|
||||||
|
)
|
@ -1,15 +1,24 @@
|
|||||||
package dev.jansel.aglaea.extensions
|
package dev.jansel.aglaea.extensions
|
||||||
|
|
||||||
|
import dev.jansel.aglaea.botRef
|
||||||
|
import dev.jansel.aglaea.database.collections.ConfigCollection
|
||||||
import dev.jansel.aglaea.database.collections.ReplayCollection
|
import dev.jansel.aglaea.database.collections.ReplayCollection
|
||||||
import dev.jansel.aglaea.database.entities.ReplayData
|
import dev.jansel.aglaea.database.entities.ReplayData
|
||||||
import dev.jansel.aglaea.i18n.Translations
|
import dev.jansel.aglaea.i18n.Translations
|
||||||
import dev.kord.common.entity.Snowflake
|
import dev.kord.common.entity.Snowflake
|
||||||
|
import dev.kord.core.behavior.channel.createMessage
|
||||||
|
import dev.kord.core.behavior.getChannelOf
|
||||||
|
import dev.kord.core.entity.channel.GuildMessageChannel
|
||||||
import dev.kordex.core.checks.inChannel
|
import dev.kordex.core.checks.inChannel
|
||||||
import dev.kordex.core.commands.Arguments
|
import dev.kordex.core.commands.Arguments
|
||||||
import dev.kordex.core.commands.converters.impl.attachment
|
import dev.kordex.core.commands.converters.impl.attachment
|
||||||
import dev.kordex.core.extensions.Extension
|
import dev.kordex.core.extensions.Extension
|
||||||
import dev.kordex.core.extensions.ephemeralSlashCommand
|
import dev.kordex.core.extensions.ephemeralSlashCommand
|
||||||
import dev.kordex.core.utils.download
|
import dev.kordex.core.utils.download
|
||||||
|
import io.ktor.client.request.forms.*
|
||||||
|
import io.ktor.utils.io.*
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.runBlocking
|
||||||
import kotlin.uuid.ExperimentalUuidApi
|
import kotlin.uuid.ExperimentalUuidApi
|
||||||
import kotlin.uuid.Uuid
|
import kotlin.uuid.Uuid
|
||||||
|
|
||||||
@ -26,6 +35,22 @@ class ReplayExtension : Extension() {
|
|||||||
}
|
}
|
||||||
action {
|
action {
|
||||||
val file = arguments.file
|
val file = arguments.file
|
||||||
|
val downloadedFile = file.download()
|
||||||
|
val replayToggle = ConfigCollection().get()?.replaySession ?: false
|
||||||
|
|
||||||
|
if (replayToggle) {
|
||||||
|
val channel = botRef!!.kordRef.getGuildOrNull(Snowflake(1130932838200512584))!!
|
||||||
|
.getChannelOf<GuildMessageChannel>(Snowflake(1130954956892029060))
|
||||||
|
runBlocking {
|
||||||
|
launch {
|
||||||
|
channel.createMessage {
|
||||||
|
content = "Replay submitted by: ${event.interaction.user.globalName}"
|
||||||
|
this.addFile("replay.osr", ChannelProvider(null) { ByteReadChannel(downloadedFile) })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return@action
|
||||||
|
}
|
||||||
if (file.filename.endsWith(".osr")) {
|
if (file.filename.endsWith(".osr")) {
|
||||||
val id = Uuid.random().toString()
|
val id = Uuid.random().toString()
|
||||||
|
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
package dev.jansel.aglaea.extensions
|
||||||
|
|
||||||
|
import dev.jansel.aglaea.database.collections.ConfigCollection
|
||||||
|
import dev.jansel.aglaea.i18n.Translations
|
||||||
|
import dev.jansel.aglaea.logger
|
||||||
|
import dev.kord.common.entity.Permission
|
||||||
|
import dev.kordex.core.checks.hasPermission
|
||||||
|
import dev.kordex.core.extensions.Extension
|
||||||
|
import dev.kordex.core.extensions.ephemeralSlashCommand
|
||||||
|
|
||||||
|
class SessionExtension : Extension() {
|
||||||
|
override val name = "Session"
|
||||||
|
override suspend fun setup() {
|
||||||
|
// 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 { "ReplaySession extension loaded!" }
|
||||||
|
ephemeralSlashCommand {
|
||||||
|
check {
|
||||||
|
hasPermission(Permission.Administrator)
|
||||||
|
}
|
||||||
|
name = Translations.Commands.Replaysession.name
|
||||||
|
description = Translations.Commands.Replaysession.description
|
||||||
|
action {
|
||||||
|
val toggle = ConfigCollection().get()?.replaySession ?: false
|
||||||
|
if (toggle) {
|
||||||
|
ConfigCollection().update(ConfigCollection().get()!!.copy(replaySession = false))
|
||||||
|
respond {
|
||||||
|
content = "Replay session disabled"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ConfigCollection().update(ConfigCollection().get()!!.copy(replaySession = true))
|
||||||
|
respond {
|
||||||
|
content = "Replay session enabled"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package dev.jansel.aglaea.utils
|
package dev.jansel.aglaea.utils
|
||||||
|
|
||||||
import dev.jansel.aglaea.database.Database
|
import dev.jansel.aglaea.database.Database
|
||||||
|
import dev.jansel.aglaea.database.collections.ConfigCollection
|
||||||
import dev.jansel.aglaea.database.collections.MetaCollection
|
import dev.jansel.aglaea.database.collections.MetaCollection
|
||||||
import dev.jansel.aglaea.database.collections.ReplayCollection
|
import dev.jansel.aglaea.database.collections.ReplayCollection
|
||||||
import dev.jansel.aglaea.twitchClient
|
import dev.jansel.aglaea.twitchClient
|
||||||
@ -27,6 +28,7 @@ suspend inline fun ExtensibleBotBuilder.database(migrate: Boolean) {
|
|||||||
loadModule {
|
loadModule {
|
||||||
single { MetaCollection() } bind MetaCollection::class
|
single { MetaCollection() } bind MetaCollection::class
|
||||||
single { ReplayCollection() } bind ReplayCollection::class
|
single { ReplayCollection() } bind ReplayCollection::class
|
||||||
|
single { ConfigCollection() } bind ConfigCollection::class
|
||||||
}
|
}
|
||||||
|
|
||||||
if (migrate) {
|
if (migrate) {
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
commands.replay.name=replay
|
commands.replay.name=replay
|
||||||
commands.replay.description=Upload a replay file to get an auth code
|
commands.replay.description=Upload a replay file to get an auth code/Send in a replay for a Replay Session
|
||||||
|
|
||||||
|
commands.replaysession.name=replaysession
|
||||||
|
commands.replaysession.description=Toggle the replay session
|
||||||
|
|
||||||
arguments.file.name=file
|
arguments.file.name=file
|
||||||
arguments.file.description=The file to upload
|
arguments.file.description=The file to upload
|
||||||
|
Loading…
x
Reference in New Issue
Block a user