Skip to content

Commit

Permalink
Merge pull request #94 from the-programmers-hangout/discordkt-0.22.0-…
Browse files Browse the repository at this point in the history
…upgrade

Discordkt 0.22.0 upgrade
  • Loading branch information
ddivad195 authored Jun 30, 2021
2 parents 5629c4a + 3e25156 commit f2c2383
Show file tree
Hide file tree
Showing 49 changed files with 457 additions and 354 deletions.
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -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
Expand Down
18 changes: 7 additions & 11 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,43 +1,39 @@

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<KotlinCompile> {
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}

shadowJar {
archiveFileName.set("Judgebot.jar")
manifest {
attributes(
"Main-Class" to "me.ddivad.judgebot.MainKt"
"Main-Class" to "me.ddivad.judgebot.MainKt"
)
}
}
}

object Versions {
const val BOT = "1.0.0"
const val DISCORDKT = "0.21.3"
const val DISCORDKT = "0.22.0-SNAPSHOT"
}
17 changes: 9 additions & 8 deletions commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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 |
Expand All @@ -70,5 +71,5 @@
## Utility
| Commands | Arguments | Description |
| -------- | --------- | -------------------- |
| Help | (Command) | Display a help menu. |
| Help | [Command] | Display a help menu. |

2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -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
37 changes: 15 additions & 22 deletions src/main/kotlin/me/ddivad/judgebot/Main.kt
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -15,15 +18,14 @@ import java.awt.Color
@PrivilegedIntent
suspend fun main(args: Array<String>) {
val token = System.getenv("BOT_TOKEN") ?: null
val defaultPrefix = System.getenv("DEFAULT_PREFIX") ?: "<none>"
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 {
Expand All @@ -37,7 +39,7 @@ suspend fun main(args: Array<String>) {
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
Expand All @@ -50,17 +52,17 @@ suspend fun main(args: Array<String>) {

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"
Expand All @@ -78,7 +80,7 @@ suspend fun main(args: Array<String>) {
if (guild != null)
permissionsService.hasClearance(guild!!, user, permission)
else
false
return@permissions command.requiredPermissionLevel == PermissionLevel.Everyone
}

onStart {
Expand All @@ -89,14 +91,5 @@ suspend fun main(args: Array<String>) {
muteService.initGuilds()
banService.initialiseBanTimers()
}

intents {
+Intent.GuildMessages
+Intent.DirectMessages
+Intent.GuildBans
+Intent.Guilds
+Intent.GuildMembers
+Intent.GuildMessageReactions
}
}
}
45 changes: 22 additions & 23 deletions src/main/kotlin/me/ddivad/judgebot/arguments/GuildConfigArg.kt
Original file line number Diff line number Diff line change
@@ -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<String>() {
override fun generateExamples(event: CommandEvent<*>): MutableList<String> = validConfigParameters
open class GuildConfigArg(override val name: String = "GuildConfig") : ArgumentType<String> {
override val description = "A Guild configuration"

companion object : GuildConfigArg()

override suspend fun generateExamples(event: CommandEvent<*>): MutableList<String> = validConfigParameters

override suspend fun convert(arg: String, args: List<String>, event: CommandEvent<*>): ArgumentResult<String> {
val parameters = validConfigParameters.map { it.toLowerCase() }
val parameter = arg.toLowerCase()
Expand Down
16 changes: 8 additions & 8 deletions src/main/kotlin/me/ddivad/judgebot/arguments/LowerMemberArg.kt
Original file line number Diff line number Diff line change
@@ -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<Member>() {
open class LowerMemberArg(override val name: String = "LowerMemberArg") : ArgumentType<Member> {
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<String>, event: CommandEvent<*>): ArgumentResult<Member> {
val permissionsService = event.discord.getInjectionObjects(PermissionsService::class)
Expand All @@ -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)
13 changes: 6 additions & 7 deletions src/main/kotlin/me/ddivad/judgebot/arguments/LowerUserArg.kt
Original file line number Diff line number Diff line change
@@ -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<User>() {
open class LowerUserArg(override val name: String = "LowerUserArg") : ArgumentType<User> {
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<String>, event: CommandEvent<*>): ArgumentResult<User> {
val permissionsService = event.discord.getInjectionObjects(PermissionsService::class)
Expand Down
15 changes: 7 additions & 8 deletions src/main/kotlin/me/ddivad/judgebot/arguments/RuleArg.kt
Original file line number Diff line number Diff line change
@@ -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<Rule>() {
override fun generateExamples(event: CommandEvent<*>): List<String> = mutableListOf("1","2","3")
open class RuleArg(override val name: String = "Rule") : ArgumentType<Rule> {
override val description = "A rule number"

override suspend fun generateExamples(event: CommandEvent<*>): List<String> = mutableListOf("1", "2", "3")

companion object : RuleArg()

override suspend fun convert(arg: String, args: List<String>, event: CommandEvent<*>): ArgumentResult<Rule> {
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)

Expand Down
6 changes: 3 additions & 3 deletions src/main/kotlin/me/ddivad/judgebot/commands/GuildCommands.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand All @@ -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
}
Expand Down
Loading

0 comments on commit f2c2383

Please sign in to comment.