diff --git a/Dockerfile b/Dockerfile index c947a4c..8c2f42a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ -FROM gradle:6.5.1-jdk14 AS build +FROM gradle:7.1-jdk16 AS build COPY --chown=gradle:gradle . /judgebot WORKDIR /judgebot RUN gradle shadowJar --no-daemon diff --git a/build.gradle.kts b/build.gradle.kts index e277bf3..7c29401 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,29 +1,25 @@ - -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile - group = "me.ddivad" version = Versions.BOT description = "judgebot" plugins { - kotlin("jvm") version "1.4.10" - id("com.github.johnrengelman.shadow") version "6.0.0" + kotlin("jvm") version "1.5.10" + id("com.github.johnrengelman.shadow") version "7.0.0" } repositories { mavenCentral() - jcenter() maven("https://oss.sonatype.org/content/repositories/snapshots/") } dependencies { implementation("me.jakejmattson:DiscordKt:${Versions.DISCORDKT}") - implementation("org.litote.kmongo:kmongo-coroutine:4.2.6") - implementation("joda-time:joda-time:2.10.6") + implementation("org.litote.kmongo:kmongo-coroutine:4.2.8") + implementation("joda-time:joda-time:2.10.10") } tasks { - withType { + compileKotlin { kotlinOptions.jvmTarget = "1.8" } @@ -31,7 +27,7 @@ tasks { archiveFileName.set("Judgebot.jar") manifest { attributes( - "Main-Class" to "me.ddivad.judgebot.MainKt" + "Main-Class" to "me.ddivad.judgebot.MainKt" ) } } @@ -39,5 +35,5 @@ tasks { object Versions { const val BOT = "1.0.0" - const val DISCORDKT = "0.21.3" + const val DISCORDKT = "0.22.0-SNAPSHOT" } \ No newline at end of file diff --git a/commands.md b/commands.md index bfbd0f4..06ee09f 100644 --- a/commands.md +++ b/commands.md @@ -3,13 +3,13 @@ ## Key | Symbol | Meaning | | ----------- | ------------------------------ | -| (Argument) | Argument is not required. | +| [Argument] | Argument is not required. | ## Guild | Commands | Arguments | Description | | ----------------- | ------------- | -------------------------------------------------------------- | | activePunishments | | View active punishments for a guild. | -| configuration | (GuildConfig) | Update configuration parameters for this guild (conversation). | +| configuration | [GuildConfig] | Update configuration parameters for this guild (conversation). | | setup | | Configure a guild to use Judgebot. | ## Information @@ -21,10 +21,11 @@ ## Infraction | Commands | Arguments | Description | | ------------------ | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| badpfp | (cancel), LowerMemberArg | 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. | +| badname | LowerMemberArg | Rename a guild member that has a bad name. | +| badpfp | [cancel], LowerMemberArg | 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. | | cleanseInfractions | LowerUserArg | Use this to delete (permanently) as user's infractions. | | removeInfraction | LowerUserArg, Infraction ID | Use this to delete (permanently) an infraction from a user. | -| strike, s, S | LowerMemberArg, (Weight), Reason | Strike a user. | +| strike, s, S | LowerMemberArg, [Weight], Reason | Strike a user. | | warn, w, W | LowerMemberArg, Reason | Warn a user. | ## Mute @@ -48,15 +49,15 @@ | addRule | | Add a rule to this guild. | | archiveRule | | Archive a rule in this guild. | | editRule | | Edit a rule in this guild. | -| longRules | (Message) | List the rules (with descriptions) of this guild. Pass a message ID to edit existing rules embed. | +| longRules | [Message] | List the rules (with descriptions) of this guild. Pass a message ID to edit existing rules embed. | | rule | Rule | List a rule from this guild. | -| rules | (Message) | List the rules of this guild. Pass a message ID to edit existing rules embed. | +| rules | [Message] | List the rules of this guild. Pass a message ID to edit existing rules embed. | ## User | Commands | Arguments | Description | | ------------- | ----------------------------------------- | ---------------------------------------------------------- | | alts | User | Use this to view a user's alt accounts. | -| ban | LowerUserArg, (Delete message days), Text | Ban a member from this guild. | +| ban | LowerUserArg, [Delete message days], Text | Ban a member from this guild. | | getBanReason | User | Get a ban reason for a banned user | | history, h, H | User | Use this to view a user's record. | | link | Main Account, Alt Account | Link a user's alt account with their main | @@ -70,5 +71,5 @@ ## Utility | Commands | Arguments | Description | | -------- | --------- | -------------------- | -| Help | (Command) | Display a help menu. | +| Help | [Command] | Display a help menu. | diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 12d38de..69a9715 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/kotlin/me/ddivad/judgebot/Main.kt b/src/main/kotlin/me/ddivad/judgebot/Main.kt index 9ecbcfc..8769916 100644 --- a/src/main/kotlin/me/ddivad/judgebot/Main.kt +++ b/src/main/kotlin/me/ddivad/judgebot/Main.kt @@ -1,12 +1,15 @@ package me.ddivad.judgebot -import com.gitlab.kordlib.gateway.Intent -import com.gitlab.kordlib.gateway.PrivilegedIntent +import dev.kord.common.kColor +import dev.kord.gateway.Intent +import dev.kord.gateway.Intents +import dev.kord.gateway.PrivilegedIntent import me.ddivad.judgebot.dataclasses.Configuration import me.ddivad.judgebot.services.BotStatsService -import me.ddivad.judgebot.services.infractions.MuteService +import me.ddivad.judgebot.services.PermissionLevel import me.ddivad.judgebot.services.PermissionsService import me.ddivad.judgebot.services.infractions.BanService +import me.ddivad.judgebot.services.infractions.MuteService import me.ddivad.judgebot.services.requiredPermissionLevel import me.jakejmattson.discordkt.api.dsl.bot import me.jakejmattson.discordkt.api.extensions.addInlineField @@ -15,15 +18,14 @@ import java.awt.Color @PrivilegedIntent suspend fun main(args: Array) { val token = System.getenv("BOT_TOKEN") ?: null - val defaultPrefix = System.getenv("DEFAULT_PREFIX") ?: "" + val defaultPrefix = System.getenv("DEFAULT_PREFIX") ?: "j!" require(token != null) { "Expected the bot token as an environment variable" } bot(token) { prefix { val configuration = discord.getInjectionObjects(Configuration::class) - - guild?.let { configuration[guild!!.id.longValue]?.prefix } ?: defaultPrefix + guild?.let { configuration[guild!!.id.value]?.prefix } ?: defaultPrefix } configure { @@ -37,7 +39,7 @@ suspend fun main(args: Array) { val channel = it.channel val self = channel.kord.getSelf() - color = it.discord.configuration.theme + color = it.discord.configuration.theme?.kColor thumbnail { url = self.avatar.url @@ -50,17 +52,17 @@ suspend fun main(args: Array) { addInlineField("Prefix", it.prefix()) addInlineField("Ping", botStats.ping) - addInlineField("Contributors", "ddivad#0001") + addInlineField("Contributors", "[Link](https://github.com/the-programmers-hangout/JudgeBot/graphs/contributors)") val kotlinVersion = KotlinVersion.CURRENT val versions = it.discord.versions field { name = "Build Info" value = "```" + - "Version: 2.1.2\n" + - "DiscordKt: ${versions.library}\n" + - "Kotlin: $kotlinVersion" + - "```" + "Version: 2.2.0\n" + + "DiscordKt: ${versions.library}\n" + + "Kotlin: $kotlinVersion" + + "```" } field { name = "Uptime" @@ -78,7 +80,7 @@ suspend fun main(args: Array) { if (guild != null) permissionsService.hasClearance(guild!!, user, permission) else - false + return@permissions command.requiredPermissionLevel == PermissionLevel.Everyone } onStart { @@ -89,14 +91,5 @@ suspend fun main(args: Array) { muteService.initGuilds() banService.initialiseBanTimers() } - - intents { - +Intent.GuildMessages - +Intent.DirectMessages - +Intent.GuildBans - +Intent.Guilds - +Intent.GuildMembers - +Intent.GuildMessageReactions - } } } diff --git a/src/main/kotlin/me/ddivad/judgebot/arguments/GuildConfigArg.kt b/src/main/kotlin/me/ddivad/judgebot/arguments/GuildConfigArg.kt index 0774fef..a158765 100644 --- a/src/main/kotlin/me/ddivad/judgebot/arguments/GuildConfigArg.kt +++ b/src/main/kotlin/me/ddivad/judgebot/arguments/GuildConfigArg.kt @@ -1,36 +1,35 @@ package me.ddivad.judgebot.arguments -import me.jakejmattson.discordkt.api.arguments.ArgumentResult -import me.jakejmattson.discordkt.api.arguments.ArgumentType -import me.jakejmattson.discordkt.api.arguments.Success -import me.jakejmattson.discordkt.api.arguments.Error +import me.jakejmattson.discordkt.api.arguments.* import me.jakejmattson.discordkt.api.dsl.CommandEvent val validConfigParameters = mutableListOf( - "setPrefix", - "addAdminRole", - "addStaffRole", - "addModeratorRole", - "removeAdminRole", - "removeStaffRole", - "removeModeratorRole", - "setMuteRole", - "setLogChannel", - "setAlertChannel", - "setGagReaction", - "setHistoryReaction", - "setDeleteMessageReaction", - "setFlagMessageReaction", - "enableReactions", - "view", - "options" + "setPrefix", + "addAdminRole", + "addStaffRole", + "addModeratorRole", + "removeAdminRole", + "removeStaffRole", + "removeModeratorRole", + "setMuteRole", + "setLogChannel", + "setAlertChannel", + "setGagReaction", + "setHistoryReaction", + "setDeleteMessageReaction", + "setFlagMessageReaction", + "enableReactions", + "view", + "options" ) -open class GuildConfigArg(override val name: String = "GuildConfig") : ArgumentType() { - override fun generateExamples(event: CommandEvent<*>): MutableList = validConfigParameters +open class GuildConfigArg(override val name: String = "GuildConfig") : ArgumentType { + override val description = "A Guild configuration" companion object : GuildConfigArg() + override suspend fun generateExamples(event: CommandEvent<*>): MutableList = validConfigParameters + override suspend fun convert(arg: String, args: List, event: CommandEvent<*>): ArgumentResult { val parameters = validConfigParameters.map { it.toLowerCase() } val parameter = arg.toLowerCase() diff --git a/src/main/kotlin/me/ddivad/judgebot/arguments/LowerMemberArg.kt b/src/main/kotlin/me/ddivad/judgebot/arguments/LowerMemberArg.kt index ce05a73..1d8d25f 100644 --- a/src/main/kotlin/me/ddivad/judgebot/arguments/LowerMemberArg.kt +++ b/src/main/kotlin/me/ddivad/judgebot/arguments/LowerMemberArg.kt @@ -1,18 +1,17 @@ package me.ddivad.judgebot.arguments -import com.gitlab.kordlib.core.entity.Member +import dev.kord.core.entity.Member import me.ddivad.judgebot.services.PermissionsService -import me.jakejmattson.discordkt.api.arguments.ArgumentResult -import me.jakejmattson.discordkt.api.arguments.ArgumentType +import me.jakejmattson.discordkt.api.arguments.* import me.jakejmattson.discordkt.api.dsl.CommandEvent -import me.jakejmattson.discordkt.api.arguments.Success -import me.jakejmattson.discordkt.api.arguments.Error import me.jakejmattson.discordkt.api.extensions.toSnowflakeOrNull -open class LowerMemberArg(override val name: String = "LowerMemberArg") : ArgumentType() { +open class LowerMemberArg(override val name: String = "LowerMemberArg") : ArgumentType { companion object : LowerMemberArg() - override fun generateExamples(event: CommandEvent<*>) = mutableListOf("@User", "197780697866305536", "302134543639511050") + override val description = "A Member with a lower rank" + + override suspend fun generateExamples(event: CommandEvent<*>) = mutableListOf("@User", "197780697866305536", "302134543639511050") override suspend fun convert(arg: String, args: List, event: CommandEvent<*>): ArgumentResult { val permissionsService = event.discord.getInjectionObjects(PermissionsService::class) @@ -26,8 +25,9 @@ open class LowerMemberArg(override val name: String = "LowerMemberArg") : Argume else -> Success(member) } } + override fun formatData(data: Member) = "@${data.tag}" } suspend fun Member.isHigherRankedThan(permissions: PermissionsService, targetMember: Member) = - permissions.getPermissionRank(this) < permissions.getPermissionRank(targetMember) + permissions.getPermissionRank(this) < permissions.getPermissionRank(targetMember) diff --git a/src/main/kotlin/me/ddivad/judgebot/arguments/LowerUserArg.kt b/src/main/kotlin/me/ddivad/judgebot/arguments/LowerUserArg.kt index 0f868d1..2aa592c 100644 --- a/src/main/kotlin/me/ddivad/judgebot/arguments/LowerUserArg.kt +++ b/src/main/kotlin/me/ddivad/judgebot/arguments/LowerUserArg.kt @@ -1,18 +1,17 @@ package me.ddivad.judgebot.arguments -import com.gitlab.kordlib.core.entity.User +import dev.kord.core.entity.User import me.ddivad.judgebot.services.PermissionsService -import me.jakejmattson.discordkt.api.arguments.ArgumentResult -import me.jakejmattson.discordkt.api.arguments.ArgumentType +import me.jakejmattson.discordkt.api.arguments.* import me.jakejmattson.discordkt.api.dsl.CommandEvent -import me.jakejmattson.discordkt.api.arguments.Success -import me.jakejmattson.discordkt.api.arguments.Error import me.jakejmattson.discordkt.api.extensions.toSnowflakeOrNull -open class LowerUserArg(override val name: String = "LowerUserArg") : ArgumentType() { +open class LowerUserArg(override val name: String = "LowerUserArg") : ArgumentType { companion object : LowerUserArg() - override fun generateExamples(event: CommandEvent<*>) = mutableListOf("@User", "197780697866305536", "302134543639511050") + override val description = "A user with a lower rank" + + override suspend fun generateExamples(event: CommandEvent<*>) = mutableListOf("@User", "197780697866305536", "302134543639511050") override suspend fun convert(arg: String, args: List, event: CommandEvent<*>): ArgumentResult { val permissionsService = event.discord.getInjectionObjects(PermissionsService::class) diff --git a/src/main/kotlin/me/ddivad/judgebot/arguments/RuleArg.kt b/src/main/kotlin/me/ddivad/judgebot/arguments/RuleArg.kt index a684cf0..245dc0a 100644 --- a/src/main/kotlin/me/ddivad/judgebot/arguments/RuleArg.kt +++ b/src/main/kotlin/me/ddivad/judgebot/arguments/RuleArg.kt @@ -1,21 +1,20 @@ package me.ddivad.judgebot.arguments -import com.gitlab.kordlib.core.entity.Guild +import dev.kord.core.entity.Guild import me.ddivad.judgebot.dataclasses.Rule import me.ddivad.judgebot.services.DatabaseService -import me.jakejmattson.discordkt.api.arguments.ArgumentResult -import me.jakejmattson.discordkt.api.arguments.ArgumentType -import me.jakejmattson.discordkt.api.arguments.Success -import me.jakejmattson.discordkt.api.arguments.Error +import me.jakejmattson.discordkt.api.arguments.* import me.jakejmattson.discordkt.api.dsl.CommandEvent -open class RuleArg(override val name : String = "Rule"): ArgumentType() { - override fun generateExamples(event: CommandEvent<*>): List = mutableListOf("1","2","3") +open class RuleArg(override val name: String = "Rule") : ArgumentType { + override val description = "A rule number" + + override suspend fun generateExamples(event: CommandEvent<*>): List = mutableListOf("1", "2", "3") companion object : RuleArg() override suspend fun convert(arg: String, args: List, event: CommandEvent<*>): ArgumentResult { - val guild : Guild = event.guild ?: return Error("Rule arguments cannot be used outside of guilds") + val guild: Guild = event.guild ?: return Error("Rule arguments cannot be used outside of guilds") val databaseService: DatabaseService = event.discord.getInjectionObjects(DatabaseService::class) diff --git a/src/main/kotlin/me/ddivad/judgebot/commands/GuildCommands.kt b/src/main/kotlin/me/ddivad/judgebot/commands/GuildCommands.kt index 35e4240..8c4ac79 100644 --- a/src/main/kotlin/me/ddivad/judgebot/commands/GuildCommands.kt +++ b/src/main/kotlin/me/ddivad/judgebot/commands/GuildCommands.kt @@ -18,7 +18,7 @@ fun guildConfigCommands(configuration: Configuration, description = "Configure a guild to use Judgebot." requiredPermissionLevel = PermissionLevel.Administrator execute { - if (configuration.hasGuildConfig(guild.id.longValue)) { + if (configuration.hasGuildConfig(guild.id.value)) { respond("Guild configuration exists. To modify it use the commands to set values.") return@execute } @@ -33,8 +33,8 @@ fun guildConfigCommands(configuration: Configuration, guildCommand("configuration") { description = "Update configuration parameters for this guild (conversation)." requiredPermissionLevel = PermissionLevel.Staff - execute(GuildConfigArg.makeOptional("options")) { - if (!configuration.hasGuildConfig(guild.id.longValue)) { + execute(GuildConfigArg.optional("options")) { + if (!configuration.hasGuildConfig(guild.id.value)) { respond("Please run the **setup** command to set this initially.") return@execute } diff --git a/src/main/kotlin/me/ddivad/judgebot/commands/InfoCommands.kt b/src/main/kotlin/me/ddivad/judgebot/commands/InfoCommands.kt index d165bb2..ef683a8 100644 --- a/src/main/kotlin/me/ddivad/judgebot/commands/InfoCommands.kt +++ b/src/main/kotlin/me/ddivad/judgebot/commands/InfoCommands.kt @@ -1,8 +1,8 @@ package me.ddivad.judgebot.commands -import com.gitlab.kordlib.common.exception.RequestException -import com.gitlab.kordlib.kordx.emoji.Emojis -import com.gitlab.kordlib.kordx.emoji.addReaction +import dev.kord.common.exception.RequestException +import dev.kord.x.emoji.Emojis +import dev.kord.x.emoji.addReaction import me.ddivad.judgebot.arguments.LowerMemberArg import me.ddivad.judgebot.dataclasses.Info import me.ddivad.judgebot.embeds.createInformationEmbed @@ -31,7 +31,7 @@ fun createInformationCommands(databaseService: DatabaseService) = commands("Info return@execute } val user = databaseService.users.getOrCreateUser(target, guild) - val information = Info(content, author.id.value) + val information = Info(content, author.id.asString) databaseService.users.addInfo(guild, user, information) target.sendPrivateMessage { createInformationEmbed(guild, target, information) @@ -46,7 +46,7 @@ fun createInformationCommands(databaseService: DatabaseService) = commands("Info execute(LowerMemberArg, IntegerArg("Info ID")) { val (target, id) = args val user = databaseService.users.getOrCreateUser(target, guild) - if (user.getGuildInfo(guild.id.value).info.isEmpty()) { + if (user.getGuildInfo(guild.id.asString).info.isEmpty()) { respond("${target.mention} has no information records.") return@execute } diff --git a/src/main/kotlin/me/ddivad/judgebot/commands/InfractionCommands.kt b/src/main/kotlin/me/ddivad/judgebot/commands/InfractionCommands.kt index a767e84..b55f8df 100644 --- a/src/main/kotlin/me/ddivad/judgebot/commands/InfractionCommands.kt +++ b/src/main/kotlin/me/ddivad/judgebot/commands/InfractionCommands.kt @@ -1,9 +1,9 @@ package me.ddivad.judgebot.commands import me.ddivad.judgebot.arguments.LowerUserArg -import com.gitlab.kordlib.common.exception.RequestException -import com.gitlab.kordlib.kordx.emoji.Emojis -import com.gitlab.kordlib.kordx.emoji.addReaction +import dev.kord.common.exception.RequestException +import dev.kord.x.emoji.Emojis +import dev.kord.x.emoji.addReaction import me.ddivad.judgebot.arguments.LowerMemberArg import me.ddivad.judgebot.conversations.InfractionConversation import me.ddivad.judgebot.dataclasses.Configuration @@ -12,23 +12,26 @@ import me.ddivad.judgebot.dataclasses.InfractionType import me.ddivad.judgebot.extensions.testDmStatus import me.ddivad.judgebot.services.* import me.ddivad.judgebot.services.infractions.BadPfpService +import me.ddivad.judgebot.services.infractions.BadnameService import me.ddivad.judgebot.services.infractions.InfractionService import me.jakejmattson.discordkt.api.arguments.BooleanArg import me.jakejmattson.discordkt.api.arguments.EveryArg import me.jakejmattson.discordkt.api.arguments.IntegerArg +import me.jakejmattson.discordkt.api.arguments.UserArg import me.jakejmattson.discordkt.api.dsl.commands @Suppress("unused") fun createInfractionCommands(databaseService: DatabaseService, config: Configuration, infractionService: InfractionService, - badPfpService: BadPfpService) = commands("Infraction") { + badPfpService: BadPfpService, + badnameService: BadnameService) = commands("Infraction") { guildCommand("strike", "s", "S") { description = "Strike a user." requiredPermissionLevel = PermissionLevel.Staff - execute(LowerMemberArg, IntegerArg("Weight").makeOptional(1), EveryArg("Reason")) { + execute(LowerMemberArg, IntegerArg("Weight").optional(1), EveryArg("Reason")) { val (targetMember, weight, reason) = args - val guildConfiguration = config[guild.id.longValue] ?: return@execute + val guildConfiguration = config[guild.id.value] ?: return@execute val maxStrikes = guildConfiguration.infractionConfiguration.pointCeiling / 10 if (weight > maxStrikes) { respond("Maximum strike weight is **$maxStrikes (${guildConfiguration.infractionConfiguration.pointCeiling} points)**") @@ -68,7 +71,7 @@ fun createInfractionCommands(databaseService: DatabaseService, guildCommand("badpfp") { 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." requiredPermissionLevel = PermissionLevel.Staff - execute(BooleanArg("cancel", "apply", "cancel").makeOptional(true), LowerMemberArg) { + execute(BooleanArg("cancel", "apply", "cancel").optional(true), LowerMemberArg) { val (cancel, targetMember) = args try { targetMember.testDmStatus() @@ -90,18 +93,27 @@ fun createInfractionCommands(databaseService: DatabaseService, return@execute } - val badPfp = Infraction(author.id.value, "BadPfp", InfractionType.BadPfp) + val badPfp = Infraction(author.id.asString, "BadPfp", InfractionType.BadPfp) badPfpService.applyBadPfp(targetMember, guild, timeLimit) respond("${targetMember.mention} has been muted and a badpfp has been triggered with a time limit of $minutesUntilBan minutes.") } } + guildCommand("badname") { + description = "Rename a guild member that has a bad name." + requiredPermissionLevel = PermissionLevel.Moderator + execute(LowerMemberArg) { + badnameService.chooseRandomNickname(args.first) + respond("User renamed to ${args.first.mention}") + } + } + guildCommand("cleanseInfractions") { description = "Use this to delete (permanently) as user's infractions." requiredPermissionLevel = PermissionLevel.Administrator execute(LowerUserArg) { val user = databaseService.users.getOrCreateUser(args.first, guild) - if (user.getGuildInfo(guild.id.value).infractions.isEmpty()) { + if (user.getGuildInfo(guild.id.asString).infractions.isEmpty()) { respond("User has no infractions.") return@execute } @@ -115,7 +127,7 @@ fun createInfractionCommands(databaseService: DatabaseService, requiredPermissionLevel = PermissionLevel.Administrator execute(LowerUserArg, IntegerArg("Infraction ID")) { val user = databaseService.users.getOrCreateUser(args.first, guild) - if (user.getGuildInfo(guild.id.value).infractions.isEmpty()) { + if (user.getGuildInfo(guild.id.asString).infractions.isEmpty()) { respond("User has no infractions.") return@execute } diff --git a/src/main/kotlin/me/ddivad/judgebot/commands/MuteCommands.kt b/src/main/kotlin/me/ddivad/judgebot/commands/MuteCommands.kt index 6a45dd9..49de484 100644 --- a/src/main/kotlin/me/ddivad/judgebot/commands/MuteCommands.kt +++ b/src/main/kotlin/me/ddivad/judgebot/commands/MuteCommands.kt @@ -1,8 +1,8 @@ package me.ddivad.judgebot.commands -import com.gitlab.kordlib.common.exception.RequestException -import com.gitlab.kordlib.kordx.emoji.Emojis -import com.gitlab.kordlib.kordx.emoji.addReaction +import dev.kord.common.exception.RequestException +import dev.kord.x.emoji.Emojis +import dev.kord.x.emoji.addReaction import me.ddivad.judgebot.arguments.LowerMemberArg import me.ddivad.judgebot.extensions.testDmStatus import me.ddivad.judgebot.services.* diff --git a/src/main/kotlin/me/ddivad/judgebot/commands/NoteCommands.kt b/src/main/kotlin/me/ddivad/judgebot/commands/NoteCommands.kt index e847808..d0fdf7f 100644 --- a/src/main/kotlin/me/ddivad/judgebot/commands/NoteCommands.kt +++ b/src/main/kotlin/me/ddivad/judgebot/commands/NoteCommands.kt @@ -17,7 +17,7 @@ fun noteCommands(databaseService: DatabaseService) = commands("Notes") { execute(UserArg, EveryArg("Note Content")) { val (target, note) = args val user = databaseService.users.getOrCreateUser(target, guild) - databaseService.users.addNote(guild, user, note, author.id.value) + databaseService.users.addNote(guild, user, note, author.id.asString) respond("Note added to ${target.mention}.") } } @@ -28,11 +28,11 @@ fun noteCommands(databaseService: DatabaseService) = commands("Notes") { execute(UserArg, IntegerArg("Note to edit"), EveryArg("Note Content")) { val (target, noteId, note) = args val user = databaseService.users.getOrCreateUser(target, guild) - if (user.getGuildInfo(guild.id.value).notes.none{ it.id == noteId }) { + if (user.getGuildInfo(guild.id.asString).notes.none{ it.id == noteId }) { respond("User has no note with ID $noteId.") return@execute } - databaseService.users.editNote(guild, user, noteId, note, author.id.value) + databaseService.users.editNote(guild, user, noteId, note, author.id.asString) respond("Note edited.") } } @@ -43,7 +43,7 @@ fun noteCommands(databaseService: DatabaseService) = commands("Notes") { execute(LowerMemberArg, IntegerArg("Note ID")) { val (target, noteId) = args val user = databaseService.users.getOrCreateUser(target, guild) - if (user.getGuildInfo(guild.id.value).notes.isEmpty()) { + if (user.getGuildInfo(guild.id.asString).notes.isEmpty()) { respond("User has no notes.") return@execute } @@ -58,7 +58,7 @@ fun noteCommands(databaseService: DatabaseService) = commands("Notes") { execute(LowerMemberArg) { val target = args.first val user = databaseService.users.getOrCreateUser(target, guild) - if (user.getGuildInfo(guild.id.value).notes.isEmpty()) { + if (user.getGuildInfo(guild.id.asString).notes.isEmpty()) { respond("User has no notes.") return@execute } diff --git a/src/main/kotlin/me/ddivad/judgebot/commands/RuleCommands.kt b/src/main/kotlin/me/ddivad/judgebot/commands/RuleCommands.kt index 43f81eb..127effa 100644 --- a/src/main/kotlin/me/ddivad/judgebot/commands/RuleCommands.kt +++ b/src/main/kotlin/me/ddivad/judgebot/commands/RuleCommands.kt @@ -1,6 +1,6 @@ package me.ddivad.judgebot.commands -import com.gitlab.kordlib.core.behavior.edit +import dev.kord.core.behavior.edit import me.ddivad.judgebot.arguments.RuleArg import me.ddivad.judgebot.conversations.rules.AddRuleConversation import me.ddivad.judgebot.conversations.rules.ArchiveRuleConversation @@ -53,11 +53,11 @@ fun ruleCommands(configuration: Configuration, guildCommand("rules") { description = "List the rules of this guild. Pass a message ID to edit existing rules embed." requiredPermissionLevel = PermissionLevel.Everyone - execute(MessageArg.makeNullableOptional(null)) { + execute(MessageArg.optionalNullable(null)) { val messageToEdit = args.first if (messageToEdit != null) { messageToEdit.edit { this.embed { createRulesEmbed(guild, databaseService.guilds.getRules(guild)) } } - respond("Existing embed updated: ${messageToEdit.jumpLink(guild.id.value)}") + respond("Existing embed updated: ${messageToEdit.jumpLink(guild.id.asString)}") } else { respond { createRulesEmbed(guild, databaseService.guilds.getRules(guild)) @@ -69,11 +69,11 @@ fun ruleCommands(configuration: Configuration, guildCommand("longRules") { description = "List the rules (with descriptions) of this guild. Pass a message ID to edit existing rules embed." requiredPermissionLevel = PermissionLevel.Staff - execute(MessageArg.makeNullableOptional(null)) { + execute(MessageArg.optionalNullable(null)) { val messageToEdit = args.first if (messageToEdit != null) { messageToEdit.edit { this.embed { createRulesEmbedDetailed(guild, databaseService.guilds.getRules(guild)) } } - respond("Existing embed updated: ${messageToEdit.jumpLink(guild.id.value)}") + respond("Existing embed updated: ${messageToEdit.jumpLink(guild.id.asString)}") } else { respond { createRulesEmbedDetailed(guild, databaseService.guilds.getRules(guild)) diff --git a/src/main/kotlin/me/ddivad/judgebot/commands/UserCommands.kt b/src/main/kotlin/me/ddivad/judgebot/commands/UserCommands.kt index d892269..5de7108 100644 --- a/src/main/kotlin/me/ddivad/judgebot/commands/UserCommands.kt +++ b/src/main/kotlin/me/ddivad/judgebot/commands/UserCommands.kt @@ -1,8 +1,13 @@ package me.ddivad.judgebot.commands +import dev.kord.common.kColor +import dev.kord.x.emoji.Emojis +import dev.kord.x.emoji.addReaction +import kotlinx.coroutines.flow.toList import me.ddivad.judgebot.arguments.LowerUserArg import me.ddivad.judgebot.conversations.InfractionConversation import me.ddivad.judgebot.conversations.ResetUserConversation +import me.ddivad.judgebot.conversations.guildChoiceConversation import me.ddivad.judgebot.dataclasses.* import me.ddivad.judgebot.embeds.createHistoryEmbed import me.ddivad.judgebot.embeds.createCondensedHistoryEmbed @@ -15,6 +20,7 @@ import me.ddivad.judgebot.services.infractions.BanService import me.ddivad.judgebot.services.requiredPermissionLevel import me.jakejmattson.discordkt.api.arguments.* import me.jakejmattson.discordkt.api.dsl.commands +import me.jakejmattson.discordkt.api.extensions.mutualGuilds import me.jakejmattson.discordkt.api.extensions.sendPrivateMessage import me.jakejmattson.discordkt.api.extensions.toSnowflake import java.awt.Color @@ -67,7 +73,7 @@ fun createUserCommands( val reverseSearchUrl = "" respond { title = "${user.tag}'s pfp" - color = Color.MAGENTA + color = Color.MAGENTA.kColor description = "[Reverse Search]($reverseSearchUrl)" image = "${user.avatar.url}?size=512" } @@ -77,9 +83,9 @@ fun createUserCommands( guildCommand("ban") { description = "Ban a member from this guild." requiredPermissionLevel = PermissionLevel.Staff - execute(LowerUserArg, IntegerArg("Delete message days").makeOptional(0), EveryArg) { + execute(LowerUserArg, IntegerArg("Delete message days").optional(0), EveryArg) { val (target, deleteDays, reason) = args - val ban = Punishment(target.id.value, InfractionType.Ban, reason, author.id.value) + val ban = Punishment(target.id.asString, InfractionType.Ban, reason, author.id.asString) banService.banUser(target, guild, ban, deleteDays).also { loggingService.userBanned(guild, target, ban) respond("User ${target.mention} banned") @@ -106,12 +112,12 @@ fun createUserCommands( requiredPermissionLevel = PermissionLevel.Staff execute(UserArg, EveryArg("Reason")) { val (user, reason) = args - val ban = Ban(user.id.value, author.id.value, reason) + val ban = Ban(user.id.asString, author.id.asString, reason) if (guild.getBanOrNull(user.id) != null) { - if (!databaseService.guilds.checkBanExists(guild, user.id.value)) { + if (!databaseService.guilds.checkBanExists(guild, user.id.asString)) { databaseService.guilds.addBan(guild, ban) } else { - databaseService.guilds.editBanReason(guild, user.id.value, reason) + databaseService.guilds.editBanReason(guild, user.id.asString, reason) } respond("Ban reason for ${user.username} set to: $reason") } else respond("User ${user.username} isn't banned") @@ -125,7 +131,7 @@ fun createUserCommands( execute(UserArg) { val user = args.first guild.getBanOrNull(user.id)?.let { - val reason = databaseService.guilds.getBanOrNull(guild, user.id.value)?.reason ?: it.reason + val reason = databaseService.guilds.getBanOrNull(guild, user.id.asString)?.reason ?: it.reason respond(reason ?: "No reason logged") return@execute } @@ -133,15 +139,23 @@ fun createUserCommands( } } - guildCommand("selfHistory") { + command("selfHistory") { description = "View your infraction history (contents will be DM'd)" requiredPermissionLevel = PermissionLevel.Everyone execute { val user = author - val guildMember = databaseService.users.getOrCreateUser(user, guild) + val mutualGuilds = author.mutualGuilds.toList().filter { config[it.id.value] != null } - user.sendPrivateMessage { - createSelfHistoryEmbed(user, guildMember, guild, config) + if (mutualGuilds.size == 1 || guild != null) { + val currentGuild = guild ?: mutualGuilds.first() + val guildMember = databaseService.users.getOrCreateUser(user, currentGuild) + + user.sendPrivateMessage { + createSelfHistoryEmbed(user, guildMember, currentGuild, config) + } + this.message.addReaction(Emojis.whiteCheckMark) + } else { + guildChoiceConversation(mutualGuilds, config).startPrivately(discord, author) } } } @@ -153,8 +167,8 @@ fun createUserCommands( val (main, alt) = args val mainRecord = databaseService.users.getOrCreateUser(main, guild) val altRecord = databaseService.users.getOrCreateUser(alt, guild) - databaseService.users.addLinkedAccount(guild, mainRecord, alt.id.value) - databaseService.users.addLinkedAccount(guild, altRecord, main.id.value) + databaseService.users.addLinkedAccount(guild, mainRecord, alt.id.asString) + databaseService.users.addLinkedAccount(guild, altRecord, main.id.asString) respond("Linked accounts ${main.mention} and ${alt.mention}") } } @@ -166,8 +180,8 @@ fun createUserCommands( val (main, alt) = args val mainRecord = databaseService.users.getOrCreateUser(main, guild) val altRecord = databaseService.users.getOrCreateUser(alt, guild) - databaseService.users.removeLinkedAccount(guild, mainRecord, alt.id.value) - databaseService.users.removeLinkedAccount(guild, altRecord, main.id.value) + databaseService.users.removeLinkedAccount(guild, mainRecord, alt.id.asString) + databaseService.users.removeLinkedAccount(guild, altRecord, main.id.asString) respond("Unlinked accounts ${main.mention} and ${alt.mention}") } } diff --git a/src/main/kotlin/me/ddivad/judgebot/conversations/GuildChoiceConversation.kt b/src/main/kotlin/me/ddivad/judgebot/conversations/GuildChoiceConversation.kt new file mode 100644 index 0000000..76458c3 --- /dev/null +++ b/src/main/kotlin/me/ddivad/judgebot/conversations/GuildChoiceConversation.kt @@ -0,0 +1,37 @@ +package me.ddivad.judgebot.conversations + +import dev.kord.common.kColor +import dev.kord.core.entity.Guild +import me.ddivad.judgebot.dataclasses.Configuration +import me.ddivad.judgebot.embeds.createSelfHistoryEmbed +import me.ddivad.judgebot.services.DatabaseService +import me.jakejmattson.discordkt.api.arguments.IntegerRangeArg +import me.jakejmattson.discordkt.api.dsl.conversation +import java.awt.Color + +fun guildChoiceConversation( + guilds: List, + configuration: Configuration +) = conversation { + val databaseService = discord.getInjectionObjects(DatabaseService::class) + val guildIndex = promptEmbed(IntegerRangeArg(1, guilds.size)) { + title = "Select Server" + description = "Respond with the server you want to view your history for." + thumbnail { + url = discord.kord.getSelf().avatar.url + } + color = Color.MAGENTA.kColor + guilds.toList().forEachIndexed { index, guild -> + field { + name = "${index + 1}) ${guild.name}" + } + } + } - 1 + + val guild = guilds[guildIndex] + val guildMember = databaseService.users.getOrCreateUser(user, guild) + + respond { + createSelfHistoryEmbed(user, guildMember, guild, configuration) + } +} diff --git a/src/main/kotlin/me/ddivad/judgebot/conversations/InfractionConversation.kt b/src/main/kotlin/me/ddivad/judgebot/conversations/InfractionConversation.kt index c9cbdc7..b7a9bb7 100644 --- a/src/main/kotlin/me/ddivad/judgebot/conversations/InfractionConversation.kt +++ b/src/main/kotlin/me/ddivad/judgebot/conversations/InfractionConversation.kt @@ -1,8 +1,8 @@ package me.ddivad.judgebot.conversations -import com.gitlab.kordlib.core.entity.Guild -import com.gitlab.kordlib.core.entity.Member -import com.gitlab.kordlib.rest.builder.message.EmbedBuilder +import dev.kord.core.entity.Guild +import dev.kord.core.entity.Member +import dev.kord.rest.builder.message.EmbedBuilder import me.ddivad.judgebot.dataclasses.* import me.ddivad.judgebot.embeds.createHistoryEmbed import me.ddivad.judgebot.embeds.createInfractionRuleEmbed @@ -15,7 +15,7 @@ class InfractionConversation(private val databaseService: DatabaseService, private val configuration: Configuration, private val infractionService: InfractionService) { fun createInfractionConversation(guild: Guild, targetUser: Member, weight: Int, infractionReason: String, type: InfractionType) = conversation("cancel") { - val guildConfiguration = configuration[guild.id.longValue] ?: return@conversation + val guildConfiguration = configuration[guild.id.value] ?: return@conversation val user = databaseService.users.getOrCreateUser(targetUser, guild) val points = weight * if (type == InfractionType.Strike) guildConfiguration.infractionConfiguration.strikePoints @@ -31,7 +31,7 @@ class InfractionConversation(private val databaseService: DatabaseService, ) if (rule > 0) rule else null } else null - val infraction = Infraction(this.user.id.value, infractionReason, type, points, ruleId) + val infraction = Infraction(this.user.id.asString, infractionReason, type, points, ruleId) infractionService.infract(targetUser, guild, user, infraction) respondMenu { createHistoryEmbed(targetUser, user, guild, configuration, databaseService) } } diff --git a/src/main/kotlin/me/ddivad/judgebot/conversations/ResetUserConversation.kt b/src/main/kotlin/me/ddivad/judgebot/conversations/ResetUserConversation.kt index d486fa3..c99b9dd 100644 --- a/src/main/kotlin/me/ddivad/judgebot/conversations/ResetUserConversation.kt +++ b/src/main/kotlin/me/ddivad/judgebot/conversations/ResetUserConversation.kt @@ -1,13 +1,14 @@ package me.ddivad.judgebot.conversations -import com.gitlab.kordlib.core.entity.Guild -import com.gitlab.kordlib.core.entity.User -import com.gitlab.kordlib.kordx.emoji.Emojis -import com.gitlab.kordlib.kordx.emoji.toReaction -import com.gitlab.kordlib.rest.Image +import dev.kord.common.kColor +import dev.kord.core.entity.Guild +import dev.kord.core.entity.User +import dev.kord.rest.Image +import dev.kord.x.emoji.Emojis import me.ddivad.judgebot.dataclasses.Configuration import me.ddivad.judgebot.embeds.createHistoryEmbed import me.ddivad.judgebot.services.DatabaseService +import me.jakejmattson.discordkt.api.dsl.PromptedReaction import me.jakejmattson.discordkt.api.dsl.conversation import me.jakejmattson.discordkt.api.extensions.toSnowflake import java.awt.Color @@ -21,13 +22,11 @@ class ResetUserConversation(private val databaseService: DatabaseService, privat if (linkedAccounts.isNotEmpty()) { val linkedUsers = linkedAccounts.map { guild.kord.getUser(it.toSnowflake()) } val resetLinked = promptReaction( - mapOf( - Emojis.whiteCheckMark.toReaction() to true, - Emojis.x.toReaction() to false - ) + PromptedReaction(Emojis.whiteCheckMark, "", true), + PromptedReaction(Emojis.x, "", false) ) { title = "Reset linked accounts" - color = Color.MAGENTA + color = Color.MAGENTA.kColor thumbnail { url = target.asUser().avatar.url } diff --git a/src/main/kotlin/me/ddivad/judgebot/conversations/guild/EditConfigConversation.kt b/src/main/kotlin/me/ddivad/judgebot/conversations/guild/EditConfigConversation.kt index af5ac3b..30c9069 100644 --- a/src/main/kotlin/me/ddivad/judgebot/conversations/guild/EditConfigConversation.kt +++ b/src/main/kotlin/me/ddivad/judgebot/conversations/guild/EditConfigConversation.kt @@ -1,7 +1,7 @@ package me.ddivad.judgebot.conversations.guild -import com.gitlab.kordlib.core.entity.Guild -import com.gitlab.kordlib.core.entity.channel.TextChannel +import dev.kord.core.entity.Guild +import dev.kord.core.entity.channel.TextChannel import me.ddivad.judgebot.dataclasses.Configuration import me.ddivad.judgebot.embeds.createConfigEmbed import me.ddivad.judgebot.embeds.createConfigOptionsEmbed @@ -11,21 +11,21 @@ import me.jakejmattson.discordkt.api.extensions.toSnowflake class EditConfigConversation(private val configuration: Configuration) { fun createEditConfigurationConversation(guild: Guild, parameter: String) = conversation("cancel") { - val guildConfiguration = configuration[guild.id.longValue]!! + val guildConfiguration = configuration[guild.id.value]!! when (parameter) { "addadminrole" -> { val role = promptMessage(RoleArg, "Enter Admin role:") - guildConfiguration.adminRoles.add(role.id.value) + guildConfiguration.adminRoles.add(role.id.asString) respond("Added **${role.name}** to Admin roles.") } "addstaffrole" -> { val role = promptMessage(RoleArg, "Enter Staff role:") - guildConfiguration.staffRoles.add(role.id.value) + guildConfiguration.staffRoles.add(role.id.asString) respond("Added **${role.name}** to Staff roles.") } "addmoderatorrole" -> { val role = promptMessage(RoleArg, "Enter Moderator role:") - guildConfiguration.moderatorRoles.add(role.id.value) + guildConfiguration.moderatorRoles.add(role.id.asString) respond("Added **${role.name}** to moderator roles.") } "removeadminrole" -> { @@ -34,8 +34,8 @@ class EditConfigConversation(private val configuration: Configuration) { RoleArg, "Enter role to remove:", "Role not in Admin role list.", - isValid = {role -> guildConfiguration.adminRoles.contains(role.id.value) }) - guildConfiguration.adminRoles.removeIf {it == role.id.value} + isValid = {role -> guildConfiguration.adminRoles.contains(role.id.asString) }) + guildConfiguration.adminRoles.removeIf {it == role.id.asString} respond("Removed **${role.name}** from Admin roles.") } "removestaffrole" -> { @@ -44,8 +44,8 @@ class EditConfigConversation(private val configuration: Configuration) { RoleArg, "Enter role to remove:", "Role not in Staff role list.", - isValid = {role -> guildConfiguration.staffRoles.contains(role.id.value) }) - guildConfiguration.staffRoles.removeIf {it == role.id.value} + isValid = {role -> guildConfiguration.staffRoles.contains(role.id.asString) }) + guildConfiguration.staffRoles.removeIf {it == role.id.asString} respond("Removed **${role.name}** from Staff roles.") } "removemoderatorrole" -> { @@ -54,23 +54,23 @@ class EditConfigConversation(private val configuration: Configuration) { RoleArg, "Enter role to remove:", "Role not in Moderator role list.", - isValid = {role -> guildConfiguration.moderatorRoles.contains(role.id.value) }) - guildConfiguration.moderatorRoles.removeIf {it == role.id.value} + isValid = {role -> guildConfiguration.moderatorRoles.contains(role.id.asString) }) + guildConfiguration.moderatorRoles.removeIf {it == role.id.asString} respond("Removed **${role.name}** from Moderator roles.") } "setmutedrole" -> { val mutedRole = promptMessage(RoleArg, "Enter Mute role:") - guildConfiguration.mutedRole = mutedRole.id.value + guildConfiguration.mutedRole = mutedRole.id.asString respond("Muted role set to **${mutedRole.name}**.") } "setlogchannel" -> { val logChannel = promptMessage(ChannelArg(), "Enter Logging channel:") - guildConfiguration.loggingConfiguration.loggingChannel = logChannel.id.value + guildConfiguration.loggingConfiguration.loggingChannel = logChannel.id.asString respond("Log channel set to ${logChannel.mention}") } "setalertchannel" -> { val alertChannel = promptMessage(ChannelArg(), "Enter Logging channel:") - guildConfiguration.loggingConfiguration.alertChannel = alertChannel.id.value + guildConfiguration.loggingConfiguration.alertChannel = alertChannel.id.asString respond("Alert channel set to ${alertChannel.mention}") } "setprefix" -> { diff --git a/src/main/kotlin/me/ddivad/judgebot/conversations/guild/GuildConfigConversation.kt b/src/main/kotlin/me/ddivad/judgebot/conversations/guild/GuildConfigConversation.kt index 5506c02..10378f7 100644 --- a/src/main/kotlin/me/ddivad/judgebot/conversations/guild/GuildConfigConversation.kt +++ b/src/main/kotlin/me/ddivad/judgebot/conversations/guild/GuildConfigConversation.kt @@ -1,6 +1,6 @@ package me.ddivad.judgebot.conversations.guild -import com.gitlab.kordlib.core.entity.Guild +import dev.kord.core.entity.Guild import me.ddivad.judgebot.dataclasses.Configuration import me.ddivad.judgebot.dataclasses.LoggingConfiguration import me.ddivad.judgebot.services.infractions.MuteService @@ -26,7 +26,7 @@ class GuildSetupConversation(private val configuration: Configuration, private v staffRole, moderatorRole, mutedRole, - LoggingConfiguration(alertChannel.id.value, logChannel.id.value), + LoggingConfiguration(alertChannel.id.asString, logChannel.id.asString), ) muteService.initGuilds() } diff --git a/src/main/kotlin/me/ddivad/judgebot/conversations/rules/AddRuleConversation.kt b/src/main/kotlin/me/ddivad/judgebot/conversations/rules/AddRuleConversation.kt index 97d9c82..0958305 100644 --- a/src/main/kotlin/me/ddivad/judgebot/conversations/rules/AddRuleConversation.kt +++ b/src/main/kotlin/me/ddivad/judgebot/conversations/rules/AddRuleConversation.kt @@ -1,6 +1,6 @@ package me.ddivad.judgebot.conversations.rules -import com.gitlab.kordlib.core.entity.Guild +import dev.kord.core.entity.Guild import me.ddivad.judgebot.dataclasses.Configuration import me.ddivad.judgebot.dataclasses.Rule import me.ddivad.judgebot.embeds.createRuleEmbed diff --git a/src/main/kotlin/me/ddivad/judgebot/conversations/rules/ArchiveRuleConversation.kt b/src/main/kotlin/me/ddivad/judgebot/conversations/rules/ArchiveRuleConversation.kt index b6552d9..d83faaa 100644 --- a/src/main/kotlin/me/ddivad/judgebot/conversations/rules/ArchiveRuleConversation.kt +++ b/src/main/kotlin/me/ddivad/judgebot/conversations/rules/ArchiveRuleConversation.kt @@ -1,6 +1,6 @@ package me.ddivad.judgebot.conversations.rules -import com.gitlab.kordlib.core.entity.Guild +import dev.kord.core.entity.Guild import me.ddivad.judgebot.services.DatabaseService import me.jakejmattson.discordkt.api.arguments.IntegerArg import me.jakejmattson.discordkt.api.dsl.conversation diff --git a/src/main/kotlin/me/ddivad/judgebot/conversations/rules/EditRuleConversation.kt b/src/main/kotlin/me/ddivad/judgebot/conversations/rules/EditRuleConversation.kt index d8a9838..633c0ff 100644 --- a/src/main/kotlin/me/ddivad/judgebot/conversations/rules/EditRuleConversation.kt +++ b/src/main/kotlin/me/ddivad/judgebot/conversations/rules/EditRuleConversation.kt @@ -1,6 +1,6 @@ package me.ddivad.judgebot.conversations.rules -import com.gitlab.kordlib.core.entity.Guild +import dev.kord.core.entity.Guild import me.ddivad.judgebot.dataclasses.Rule import me.ddivad.judgebot.embeds.createRuleEmbed import me.ddivad.judgebot.services.DatabaseService diff --git a/src/main/kotlin/me/ddivad/judgebot/dataclasses/Configuration.kt b/src/main/kotlin/me/ddivad/judgebot/dataclasses/Configuration.kt index 869ca78..8713554 100644 --- a/src/main/kotlin/me/ddivad/judgebot/dataclasses/Configuration.kt +++ b/src/main/kotlin/me/ddivad/judgebot/dataclasses/Configuration.kt @@ -1,7 +1,7 @@ package me.ddivad.judgebot.dataclasses -import com.gitlab.kordlib.core.entity.Guild -import com.gitlab.kordlib.core.entity.Role +import dev.kord.core.entity.Guild +import dev.kord.core.entity.Role import me.jakejmattson.discordkt.api.dsl.Data data class Configuration( @@ -22,15 +22,15 @@ data class Configuration( mutedRole: Role, logging: LoggingConfiguration ) { - if (guildConfigurations[guild.id.longValue] != null) return + if (guildConfigurations[guild.id.value] != null) return val newConfiguration = GuildConfiguration( - guild.id.value, + guild.id.asString, prefix, - mutableListOf(moderatorRole.id.value), - mutableListOf(staffRole.id.value), - mutableListOf(adminRole.id.value), - mutedRole.id.value, + mutableListOf(moderatorRole.id.asString), + mutableListOf(staffRole.id.asString), + mutableListOf(adminRole.id.asString), + mutedRole.id.asString, logging ) @@ -43,7 +43,7 @@ data class Configuration( newConfiguration.punishments.add(PunishmentLevel(40, PunishmentType.MUTE, 1000L * 60 * 60 * 24 * 30)) newConfiguration.punishments.add(PunishmentLevel(50, PunishmentType.BAN)) - guildConfigurations[guild.id.longValue] = newConfiguration + guildConfigurations[guild.id.value] = newConfiguration save() } } diff --git a/src/main/kotlin/me/ddivad/judgebot/dataclasses/GuildMember.kt b/src/main/kotlin/me/ddivad/judgebot/dataclasses/GuildMember.kt index b4d2b72..909cfb1 100644 --- a/src/main/kotlin/me/ddivad/judgebot/dataclasses/GuildMember.kt +++ b/src/main/kotlin/me/ddivad/judgebot/dataclasses/GuildMember.kt @@ -1,6 +1,6 @@ package me.ddivad.judgebot.dataclasses -import com.gitlab.kordlib.core.entity.Guild +import dev.kord.core.entity.Guild import org.joda.time.DateTime import org.joda.time.Weeks @@ -31,33 +31,33 @@ data class GuildMember( val userId: String, val guilds: MutableList = mutableListOf() ) { - fun addNote(note: String, moderator: String, guild: Guild) = with(this.getGuildInfo(guild.id.value)) { + fun addNote(note: String, moderator: String, guild: Guild) = with(this.getGuildInfo(guild.id.asString)) { val nextId: Int = if (this.notes.isEmpty()) 1 else this.notes.maxByOrNull { it.id }!!.id + 1 this.notes.add(Note(note, moderator, DateTime().millis, nextId)) } - fun editNote(guild: Guild, noteId: Int, newNote: String, moderator: String) = with(this.getGuildInfo(guild.id.value)) { + fun editNote(guild: Guild, noteId: Int, newNote: String, moderator: String) = with(this.getGuildInfo(guild.id.asString)) { this.notes.find { it.id == noteId }?.let{ it.note = newNote it.moderator = moderator } } - fun deleteNote(noteId: Int, guild: Guild) = with(this.getGuildInfo(guild.id.value)) { + fun deleteNote(noteId: Int, guild: Guild) = with(this.getGuildInfo(guild.id.asString)) { this.notes.removeIf { it.id == noteId } } - fun addInfo(information: Info, guild: Guild) = with(this.getGuildInfo(guild.id.value)) { + fun addInfo(information: Info, guild: Guild) = with(this.getGuildInfo(guild.id.asString)) { val nextId: Int = if (this.info.isEmpty()) 1 else this.info.maxByOrNull { it.id!! }!!.id!! + 1 information.id = nextId this.info.add(information) } - fun removeInfo(id: Int, guild: Guild) = with(this.getGuildInfo(guild.id.value)) { + fun removeInfo(id: Int, guild: Guild) = with(this.getGuildInfo(guild.id.asString)) { this.info.removeIf { it.id == id } } - fun addLinkedAccount(guild: Guild, userId: String) = with(this.getGuildInfo(guild.id.value)) { + fun addLinkedAccount(guild: Guild, userId: String) = with(this.getGuildInfo(guild.id.asString)) { this.linkedAccounts.find { it == userId }.let { if (it == null) { this.linkedAccounts.add(userId) @@ -66,35 +66,35 @@ data class GuildMember( } } - fun getLinkedAccounts(guild: Guild) = with(this.getGuildInfo(guild.id.value)) { + fun getLinkedAccounts(guild: Guild) = with(this.getGuildInfo(guild.id.asString)) { this.linkedAccounts } - fun removeLinkedAccount(guild: Guild, userId: String) = with(this.getGuildInfo(guild.id.value)) { + fun removeLinkedAccount(guild: Guild, userId: String) = with(this.getGuildInfo(guild.id.asString)) { this.linkedAccounts.removeIf { it == userId } } - fun cleanseNotes(guild: Guild) = with(this.getGuildInfo(guild.id.value)) { + fun cleanseNotes(guild: Guild) = with(this.getGuildInfo(guild.id.asString)) { this.notes.clear() } - private fun cleanseInfo(guild: Guild) = with(this.getGuildInfo(guild.id.value)) { + private fun cleanseInfo(guild: Guild) = with(this.getGuildInfo(guild.id.asString)) { this.info.clear() } - fun cleanseInfractions(guild: Guild) = with(this.getGuildInfo(guild.id.value)) { + fun cleanseInfractions(guild: Guild) = with(this.getGuildInfo(guild.id.asString)) { this.infractions.clear() this.points = 0 } - fun deleteInfraction(guild: Guild, infractionId: Int) = with(this.getGuildInfo(guild.id.value)) { + fun deleteInfraction(guild: Guild, infractionId: Int) = with(this.getGuildInfo(guild.id.asString)) { this.infractions.find { it.id == infractionId }?.let { this.infractions.remove(it) this.points -= it.points } } - fun addInfraction(infraction: Infraction, guild: Guild) = with(this.getGuildInfo(guild.id.value)) { + fun addInfraction(infraction: Infraction, guild: Guild) = with(this.getGuildInfo(guild.id.asString)) { val nextId: Int = if (this.infractions.isEmpty()) 1 else this.infractions.maxByOrNull { it.id!! }?.id!! + 1 infraction.id = nextId this.infractions.add(infraction) @@ -106,12 +106,12 @@ data class GuildMember( this.getGuildInfo(guildId).historyCount += 1 } - fun addMessageDeleted(guild: Guild, deleteReaction: Boolean) = with(this.getGuildInfo(guild.id.value)) { + fun addMessageDeleted(guild: Guild, deleteReaction: Boolean) = with(this.getGuildInfo(guild.id.asString)) { this.deletedMessageCount.total++ if (deleteReaction) this.deletedMessageCount.deleteReaction++ } - fun checkPointDecay(guild: Guild, configuration: GuildConfiguration) = with(this.getGuildInfo(guild.id.value)) { + fun checkPointDecay(guild: Guild, configuration: GuildConfiguration) = with(this.getGuildInfo(guild.id.asString)) { val weeksSincePointsDecayed = Weeks.weeksBetween(DateTime(this.pointDecayTimer), DateTime()).weeks if (weeksSincePointsDecayed > 0) { val pointsToRemove = configuration.infractionConfiguration.pointDecayPerWeek * weeksSincePointsDecayed @@ -121,11 +121,11 @@ data class GuildMember( } } - fun getPoints(guild: Guild) = with(this.getGuildInfo(guild.id.value)) { + fun getPoints(guild: Guild) = with(this.getGuildInfo(guild.id.asString)) { return@with this.points } - fun reset(guild: Guild) = with(this.getGuildInfo(guild.id.value)) { + fun reset(guild: Guild) = with(this.getGuildInfo(guild.id.asString)) { this.points = 0 this.historyCount = 0 this.deletedMessageCount.deleteReaction = 0 diff --git a/src/main/kotlin/me/ddivad/judgebot/embeds/GuildEmbeds.kt b/src/main/kotlin/me/ddivad/judgebot/embeds/GuildEmbeds.kt index 90f6436..1af5b8c 100644 --- a/src/main/kotlin/me/ddivad/judgebot/embeds/GuildEmbeds.kt +++ b/src/main/kotlin/me/ddivad/judgebot/embeds/GuildEmbeds.kt @@ -1,9 +1,10 @@ package me.ddivad.judgebot.embeds -import com.gitlab.kordlib.common.entity.Snowflake -import com.gitlab.kordlib.core.entity.Guild -import com.gitlab.kordlib.rest.Image -import com.gitlab.kordlib.rest.builder.message.EmbedBuilder +import dev.kord.common.entity.Snowflake +import dev.kord.common.kColor +import dev.kord.core.entity.Guild +import dev.kord.rest.Image +import dev.kord.rest.builder.message.EmbedBuilder import me.ddivad.judgebot.arguments.validConfigParameters import me.ddivad.judgebot.dataclasses.GuildConfiguration import me.ddivad.judgebot.dataclasses.Punishment @@ -16,7 +17,7 @@ import java.awt.Color suspend fun EmbedBuilder.createConfigEmbed(config: GuildConfiguration, guild: Guild) { title = "Configuration" - color = Color.MAGENTA + color = Color.MAGENTA.kColor thumbnail { url = guild.getIconUrl(Image.Format.PNG) ?: "" } @@ -69,7 +70,7 @@ suspend fun EmbedBuilder.createConfigEmbed(config: GuildConfiguration, guild: Gu fun EmbedBuilder.createConfigOptionsEmbed(config: GuildConfiguration, guild: Guild) { title = "Available Configuration Options" - color = Color.MAGENTA + color = Color.MAGENTA.kColor field { name = "Usage: `${config.prefix}configuration