68 lines
2.7 KiB
Kotlin
68 lines
2.7 KiB
Kotlin
package nl.voidcorp.discord.events
|
|
|
|
import net.dv8tion.jda.api.EmbedBuilder
|
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageDeleteEvent
|
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent
|
|
import net.dv8tion.jda.api.events.message.guild.GuildMessageUpdateEvent
|
|
import net.dv8tion.jda.api.hooks.ListenerAdapter
|
|
import nl.voidcorp.discord.jda
|
|
import nl.voidcorp.discord.storage.GuildRepo
|
|
import nl.voidcorp.discord.storage.GuildStore
|
|
import nl.voidcorp.discord.storage.MessageRepo
|
|
import nl.voidcorp.discord.storage.MessageStore
|
|
import java.awt.Color
|
|
import java.time.Clock
|
|
import java.time.LocalDateTime
|
|
|
|
class LogListener(val repo: GuildRepo, val msg: MessageRepo) : ListenerAdapter() {
|
|
|
|
private enum class EventType {
|
|
EDIT,
|
|
DELET
|
|
}
|
|
|
|
override fun onGuildMessageReceived(event: GuildMessageReceivedEvent) {
|
|
msg.save(MessageStore(event.messageIdLong, event.message.contentRaw, event.guild.idLong, event.author.idLong))
|
|
}
|
|
|
|
override fun onGuildMessageUpdate(event: GuildMessageUpdateEvent) {
|
|
val past = msg.findByMsgId(event.messageIdLong) ?: MessageStore(
|
|
event.messageIdLong,
|
|
event.message.contentRaw,
|
|
event.guild.idLong,
|
|
event.author.idLong
|
|
)
|
|
if (event.message.contentRaw != past.text) {
|
|
past.past.add(past.text)
|
|
past.text = event.message.contentRaw
|
|
}
|
|
msg.save(past)
|
|
sendMessageModification(past, EventType.EDIT)
|
|
}
|
|
|
|
override fun onGuildMessageDelete(event: GuildMessageDeleteEvent) {
|
|
val past =
|
|
msg.findByMsgId(event.messageIdLong) ?: MessageStore(
|
|
event.messageIdLong,
|
|
"~~deleted~~",
|
|
event.guild.idLong,
|
|
-1
|
|
)
|
|
past.deleted = true
|
|
msg.save(past)
|
|
sendMessageModification(past, EventType.DELET)
|
|
}
|
|
|
|
private fun sendMessageModification(st: MessageStore, type: EventType) {
|
|
val store = repo.findByGuildId(st.guildId) ?: GuildStore(st.guildId)
|
|
if (store.loggingChannel != null) {
|
|
val embedBuilder = EmbedBuilder().addField("Message", st.text, false)
|
|
.addField("Past", st.past.joinToString("\n"), true)
|
|
.addField("Sender", jda.getUserById(st.authorId)?.asTag ?: "someone#-1", true)
|
|
.setTitle(type.toString()).setTimestamp(LocalDateTime.now(Clock.systemUTC()))
|
|
.setColor(if (type == EventType.EDIT) Color.GREEN.brighter() else Color.RED.darker())
|
|
jda.getTextChannelById(store.loggingChannel ?: -1)?.sendMessage(embedBuilder.build())?.queue()
|
|
}
|
|
msg.deleteInBatch(msg.findByNowBefore(LocalDateTime.now().minusDays(2)))
|
|
}
|
|
} |