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
|
||||
|
||||
import com.github.twitch4j.TwitchClient
|
||||
import dev.jansel.aglaea.extensions.EventHooks
|
||||
import dev.jansel.aglaea.extensions.ReplayExtension
|
||||
import dev.jansel.aglaea.extensions.SessionExtension
|
||||
import dev.jansel.aglaea.utils.database
|
||||
import dev.jansel.aglaea.utils.twitch
|
||||
import dev.kord.common.entity.Snowflake
|
||||
@ -29,6 +27,7 @@ suspend fun main() {
|
||||
extensions {
|
||||
add(::ReplayExtension)
|
||||
add(::EventHooks)
|
||||
add(::SessionExtension)
|
||||
}
|
||||
database(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
|
||||
|
||||
import dev.jansel.aglaea.botRef
|
||||
import dev.jansel.aglaea.database.collections.ConfigCollection
|
||||
import dev.jansel.aglaea.database.collections.ReplayCollection
|
||||
import dev.jansel.aglaea.database.entities.ReplayData
|
||||
import dev.jansel.aglaea.i18n.Translations
|
||||
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.commands.Arguments
|
||||
import dev.kordex.core.commands.converters.impl.attachment
|
||||
import dev.kordex.core.extensions.Extension
|
||||
import dev.kordex.core.extensions.ephemeralSlashCommand
|
||||
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.Uuid
|
||||
|
||||
@ -26,6 +35,22 @@ class ReplayExtension : Extension() {
|
||||
}
|
||||
action {
|
||||
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")) {
|
||||
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
|
||||
|
||||
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.ReplayCollection
|
||||
import dev.jansel.aglaea.twitchClient
|
||||
@ -27,6 +28,7 @@ suspend inline fun ExtensibleBotBuilder.database(migrate: Boolean) {
|
||||
loadModule {
|
||||
single { MetaCollection() } bind MetaCollection::class
|
||||
single { ReplayCollection() } bind ReplayCollection::class
|
||||
single { ConfigCollection() } bind ConfigCollection::class
|
||||
}
|
||||
|
||||
if (migrate) {
|
||||
|
@ -1,5 +1,8 @@
|
||||
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.description=The file to upload
|
||||
|
Loading…
x
Reference in New Issue
Block a user