package nl.voidcorp.discord.events import net.dv8tion.jda.api.MessageBuilder import net.dv8tion.jda.api.entities.ChannelType import net.dv8tion.jda.api.events.message.MessageReceivedEvent import net.dv8tion.jda.api.hooks.ListenerAdapter import nl.voidcorp.discord.command.Command import nl.voidcorp.discord.command.CommandMessage import nl.voidcorp.discord.command.CommandResult import nl.voidcorp.discord.command.CommandSettings import nl.voidcorp.discord.creator import nl.voidcorp.discord.logger import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service @Service class CommandListener( @Autowired val commands: Set, @Autowired val commandSettings: CommandSettings ) : ListenerAdapter() { init { logger.info("Found ${commands.size} commands!") } override fun onMessageReceived(event: MessageReceivedEvent) { if (event.author.isBot) return val prefix: String = when { event.message.contentRaw.startsWith("<@${event.jda.selfUser.id}>") -> "<@${event.jda.selfUser.id}>" event.message.contentRaw.startsWith("<@!${event.jda.selfUser.id}>") -> "<@!${event.jda.selfUser.id}>" event.channelType == ChannelType.TEXT -> commandSettings.getPrefix(event.guild) event.channelType == ChannelType.PRIVATE -> commandSettings.prefix else -> return } if (!event.message.contentRaw.startsWith(prefix) or (event.message.contentRaw.length == prefix.length)) return val isGuild = event.isFromGuild val res = commands.map { it to it.onCommand(event, prefix) }.filter { it.second != CommandResult.NOPE } when { res.size > 1 -> { val mb = MessageBuilder("Well this is awkward... It seems that multiple actions are bound to this command... ") .append("Report this error to the staff of the server or ") val member = event.guild.getMemberById(creator) if (member != null) mb.append(member) else { mb.append("J00LZ#9386") } event.channel.sendMessage(mb.append(" since this shouldn't happen...").build()).queue() } res.isNotEmpty() -> { val (command, result) = res[0] when (result) { CommandResult.CHANNEL -> CommandMessage(event, emptyList()).reply( "It seems this is not a channel where bots are allowed for you..." ) CommandResult.PERMISSIONS -> CommandMessage(event, emptyList()).reply( "Sorry, but you don't seem to have the needed permissions to execute this command..." ) CommandResult.SUCCESS -> Unit CommandResult.ERROR -> CommandMessage( event, emptyList() ).reply(MessageBuilder("There was an error executing this command").build()) CommandResult.NOPE -> logger.warn("The command ${command.name} somehow responded with a nope?") CommandResult.PARAMETERS -> CommandMessage(event, emptyList()).reply( "Sorry, but you are missing some parameters: `${command.usage}`" ) } } isGuild -> Unit else -> event.channel.sendMessage("I don't seem to know this command...").queue() } // override fun onMessageUpdate(event: MessageUpdateEvent) = // onMessageReceived(MessageReceivedEvent(event.jda, event.messageIdLong, event.message)) } }