Skip to content

Commit 9488098

Browse files
authored
Merge pull request #25 from the-programmers-hangout/feat/miscellaneous-refactoring
chore: miscellaneous refactoring to cleanup code
2 parents 25717ae + 82b6499 commit 9488098

File tree

6 files changed

+48
-44
lines changed

6 files changed

+48
-44
lines changed

src/main/kotlin/me/ddivad/hawk/commands/ReactionRoleCommands.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,11 @@ import me.ddivad.hawk.dataclasses.Permissions
55
import me.ddivad.hawk.dataclasses.ReactionRole
66
import me.ddivad.hawk.embeds.createReactionRoleMenu
77
import me.ddivad.hawk.services.LoggingService
8-
import me.ddivad.hawk.services.buildGuildLogMessage
98
import me.jakejmattson.discordkt.arguments.BooleanArg
109
import me.jakejmattson.discordkt.arguments.EveryArg
1110
import me.jakejmattson.discordkt.commands.commands
1211
import me.jakejmattson.discordkt.dsl.edit
1312
import me.jakejmattson.discordkt.extensions.toSnowflake
14-
import mu.KotlinLogging
15-
16-
val logger = KotlinLogging.logger { }
1713

1814
@Suppress("unused")
1915
fun reactionRoleCommands(configuration: Configuration, loggingService: LoggingService) = commands("ReactionRole") {
@@ -42,9 +38,10 @@ fun reactionRoleCommands(configuration: Configuration, loggingService: LoggingSe
4238
guildConfig.reactionRoles.add(reactionRole)
4339
}
4440
respond("Reaction role created")
41+
loggingService.guildLog(guild, "Reaction role ${reactionRole.id} created")
4542
} catch (e: Exception) {
46-
respond("Error parsing roles. Make sure role IDs $roleIds are valid roles and separated by ` ` if adding multiple roles.")
47-
logger.error(e) { buildGuildLogMessage(guild, "Failed to parse roles") }
43+
respond("Error parsing roles. Make sure IDs $roleIds are valid roles and separated by ` ` if adding multiple roles.")
44+
loggingService.guildLog(guild, "Failed to parse roles $roleIds")
4845
}
4946
}
5047
}

src/main/kotlin/me/ddivad/hawk/dataclasses/Configuration.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,8 @@ data class Configuration(
2929
fun isFullyConfigured(guild: Guild): Boolean {
3030
val guildConfiguration = guildConfigurations[guild.id] ?: return false
3131

32-
if (guildConfiguration.loggingConfiguration.logChannel == null ||
33-
guildConfiguration.loggingConfiguration.alertChannel == null
34-
) {
35-
return false
36-
}
37-
return true
32+
return !(guildConfiguration.loggingConfiguration.logChannel == null ||
33+
guildConfiguration.loggingConfiguration.alertChannel == null)
3834
}
3935
}
4036

src/main/kotlin/me/ddivad/hawk/listeners/MessageDeleteListener.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,18 @@ package me.ddivad.hawk.listeners
22

33
import dev.kord.core.event.message.MessageDeleteEvent
44
import me.ddivad.hawk.dataclasses.Configuration
5+
import me.ddivad.hawk.services.LoggingService
56
import me.jakejmattson.discordkt.dsl.edit
67
import me.jakejmattson.discordkt.dsl.listeners
78

89
@Suppress("unused")
9-
fun messageDeleteListener(configuration: Configuration) = listeners {
10+
fun messageDeleteListener(configuration: Configuration, loggingService: LoggingService) = listeners {
1011
on<MessageDeleteEvent> {
1112
val guild = guild ?: return@on
1213
val guildConfiguration = configuration[guild.id] ?: return@on
1314
val reactionRole =
1415
guildConfiguration.reactionRoles.find { it.channel == channelId && it.messageId == messageId } ?: return@on
15-
16+
loggingService.guildLog(guild.asGuild(), "Reaction role ${reactionRole.id} deleted. Removing from config")
1617
configuration.edit {
1718
guildConfiguration.reactionRoles.remove(reactionRole)
1819
}

src/main/kotlin/me/ddivad/hawk/services/LoggingService.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ class LoggingService(private val config: Configuration) {
3636
"**Info** :: Blocklisted symbols detected and removed from ${member.idDescriptor()} (${member.displayName})"
3737
}
3838

39+
fun guildLog(guild: Guild, message: String) = withLog(guild) {
40+
logger.info { buildGuildLogMessage(guild, message) }
41+
"**Info** :: $message"
42+
}
43+
3944
private fun withLog(guild: Guild, f: () -> String) =
4045
getLogConfig(guild).apply {
4146
runBlocking {
@@ -57,6 +62,6 @@ class LoggingService(private val config: Configuration) {
5762

5863
private suspend fun alert(guild: Guild, alertChannelId: Snowflake, message: String) =
5964
guild.getChannelOf<TextChannel>(alertChannelId).createMessage(message)
65+
private fun buildGuildLogMessage(guild: Guild, message: String) = "${guild.name} (${guild.id}): $message"
6066
}
6167

62-
fun buildGuildLogMessage(guild: Guild, message: String) = "${guild.name} (${guild.id}): $message"
Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,53 @@
11
package me.ddivad.hawk.services
22

33
import dev.kord.core.behavior.getChannelOfOrNull
4+
import dev.kord.core.entity.Guild
45
import dev.kord.core.entity.channel.GuildMessageChannel
5-
import dev.kord.core.entity.channel.TextChannel
66
import me.ddivad.hawk.dataclasses.Configuration
7+
import me.ddivad.hawk.dataclasses.ReactionRole
78
import me.ddivad.hawk.embeds.createReactionRoleMenu
89
import me.jakejmattson.discordkt.Discord
910
import me.jakejmattson.discordkt.annotations.Service
1011
import me.jakejmattson.discordkt.extensions.createMenu
11-
import mu.KotlinLogging
12-
13-
val logger = KotlinLogging.logger { }
1412

1513
@Service
1614
class StartupService(
1715
private val configuration: Configuration,
1816
private val discord: Discord,
17+
private val loggingService: LoggingService
1918
) {
2019
suspend fun refreshReactionRoleInteractions() {
21-
configuration.guildConfigurations.forEach { config ->
22-
val guild = config.value.let { discord.kord.getGuild(config.key) } ?: return@forEach
23-
val guildConfig = configuration[guild.id] ?: return@forEach
20+
configuration.guildConfigurations.forEach { (guildId, guildConfig) ->
21+
val guild = discord.kord.getGuild(guildId) ?: return@forEach
2422
if (guildConfig.reactionRoles.isEmpty()) return@forEach
25-
logger.info {
26-
buildGuildLogMessage(
27-
guild,
28-
"Refreshing ${guildConfig.reactionRoles.size} reaction roles for ${guild.name}"
29-
)
30-
}
31-
32-
guildConfig.reactionRoles.forEach {
33-
val channel = guild.getChannelOfOrNull<GuildMessageChannel>(it.channel) ?: return
34-
val message = channel.getMessageOrNull(it.messageId!!) ?: return
35-
logger.info {
36-
buildGuildLogMessage(
37-
guild,
38-
"Refreshing reaction role ${it.id} - ${it.messageId} - ${(it.roles).joinToString()}"
39-
)
40-
}
41-
message.delete()
42-
it.messageId = channel.createMenu {
43-
createReactionRoleMenu(discord, guild, it)
44-
}.id
45-
}
23+
loggingService.guildLog(
24+
guild,
25+
"Refreshing ${guildConfig.reactionRoles.size} reaction roles for ${guild.name}"
26+
)
27+
val reactionRolesToDelete = guildConfig.reactionRoles.filterNot { it.refresh(guild) }.toMutableList()
28+
reactionRolesToDelete.forEach { guildConfig.reactionRoles.remove(it) }
4629
configuration.save()
4730
}
4831
}
32+
33+
private suspend fun ReactionRole.refresh(guild: Guild): Boolean {
34+
loggingService.guildLog(guild, "Attempting to refresh reaction role $id - $messageId - ${roles.joinToString()}")
35+
val channel = guild.getChannelOfOrNull<GuildMessageChannel>(channel)
36+
val message = messageId?.let { channel?.getMessageOrNull(it) }
37+
val reactionRole = this
38+
if (channel != null && message != null) {
39+
message.delete()
40+
val newMessage = channel.createMenu { createReactionRoleMenu(discord, guild, reactionRole) }
41+
newMessage.pin()
42+
messageId = newMessage.id
43+
loggingService.guildLog(guild, "Reaction role $id refreshed. New message ID: ${newMessage.id}")
44+
return true
45+
} else {
46+
loggingService.guildLog(
47+
guild,
48+
"Channel or message for reaction role $id no longer exist, flagging for deletion"
49+
)
50+
return false
51+
}
52+
}
4953
}

src/main/kotlin/me/ddivad/hawk/services/nickname/NicknameService.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package me.ddivad.hawk.services.nickname
33
import dev.kord.core.behavior.edit
44
import dev.kord.core.entity.Guild
55
import dev.kord.core.entity.Member
6+
import dev.kord.core.entity.channel.GuildChannel
67
import dev.kord.core.entity.channel.TextChannel
78
import me.ddivad.hawk.dataclasses.Configuration
89
import me.ddivad.hawk.dataclasses.FurryNames
@@ -18,7 +19,7 @@ class NicknameService(
1819
private val loggingService: LoggingService,
1920
private val furryNames: FurryNames
2021
) {
21-
suspend fun setOrRemovePartyNickname(guild: Guild, member: Member, channel: TextChannel) {
22+
suspend fun setOrRemovePartyNickname(guild: Guild, member: Member, channel: GuildChannel) {
2223
val partyConfiguration = configuration[guild.id]?.partyModeConfiguration ?: return
2324
if (member.isBot) {
2425
return

0 commit comments

Comments
 (0)