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) } }