Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/main/kotlin/de/bigboot/ggtools/fang/Config.kt
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ data class QueueConfig(
val name: String,
val channel: String,
val enable_highscore: Boolean = false,
val region_split: Boolean = true,
)

@JsonClass(generateAdapter = true)
Expand Down
46 changes: 27 additions & 19 deletions src/main/kotlin/de/bigboot/ggtools/fang/service/MatchServiceImpl.kt
Original file line number Diff line number Diff line change
Expand Up @@ -76,28 +76,31 @@ class MatchServiceImpl : MatchService, KoinComponent {

val requiredPlayers = Config.bot.required_players - previousPlayers.size


val (queueServer, players) = when (Config.bot.queues.filter { it.name == queue }.single().region_split) {
true -> kotlin.run {
for(i in requiredPlayers until possiblePlayers.size) {
val players = possibleServers
.map { Pair(it, possiblePlayers
.take(i)
.filter { (_, prefs) -> prefs.preferredServers.contains(it) }
.toList()
)}
.maxBy { (_, players) -> players.size }

if (players.second.size >= requiredPlayers) {
return@run players
}
}

val (queueServer, players) = kotlin.run {
for(i in requiredPlayers until possiblePlayers.size) {
val players = possibleServers
return@run possibleServers
.map { Pair(it, possiblePlayers
.take(i)
.filter { (_, prefs) -> prefs.preferredServers.contains(it) }
.toList()
)}
.maxBy { (_, players) -> players.size }

if (players.second.size >= requiredPlayers) {
return@run players
}
}

return@run possibleServers
.map { Pair(it, possiblePlayers
.filter { (_, prefs) -> prefs.preferredServers.contains(it) }
.toList()
)}
.maxBy { (_, players) -> players.size }
false -> Pair(null, possiblePlayers.take(requiredPlayers))
}

for ((player, _) in players)
Expand Down Expand Up @@ -129,10 +132,15 @@ class MatchServiceImpl : MatchService, KoinComponent {

override fun getNumPlayers(queue: String, server: String?) = transaction(database) {
val players = getPlayers(queue)
val servers = server?.let { setOf(it) } ?: setOf("NA", "EU")
if (Config.bot.queues.filter { it.name == queue }.single().region_split) {
val servers = server?.let { setOf(it) } ?: setOf("NA", "EU")

servers.map { players.filter { player -> player.preferredServers.contains(it)} }
.maxOf { it.count() }
.toLong()
servers.map { players.filter { player -> player.preferredServers.contains(it)} }
.maxOf { it.count() }
.toLong()
}
else {
players.count().toLong()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ class QueueMessageService : AutostartService, KoinComponent {

msg.editCompat {
addEmbedCompat { printQueue(queue, this) }

addComponent(ActionRow.of(
ButtonJoin(queue).component(),
ButtonLeave(queue).component(),
Expand Down Expand Up @@ -156,11 +156,14 @@ class QueueMessageService : AutostartService, KoinComponent {
|React with a ${Config.emojis.match_drop} to drop out after this match."""
.trimMargin()
)
addField("Best server location", when(request.pop.server) {
"NA" -> Config.emojis.server_pref_na
"EU" -> Config.emojis.server_pref_eu
else -> request.pop.server ?: "None"
}, true)

if (Config.bot.queues.filter { it.name == request.queue }.single().region_split) {
addField("Best server location", when(request.pop.server) {
"NA" -> Config.emojis.server_pref_na
"EU" -> Config.emojis.server_pref_eu
else -> request.pop.server ?: "None"
}, true)
}

addField("Map", Maps.fromId(request.getMapVoteResult())!!.name, true)

Expand Down Expand Up @@ -363,15 +366,18 @@ class QueueMessageService : AutostartService, KoinComponent {
else -> matchService.getPlayers(queue).sortedBy { it.joined }.joinToString("\n") { player ->
val joined = Instant.ofEpochMilli(player.joined).epochSecond
val preferences = preferencesService.getPreferences(player.snowflake)
val preferredServers = preferences.preferredServers
.sortedDescending()
.mapNotNull {
when (it) {
"NA" -> Config.emojis.server_pref_na
"EU" -> Config.emojis.server_pref_eu
else -> null
}
}.joinToString("")
val preferredServers = when (Config.bot.queues.filter { it.name == queue }.single().region_split) {
true -> preferences.preferredServers
.sortedDescending()
.mapNotNull {
when (it) {
"NA" -> Config.emojis.server_pref_na
"EU" -> Config.emojis.server_pref_eu
else -> null
}
}.joinToString("")
false -> ""
}
"<@${player.snowflake}> $preferredServers (In queue since <t:${joined}:R>)"
}
})
Expand Down