Skip to content

Commit e7dbb0b

Browse files
committed
feat: implement various changes and updates
1 parent e32649d commit e7dbb0b

File tree

8 files changed

+94
-94
lines changed

8 files changed

+94
-94
lines changed

src/main/kotlin/me/ddivad/judgebot/Main.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,13 @@ suspend fun main(args: Array<String>) {
3333
theme = Color.MAGENTA
3434
entitySupplyStrategy = EntitySupplyStrategy.cacheWithCachingRestFallback
3535
permissions(Permissions.NONE)
36+
intents = Intents(
37+
Intent.GuildMembers,
38+
Intent.DirectMessages,
39+
Intent.GuildBans,
40+
Intent.Guilds,
41+
Intent.GuildMessageReactions
42+
)
3643
}
3744

3845
mentionEmbed {

src/main/kotlin/me/ddivad/judgebot/arguments/LowerMemberArg.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ open class LowerMemberArg(override val name: String = "LowerMemberArg") : Argume
1919
val author = event.author.asMember(event.guild!!.id)
2020

2121
return when {
22-
event.discord.permissions.isHigherLevel(event.discord, author, member) ->
22+
event.discord.permissions.isHigherLevel(event.discord, member, author) ->
2323
Error("You don't have the permission to use this command on the target user.")
2424
else -> Success(member)
2525
}

src/main/kotlin/me/ddivad/judgebot/arguments/LowerUserArg.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ open class LowerUserArg(override val name: String = "LowerUserArg") : ArgumentTy
2020
val author = event.author.asMember(event.guild!!.id)
2121

2222
return when {
23-
event.discord.permissions.isHigherLevel(event.discord, author, member) ->
23+
event.discord.permissions.isHigherLevel(event.discord, member, author) ->
2424
Error("You don't have the permission to use this command on the target user.")
2525
else -> Success(member.asUser())
2626
}

src/main/kotlin/me/ddivad/judgebot/dataclasses/GuildMember.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ data class GuildMember(
9999
infraction.id = nextId
100100
this.infractions.add(infraction)
101101
this.points += infraction.points
102+
this.pointDecayTimer = DateTime().millis.plus(infraction.punishment?.duration ?: 0)
102103
this.lastInfraction = DateTime().millis
103104
}
104105

@@ -112,7 +113,7 @@ data class GuildMember(
112113
}
113114

114115
fun checkPointDecay(guild: Guild, configuration: GuildConfiguration) = with(this.getGuildInfo(guild.id.asString)) {
115-
val weeksSincePointsDecayed = Weeks.weeksBetween(DateTime(this.pointDecayTimer), DateTime()).weeks
116+
val weeksSincePointsDecayed = Weeks.weeksBetween(DateTime(this.pointDecayTimer), DateTime().plusWeeks(6)).weeks
116117
if (weeksSincePointsDecayed > 0) {
117118
val pointsToRemove = configuration.infractionConfiguration.pointDecayPerWeek * weeksSincePointsDecayed
118119
this.points -= pointsToRemove

src/main/kotlin/me/ddivad/judgebot/listeners/JoinLeaveListener.kt

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,15 @@
11
package me.ddivad.judgebot.listeners
22

3-
import dev.kord.core.event.guild.GuildCreateEvent
43
import dev.kord.core.event.guild.MemberJoinEvent
54
import dev.kord.core.event.guild.MemberLeaveEvent
6-
import dev.kord.gateway.PrivilegedIntent
7-
import dev.kord.gateway.RequestGuildMembers
85
import kotlinx.coroutines.GlobalScope
96
import kotlinx.coroutines.delay
107
import kotlinx.coroutines.launch
118
import me.ddivad.judgebot.services.DatabaseService
129
import me.jakejmattson.discordkt.api.dsl.listeners
1310

14-
@OptIn(PrivilegedIntent::class)
1511
@Suppress("unused")
1612
fun onGuildMemberLeave(databaseService: DatabaseService) = listeners {
17-
on<GuildCreateEvent> {
18-
gateway.send(RequestGuildMembers(guildId = guild.id))
19-
}
20-
2113
on<MemberLeaveEvent> {
2214
databaseService.joinLeaves.addLeaveData(guildId.asString, user.id.asString)
2315
}

src/main/kotlin/me/ddivad/judgebot/listeners/MemberReactionListeners.kt

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,27 +12,26 @@ import me.jakejmattson.discordkt.api.extensions.toSnowflake
1212

1313
@Suppress("unused")
1414
fun onMemberReactionAdd(configuration: Configuration) = listeners {
15-
// on<ReactionAddEvent> {
16-
// println(emoji.name + " added")
17-
// val guild = guild?.asGuildOrNull() ?: return@on
18-
// val guildConfiguration = configuration[guild.asGuild().id.value]
19-
// if (!guildConfiguration?.reactions!!.enabled) return@on
20-
//
21-
// when (this.emoji.name) {
22-
// guildConfiguration.reactions.flagMessageReaction -> {
23-
// message.deleteReaction(this.emoji)
24-
// guild.asGuild()
25-
// .getChannelOf<TextChannel>(guildConfiguration.loggingConfiguration.alertChannel.toSnowflake())
26-
// .asChannel()
27-
// .createMessage(
28-
// "**Message Flagged**" +
29-
// "\n**User**: ${user.mention}" +
30-
// "\n**Channel**: ${message.channel.mention}" +
31-
// "\n**Author:** ${message.asMessage().author?.mention}" +
32-
// "\n**Message:** ${message.asMessage().jumpLink()}"
33-
// )
34-
// .addReaction(Emojis.question)
35-
// }
36-
// }
37-
// }
15+
on<ReactionAddEvent> {
16+
val guild = guild?.asGuildOrNull() ?: return@on
17+
val guildConfiguration = configuration[guild.asGuild().id.value]
18+
if (!guildConfiguration?.reactions!!.enabled) return@on
19+
20+
when (this.emoji.name) {
21+
guildConfiguration.reactions.flagMessageReaction -> {
22+
message.deleteReaction(this.emoji)
23+
guild.asGuild()
24+
.getChannelOf<TextChannel>(guildConfiguration.loggingConfiguration.alertChannel.toSnowflake())
25+
.asChannel()
26+
.createMessage(
27+
"**Message Flagged**" +
28+
"\n**User**: ${user.mention}" +
29+
"\n**Channel**: ${message.channel.mention}" +
30+
"\n**Author:** ${message.asMessage().author?.mention}" +
31+
"\n**Message:** ${message.asMessage().jumpLink()}"
32+
)
33+
.addReaction(Emojis.question)
34+
}
35+
}
36+
}
3837
}

src/main/kotlin/me/ddivad/judgebot/listeners/StaffReactionListeners.kt

Lines changed: 60 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import dev.kord.core.event.message.ReactionAddEvent
55
import dev.kord.x.emoji.Emojis
66
import dev.kord.x.emoji.addReaction
77
import me.ddivad.judgebot.dataclasses.Configuration
8+
import me.ddivad.judgebot.dataclasses.Permissions
89
import me.ddivad.judgebot.embeds.createMessageDeleteEmbed
910
import me.ddivad.judgebot.embeds.createCondensedHistoryEmbed
1011
import me.ddivad.judgebot.services.DatabaseService
@@ -23,64 +24,64 @@ fun onStaffReactionAdd(
2324
configuration: Configuration
2425
) = listeners {
2526
on<ReactionAddEvent> {
26-
println("listener")
27-
// val guild = guild?.asGuildOrNull() ?: return@on
28-
// val guildConfiguration = configuration[guild.asGuild().id.value]
29-
// if (!guildConfiguration?.reactions!!.enabled) return@on
30-
// val staffMember = user.asMemberOrNull(guild.id) ?: return@on
31-
// val messageAuthor = message.asMessage().author?.asMemberOrNull(guild.id) ?: return@on
32-
// val msg = message.asMessage()
33-
// println(discord.permissions.isHigherLevel(discord, staffMember, messageAuthor))
34-
// if (discord.permissions.isHigherLevel(discord, staffMember, messageAuthor)) {
35-
// when (this.emoji.name) {
36-
// guildConfiguration.reactions.gagReaction -> {
37-
// msg.deleteReaction(this.emoji)
38-
// if (muteService.checkRoleState(guild, messageAuthor) == RoleState.Tracked) {
39-
// staffMember.sendPrivateMessage("${messageAuthor.mention} is already muted.")
40-
// return@on
41-
// }
42-
// muteService.gag(guild, messageAuthor, staffMember)
43-
// staffMember.sendPrivateMessage("${messageAuthor.mention} gagged.")
44-
// loggingService.staffReactionUsed(guild, staffMember, messageAuthor, this.emoji)
45-
// }
46-
// guildConfiguration.reactions.historyReaction -> {
47-
// msg.deleteReaction(this.emoji)
48-
// staffMember.sendPrivateMessage {
49-
// createCondensedHistoryEmbed(
50-
// messageAuthor,
51-
// databaseService.users.getOrCreateUser(messageAuthor, guild.asGuild()),
52-
// guild.asGuild(),
53-
// configuration
54-
// )
55-
// }
56-
// loggingService.staffReactionUsed(guild, staffMember, messageAuthor, this.emoji)
57-
// }
58-
// guildConfiguration.reactions.deleteMessageReaction -> {
59-
// msg.deleteReaction(this.emoji)
60-
// msg.delete()
61-
// databaseService.users.addMessageDelete(
62-
// guild,
63-
// databaseService.users.getOrCreateUser(messageAuthor, guild.asGuild()),
64-
// true
65-
// )
66-
// try {
67-
// messageAuthor.sendPrivateMessage {
68-
// createMessageDeleteEmbed(guild, msg)
69-
// }
70-
// } catch (ex: RequestException) {
71-
// staffMember.sendPrivateMessage(
72-
// "User ${messageAuthor.mention} has DM's disabled." +
73-
// " Message deleted without notification."
74-
// )
75-
// }
76-
// loggingService.staffReactionUsed(guild, staffMember, messageAuthor, this.emoji)
77-
// }
78-
// Emojis.question.unicode -> {
79-
// if (this.user.isSelf() || msg.author != this.message.kord.getSelf()) return@on
80-
// msg.deleteReaction(this.emoji)
81-
// msg.addReaction(Emojis.whiteCheckMark)
82-
// }
83-
// }
84-
// }
27+
val guild = guild?.asGuildOrNull() ?: return@on
28+
val guildConfiguration = configuration[guild.asGuild().id.value]
29+
if (!guildConfiguration?.reactions!!.enabled) return@on
30+
val staffMember = user.asMemberOrNull(guild.id) ?: return@on
31+
val msg = message.asMessage()
32+
val messageAuthor = msg.author?.asMemberOrNull(guild.id) ?: return@on
33+
if (discord.permissions.hasPermission(discord, staffMember, Permissions.MODERATOR)
34+
&& discord.permissions.isHigherLevel(discord, staffMember, messageAuthor)
35+
) {
36+
when (this.emoji.name) {
37+
guildConfiguration.reactions.gagReaction -> {
38+
msg.deleteReaction(this.emoji)
39+
if (muteService.checkRoleState(guild, messageAuthor) == RoleState.Tracked) {
40+
staffMember.sendPrivateMessage("${messageAuthor.mention} is already muted.")
41+
return@on
42+
}
43+
muteService.gag(guild, messageAuthor, staffMember)
44+
staffMember.sendPrivateMessage("${messageAuthor.mention} gagged.")
45+
loggingService.staffReactionUsed(guild, staffMember, messageAuthor, this.emoji)
46+
}
47+
guildConfiguration.reactions.historyReaction -> {
48+
msg.deleteReaction(this.emoji)
49+
staffMember.sendPrivateMessage {
50+
createCondensedHistoryEmbed(
51+
messageAuthor,
52+
databaseService.users.getOrCreateUser(messageAuthor, guild.asGuild()),
53+
guild.asGuild(),
54+
configuration
55+
)
56+
}
57+
loggingService.staffReactionUsed(guild, staffMember, messageAuthor, this.emoji)
58+
}
59+
guildConfiguration.reactions.deleteMessageReaction -> {
60+
msg.deleteReaction(this.emoji)
61+
msg.delete()
62+
databaseService.users.addMessageDelete(
63+
guild,
64+
databaseService.users.getOrCreateUser(messageAuthor, guild.asGuild()),
65+
true
66+
)
67+
try {
68+
messageAuthor.sendPrivateMessage {
69+
createMessageDeleteEmbed(guild, msg)
70+
}
71+
} catch (ex: RequestException) {
72+
staffMember.sendPrivateMessage(
73+
"User ${messageAuthor.mention} has DM's disabled." +
74+
" Message deleted without notification."
75+
)
76+
}
77+
loggingService.staffReactionUsed(guild, staffMember, messageAuthor, this.emoji)
78+
}
79+
Emojis.question.unicode -> {
80+
if (this.user.isSelf() || msg.author != this.message.kord.getSelf()) return@on
81+
msg.deleteReaction(this.emoji)
82+
msg.addReaction(Emojis.whiteCheckMark)
83+
}
84+
}
85+
}
8586
}
8687
}

src/main/kotlin/me/ddivad/judgebot/services/database/UserOperations.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ class UserOperations(
8686
}
8787

8888
suspend fun addInfraction(guild: Guild, user: GuildMember, infraction: Infraction): Infraction {
89-
user.addInfraction(infraction, guild)
9089
infraction.punishment = getPunishmentForPoints(guild, user)
90+
user.addInfraction(infraction, guild)
9191
this.updateUser(user)
9292
return infraction
9393
}

0 commit comments

Comments
 (0)