Skip to content

Commit 232ab26

Browse files
authored
Merge pull request #62 from the-programmers-hangout/develop
release: version 1.5.0 release
2 parents b4eabb1 + eef13b2 commit 232ab26

File tree

16 files changed

+260
-199
lines changed

16 files changed

+260
-199
lines changed

commands.md

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,16 +51,15 @@
5151
| rules | (Message) | List the rules of this guild. Pass a message ID to edit existing rules embed. |
5252

5353
## User
54-
| Commands | Arguments | Description |
55-
| ------------ | ------------------------------------------- | ---------------------------------------------------------- |
56-
| ban | LowerMemberArg, (Delete message days), Text | Ban a member from this guild. |
57-
| getBanReason | User | Get a ban reason for a banned user |
58-
| history, h | User | Use this to view a user's record. |
59-
| selfHistory | | View your infraction history (contents will be DM'd) |
60-
| setBanReason | User, Text | Set a ban reason for a banned user |
61-
| status, st | User | Use this to view a user's status card. |
62-
| unban | User | Unban a banned member from this guild. |
63-
| whatpfp | User | Perform a reverse image search of a User's profile picture |
54+
| Commands | Arguments | Description |
55+
| ------------ | ----------------------------------------- | ---------------------------------------------------------- |
56+
| ban | LowerUserArg, (Delete message days), Text | Ban a member from this guild. |
57+
| getBanReason | User | Get a ban reason for a banned user |
58+
| history, h | User | Use this to view a user's record. |
59+
| selfHistory | | View your infraction history (contents will be DM'd) |
60+
| setBanReason | User, Text | Set a ban reason for a banned user |
61+
| unban | User | Unban a banned member from this guild. |
62+
| whatpfp | User | Perform a reverse image search of a User's profile picture |
6463

6564
## Utility
6665
| Commands | Arguments | Description |

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ suspend fun main(args: Array<String>) {
5858
field {
5959
name = "Build Info"
6060
value = "```" +
61-
"Version: 1.4.1\n" +
61+
"Version: 1.5.0\n" +
6262
"DiscordKt: ${versions.library}\n" +
6363
"Kotlin: $kotlinVersion" +
6464
"```"
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package me.ddivad.judgebot.arguments
2+
3+
import com.gitlab.kordlib.core.entity.User
4+
import me.ddivad.judgebot.services.PermissionsService
5+
import me.jakejmattson.discordkt.api.arguments.ArgumentResult
6+
import me.jakejmattson.discordkt.api.arguments.ArgumentType
7+
import me.jakejmattson.discordkt.api.dsl.CommandEvent
8+
import me.jakejmattson.discordkt.api.arguments.Success
9+
import me.jakejmattson.discordkt.api.arguments.Error
10+
import me.jakejmattson.discordkt.api.extensions.toSnowflakeOrNull
11+
12+
open class LowerUserArg(override val name: String = "LowerUserArg") : ArgumentType<User>() {
13+
companion object : LowerUserArg()
14+
15+
override fun generateExamples(event: CommandEvent<*>) = mutableListOf("@User", "197780697866305536", "302134543639511050")
16+
17+
override suspend fun convert(arg: String, args: List<String>, event: CommandEvent<*>): ArgumentResult<User> {
18+
val permissionsService = event.discord.getInjectionObjects(PermissionsService::class)
19+
val guild = event.guild ?: return Error("No guild found")
20+
21+
val user = arg.toSnowflakeOrNull()?.let { guild.kord.getUser(it) } ?: return Error("User Not Found")
22+
val member = guild.getMemberOrNull(user.id) ?: return Success(user)
23+
24+
return when {
25+
event.author.asMember(event.guild!!.id).isHigherRankedThan(permissionsService, member) ->
26+
Error("You don't have the permission to use this command on the target user")
27+
else -> Success(member.asUser())
28+
}
29+
}
30+
}

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

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

3+
import com.gitlab.kordlib.common.exception.RequestException
4+
import com.gitlab.kordlib.kordx.emoji.Emojis
5+
import com.gitlab.kordlib.kordx.emoji.addReaction
36
import me.ddivad.judgebot.arguments.LowerMemberArg
47
import me.ddivad.judgebot.dataclasses.Info
58
import me.ddivad.judgebot.embeds.createInformationEmbed
9+
import me.ddivad.judgebot.extensions.testDmStatus
610
import me.ddivad.judgebot.services.DatabaseService
711
import me.ddivad.judgebot.services.PermissionLevel
812
import me.ddivad.judgebot.services.requiredPermissionLevel
@@ -18,6 +22,14 @@ fun createInformationCommands(databaseService: DatabaseService) = commands("Info
1822
requiredPermissionLevel = PermissionLevel.Moderator
1923
execute(LowerMemberArg, EveryArg("Info Content")) {
2024
val (target, content) = args
25+
try {
26+
target.testDmStatus()
27+
this.message.addReaction(Emojis.whiteCheckMark)
28+
} catch (ex: RequestException) {
29+
this.message.addReaction(Emojis.x)
30+
respond("Target user has DM's disabled. Info will not be sent.")
31+
return@execute
32+
}
2133
val user = databaseService.users.getOrCreateUser(target, guild)
2234
val information = Info(content, author.id.value)
2335
databaseService.users.addInfo(guild, user, information)

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

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

33
import com.gitlab.kordlib.common.exception.RequestException
4+
import com.gitlab.kordlib.kordx.emoji.Emojis
5+
import com.gitlab.kordlib.kordx.emoji.addReaction
46
import me.ddivad.judgebot.arguments.LowerMemberArg
57
import me.ddivad.judgebot.conversations.InfractionConversation
68
import me.ddivad.judgebot.dataclasses.Configuration
@@ -34,7 +36,9 @@ fun createInfractionCommands(databaseService: DatabaseService,
3436
}
3537
try {
3638
targetMember.testDmStatus()
39+
this.message.addReaction(Emojis.whiteCheckMark)
3740
} catch (ex: RequestException) {
41+
this.message.addReaction(Emojis.x)
3842
respond("Target user has DM's disabled. Infraction cancelled.")
3943
return@execute
4044
}
@@ -51,7 +55,9 @@ fun createInfractionCommands(databaseService: DatabaseService,
5155
val (targetMember, reason) = args
5256
try {
5357
targetMember.testDmStatus()
58+
this.message.addReaction(Emojis.whiteCheckMark)
5459
} catch (ex: RequestException) {
60+
this.message.addReaction(Emojis.x)
5561
respond("Target user has DM's disabled. Infraction cancelled.")
5662
return@execute
5763
}
@@ -68,7 +74,9 @@ fun createInfractionCommands(databaseService: DatabaseService,
6874
val (cancel, targetMember) = args
6975
try {
7076
targetMember.testDmStatus()
77+
this.message.addReaction(Emojis.whiteCheckMark)
7178
} catch (ex: RequestException) {
79+
this.message.addReaction(Emojis.x)
7280
respond("Target user has DM's disabled. Infraction cancelled.")
7381
return@execute
7482
}

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

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

33
import com.gitlab.kordlib.common.exception.RequestException
4+
import com.gitlab.kordlib.kordx.emoji.Emojis
5+
import com.gitlab.kordlib.kordx.emoji.addReaction
46
import me.ddivad.judgebot.arguments.LowerMemberArg
57
import me.ddivad.judgebot.extensions.testDmStatus
68
import me.ddivad.judgebot.services.*
@@ -21,9 +23,10 @@ fun createMuteCommands(muteService: MuteService) = commands("Mute") {
2123
val (targetMember, length, reason) = args
2224
try {
2325
targetMember.testDmStatus()
26+
this.message.addReaction(Emojis.whiteCheckMark)
2427
} catch (ex: RequestException) {
25-
respond("Unable to contact the target user. Infraction cancelled.")
26-
return@execute
28+
this.message.addReaction(Emojis.x)
29+
respond("User has DM's disabled and won't receive message.")
2730
}
2831
muteService.applyMute(targetMember, length.roundToLong() * 1000, reason)
2932
respond("User ${targetMember.mention} has been muted")
@@ -50,12 +53,6 @@ fun createMuteCommands(muteService: MuteService) = commands("Mute") {
5053
requiredPermissionLevel = PermissionLevel.Moderator
5154
execute(LowerMemberArg) {
5255
val targetMember = args.first
53-
try {
54-
targetMember.testDmStatus()
55-
} catch (ex: RequestException) {
56-
respond("Unable to contact the target user. Infraction cancelled.")
57-
return@execute
58-
}
5956
if (muteService.checkRoleState(guild, targetMember) == RoleState.Tracked) {
6057
respond("User ${targetMember.mention} is already muted")
6158
return@execute

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

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

33
import me.ddivad.judgebot.arguments.LowerMemberArg
4+
import me.ddivad.judgebot.arguments.LowerUserArg
45
import me.ddivad.judgebot.dataclasses.*
56
import me.ddivad.judgebot.embeds.createHistoryEmbed
67
import me.ddivad.judgebot.embeds.createSelfHistoryEmbed
7-
import me.ddivad.judgebot.embeds.createStatusEmbed
88
import me.ddivad.judgebot.services.DatabaseService
99
import me.ddivad.judgebot.services.LoggingService
1010
import me.ddivad.judgebot.services.PermissionLevel
1111
import me.ddivad.judgebot.services.infractions.BanService
1212
import me.ddivad.judgebot.services.requiredPermissionLevel
13+
import me.jakejmattson.discordkt.api.arguments.EitherArg
1314
import me.jakejmattson.discordkt.api.arguments.EveryArg
1415
import me.jakejmattson.discordkt.api.arguments.IntegerArg
1516
import me.jakejmattson.discordkt.api.arguments.UserArg
@@ -34,16 +35,6 @@ fun createUserCommands(databaseService: DatabaseService,
3435
}
3536
}
3637

37-
guildCommand("status", "st") {
38-
description = "Use this to view a user's status card."
39-
requiredPermissionLevel = PermissionLevel.Moderator
40-
execute(UserArg) {
41-
val user = databaseService.users.getOrCreateUser(args.first, guild)
42-
databaseService.users.incrementUserHistory(user, guild)
43-
createStatusEmbed(args.first, user, guild, config)
44-
}
45-
}
46-
4738
guildCommand("whatpfp") {
4839
description = "Perform a reverse image search of a User's profile picture"
4940
requiredPermissionLevel = PermissionLevel.Moderator
@@ -62,11 +53,11 @@ fun createUserCommands(databaseService: DatabaseService,
6253
guildCommand("ban") {
6354
description = "Ban a member from this guild."
6455
requiredPermissionLevel = PermissionLevel.Staff
65-
execute(LowerMemberArg, IntegerArg("Delete message days").makeOptional(1), EveryArg) {
56+
execute(LowerUserArg, IntegerArg("Delete message days").makeOptional(1), EveryArg) {
6657
val (target, deleteDays, reason) = args
6758
val ban = Punishment(target.id.value, InfractionType.Ban , reason, author.id.value)
6859
banService.banUser(target, guild, ban, deleteDays).also {
69-
loggingService.userBanned(guild, target.asUser(), ban)
60+
loggingService.userBanned(guild, target, ban)
7061
respond("User ${target.mention} banned")
7162
}
7263
}
@@ -110,8 +101,7 @@ fun createUserCommands(databaseService: DatabaseService,
110101
execute(UserArg) {
111102
val user = args.first
112103
guild.getBanOrNull(user.id)?.let {
113-
val reason = databaseService.guilds.getBanOrNull(guild, user.id.value)?.reason
114-
?: guild.getBan(args.first.id).reason
104+
val reason = databaseService.guilds.getBanOrNull(guild, user.id.value)?.reason ?: it.reason
115105
respond(reason ?: "No reason logged")
116106
return@execute
117107
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ data class Configuration(
3232
newConfiguration.punishments.add(PunishmentLevel(10, PunishmentType.MUTE, 1000L * 60 * 60 * 1))
3333
newConfiguration.punishments.add(PunishmentLevel(20, PunishmentType.MUTE, 1000L * 60 * 60 * 12))
3434
newConfiguration.punishments.add(PunishmentLevel(30, PunishmentType.MUTE, 1000L * 60 * 60 * 24))
35-
newConfiguration.punishments.add(PunishmentLevel(40, PunishmentType.BAN, 1000L * 60 * 60 * 24 * 30))
35+
newConfiguration.punishments.add(PunishmentLevel(40, PunishmentType.MUTE, 1000L * 60 * 60 * 24 * 30))
3636
newConfiguration.punishments.add(PunishmentLevel(50, PunishmentType.BAN))
3737

3838
guildConfigurations[guild.id.longValue] = newConfiguration

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

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,12 @@ data class GuildInformation(
77
val bans: MutableList<Ban> = mutableListOf(),
88
val punishments: MutableList<Punishment> = mutableListOf()
99
) {
10-
fun addRule(rule: Rule): GuildInformation {
11-
this.rules.add(rule).let { this }
12-
return this
10+
fun addRule(rule: Rule): GuildInformation = this.apply {
11+
this.rules.add(rule)
1312
}
1413

15-
fun archiveRule(ruleNumber: Int): GuildInformation {
16-
this.rules.find { it.number == ruleNumber }!!.archived = true
17-
return this
14+
fun archiveRule(ruleNumber: Int): GuildInformation = this.apply {
15+
this.rules.find { it.number == ruleNumber }?.archived = true
1816
}
1917

2018
fun editRule(oldRule: Rule, updatedRule: Rule): Rule {
@@ -23,17 +21,15 @@ data class GuildInformation(
2321
return updatedRule
2422
}
2523

26-
fun addPunishment(punishment: Punishment): GuildInformation {
24+
fun addPunishment(punishment: Punishment): GuildInformation = this.apply {
2725
val nextId: Int = if (this.punishments.isEmpty()) 1 else this.punishments.maxByOrNull { it.id }!!.id + 1
2826
punishment.id = nextId
2927
this.punishments.add(punishment)
30-
return this
3128
}
3229

33-
fun removePunishment(userId: String, type: InfractionType): GuildInformation {
30+
fun removePunishment(userId: String, type: InfractionType): GuildInformation = this.apply {
3431
val punishment = this.getPunishmentByType(type, userId).first()
3532
this.punishments.remove(punishment)
36-
return this
3733
}
3834

3935
fun getPunishmentByType(type: InfractionType, userId: String): List<Punishment> {
@@ -48,15 +44,13 @@ data class GuildInformation(
4844
return this.bans.any { it.userId == userId }
4945
}
5046

51-
fun addBan(ban: Ban): GuildInformation {
47+
fun addBan(ban: Ban): GuildInformation = this.apply {
5248
this.bans.add(ban)
53-
return this
5449
}
5550

56-
fun removeBan(userId: String): GuildInformation {
51+
fun removeBan(userId: String): GuildInformation = this.apply {
5752
val ban = this.bans.find { it.userId == userId }
5853
this.bans.remove(ban)
59-
return this
6054
}
6155
}
6256

0 commit comments

Comments
 (0)