Skip to content

Commit 5c399ce

Browse files
authored
Merge pull request #74 from the-programmers-hangout/develop
release: merge develop with master for v 1.8
2 parents a38df7b + 1b359ff commit 5c399ce

File tree

9 files changed

+231
-37
lines changed

9 files changed

+231
-37
lines changed

commands.md

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

5454
## User
55-
| Commands | Arguments | Description |
56-
| ------------- | ----------------------------------------- | ---------------------------------------------------------- |
57-
| ban | LowerUserArg, (Delete message days), Text | Ban a member from this guild. |
58-
| getBanReason | User | Get a ban reason for a banned user |
59-
| history, h, H | User | Use this to view a user's record. |
60-
| selfHistory | | View your infraction history (contents will be DM'd) |
61-
| setBanReason | User, Reason | Set a ban reason for a banned user |
62-
| unban | User | Unban a banned member from this guild. |
63-
| whatpfp | User | Perform a reverse image search of a User's profile picture |
55+
| Commands | Arguments | Description |
56+
| -------------- | ----------------------------------------- | ---------------------------------------------------------- |
57+
| ban | LowerUserArg, (Delete message days), Text | Ban a member from this guild. |
58+
| getBanReason | User | Get a ban reason for a banned user |
59+
| history, h, H | User | Use this to view a user's record. |
60+
| link | Main Account, Alt Account | Link a user's alt account with their main |
61+
| listAlts, alts | User | Use this to view a user's alt accounts. |
62+
| selfHistory | | View your infraction history (contents will be DM'd) |
63+
| setBanReason | User, Reason | Set a ban reason for a banned user |
64+
| unban | User | Unban a banned member from this guild. |
65+
| unlink | Main Account, Alt Account | Link a user's alt account with their main |
66+
| whatpfp | User | Perform a reverse image search of a User's profile picture |
6467

6568
## Utility
6669
| 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.7.0\n" +
61+
"Version: 1.8.0\n" +
6262
"DiscordKt: ${versions.library}\n" +
6363
"Kotlin: $kotlinVersion" +
6464
"```"

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

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

3-
import me.ddivad.judgebot.arguments.LowerMemberArg
43
import me.ddivad.judgebot.arguments.LowerUserArg
54
import me.ddivad.judgebot.dataclasses.*
65
import me.ddivad.judgebot.embeds.createHistoryEmbed
6+
import me.ddivad.judgebot.embeds.createCondensedHistoryEmbed
7+
import me.ddivad.judgebot.embeds.createLinkedAccountMenu
78
import me.ddivad.judgebot.embeds.createSelfHistoryEmbed
89
import me.ddivad.judgebot.services.DatabaseService
910
import me.ddivad.judgebot.services.LoggingService
1011
import me.ddivad.judgebot.services.PermissionLevel
1112
import me.ddivad.judgebot.services.infractions.BanService
1213
import me.ddivad.judgebot.services.requiredPermissionLevel
13-
import me.jakejmattson.discordkt.api.arguments.EitherArg
14-
import me.jakejmattson.discordkt.api.arguments.EveryArg
15-
import me.jakejmattson.discordkt.api.arguments.IntegerArg
16-
import me.jakejmattson.discordkt.api.arguments.UserArg
14+
import me.jakejmattson.discordkt.api.arguments.*
1715
import me.jakejmattson.discordkt.api.dsl.commands
1816
import me.jakejmattson.discordkt.api.extensions.sendPrivateMessage
1917
import java.awt.Color
@@ -29,12 +27,33 @@ fun createUserCommands(databaseService: DatabaseService,
2927
execute(UserArg) {
3028
val user = databaseService.users.getOrCreateUser(args.first, guild)
3129
databaseService.users.incrementUserHistory(user, guild)
30+
val linkedAccounts = user.getLinkedAccounts(guild)
3231
respondMenu {
3332
createHistoryEmbed(args.first, user, guild, config, databaseService)
3433
}
3534
}
3635
}
3736

37+
guildCommand("listAlts", "alts") {
38+
description = "Use this to view a user's alt accounts."
39+
requiredPermissionLevel = PermissionLevel.Moderator
40+
execute(UserArg) {
41+
val target = args.first
42+
val user = databaseService.users.getOrCreateUser(args.first, guild)
43+
databaseService.users.incrementUserHistory(user, guild)
44+
val linkedAccounts = user.getLinkedAccounts(guild)
45+
46+
if(linkedAccounts.isEmpty()) {
47+
respond("User ${target.mention} has no alt accounts recorded.")
48+
return@execute
49+
}
50+
51+
respondMenu {
52+
createLinkedAccountMenu(linkedAccounts, guild, config, databaseService)
53+
}
54+
}
55+
}
56+
3857
guildCommand("whatpfp") {
3958
description = "Perform a reverse image search of a User's profile picture"
4059
requiredPermissionLevel = PermissionLevel.Moderator
@@ -55,7 +74,7 @@ fun createUserCommands(databaseService: DatabaseService,
5574
requiredPermissionLevel = PermissionLevel.Staff
5675
execute(LowerUserArg, IntegerArg("Delete message days").makeOptional(0), EveryArg) {
5776
val (target, deleteDays, reason) = args
58-
val ban = Punishment(target.id.value, InfractionType.Ban , reason, author.id.value)
77+
val ban = Punishment(target.id.value, InfractionType.Ban, reason, author.id.value)
5978
banService.banUser(target, guild, ban, deleteDays).also {
6079
loggingService.userBanned(guild, target, ban)
6180
respond("User ${target.mention} banned")
@@ -121,4 +140,30 @@ fun createUserCommands(databaseService: DatabaseService,
121140
}
122141
}
123142
}
143+
144+
guildCommand("link") {
145+
description = "Link a user's alt account with their main"
146+
requiredPermissionLevel = PermissionLevel.Staff
147+
execute(UserArg("Main Account"), UserArg("Alt Account")) {
148+
val (main, alt) = args
149+
val mainRecord = databaseService.users.getOrCreateUser(main, guild)
150+
val altRecord = databaseService.users.getOrCreateUser(alt, guild)
151+
databaseService.users.addLinkedAccount(guild, mainRecord, alt.id.value)
152+
databaseService.users.addLinkedAccount(guild, altRecord, main.id.value)
153+
respond("Linked accounts ${main.mention} and ${alt.mention}")
154+
}
155+
}
156+
157+
guildCommand("unlink") {
158+
description = "Link a user's alt account with their main"
159+
requiredPermissionLevel = PermissionLevel.Staff
160+
execute(UserArg("Main Account"), UserArg("Alt Account")) {
161+
val (main, alt) = args
162+
val mainRecord = databaseService.users.getOrCreateUser(main, guild)
163+
val altRecord = databaseService.users.getOrCreateUser(alt, guild)
164+
databaseService.users.removeLinkedAccount(guild, mainRecord, alt.id.value)
165+
databaseService.users.removeLinkedAccount(guild, altRecord, main.id.value)
166+
respond("Unlinked accounts ${main.mention} and ${alt.mention}")
167+
}
168+
}
124169
}

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,17 @@ data class GuildMemberDetails(
1010
val infractions: MutableList<Infraction> = mutableListOf(),
1111
val info: MutableList<Info> = mutableListOf(),
1212
val leaveHistory: MutableList<GuildLeave> = mutableListOf(),
13+
val linkedAccounts: MutableList<String> = mutableListOf(),
1314
var historyCount: Int = 0,
1415
var points: Int = 0,
1516
var pointDecayTimer: Long = DateTime().millis,
1617
var lastInfraction: Long = 0,
18+
val deletedMessageCount: DeletedMessages = DeletedMessages()
19+
)
20+
21+
data class DeletedMessages(
22+
var deleteReaction: Int = 0,
23+
var total: Int = 0
1724
)
1825

1926
data class GuildLeave(
@@ -51,6 +58,23 @@ data class GuildMember(
5158
this.info.removeIf { it.id == id }
5259
}
5360

61+
fun addLinkedAccount(guild: Guild, userId: String) = with(this.getGuildInfo(guild.id.value)) {
62+
this.linkedAccounts.find { it == userId }.let {
63+
if (it == null) {
64+
this.linkedAccounts.add(userId)
65+
}
66+
return@let
67+
}
68+
}
69+
70+
fun getLinkedAccounts(guild: Guild) = with(this.getGuildInfo(guild.id.value)) {
71+
this.linkedAccounts
72+
}
73+
74+
fun removeLinkedAccount(guild: Guild, userId: String) = with(this.getGuildInfo(guild.id.value)) {
75+
this.linkedAccounts.removeIf { it == userId }
76+
}
77+
5478
fun cleanseNotes(guild: Guild) = with(this.getGuildInfo(guild.id.value)) {
5579
this.notes.clear()
5680
}
@@ -89,6 +113,11 @@ data class GuildMember(
89113
this.leaveHistory.add(GuildLeave(joinDate, null))
90114
}
91115

116+
fun addMessageDeleted(guild: Guild, deleteReaction: Boolean) = with(this.getGuildInfo(guild.id.value)) {
117+
this.deletedMessageCount.total++
118+
if (deleteReaction) this.deletedMessageCount.deleteReaction++
119+
}
120+
92121
fun checkPointDecay(guild: Guild, configuration: GuildConfiguration) = with(this.getGuildInfo(guild.id.value)) {
93122
val weeksSincePointsDecayed = Weeks.weeksBetween(DateTime(this.pointDecayTimer), DateTime()).weeks
94123
if (weeksSincePointsDecayed > 0) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ fun EmbedBuilder.createMessageDeleteEmbed(guild: Guild, message: Message) {
172172
color = Color.RED
173173
description = """
174174
Your ${if (message.attachments.isNotEmpty()) "image" else "message"} was deleted from ${message.channel.mention}
175-
as it is against our server rules.
175+
as it was deemed either off topic or against our server rules.
176176
""".trimIndent()
177177
addField("Message", "```${messageContent}```")
178178
if (message.attachments.isNotEmpty()) {

0 commit comments

Comments
 (0)