Skip to content

Commit

Permalink
Added:
Browse files Browse the repository at this point in the history
- Badname command to choose a random nickname for a user.
- Fixed delete message embed in cases where the message contained "`".
- Added support to use the selfHistory command in direct messages.
  • Loading branch information
ddivad195 committed Jun 29, 2021
1 parent 1719bb0 commit 3e25156
Show file tree
Hide file tree
Showing 7 changed files with 88 additions and 8 deletions.
1 change: 1 addition & 0 deletions commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
## Infraction
| Commands | Arguments | Description |
| ------------------ | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| 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. |
Expand Down
5 changes: 3 additions & 2 deletions src/main/kotlin/me/ddivad/judgebot/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ 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.PermissionLevel
import me.ddivad.judgebot.services.PermissionsService
import me.ddivad.judgebot.services.infractions.BanService
import me.ddivad.judgebot.services.infractions.MuteService
Expand All @@ -17,7 +18,7 @@ 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" }

Expand Down Expand Up @@ -79,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 Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,20 @@ 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
Expand Down Expand Up @@ -96,6 +99,15 @@ fun createInfractionCommands(databaseService: DatabaseService,
}
}

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
Expand Down
21 changes: 17 additions & 4 deletions src/main/kotlin/me/ddivad/judgebot/commands/UserCommands.kt
Original file line number Diff line number Diff line change
@@ -1,9 +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
Expand All @@ -16,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
Expand Down Expand Up @@ -134,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)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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<Guild>,
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)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ fun EmbedBuilder.createMessageDeleteEmbed(guild: Guild, message: Message) {
Your ${if (message.attachments.isNotEmpty()) "image" else "message"} was deleted from ${message.channel.mention}
as it was deemed either off topic or against our server rules.
""".trimIndent()
addField("Message", "```${messageContent}```")
addField("Message", "```${messageContent.replace("`", "")}```")
if (message.attachments.isNotEmpty()) {
addField("Filename", "```${message.attachments.first().filename}```")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package me.ddivad.judgebot.services.infractions

import dev.kord.core.behavior.edit
import dev.kord.core.entity.Member
import me.jakejmattson.discordkt.api.annotations.Service

val names = mutableListOf<String>(
"Stephen","Bob","Joe","Timmy","Arnold","Jeff","Tim","Doug"
)

@Service
class BadnameService() {
suspend fun chooseRandomNickname(member: Member) {
member.edit { nickname = names.random() }
}
}

0 comments on commit 3e25156

Please sign in to comment.