Added Discord settings.

This commit is contained in:
yenon 2023-11-11 03:27:33 +01:00
parent 5a53fd5f68
commit be03f5fb96
6 changed files with 108 additions and 12 deletions

3
.gitignore vendored
View File

@ -182,4 +182,5 @@ gradle-app.setting
# End of https://www.toptal.com/developers/gitignore/api/intellij,java,gradle,kotlin # End of https://www.toptal.com/developers/gitignore/api/intellij,java,gradle,kotlin
data.json data.json
token

22
src/main/java/Discord.kt Normal file
View File

@ -0,0 +1,22 @@
import dev.kord.core.Kord
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
object Discord {
private lateinit var kord: Kord
suspend fun init(token: String) {
kord = Kord(token)
CoroutineScope(Dispatchers.IO).launch {
kord.login()
}
}
suspend fun sendMessage(message: String) {
kord.rest.channel.createMessage(Settings.instance.discordChannelId) {
this.content = "<@&${Settings.instance.discordGroupId}>$message"
}
}
}

View File

@ -1,15 +1,16 @@
import dev.kord.common.entity.Snowflake
import dev.kord.core.Kord
import io.ktor.server.application.* import io.ktor.server.application.*
import io.ktor.server.cio.* import io.ktor.server.cio.*
import io.ktor.server.engine.* import io.ktor.server.engine.*
import io.ktor.server.response.* import io.ktor.server.response.*
import io.ktor.server.routing.* import io.ktor.server.routing.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.nio.file.Files import java.nio.file.Files
import kotlin.io.path.Path import kotlin.io.path.Path
suspend fun main() { suspend fun main() {
Settings.load()
val path = Path("data.json") val path = Path("data.json")
if (Files.isRegularFile(path)) { if (Files.isRegularFile(path)) {
@ -19,25 +20,24 @@ suspend fun main() {
RaceHolder.save(path) RaceHolder.save(path)
}) })
val kord = Kord("MTE3MTIwODc1MDE5MTg5MDQ4Mw.GOUedL.i3zD6IG5B6fFRvaSOotWwJ5KBRK2whC9xr0vL8") Discord.init(withContext(Dispatchers.IO) {
Files.readString(Path("token"))
})
val server = embeddedServer(CIO, port = 8080){ val server = embeddedServer(CIO, port = 8080){
routing { routing {
get("/"){ get("/"){
call.respondRedirect("/search") call.respondRedirect("/search")
} }
settingsPage()
searchPage() searchPage()
trackPage() trackPage()
racePage() racePage()
get("/hi") { get("/hi") {
kord.rest.channel.createMessage(Snowflake("1040400994355392522")) { Discord.sendMessage("Herro!")
this.content = "<@&978289601506586624> Herro!"
}
} }
} }
} }
println("connection to localhost:8080 now possible.") println("connection to localhost:8080 now possible.")
server.start(false) server.start(true)
kord.login()
} }

View File

@ -46,8 +46,8 @@ data class RaceData(var name: String, var description: String) {
fun calculateTotalScores() { fun calculateTotalScores() {
val scoreMap = hashMapOf<String, Long>() val scoreMap = hashMapOf<String, Long>()
leaderboardMap.forEach { leaderboardEntry -> leaderboardMap.forEach { leaderboardEntry ->
leaderboardEntry.value.tracktimes.sortedBy { it.lap_time }.forEach { leaderboardEntry.value.tracktimes.sortedBy { it.lap_time }.forEachIndexed { index, it ->
scoreMap[it.playername] = scoreMap.getOrDefault(it.playername, 0L) + 1 scoreMap[it.playername] = scoreMap.getOrDefault(it.playername, 0L) + 1 + index
} }
} }
synchronized(totalScores) { synchronized(totalScores) {

32
src/main/java/Settings.kt Normal file
View File

@ -0,0 +1,32 @@
import dev.kord.common.entity.Snowflake
import kotlinx.serialization.Serializable
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import java.nio.file.Files
import kotlin.io.path.Path
const val SETTINGS = "settings.json"
@Serializable
class Settings {
companion object {
var instance = Settings()
fun load() {
if (Files.isRegularFile(Path(SETTINGS))) {
val reader = Files.newBufferedReader(Path(SETTINGS))
instance = Json.decodeFromString<Settings>(reader.readText())
reader.close()
}
}
fun save() {
val writer = Files.newBufferedWriter(Path(SETTINGS))
writer.write(Json.encodeToString(instance))
writer.close()
}
}
var discordChannelId = Snowflake(0)
var discordGroupId = Snowflake(0)
}

View File

@ -0,0 +1,41 @@
import dev.kord.common.entity.Snowflake
import io.ktor.server.application.*
import io.ktor.server.request.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.html.*
fun Routing.settingsPage() {
get("/settings") {
respondThemedHtml("Settings") {
form("/settings", encType = FormEncType.applicationXWwwFormUrlEncoded, method = FormMethod.post) {
p {
+"GroupID:"
textInput(name = "groupId") {
value = Settings.instance.discordGroupId.toString()
}
}
p {
+"ChannelID:"
textInput(name = "channelId") {
value = Settings.instance.discordChannelId.toString()
}
}
submitInput { }
}
}
}
post("/settings") {
val params = call.receiveParameters()
params["groupId"]?.let { Settings.instance.discordGroupId = Snowflake(it) }
params["channelId"]?.let { Settings.instance.discordChannelId = Snowflake(it) }
CoroutineScope(Dispatchers.IO).launch {
Settings.save()
}
call.respondRedirect("/settings")
}
}