package nl.voidcorp.dbot.commands import nl.voidcorp.dbot.commands import nl.voidcorp.dbot.storage.MuteInfo import nl.voidcorp.dbot.storage.getBefore import nl.voidcorp.dbot.storage.put import nl.voidcorp.dbot.storage.settings import java.time.LocalDateTime fun initAdmin() { commands += SetPrefix commands += ListPrefixes commands += RemovePrefix /*commands += MuteCommand commands += LuaExec*/ } object SetPrefix : UnityCommand( "setprefix", "Sets the prefix for this command", AdminCategory, howTo = "!setprefix prefix", exec = { ce -> ce.guild.settings().prefixes += ce.args ce.reply("This servers prefix is now set to ${ce.args}, but you can still use ${ce.selfMember.asMention} to reset it!") }) object ListPrefixes : UnityCommand("listprefixes", "Lists all server prefixes", AdminCategory, exec = { ce -> ce.reply("This servers prefixes are: ${ce.guild.settings().prefixes.ifEmpty { listOf("!") }.joinToString { "`$it`" }}") }) object RemovePrefix : UnityCommand("removeprefix", "Removes a prefix", AdminCategory, exec = { ce -> val res = ce.guild.settings().prefixes.removeIf { it == ce.args } if (res) { ce.reply("Remove the prefix `${ce.args}`") } else { ce.reply("`${ce.args}` is not a known prefix?") } }) object MuteCommand : UnityCommand("mute", "Mutes a member of this guild", AdminCategory, exec = { ce -> println(ce.hasArgs) println("`${ce.args}`") val settings = ce.guild.settings() if (ce.hasArgs) { val mentions = ce.message.mentionedMembers if (mentions.isNotEmpty() and mentions.any { it.user != ce.author }) { val muteTime = ce.args.split(">")[1].run { if (isBlank()) "10" else this }.trim() ce.reply("The user `${mentions[0].effectiveName}` has been muted for `$muteTime` minutes!") settings.muted.put( LocalDateTime.now().plusMinutes(muteTime.toLong()), MuteInfo( mentions[0].user.idLong, mentions[0].roles ) ) } } else { if (settings.muted.isNotEmpty()) { ce.reply("The currently muted users are ${ce.guild.settings().muted.getBefore().map { list -> list.map { mi -> ce.guild.getMemberById( mi.member ) }.joinToString { "`${it.effectiveName}`" } }}") } else { ce.reply("There are no muted users!") } } } ) object LuaExec : UnityCommand("luaexec", "Executes a bit of lua code", AdminCategory, exec = { ce -> ce.message.delete().queue() val r = nl.voidcorp.dbot.run(ce.args, scriptEngine = "javascript") ce.reply(r.toString()) }) object UnknownCommandError : Exception("yeet!")