From baeb4312a6f232b5172eb811a50dde307a1aeddb Mon Sep 17 00:00:00 2001 From: ddivad195 Date: Thu, 19 Nov 2020 09:04:26 +0000 Subject: [PATCH 1/2] fix: staff reaction listeners check for staff level --- .../kotlin/me/ddivad/judgebot/arguments/LowerMemberArg.kt | 2 +- .../me/ddivad/judgebot/listeners/MemberReactionListeners.kt | 6 ++++-- .../me/ddivad/judgebot/listeners/StaffReactionListeners.kt | 6 +++--- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/me/ddivad/judgebot/arguments/LowerMemberArg.kt b/src/main/kotlin/me/ddivad/judgebot/arguments/LowerMemberArg.kt index 951570b..ed3822b 100644 --- a/src/main/kotlin/me/ddivad/judgebot/arguments/LowerMemberArg.kt +++ b/src/main/kotlin/me/ddivad/judgebot/arguments/LowerMemberArg.kt @@ -29,6 +29,6 @@ open class LowerMemberArg(override val name: String = "LowerMemberArg") : Argume override fun formatData(data: Member) = "@${data.tag}" } -private suspend fun Member.isHigherRankedThan(permissions: PermissionsService, targetMember: Member) = +suspend fun Member.isHigherRankedThan(permissions: PermissionsService, targetMember: Member) = permissions.getPermissionRank(this) < permissions.getPermissionRank(targetMember) diff --git a/src/main/kotlin/me/ddivad/judgebot/listeners/MemberReactionListeners.kt b/src/main/kotlin/me/ddivad/judgebot/listeners/MemberReactionListeners.kt index bc4ee52..f546aac 100644 --- a/src/main/kotlin/me/ddivad/judgebot/listeners/MemberReactionListeners.kt +++ b/src/main/kotlin/me/ddivad/judgebot/listeners/MemberReactionListeners.kt @@ -3,6 +3,8 @@ package me.ddivad.judgebot.listeners import com.gitlab.kordlib.core.behavior.getChannelOf import com.gitlab.kordlib.core.entity.channel.TextChannel import com.gitlab.kordlib.core.event.message.ReactionAddEvent +import com.gitlab.kordlib.kordx.emoji.Emojis +import com.gitlab.kordlib.kordx.emoji.addReaction import me.ddivad.judgebot.dataclasses.Configuration import me.ddivad.judgebot.extensions.jumpLink import me.jakejmattson.discordkt.api.dsl.listeners @@ -15,11 +17,11 @@ fun onMemberReactionAdd(configuration: Configuration) = listeners { val guildConfiguration = configuration[guild.asGuild().id.longValue] if (!guildConfiguration?.reactions!!.enabled) return@on - if(this.emoji.name == guildConfiguration.reactions.flagMessageReaction) { + if (this.emoji.name == guildConfiguration.reactions.flagMessageReaction) { message.deleteReaction(this.emoji) guild.asGuild().getChannelOf(guildConfiguration.loggingConfiguration.alertChannel.toSnowflake()) .asChannel().createMessage("User ${user.mention} flagged the message: " + - "${this.message.asMessage().jumpLink(guild.id.value)} in: ${this.channel.mention}") + "${this.message.asMessage().jumpLink(guild.id.value)} in: ${this.channel.mention}").addReaction(Emojis.whiteCheckMark) } } } diff --git a/src/main/kotlin/me/ddivad/judgebot/listeners/StaffReactionListeners.kt b/src/main/kotlin/me/ddivad/judgebot/listeners/StaffReactionListeners.kt index 8fd20d9..571000c 100644 --- a/src/main/kotlin/me/ddivad/judgebot/listeners/StaffReactionListeners.kt +++ b/src/main/kotlin/me/ddivad/judgebot/listeners/StaffReactionListeners.kt @@ -2,6 +2,7 @@ package me.ddivad.judgebot.listeners import com.gitlab.kordlib.common.exception.RequestException import com.gitlab.kordlib.core.event.message.ReactionAddEvent +import me.ddivad.judgebot.arguments.isHigherRankedThan import me.ddivad.judgebot.dataclasses.Configuration import me.ddivad.judgebot.embeds.createMessageDeleteEmbed import me.ddivad.judgebot.embeds.createSelfHistoryEmbed @@ -23,9 +24,8 @@ fun onStaffReactionAdd(muteService: MuteService, if (!guildConfiguration?.reactions!!.enabled) return@on user.asMemberOrNull(guild.id)?.let { - if (permissionsService.hasPermission(it, PermissionLevel.Moderator)) { - val messageAuthor = message.asMessage().author ?: return@on - + val messageAuthor = message.asMessage().author?.asMemberOrNull(guild.id) ?: return@on + if (permissionsService.hasPermission(it, PermissionLevel.Moderator) && !it.isHigherRankedThan(permissionsService, messageAuthor)) { when (this.emoji.name) { guildConfiguration.reactions.gagReaction -> { message.deleteReaction(this.emoji) From f8963d142f1866317f3f048f99642cbd9802a5ba Mon Sep 17 00:00:00 2001 From: ddivad195 Date: Thu, 19 Nov 2020 12:48:15 +0000 Subject: [PATCH 2/2] chore: cleanup reaction handling code --- .../listeners/MemberReactionListeners.kt | 12 +++-- .../listeners/StaffReactionListeners.kt | 53 +++++++++---------- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/src/main/kotlin/me/ddivad/judgebot/listeners/MemberReactionListeners.kt b/src/main/kotlin/me/ddivad/judgebot/listeners/MemberReactionListeners.kt index f546aac..cd47fe6 100644 --- a/src/main/kotlin/me/ddivad/judgebot/listeners/MemberReactionListeners.kt +++ b/src/main/kotlin/me/ddivad/judgebot/listeners/MemberReactionListeners.kt @@ -17,11 +17,13 @@ fun onMemberReactionAdd(configuration: Configuration) = listeners { val guildConfiguration = configuration[guild.asGuild().id.longValue] if (!guildConfiguration?.reactions!!.enabled) return@on - if (this.emoji.name == guildConfiguration.reactions.flagMessageReaction) { - message.deleteReaction(this.emoji) - guild.asGuild().getChannelOf(guildConfiguration.loggingConfiguration.alertChannel.toSnowflake()) - .asChannel().createMessage("User ${user.mention} flagged the message: " + - "${this.message.asMessage().jumpLink(guild.id.value)} in: ${this.channel.mention}").addReaction(Emojis.whiteCheckMark) + when (this.emoji.name) { + guildConfiguration.reactions.flagMessageReaction -> { + message.deleteReaction(this.emoji) + guild.asGuild().getChannelOf(guildConfiguration.loggingConfiguration.alertChannel.toSnowflake()).asChannel() + .createMessage("User ${user.mention} flagged the message: ${this.message.asMessage().jumpLink(guild.id.value)} in: ${this.channel.mention}") + .addReaction(Emojis.whiteCheckMark) + } } } } diff --git a/src/main/kotlin/me/ddivad/judgebot/listeners/StaffReactionListeners.kt b/src/main/kotlin/me/ddivad/judgebot/listeners/StaffReactionListeners.kt index 571000c..f04bf32 100644 --- a/src/main/kotlin/me/ddivad/judgebot/listeners/StaffReactionListeners.kt +++ b/src/main/kotlin/me/ddivad/judgebot/listeners/StaffReactionListeners.kt @@ -22,35 +22,34 @@ fun onStaffReactionAdd(muteService: MuteService, val guild = guild?.asGuildOrNull() ?: return@on val guildConfiguration = configuration[guild.asGuild().id.longValue] if (!guildConfiguration?.reactions!!.enabled) return@on - - user.asMemberOrNull(guild.id)?.let { - val messageAuthor = message.asMessage().author?.asMemberOrNull(guild.id) ?: return@on - if (permissionsService.hasPermission(it, PermissionLevel.Moderator) && !it.isHigherRankedThan(permissionsService, messageAuthor)) { - when (this.emoji.name) { - guildConfiguration.reactions.gagReaction -> { - message.deleteReaction(this.emoji) - muteService.gag(messageAuthor.asMember(guild.id)) - it.sendPrivateMessage("${messageAuthor.mention} gagged.") - } - guildConfiguration.reactions.historyReaction -> { - message.deleteReaction(this.emoji) - val target = databaseService.users.getOrCreateUser(messageAuthor, guild.asGuild()) - it.sendPrivateMessage { createSelfHistoryEmbed(messageAuthor, target, guild.asGuild(), configuration) } - } - guildConfiguration.reactions.deleteMessageReaction -> { - val content = message.asMessage() - message.deleteReaction(this.emoji) - message.delete() - try { - messageAuthor.sendPrivateMessage { - createMessageDeleteEmbed(guild, content) - } - } catch (ex: RequestException) { - this.user.sendPrivateMessage("User ${messageAuthor.mention} has DM's disabled." + - " Message deleted without notification.") + val member = user.asMemberOrNull(guild.id) ?: return@on + val messageAuthor = message.asMessage().author?.asMemberOrNull(guild.id) ?: return@on + + if (permissionsService.hasPermission(member, PermissionLevel.Moderator) && !member.isHigherRankedThan(permissionsService, messageAuthor)) { + when (this.emoji.name) { + guildConfiguration.reactions.gagReaction -> { + message.deleteReaction(this.emoji) + muteService.gag(messageAuthor.asMember(guild.id)) + member.sendPrivateMessage("${messageAuthor.mention} gagged.") + } + guildConfiguration.reactions.historyReaction -> { + message.deleteReaction(this.emoji) + val target = databaseService.users.getOrCreateUser(messageAuthor, guild.asGuild()) + member.sendPrivateMessage { createSelfHistoryEmbed(messageAuthor, target, guild.asGuild(), configuration) } + } + guildConfiguration.reactions.deleteMessageReaction -> { + val content = message.asMessage() + message.deleteReaction(this.emoji) + message.delete() + try { + messageAuthor.sendPrivateMessage { + createMessageDeleteEmbed(guild, content) } - + } catch (ex: RequestException) { + this.user.sendPrivateMessage("User ${messageAuthor.mention} has DM's disabled." + + " Message deleted without notification.") } + } } }