OttoBot/src/main/kotlin/nl/voidcorp/dbot/commands/UnityCommand.kt

83 lines
2.5 KiB
Kotlin

package nl.voidcorp.dbot.commands
import nl.voidcorp.dbot.music.TrackScheduler
import nl.voidcorp.dbot.music.guildMusicMap
import nl.voidcorp.dbot.playerManager
enum class CooldownType {
USER,
SERVER,
GLOBAL
}
open class UnityCommand(
val name: String, val help: String = "",
val category: UnityCategory = GeneralCategory,
val arguments: String = "", vararg val aliases: String = arrayOf(), val howTo: String = "",
val cooldown: Int = 0, val cooldownType: CooldownType = CooldownType.USER,
val exec: (event: UnityCommandEvent) -> Unit
) /*: Command()*/ {
open fun execute(event: UnityCommandEvent) = exec(event)
fun run(event: UnityCommandEvent) {
// category check
if (!category.test(event)) {
return
}
/*//cooldown check
if (cooldown > 0) {
val key = getCooldownKey(event)
val remaining = event.client.getRemainingCooldown(key)
if (remaining > 0) {
val error = getCooldownError(event, remaining)
if (error != null) {
*//*
event.reply("There still is a cooldown (`$error`) on this command!")
*//*
return
}
} else
event.client.applyCooldown(key, cooldown)
}*/
// run
try {
execute(event)
} catch (t: Throwable) {
event.client.onException(t)
}
/*if (event.client.listener != null)
event.client.listener.onCompletedCommand(event, this)*/
}
}
class UnityMusicCommand(
name: String, help: String = "",
category: UnityCategory = MusicCategory,
arguments: String = "", vararg aliases: String = arrayOf(name.first().toString()),
howTo: String = "",
val mExec: (event: UnityCommandEvent, scheduler: TrackScheduler) -> Unit
) : UnityCommand(name, help, category, arguments, *aliases, howTo = howTo, exec = {}) {
override fun execute(event: UnityCommandEvent) {
val scheduler = if (guildMusicMap.containsKey(event.guild.idLong)) guildMusicMap[event.guild.idLong]!! else {
val channel = event.guild.voiceChannels.firstOrNull { it.members.contains(event.member) }
if (channel == null) {
event.reply("Join a voice Channel please!")
return
}
val s = TrackScheduler(playerManager.createPlayer(), event.guild, channel)
guildMusicMap[event.guild.idLong] = s
s
}
mExec(event, scheduler)
}
}