Skip to content

Commit 36645e4

Browse files
authored
Merge pull request #106 from the-programmers-hangout/develop
release: merge develop with master
2 parents aa809e8 + 0cb3c7f commit 36645e4

File tree

14 files changed

+244
-65
lines changed

14 files changed

+244
-65
lines changed

commands.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,15 @@
3535
| mute | LowerMemberArg, Time, Reason | Mute a user for a specified time. |
3636
| unmute | LowerMemberArg | Unmute a user. |
3737

38-
## Notes
38+
## Note
3939
| Commands | Arguments | Description |
4040
| ------------ | -------------------------------- | ------------------------------------------------- |
4141
| cleanseNotes | LowerMemberArg | Use this to delete (permanently) as user's notes. |
4242
| deleteNote | LowerMemberArg, Note ID | Use this to add a delete a note from a user. |
4343
| editNote | User, Note to edit, Note Content | Use this to edit a note. |
4444
| note | User, Note Content | Use this to add a note to a user. |
4545

46-
## Rules
46+
## Rule
4747
| Commands | Arguments | Description |
4848
| ----------- | --------- | ------------------------------------------------------------------------------------------------- |
4949
| addRule | | Add a rule to this guild. |
@@ -69,7 +69,7 @@
6969
| whatpfp | User | Perform a reverse image search of a User's profile picture |
7070

7171
## Utility
72-
| Commands | Arguments | Description |
73-
| -------- | --------- | -------------------- |
74-
| Help | [Command] | Display a help menu. |
72+
| Commands | Arguments | Description |
73+
| -------- | --------- | ------------------------- |
74+
| help | [Command] | Display help information. |
7575

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ suspend fun main(args: Array<String>) {
6161
field {
6262
name = "Build Info"
6363
value = "```" +
64-
"Version: 2.2.3\n" +
64+
"Version: 2.3.0\n" +
6565
"DiscordKt: ${versions.library}\n" +
6666
"Kotlin: $kotlinVersion" +
6767
"```"
@@ -90,8 +90,12 @@ suspend fun main(args: Array<String>) {
9090
MuteService::class,
9191
BanService::class,
9292
)
93-
muteService.initGuilds()
94-
banService.initialiseBanTimers()
93+
try {
94+
muteService.initGuilds()
95+
banService.initialiseBanTimers()
96+
} catch (ex: Exception) {
97+
println(ex.message)
98+
}
9599
}
96100
}
97101
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,13 @@ import me.ddivad.judgebot.dataclasses.Info
88
import me.ddivad.judgebot.embeds.createInformationEmbed
99
import me.ddivad.judgebot.extensions.testDmStatus
1010
import me.ddivad.judgebot.services.DatabaseService
11+
import me.ddivad.judgebot.services.HelpService
1112
import me.ddivad.judgebot.services.PermissionLevel
1213
import me.ddivad.judgebot.services.requiredPermissionLevel
14+
import me.jakejmattson.discordkt.api.arguments.CommandArg
1315
import me.jakejmattson.discordkt.api.arguments.EveryArg
1416
import me.jakejmattson.discordkt.api.arguments.IntegerArg
17+
import me.jakejmattson.discordkt.api.arguments.UnicodeEmojiArg
1518
import me.jakejmattson.discordkt.api.dsl.commands
1619
import me.jakejmattson.discordkt.api.extensions.sendPrivateMessage
1720

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import me.jakejmattson.discordkt.api.arguments.UserArg
1010
import me.jakejmattson.discordkt.api.dsl.commands
1111

1212
@Suppress("unused")
13-
fun noteCommands(databaseService: DatabaseService) = commands("Notes") {
13+
fun noteCommands(databaseService: DatabaseService) = commands("Note") {
1414
guildCommand("note") {
1515
description = "Use this to add a note to a user."
1616
requiredPermissionLevel = PermissionLevel.Moderator

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import me.jakejmattson.discordkt.api.dsl.commands
1818

1919
@Suppress("unused")
2020
fun ruleCommands(configuration: Configuration,
21-
databaseService: DatabaseService) = commands("Rules") {
21+
databaseService: DatabaseService) = commands("Rule") {
2222

2323
guildCommand("addRule") {
2424
description = "Add a rule to this guild."
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package me.ddivad.judgebot.commands
2+
3+
import me.ddivad.judgebot.services.HelpService
4+
import me.jakejmattson.discordkt.api.arguments.AnyArg
5+
import me.jakejmattson.discordkt.api.arguments.CommandArg
6+
import me.jakejmattson.discordkt.api.dsl.commands
7+
8+
@Suppress("unused")
9+
fun createInformationCommands(helpService: HelpService) = commands("Utility") {
10+
command("help") {
11+
description = "Display help information."
12+
execute(AnyArg("Command").optional("")) {
13+
val input = args.first
14+
if (input == "") {
15+
helpService.buildHelpEmbed(this)
16+
} else {
17+
val cmd = discord.commands.find { command ->
18+
command.names.any { it.equals(input, ignoreCase = true) }
19+
} ?: return@execute
20+
helpService.sendHelpEmbed(this, cmd)
21+
}
22+
}
23+
}
24+
}

src/main/kotlin/me/ddivad/judgebot/conversations/InfractionConversation.kt

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,51 @@
11
package me.ddivad.judgebot.conversations
22

3+
import dev.kord.common.entity.ButtonStyle
34
import dev.kord.core.entity.Guild
45
import dev.kord.core.entity.Member
5-
import dev.kord.rest.builder.message.EmbedBuilder
66
import me.ddivad.judgebot.dataclasses.*
77
import me.ddivad.judgebot.embeds.createHistoryEmbed
88
import me.ddivad.judgebot.embeds.createInfractionRuleEmbed
99
import me.ddivad.judgebot.services.DatabaseService
1010
import me.ddivad.judgebot.services.infractions.InfractionService
11-
import me.jakejmattson.discordkt.api.arguments.IntegerArg
1211
import me.jakejmattson.discordkt.api.dsl.conversation
1312

14-
class InfractionConversation(private val databaseService: DatabaseService,
15-
private val configuration: Configuration,
16-
private val infractionService: InfractionService) {
17-
fun createInfractionConversation(guild: Guild, targetUser: Member, weight: Int, infractionReason: String, type: InfractionType) = conversation("cancel") {
13+
class InfractionConversation(
14+
private val databaseService: DatabaseService,
15+
private val configuration: Configuration,
16+
private val infractionService: InfractionService
17+
) {
18+
fun createInfractionConversation(
19+
guild: Guild,
20+
targetUser: Member,
21+
weight: Int,
22+
infractionReason: String,
23+
type: InfractionType
24+
) = conversation("cancel") {
1825
val guildConfiguration = configuration[guild.id.value] ?: return@conversation
1926
val user = databaseService.users.getOrCreateUser(targetUser, guild)
2027
val points = weight *
2128
if (type == InfractionType.Strike) guildConfiguration.infractionConfiguration.strikePoints
2229
else guildConfiguration.infractionConfiguration.warnPoints
2330
val rules = databaseService.guilds.getRules(guild)
2431
val ruleId = if (rules.isNotEmpty()) {
25-
respond { createInfractionRuleEmbed(guild, rules) }
26-
val rule = promptUntil(
27-
IntegerArg,
28-
prompt = "Enter choice:",
29-
isValid = { number -> rules.any { it.number == number } || number == 0 },
30-
error = "Rule not found. Please enter a valid rule ID or 0:"
31-
)
32+
33+
val rule = promptButton<Int> {
34+
embed {
35+
createInfractionRuleEmbed(guild, rules)
36+
}
37+
rules.chunked(5).forEach { list ->
38+
buttons {
39+
list.forEach { rule ->
40+
button("${rule.number}", null, rule.number, ButtonStyle.Primary)
41+
}
42+
}
43+
}
44+
buttons {
45+
button("Infract without rule", null, 0, ButtonStyle.Danger)
46+
}
47+
}
48+
3249
if (rule > 0) rule else null
3350
} else null
3451
val infraction = Infraction(this.user.id.asString, infractionReason, type, points, ruleId)

src/main/kotlin/me/ddivad/judgebot/conversations/ResetUserConversation.kt

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import dev.kord.x.emoji.Emojis
88
import me.ddivad.judgebot.dataclasses.Configuration
99
import me.ddivad.judgebot.embeds.createHistoryEmbed
1010
import me.ddivad.judgebot.services.DatabaseService
11-
import me.jakejmattson.discordkt.api.dsl.PromptedReaction
1211
import me.jakejmattson.discordkt.api.dsl.conversation
1312
import me.jakejmattson.discordkt.api.extensions.toSnowflake
1413
import java.awt.Color
@@ -21,23 +20,26 @@ class ResetUserConversation(private val databaseService: DatabaseService, privat
2120
val linkedAccounts = user.getLinkedAccounts(guild)
2221
if (linkedAccounts.isNotEmpty()) {
2322
val linkedUsers = linkedAccounts.map { guild.kord.getUser(it.toSnowflake()) }
24-
val resetLinked = promptReaction(
25-
PromptedReaction(Emojis.whiteCheckMark, "", true),
26-
PromptedReaction(Emojis.x, "", false)
27-
) {
28-
title = "Reset linked accounts"
29-
color = Color.MAGENTA.kColor
30-
thumbnail {
31-
url = target.asUser().avatar.url
23+
val resetLinked = promptButton<Boolean> {
24+
embed {
25+
title = "Reset linked accounts"
26+
color = Color.MAGENTA.kColor
27+
thumbnail {
28+
url = target.asUser().avatar.url
29+
}
30+
description = """
31+
${target.mention} has linked accounts ${linkedUsers.joinToString { "${it?.mention}" }}
32+
33+
Reset linked accounts too? (${Emojis.whiteCheckMark.unicode} / ${Emojis.x.unicode})
34+
""".trimIndent()
35+
footer {
36+
icon = guild.getIconUrl(Image.Format.PNG) ?: ""
37+
text = guild.name
38+
}
3239
}
33-
description = """
34-
${target.mention} has linked accounts ${linkedUsers.joinToString { "${it?.mention}" }}
35-
36-
Reset linked accounts too? (${Emojis.whiteCheckMark.unicode} / ${Emojis.x.unicode})
37-
""".trimIndent()
38-
footer {
39-
icon = guild.getIconUrl(Image.Format.PNG) ?: ""
40-
text = guild.name
40+
buttons {
41+
button("Yes", Emojis.whiteCheckMark, true)
42+
button("No", Emojis.x, false)
4143
}
4244
}
4345
if (resetLinked) {

src/main/kotlin/me/ddivad/judgebot/embeds/RuleEmbeds.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,11 @@ fun EmbedBuilder.createInfractionRuleEmbed(guild: Guild, rules: List<Rule>) {
4949
for (rule in rules) {
5050
description += "**[${rule.number}](${rule.link})**. ${rule.title}\n"
5151
}
52-
52+
addField("","Click the rule id you would like to use, or type `cancel` to stop this process")
5353
footer {
5454
icon = guild.getIconUrl(Image.Format.PNG) ?: ""
5555
text = guild.name
5656
}
57-
addField("","")
58-
addField("Rule Choice:", "Reply with **rule id**, or **0** for no rule.\nYou can also type **cancel** to stop this process.")
5957
}
6058

6159
fun EmbedBuilder.createRulesEmbedDetailed(guild: Guild, rules: List<Rule>) {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,16 @@ fun onStaffReactionAdd(
4141
) {
4242
when (this.emoji.name) {
4343
guildConfiguration.reactions.gagReaction -> {
44-
loggingService.staffReactionUsed(guild, staffMember, messageAuthor, this.emoji)
4544
msg.deleteReaction(this.emoji)
4645
if (muteService.checkRoleState(guild, messageAuthor) == RoleState.Tracked) {
4746
staffMember.sendPrivateMessage("${messageAuthor.mention} is already muted.")
4847
return@on
4948
}
5049
muteService.gag(guild, messageAuthor, staffMember)
5150
staffMember.sendPrivateMessage("${messageAuthor.mention} gagged.")
51+
loggingService.staffReactionUsed(guild, staffMember, messageAuthor, this.emoji)
5252
}
5353
guildConfiguration.reactions.historyReaction -> {
54-
loggingService.staffReactionUsed(guild, staffMember, messageAuthor, this.emoji)
5554
msg.deleteReaction(this.emoji)
5655
staffMember.sendPrivateMessage {
5756
createCondensedHistoryEmbed(
@@ -61,9 +60,9 @@ fun onStaffReactionAdd(
6160
configuration
6261
)
6362
}
63+
loggingService.staffReactionUsed(guild, staffMember, messageAuthor, this.emoji)
6464
}
6565
guildConfiguration.reactions.deleteMessageReaction -> {
66-
loggingService.staffReactionUsed(guild, staffMember, messageAuthor, this.emoji)
6766
msg.deleteReaction(this.emoji)
6867
msg.delete()
6968
databaseService.users.addMessageDelete(
@@ -81,6 +80,7 @@ fun onStaffReactionAdd(
8180
" Message deleted without notification."
8281
)
8382
}
83+
loggingService.staffReactionUsed(guild, staffMember, messageAuthor, this.emoji)
8484
}
8585
Emojis.question.unicode -> {
8686
if (this.user.isSelf() || msg.author != this.message.kord.getSelf()) return@on

0 commit comments

Comments
 (0)