2019-07-11 22:16:02 +02:00
package moe.kageru.kagebot.command
2019-07-17 21:16:17 +02:00
import moe.kageru.kagebot.Log
2019-07-11 22:16:02 +02:00
import moe.kageru.kagebot.MessageUtil
import moe.kageru.kagebot.Util
2019-07-17 22:47:47 +02:00
import moe.kageru.kagebot.Util.applyIf
2019-07-17 23:17:16 +02:00
import moe.kageru.kagebot.Util.failed
2019-07-14 16:35:20 +02:00
import moe.kageru.kagebot.config.Config
2019-07-11 22:16:02 +02:00
import moe.kageru.kagebot.config.RawRedirect
import org.javacord.api.entity.channel.TextChannel
import org.javacord.api.event.message.MessageCreateEvent
internal class MessageRedirect ( rawRedirect : RawRedirect ) {
private val target : TextChannel = rawRedirect . target ?. let ( Util :: findChannel )
?: throw IllegalArgumentException ( " Every redirect needs to have a target. " )
private val anonymous : Boolean = rawRedirect . anonymous
fun execute ( message : MessageCreateEvent , command : Command ) {
2019-07-17 22:40:44 +02:00
val embed = MessageUtil . withEmbed {
2019-07-17 22:47:47 +02:00
val redirectedText = message . readableMessageContent
. applyIf ( command . matchType == MatchType . PREFIX ) { content ->
content . removePrefix ( command . trigger ) . trim ( )
2019-07-11 22:16:02 +02:00
}
2019-07-17 22:47:47 +02:00
addField ( Config . localization . redirectedMessage , redirectedText )
2019-07-17 22:40:44 +02:00
}
2019-07-11 22:16:02 +02:00
// No inlined if/else because the types are different.
// Passing the full message author will also include the avatar in the embed.
embed . apply {
if ( anonymous ) {
setAuthor ( " Anonymous " )
} else {
setAuthor ( message . messageAuthor )
}
}
2019-07-17 23:17:16 +02:00
if ( MessageUtil . sendEmbed ( target , embed ) . failed ( ) ) {
2019-07-17 21:16:17 +02:00
Log . warn ( " Could not redirect message to channel $target " )
2019-07-11 22:16:02 +02:00
}
}
2019-07-13 14:52:05 +02:00
}