78 lines
2.3 KiB
Kotlin
78 lines
2.3 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) {
|
|
|
|
if (event.client.isOnCooldown(name)) {
|
|
event.reply("Sorry, this command is on cooldown for `${event.client.getRemainingCooldown(name)}` seconds!")
|
|
return
|
|
} else {
|
|
event.client.applyCooldown(name, 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)
|
|
}
|
|
} |