122 lines
4.4 KiB
Kotlin
122 lines
4.4 KiB
Kotlin
package nl.voidcorp.dbot
|
|
|
|
import net.dv8tion.jda.core.EmbedBuilder
|
|
import net.dv8tion.jda.core.entities.*
|
|
import net.dv8tion.jda.core.events.guild.member.GuildMemberNickChangeEvent
|
|
import net.dv8tion.jda.core.events.message.guild.GuildMessageDeleteEvent
|
|
import net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent
|
|
import net.dv8tion.jda.core.events.message.guild.GuildMessageUpdateEvent
|
|
import net.dv8tion.jda.core.hooks.ListenerAdapter
|
|
import nl.voidcorp.dbot.commands.GSM
|
|
import java.awt.Color
|
|
import java.time.LocalDateTime
|
|
import java.time.temporal.TemporalAccessor
|
|
import java.util.*
|
|
|
|
object Logging : ListenerAdapter() {
|
|
val map = mutableMapOf<Long, Queue<Message>>()
|
|
|
|
enum class Colors(val colorString: String) {
|
|
NAMECHANGE("#00cc66"),
|
|
MESSAGEDELETE("#ff3300"),
|
|
MESSAGEEDIT("#ffcc66"),
|
|
UNKNOWN("#000000")
|
|
}
|
|
|
|
override fun onGuildMessageReceived(event: GuildMessageReceivedEvent) {
|
|
if (map[event.guild.idLong] == null) map[event.guild.idLong] = ArrayDeque()
|
|
map[event.guild.idLong]?.apply {
|
|
while (size > 100) {
|
|
poll()
|
|
}
|
|
offer(event.message)
|
|
}
|
|
}
|
|
|
|
fun logChannel(guild: Guild): TextChannel? {
|
|
val log = GSM.getSettings(guild).logChannel
|
|
return if (log != null) {
|
|
guild.getTextChannelById(log)
|
|
} else {
|
|
null
|
|
}
|
|
}
|
|
|
|
fun buildEmbed(
|
|
affectedMember: Member?,
|
|
message: String = "",
|
|
color: Colors = Colors.UNKNOWN,
|
|
title: String = color.name.toLowerCase().capitalize(),
|
|
fields: Map<String, String> = mutableMapOf(),
|
|
timestamp: TemporalAccessor = LocalDateTime.now()
|
|
): MessageEmbed {
|
|
val em = EmbedBuilder()
|
|
.setTimestamp(timestamp)
|
|
.setColor(Color.decode(color.colorString))
|
|
if (title.isNotBlank()) em.setTitle(title)
|
|
if (message.isNotBlank()) em.setDescription(message)
|
|
fields.forEach { name, content -> em.addField(name, content, true) }
|
|
if (affectedMember != null) em.setFooter(affectedMember.user.name, affectedMember.user.effectiveAvatarUrl)
|
|
return em.build()
|
|
}
|
|
|
|
private val nocheck = hashSetOf(260390293881356294, 144116077129891840, 131399667442384896)
|
|
|
|
override fun onGuildMemberNickChange(event: GuildMemberNickChangeEvent) {
|
|
val lc = logChannel(event.guild)
|
|
if (event.user.idLong in nocheck) return
|
|
if (lc != null) {
|
|
val em = buildEmbed(
|
|
event.member,
|
|
fields = mutableMapOf(
|
|
"Old name" to (event.prevNick ?: event.user.name),
|
|
"New Name" to (event.newNick ?: event.user.name)
|
|
),
|
|
color = Colors.NAMECHANGE
|
|
)
|
|
lc.sendMessage(em).queue()
|
|
}
|
|
}
|
|
|
|
override fun onGuildMessageDelete(event: GuildMessageDeleteEvent) {
|
|
val lc = logChannel(event.guild)
|
|
if (lc != null) {
|
|
map[event.guild.idLong]?.firstOrNull { it.idLong == event.messageIdLong }.let {
|
|
|
|
val em = buildEmbed(
|
|
it?.member,
|
|
color = Colors.MESSAGEDELETE,
|
|
fields = mutableMapOf(
|
|
"Message" to (it?.contentDisplay ?: "Something else (message too old...)"),
|
|
"Channel" to event.channel.asMention
|
|
),
|
|
timestamp = (it?.editedTime ?: it?.creationTime) ?: LocalDateTime.now()
|
|
)
|
|
lc.sendMessage(em).queue()
|
|
}
|
|
}
|
|
}
|
|
|
|
override fun onGuildMessageUpdate(event: GuildMessageUpdateEvent) {
|
|
val lc = logChannel(event.guild)
|
|
if (lc != null) {
|
|
(map[event.guild.idLong]?.firstOrNull { it.idLong == event.messageIdLong }).let {
|
|
|
|
val em = buildEmbed(
|
|
event.member, color = Colors.MESSAGEEDIT,
|
|
fields = mutableMapOf(
|
|
"Old message" to (it?.contentStripped ?: "Something else (message too old...)"),
|
|
"New message" to event.message.contentStripped,
|
|
"Channel" to event.channel.asMention
|
|
)
|
|
)
|
|
|
|
map[event.guild.idLong]?.removeAll { old -> old.idLong == event.messageIdLong }
|
|
map[event.guild.idLong]?.offer(event.message)
|
|
lc.sendMessage(em).queue()
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
} |