Skip to content

Commit 651dce9

Browse files
authored
Merge pull request #110 from the-programmers-hangout/feat/dkt-snapshot-upgrade
feat: update dkt snapshot version
2 parents 30bf6ce + 60dce9f commit 651dce9

File tree

18 files changed

+130
-163
lines changed

18 files changed

+130
-163
lines changed

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import dev.kord.gateway.Intent
66
import dev.kord.gateway.Intents
77
import dev.kord.gateway.PrivilegedIntent
88
import me.ddivad.judgebot.dataclasses.Configuration
9+
import me.ddivad.judgebot.dataclasses.Permissions
910
import me.ddivad.judgebot.services.*
1011
import me.ddivad.judgebot.services.infractions.BanService
1112
import me.ddivad.judgebot.services.infractions.MuteService
@@ -31,6 +32,14 @@ suspend fun main(args: Array<String>) {
3132
commandReaction = null
3233
theme = Color.MAGENTA
3334
entitySupplyStrategy = EntitySupplyStrategy.cacheWithCachingRestFallback
35+
permissions(Permissions.NONE)
36+
intents = Intents(
37+
Intent.GuildMembers,
38+
Intent.DirectMessages,
39+
Intent.GuildBans,
40+
Intent.Guilds,
41+
Intent.GuildMessageReactions
42+
)
3443
}
3544

3645
mentionEmbed {
@@ -73,15 +82,6 @@ suspend fun main(args: Array<String>) {
7382
}
7483
}
7584

76-
permissions {
77-
val permissionsService = discord.getInjectionObjects(PermissionsService::class)
78-
val permission = command.requiredPermissionLevel
79-
if (guild != null)
80-
permissionsService.hasClearance(guild!!, user, permission)
81-
else
82-
return@permissions command.requiredPermissionLevel == PermissionLevel.Everyone
83-
}
84-
8585
onStart {
8686
val (muteService, banService, cacheService) = this.getInjectionObjects(
8787
MuteService::class,
Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package me.ddivad.judgebot.arguments
22

33
import dev.kord.core.entity.Member
4-
import me.ddivad.judgebot.services.PermissionsService
54
import me.jakejmattson.discordkt.api.arguments.*
65
import me.jakejmattson.discordkt.api.dsl.CommandEvent
76
import me.jakejmattson.discordkt.api.extensions.toSnowflakeOrNull
@@ -14,20 +13,17 @@ open class LowerMemberArg(override val name: String = "LowerMemberArg") : Argume
1413
override suspend fun generateExamples(event: CommandEvent<*>) = mutableListOf("@User", "197780697866305536", "302134543639511050")
1514

1615
override suspend fun convert(arg: String, args: List<String>, event: CommandEvent<*>): ArgumentResult<Member> {
17-
val permissionsService = event.discord.getInjectionObjects(PermissionsService::class)
1816
val guild = event.guild ?: return Error("No guild found")
1917

2018
val member = arg.toSnowflakeOrNull()?.let { guild.getMemberOrNull(it) } ?: return Error("Not found")
19+
val author = event.author.asMember(event.guild!!.id)
2120

2221
return when {
23-
event.author.asMember(event.guild!!.id).isHigherRankedThan(permissionsService, member) ->
22+
event.discord.permissions.isHigherLevel(event.discord, member, author) ->
2423
Error("You don't have the permission to use this command on the target user.")
2524
else -> Success(member)
2625
}
2726
}
2827

2928
override fun formatData(data: Member) = "@${data.tag}"
30-
}
31-
32-
suspend fun Member.isHigherRankedThan(permissions: PermissionsService, targetMember: Member) =
33-
permissions.getPermissionRank(this) < permissions.getPermissionRank(targetMember)
29+
}

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package me.ddivad.judgebot.arguments
22

33
import dev.kord.core.entity.User
4-
import me.ddivad.judgebot.services.PermissionsService
54
import me.jakejmattson.discordkt.api.arguments.*
65
import me.jakejmattson.discordkt.api.dsl.CommandEvent
76
import me.jakejmattson.discordkt.api.extensions.toSnowflakeOrNull
@@ -14,15 +13,15 @@ open class LowerUserArg(override val name: String = "LowerUserArg") : ArgumentTy
1413
override suspend fun generateExamples(event: CommandEvent<*>) = mutableListOf("@User", "197780697866305536", "302134543639511050")
1514

1615
override suspend fun convert(arg: String, args: List<String>, event: CommandEvent<*>): ArgumentResult<User> {
17-
val permissionsService = event.discord.getInjectionObjects(PermissionsService::class)
1816
val guild = event.guild ?: return Error("No guild found")
1917

2018
val user = arg.toSnowflakeOrNull()?.let { guild.kord.getUser(it) } ?: return Error("User Not Found")
2119
val member = guild.getMemberOrNull(user.id) ?: return Success(user)
20+
val author = event.author.asMember(event.guild!!.id)
2221

2322
return when {
24-
event.author.asMember(event.guild!!.id).isHigherRankedThan(permissionsService, member) ->
25-
Error("You don't have the permission to use this command on the target user")
23+
event.discord.permissions.isHigherLevel(event.discord, member, author) ->
24+
Error("You don't have the permission to use this command on the target user.")
2625
else -> Success(member.asUser())
2726
}
2827
}

src/main/kotlin/me/ddivad/judgebot/commands/GuildCommands.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,18 @@ import me.ddivad.judgebot.arguments.GuildConfigArg
44
import me.ddivad.judgebot.conversations.guild.GuildSetupConversation
55
import me.ddivad.judgebot.conversations.guild.EditConfigConversation
66
import me.ddivad.judgebot.dataclasses.Configuration
7+
import me.ddivad.judgebot.dataclasses.Permissions
78
import me.ddivad.judgebot.embeds.createActivePunishmentsEmbed
89
import me.ddivad.judgebot.services.DatabaseService
910
import me.ddivad.judgebot.services.infractions.MuteService
10-
import me.ddivad.judgebot.services.PermissionLevel
11-
import me.ddivad.judgebot.services.requiredPermissionLevel
1211
import me.jakejmattson.discordkt.api.dsl.commands
1312

1413
fun guildConfigCommands(configuration: Configuration,
1514
databaseService: DatabaseService,
1615
muteService: MuteService) = commands("Guild") {
1716
guildCommand("setup") {
1817
description = "Configure a guild to use Judgebot."
19-
requiredPermissionLevel = PermissionLevel.Administrator
18+
requiredPermission = Permissions.ADMINISTRATOR
2019
execute {
2120
if (configuration.hasGuildConfig(guild.id.value)) {
2221
respond("Guild configuration exists. To modify it use the commands to set values.")
@@ -32,7 +31,7 @@ fun guildConfigCommands(configuration: Configuration,
3231

3332
guildCommand("configuration") {
3433
description = "Update configuration parameters for this guild (conversation)."
35-
requiredPermissionLevel = PermissionLevel.Staff
34+
requiredPermission = Permissions.STAFF
3635
execute(GuildConfigArg.optional("options")) {
3736
if (!configuration.hasGuildConfig(guild.id.value)) {
3837
respond("Please run the **setup** command to set this initially.")
@@ -46,7 +45,7 @@ fun guildConfigCommands(configuration: Configuration,
4645

4746
guildCommand("activePunishments") {
4847
description = "View active punishments for a guild."
49-
requiredPermissionLevel = PermissionLevel.Staff
48+
requiredPermission = Permissions.STAFF
5049
execute {
5150
val punishments = databaseService.guilds.getActivePunishments(guild)
5251
if (punishments.isEmpty()) {

src/main/kotlin/me/ddivad/judgebot/commands/InfoCommands.kt

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,20 @@ import dev.kord.x.emoji.Emojis
55
import dev.kord.x.emoji.addReaction
66
import me.ddivad.judgebot.arguments.LowerMemberArg
77
import me.ddivad.judgebot.dataclasses.Info
8+
import me.ddivad.judgebot.dataclasses.Permissions
89
import me.ddivad.judgebot.embeds.createInformationEmbed
910
import me.ddivad.judgebot.extensions.testDmStatus
1011
import me.ddivad.judgebot.services.DatabaseService
11-
import me.ddivad.judgebot.services.HelpService
12-
import me.ddivad.judgebot.services.PermissionLevel
13-
import me.ddivad.judgebot.services.requiredPermissionLevel
14-
import me.jakejmattson.discordkt.api.arguments.CommandArg
1512
import me.jakejmattson.discordkt.api.arguments.EveryArg
1613
import me.jakejmattson.discordkt.api.arguments.IntegerArg
17-
import me.jakejmattson.discordkt.api.arguments.UnicodeEmojiArg
1814
import me.jakejmattson.discordkt.api.dsl.commands
1915
import me.jakejmattson.discordkt.api.extensions.sendPrivateMessage
2016

2117
@Suppress("unused")
2218
fun createInformationCommands(databaseService: DatabaseService) = commands("Information") {
2319
guildCommand("info") {
2420
description = "Send an information message to a guild member"
25-
requiredPermissionLevel = PermissionLevel.Moderator
21+
requiredPermission = Permissions.MODERATOR
2622
execute(LowerMemberArg, EveryArg("Info Content")) {
2723
val (target, content) = args
2824
try {
@@ -45,7 +41,7 @@ fun createInformationCommands(databaseService: DatabaseService) = commands("Info
4541

4642
guildCommand("removeInfo") {
4743
description = "Remove an information message from a member record."
48-
requiredPermissionLevel = PermissionLevel.Staff
44+
requiredPermission = Permissions.STAFF
4945
execute(LowerMemberArg, IntegerArg("Info ID")) {
5046
val (target, id) = args
5147
val user = databaseService.users.getOrCreateUser(target, guild)

src/main/kotlin/me/ddivad/judgebot/commands/InfractionCommands.kt

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
package me.ddivad.judgebot.commands
22

3-
import dev.kord.common.entity.Permission
43
import me.ddivad.judgebot.arguments.LowerUserArg
54
import dev.kord.common.exception.RequestException
5+
import dev.kord.core.behavior.reply
66
import dev.kord.x.emoji.Emojis
77
import dev.kord.x.emoji.addReaction
88
import me.ddivad.judgebot.arguments.LowerMemberArg
99
import me.ddivad.judgebot.conversations.InfractionConversation
1010
import me.ddivad.judgebot.dataclasses.Configuration
1111
import me.ddivad.judgebot.dataclasses.Infraction
1212
import me.ddivad.judgebot.dataclasses.InfractionType
13+
import me.ddivad.judgebot.dataclasses.Permissions
1314
import me.ddivad.judgebot.extensions.testDmStatus
1415
import me.ddivad.judgebot.services.*
15-
import me.ddivad.judgebot.extensions.*
1616
import me.ddivad.judgebot.services.infractions.BadPfpService
1717
import me.ddivad.judgebot.services.infractions.BadnameService
1818
import me.ddivad.judgebot.services.infractions.InfractionService
1919
import me.jakejmattson.discordkt.api.arguments.BooleanArg
2020
import me.jakejmattson.discordkt.api.arguments.EveryArg
2121
import me.jakejmattson.discordkt.api.arguments.IntegerArg
22-
import me.jakejmattson.discordkt.api.arguments.UserArg
22+
import me.jakejmattson.discordkt.api.conversations.ConversationResult
2323
import me.jakejmattson.discordkt.api.dsl.commands
2424

2525
@Suppress("unused")
@@ -30,7 +30,7 @@ fun createInfractionCommands(databaseService: DatabaseService,
3030
badnameService: BadnameService) = commands("Infraction") {
3131
guildCommand("strike", "s", "S") {
3232
description = "Strike a user."
33-
requiredPermissionLevel = PermissionLevel.Staff
33+
requiredPermission = Permissions.STAFF
3434
execute(LowerMemberArg, IntegerArg("Weight").optional(1), EveryArg("Reason")) {
3535
val (targetMember, weight, reason) = args
3636
val guildConfiguration = config[guild.id.value] ?: return@execute
@@ -46,15 +46,20 @@ fun createInfractionCommands(databaseService: DatabaseService,
4646
this.message.addReaction(Emojis.x)
4747
respond("${targetMember.mention} has DMs disabled. No messages will be sent.")
4848
}
49-
InfractionConversation(databaseService, config, infractionService)
49+
val conversationResult = InfractionConversation(databaseService, config, infractionService)
5050
.createInfractionConversation(guild, targetMember, weight, reason, InfractionType.Strike)
5151
.startPublicly(discord, author, channel)
52+
if (conversationResult == ConversationResult.HAS_CONVERSATION) {
53+
message.reply { content = "You already have an active Strike conversation. Make sure you selected a rule." }
54+
} else if (conversationResult == ConversationResult.EXITED) {
55+
message.reply { content = "Infraction cancelled." }
56+
}
5257
}
5358
}
5459

5560
guildCommand("warn", "w", "W") {
5661
description = "Warn a user."
57-
requiredPermissionLevel = PermissionLevel.Moderator
62+
requiredPermission = Permissions.MODERATOR
5863
execute(LowerMemberArg, EveryArg("Reason")) {
5964
val (targetMember, reason) = args
6065
try {
@@ -72,7 +77,7 @@ fun createInfractionCommands(databaseService: DatabaseService,
7277

7378
guildCommand("badpfp") {
7479
description = "Notifies the user that they should change their profile pic and applies a 30 minute mute. Bans the user if they don't change picture."
75-
requiredPermissionLevel = PermissionLevel.Staff
80+
requiredPermission = Permissions.STAFF
7681
execute(BooleanArg("cancel", "apply", "cancel").optional(true), LowerMemberArg) {
7782
val (cancel, targetMember) = args
7883
try {
@@ -103,7 +108,7 @@ fun createInfractionCommands(databaseService: DatabaseService,
103108

104109
guildCommand("badname") {
105110
description = "Rename a guild member that has a bad name."
106-
requiredPermissionLevel = PermissionLevel.Moderator
111+
requiredPermission = Permissions.MODERATOR
107112
execute(LowerMemberArg) {
108113
badnameService.chooseRandomNickname(args.first)
109114
respond("User renamed to ${args.first.mention}")
@@ -112,7 +117,7 @@ fun createInfractionCommands(databaseService: DatabaseService,
112117

113118
guildCommand("cleanseInfractions") {
114119
description = "Use this to delete (permanently) as user's infractions."
115-
requiredPermissionLevel = PermissionLevel.Administrator
120+
requiredPermission = Permissions.ADMINISTRATOR
116121
execute(LowerUserArg) {
117122
val user = databaseService.users.getOrCreateUser(args.first, guild)
118123
if (user.getGuildInfo(guild.id.asString).infractions.isEmpty()) {
@@ -126,7 +131,7 @@ fun createInfractionCommands(databaseService: DatabaseService,
126131

127132
guildCommand("removeInfraction") {
128133
description = "Use this to delete (permanently) an infraction from a user."
129-
requiredPermissionLevel = PermissionLevel.Administrator
134+
requiredPermission = Permissions.ADMINISTRATOR
130135
execute(LowerUserArg, IntegerArg("Infraction ID")) {
131136
val user = databaseService.users.getOrCreateUser(args.first, guild)
132137
if (user.getGuildInfo(guild.id.asString).infractions.isEmpty()) {

src/main/kotlin/me/ddivad/judgebot/commands/MuteCommands.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import dev.kord.common.exception.RequestException
44
import dev.kord.x.emoji.Emojis
55
import dev.kord.x.emoji.addReaction
66
import me.ddivad.judgebot.arguments.LowerMemberArg
7+
import me.ddivad.judgebot.dataclasses.Permissions
78
import me.ddivad.judgebot.extensions.testDmStatus
8-
import me.ddivad.judgebot.services.*
99
import me.ddivad.judgebot.services.infractions.MuteService
1010
import me.ddivad.judgebot.services.infractions.RoleState
1111
import me.ddivad.judgebot.util.timeToString
@@ -18,7 +18,7 @@ import kotlin.math.roundToLong
1818
fun createMuteCommands(muteService: MuteService) = commands("Mute") {
1919
guildCommand("mute") {
2020
description = "Mute a user for a specified time."
21-
requiredPermissionLevel = PermissionLevel.Moderator
21+
requiredPermission = Permissions.MODERATOR
2222
execute(LowerMemberArg, TimeArg("Time"), EveryArg("Reason")) {
2323
val (targetMember, length, reason) = args
2424
try {
@@ -35,7 +35,7 @@ fun createMuteCommands(muteService: MuteService) = commands("Mute") {
3535

3636
guildCommand("unmute") {
3737
description = "Unmute a user."
38-
requiredPermissionLevel = PermissionLevel.Moderator
38+
requiredPermission = Permissions.MODERATOR
3939
execute(LowerMemberArg) {
4040
val targetMember = args.first
4141
if (muteService.checkRoleState(guild, targetMember) == RoleState.None) {
@@ -50,7 +50,7 @@ fun createMuteCommands(muteService: MuteService) = commands("Mute") {
5050

5151
guildCommand("gag") {
5252
description = "Mute a user for 5 minutes while you deal with something"
53-
requiredPermissionLevel = PermissionLevel.Moderator
53+
requiredPermission = Permissions.MODERATOR
5454
execute(LowerMemberArg) {
5555
val targetMember = args.first
5656
if (muteService.checkRoleState(guild, targetMember) == RoleState.Tracked) {

src/main/kotlin/me/ddivad/judgebot/commands/NoteCommands.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package me.ddivad.judgebot.commands
22

33
import me.ddivad.judgebot.arguments.LowerMemberArg
4+
import me.ddivad.judgebot.dataclasses.Permissions
45
import me.ddivad.judgebot.services.DatabaseService
5-
import me.ddivad.judgebot.services.PermissionLevel
6-
import me.ddivad.judgebot.services.requiredPermissionLevel
76
import me.jakejmattson.discordkt.api.arguments.EveryArg
87
import me.jakejmattson.discordkt.api.arguments.IntegerArg
98
import me.jakejmattson.discordkt.api.arguments.UserArg
@@ -13,7 +12,7 @@ import me.jakejmattson.discordkt.api.dsl.commands
1312
fun noteCommands(databaseService: DatabaseService) = commands("Note") {
1413
guildCommand("note") {
1514
description = "Use this to add a note to a user."
16-
requiredPermissionLevel = PermissionLevel.Moderator
15+
requiredPermission = Permissions.MODERATOR
1716
execute(UserArg, EveryArg("Note Content")) {
1817
val (target, note) = args
1918
val user = databaseService.users.getOrCreateUser(target, guild)
@@ -24,7 +23,7 @@ fun noteCommands(databaseService: DatabaseService) = commands("Note") {
2423

2524
guildCommand("editNote") {
2625
description = "Use this to edit a note."
27-
requiredPermissionLevel = PermissionLevel.Moderator
26+
requiredPermission = Permissions.MODERATOR
2827
execute(UserArg, IntegerArg("Note to edit"), EveryArg("Note Content")) {
2928
val (target, noteId, note) = args
3029
val user = databaseService.users.getOrCreateUser(target, guild)
@@ -39,7 +38,7 @@ fun noteCommands(databaseService: DatabaseService) = commands("Note") {
3938

4039
guildCommand("deleteNote") {
4140
description = "Use this to add a delete a note from a user."
42-
requiredPermissionLevel = PermissionLevel.Staff
41+
requiredPermission = Permissions.STAFF
4342
execute(LowerMemberArg, IntegerArg("Note ID")) {
4443
val (target, noteId) = args
4544
val user = databaseService.users.getOrCreateUser(target, guild)
@@ -54,7 +53,7 @@ fun noteCommands(databaseService: DatabaseService) = commands("Note") {
5453

5554
guildCommand("cleanseNotes") {
5655
description = "Use this to delete (permanently) as user's notes."
57-
requiredPermissionLevel = PermissionLevel.Administrator
56+
requiredPermission = Permissions.ADMINISTRATOR
5857
execute(LowerMemberArg) {
5958
val target = args.first
6059
val user = databaseService.users.getOrCreateUser(target, guild)

0 commit comments

Comments
 (0)