11package me.ddivad.judgebot.commands
22
3- import me.ddivad.judgebot.arguments.LowerMemberArg
43import me.ddivad.judgebot.arguments.LowerUserArg
54import me.ddivad.judgebot.dataclasses.*
65import me.ddivad.judgebot.embeds.createHistoryEmbed
6+ import me.ddivad.judgebot.embeds.createCondensedHistoryEmbed
7+ import me.ddivad.judgebot.embeds.createLinkedAccountMenu
78import me.ddivad.judgebot.embeds.createSelfHistoryEmbed
89import me.ddivad.judgebot.services.DatabaseService
910import me.ddivad.judgebot.services.LoggingService
1011import me.ddivad.judgebot.services.PermissionLevel
1112import me.ddivad.judgebot.services.infractions.BanService
1213import 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.*
1715import me.jakejmattson.discordkt.api.dsl.commands
1816import me.jakejmattson.discordkt.api.extensions.sendPrivateMessage
1917import 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}
0 commit comments