Compare commits

...

3 commits

Author SHA1 Message Date
a2dafa5c72
fix: fixed all exceptions, which were caused by upgrading dependencies
Some checks failed
Build Gradle project / build-gradle-project (push) Has been cancelled
Signed-off-by: moonleay <contact@moonleay.net>
2023-12-19 10:29:53 +01:00
fc7edc0d0d
feat!: improved MessageUtil
Signed-off-by: moonleay <contact@moonleay.net>
2023-12-19 10:28:49 +01:00
b2c43e2c04
chore: upgrade dependencies
Signed-off-by: moonleay <contact@moonleay.net>
2023-12-19 10:28:04 +01:00
15 changed files with 229 additions and 237 deletions

View file

@ -34,12 +34,12 @@ version = System.getenv("CI_COMMIT_TAG")?.let { "$it-${System.getenv("CI_COMMIT_
?: System.getenv("CI_COMMIT_SHORT_SHA")?.let { "$it-dev" }
?: "2.6.7"
val kordver = "1.5.9-SNAPSHOT"
val kordver = "1.7.1-SNAPSHOT"
val coroutinesver = "1.7.3"
val ktorver = "2.3.5"
val exposedver = "0.43.0"
val postgresver = "42.6.0"
val krontabver = "2.2.1"
val ktorver = "2.3.7"
val exposedver = "0.45.0"
val postgresver = "42.7.1"
val krontabver = "2.2.4"
val mavenArtifact = "lilJudd"
project.base.archivesName.set(mavenArtifact)
@ -105,8 +105,8 @@ dependencies {
//Krontab
shadow("dev.inmo:krontab:$krontabver")
shadow("io.ktor:ktor-client-core-jvm:2.3.5")
shadow("io.ktor:ktor-client-cio-jvm:2.3.5")
shadow("io.ktor:ktor-client-core-jvm:$ktorver")
shadow("io.ktor:ktor-client-cio-jvm:$ktorver")
}

View file

@ -25,7 +25,8 @@ import dev.kord.core.entity.Guild
import dev.kord.core.entity.User
import dev.kord.core.entity.channel.MessageChannel
import dev.kord.core.entity.interaction.ButtonInteraction
import dev.kord.rest.builder.message.modify.embed
import dev.kord.rest.builder.message.EmbedBuilder
import dev.kord.rest.builder.message.embed
import net.moonleay.lilJudd.Bot
import net.moonleay.lilJudd.buttons.component.IEditButton
import net.moonleay.lilJudd.data.database.repository.MatchPlanningDataRepository
@ -89,13 +90,13 @@ class AcceptEditButton() : IEditButton {
if (shouldEditButton) {
// update the message
Bot.bot.kordRef.getChannelOf<MessageChannel>(interaction.channelId)!!.getMessage(m.id).edit {
this.embed {
this.color = eb.color
this.title = eb.title
this.description = eb.description
this.fields = eb.fields
this.footer = eb.footer
}
this.embed(fun EmbedBuilder.() {
color = eb.color
title = eb.title
description = eb.description
fields = eb.fields
footer = eb.footer
})
}
}
}

View file

@ -25,7 +25,8 @@ import dev.kord.core.entity.Guild
import dev.kord.core.entity.User
import dev.kord.core.entity.channel.MessageChannel
import dev.kord.core.entity.interaction.ButtonInteraction
import dev.kord.rest.builder.message.modify.embed
import dev.kord.rest.builder.message.EmbedBuilder
import dev.kord.rest.builder.message.embed
import net.moonleay.lilJudd.Bot
import net.moonleay.lilJudd.buttons.component.IEditButton
import net.moonleay.lilJudd.data.database.repository.MatchPlanningDataRepository
@ -62,14 +63,14 @@ class CancelEditButton : IEditButton {
member.removeRole(role.id)
}
Bot.bot.kordRef.getChannelOf<MessageChannel>(interaction.channelId)!!.getMessage(m.id).edit {
this.embed {
this.embed(fun EmbedBuilder.() {
val temp = EmbedUtil.replaceXWithYinValuesAtTable(user.id.value.toString(), "", m.embeds[0], 1)
this.color = temp.color
this.title = temp.title
this.description = temp.description
this.fields = temp.fields
this.footer = temp.footer
}
color = temp.color
title = temp.title
description = temp.description
fields = temp.fields
footer = temp.footer
})
}
}
}

View file

@ -25,7 +25,8 @@ import dev.kord.core.entity.Guild
import dev.kord.core.entity.User
import dev.kord.core.entity.channel.MessageChannel
import dev.kord.core.entity.interaction.ButtonInteraction
import dev.kord.rest.builder.message.modify.embed
import dev.kord.rest.builder.message.EmbedBuilder
import dev.kord.rest.builder.message.embed
import net.moonleay.lilJudd.Bot
import net.moonleay.lilJudd.buttons.component.IEditButton
import net.moonleay.lilJudd.data.database.repository.MatchPlanningDataRepository
@ -89,13 +90,13 @@ class DeclineEditButton : IEditButton {
if (shouldEditButton) {
// update the message
Bot.bot.kordRef.getChannelOf<MessageChannel>(interaction.channelId)!!.getMessage(m.id).edit {
this.embed {
this.color = eb.color
this.title = eb.title
this.description = eb.description
this.fields = eb.fields
this.footer = eb.footer
}
this.embed(fun EmbedBuilder.() {
color = eb.color
title = eb.title
description = eb.description
fields = eb.fields
footer = eb.footer
})
}
}
}

View file

@ -24,7 +24,7 @@ import dev.kord.core.entity.Guild
import dev.kord.core.entity.User
import dev.kord.core.entity.channel.MessageChannel
import dev.kord.core.entity.interaction.ButtonInteraction
import dev.kord.rest.builder.message.modify.embed
import dev.kord.rest.builder.message.embed
import net.moonleay.lilJudd.Bot
import net.moonleay.lilJudd.buttons.component.IEditButton
import net.moonleay.lilJudd.features.AvailabilityManager

View file

@ -24,7 +24,7 @@ import dev.kord.core.entity.Guild
import dev.kord.core.entity.User
import dev.kord.core.entity.channel.MessageChannel
import dev.kord.core.entity.interaction.ButtonInteraction
import dev.kord.rest.builder.message.modify.embed
import dev.kord.rest.builder.message.embed
import net.moonleay.lilJudd.Bot
import net.moonleay.lilJudd.buttons.component.IEditButton
import net.moonleay.lilJudd.features.AvailabilityManager

View file

@ -24,7 +24,7 @@ import dev.kord.core.entity.Guild
import dev.kord.core.entity.User
import dev.kord.core.entity.channel.MessageChannel
import dev.kord.core.entity.interaction.ButtonInteraction
import dev.kord.rest.builder.message.modify.embed
import dev.kord.rest.builder.message.embed
import net.moonleay.lilJudd.Bot
import net.moonleay.lilJudd.buttons.component.IEditButton
import net.moonleay.lilJudd.features.AvailabilityManager

View file

@ -23,9 +23,9 @@ import com.kotlindiscord.kord.extensions.commands.application.slash.converters.i
import com.kotlindiscord.kord.extensions.commands.converters.impl.channel
import com.kotlindiscord.kord.extensions.extensions.Extension
import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand
import com.kotlindiscord.kord.extensions.types.respond
import com.kotlindiscord.kord.extensions.utils.hasPermission
import dev.kord.common.entity.Permission
import dev.kord.rest.builder.message.embed
import net.moonleay.lilJudd.extensions.component.EnableOrDisable
import net.moonleay.lilJudd.features.component.FeatureEnum
import net.moonleay.lilJudd.features.component.FeatureManager
@ -49,14 +49,16 @@ class FeatureManageExtension : Extension() {
val u = this.user
if (!u.asMember(this.guild!!.id).hasPermission(Permission.Administrator)) {
this.respond {
embeds.add(
MessageUtil.getEmbed(
EmbedColor.ERROR,
"403: Forbidden",
"You cannot edit features, as you don't have the Administrator permission.",
u.asUser().username + "#" + u.asUser().discriminator
)
)
this.embed {
this.color = EmbedColor.ERROR.color
this.title = "403: Forbidden"
this.description =
"You cannot edit features, as you don't have the Administrator permission."
this.footer {
this.icon = u.asUser().avatar?.cdnUrl?.toUrl()
this.text = MessageUtil.getFooter(u)
}
}
}
return@action
}
@ -68,26 +70,45 @@ class FeatureManageExtension : Extension() {
val f = FeatureManager.getFeature(args.feature)
if (f == null) {
this.respond {
this.embeds.add(
MessageUtil.getEmbed(
EmbedColor.ERROR,
"404: Not Found",
"The feature you are trying to edit does not exist.",
u.asUser().username + "#" + u.asUser().discriminator
)
)
this.embed {
this.color = EmbedColor.ERROR.color
this.title = "404: Not Found"
this.description = "The feature you are trying to edit does not exist."
this.footer {
this.icon = u.asUser().avatar?.cdnUrl?.toUrl()
this.text = MessageUtil.getFooter(u)
}
}
}
return@action
}
if (this.arguments.setStatus == EnableOrDisable.ENABLE) {
val enabled = f.enable(u, gID, cID, channel, args)
this.respond {
this.embeds.add(f.enable(u, gID, cID, channel, args))
this.embed {
this.color = enabled.color
this.title = enabled.title
this.description = enabled.description
this.footer {
this.icon = u.asUser().avatar?.cdnUrl?.toUrl()
this.text = MessageUtil.getFooter(u)
}
}
}
return@action
}
val disabled = f.disable(u, gID, cID, channel, args)
this.respond {
this.embeds.add(f.disable(u, gID, cID, channel, args))
this.embed {
this.color = disabled.color
this.title = disabled.title
this.description = disabled.description
this.footer {
this.icon = u.asUser().avatar?.cdnUrl?.toUrl()
this.text = MessageUtil.getFooter(u)
}
}
}
}
}

View file

@ -20,8 +20,8 @@ package net.moonleay.lilJudd.extensions
import com.kotlindiscord.kord.extensions.extensions.Extension
import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand
import dev.kord.rest.builder.message.embed
import net.moonleay.lilJudd.util.EmbedColor
import net.moonleay.lilJudd.util.MessageUtil
import net.moonleay.liljudd.build.BuildConstants
class InfoExtension : Extension() {
@ -31,16 +31,17 @@ class InfoExtension : Extension() {
name = "info"
description = "Show infos about the bot"
this.action {
MessageUtil.sendEmbedForPublicSlashCommand(
this,
EmbedColor.INFO,
"Lil' Judd",
"Lil' Judd ***v." + BuildConstants.version + "***\n" +
this.respond {
this.embed {
this.color = EmbedColor.INFO.color
this.title = "Li'l Judd"
this.description = "Li'l Judd ***v." + BuildConstants.version + "***\n" +
"Kord-Extensions ***v." + BuildConstants.kordVersion + "***\n" +
"Coroutines ***v." + BuildConstants.coroutinesVersion + "***\n" +
"Krontab ***v." + BuildConstants.krontabVersion + "***\n\n" +
"Splatoon 3 api data provided by splatoon3.ink"
)
}
}
}
}
}

View file

@ -23,9 +23,9 @@ import com.kotlindiscord.kord.extensions.commands.application.slash.converters.i
import com.kotlindiscord.kord.extensions.commands.converters.impl.string
import com.kotlindiscord.kord.extensions.extensions.Extension
import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand
import com.kotlindiscord.kord.extensions.types.respond
import dev.kord.core.behavior.createRole
import dev.kord.rest.builder.message.create.actionRow
import dev.kord.rest.builder.message.actionRow
import dev.kord.rest.builder.message.embed
import net.moonleay.lilJudd.data.database.entry.MatchPlanningDataData
import net.moonleay.lilJudd.data.database.repository.MatchPlanningDataRepository
import net.moonleay.lilJudd.extensions.component.MatchTypes
@ -55,15 +55,16 @@ class MatchExtension : Extension() {
val opponent = args.opponent
if (!TimeUtil.validateDateString(args.timeStamp)) {
this.respond {
this.embeds.add(
MessageUtil.getEmbed(
EmbedColor.ERROR,
"400: Bad Request",
"The given timestamp is invalid.\n" +
"Please use the format \"dd.MM.yyyy HH:mm\".",
m.asUser().username
)
)
this.embed {
this.color = EmbedColor.ERROR.color
this.title = "400: Bad Request"
this.description = "The given timestamp is invalid.\n" +
"Please use the format \"dd.MM.yyyy HH:mm\"."
this.footer {
this.icon = m.asUser().avatar?.cdnUrl?.toUrl()
this.text = MessageUtil.getFooter(m.asUser())
}
}
}
return@action
}
@ -80,21 +81,21 @@ class MatchExtension : Extension() {
// Check if the role was created successfully
if (role == null) {
this.respond {
this.embeds.add(
MessageUtil.getEmbed(
EmbedColor.ERROR,
"500: Internal Error",
"Could not find created role.\n" +
"It seems, that said role could not be created.",
m.asUser().username
)
)
this.embed {
this.color = EmbedColor.ERROR.color
this.title = "500: Internal Error"
this.description = "Could not find created role.\n" +
"It seems, that said role could not be created."
this.footer {
this.icon = m.asUser().avatar?.cdnUrl?.toUrl()
this.text = MessageUtil.getFooter(m.asUser())
}
}
}
return@action
}
val msg = this.respond {
this.embeds.add(
MessageUtil.getEmbedWithTable(
val eb = MessageUtil.getEmbedWithTable(
EmbedColor.INFO,
args.matchType.readableName,
"***Vs. $opponent***\n" +
@ -105,7 +106,16 @@ class MatchExtension : Extension() {
"Unavailable" to listOf(),
)
)
)
this.embed {
this.color = eb.color
this.title = eb.title
this.description = eb.description
this.fields = eb.fields
this.footer {
this.icon = m.asUser().avatar?.cdnUrl?.toUrl()
this.text = MessageUtil.getFooter(m.asUser())
}
}
this.actionRow {
this.components.addAll(EmbedUtil.getMatchButtons().components)

View file

@ -20,12 +20,13 @@ package net.moonleay.lilJudd.extensions
import com.kotlindiscord.kord.extensions.extensions.Extension
import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand
import com.kotlindiscord.kord.extensions.types.respond
import com.kotlindiscord.kord.extensions.utils.hasPermission
import dev.kord.common.entity.Permission
import dev.kord.core.behavior.channel.createMessage
import dev.kord.rest.builder.message.create.actionRow
import dev.kord.rest.builder.message.actionRow
import dev.kord.rest.builder.message.embed
import kotlinx.coroutines.delay
import net.moonleay.lilJudd.Bot
import net.moonleay.lilJudd.data.database.entry.TimePlanningMessagesData
import net.moonleay.lilJudd.data.database.repository.TimePlanningMessagesRepository
import net.moonleay.lilJudd.util.*
@ -64,20 +65,19 @@ class SendPlannerExtension : Extension() {
.withHour(4)
.withMinute(0).withSecond(0)
c.createMessage {
this.embeds.add(
MessageUtil.getEmbed(
EmbedColor.INFO,
"Time Planning Feature",
"Do you have time on the following Days?",
"Automated Message"
)
)
this.embed {
this.color = EmbedColor.INFO.color
this.title = "Time Planning Feature"
this.description = "Do you have time on the following Days?"
this.footer {
this.icon = Bot.bot.kordRef.getSelf().avatar?.cdnUrl?.toUrl()
this.text = MessageUtil.getFooter()
}
}
}
delay(1000)
repeat(7) {
val msg = c.createMessage {
this.embeds.add(
MessageUtil.getEmbedWithTable(
val eb = MessageUtil.getEmbedWithTable(
EmbedColor.INFO,
"",
"${then.dayOfWeek.name}, ${then.dayOfMonth}.${then.monthValue}.${then.year} /${it + 1}. weekday",
@ -87,7 +87,18 @@ class SendPlannerExtension : Extension() {
"Is not available" to listOf()
)
)
)
val msg = c.createMessage {
this.embed {
this.color = eb.color
this.title = eb.title
this.description = eb.description
this.fields = eb.fields
this.footer {
this.icon = Bot.bot.kordRef.getSelf().avatar?.cdnUrl?.toUrl()
this.text = MessageUtil.getFooter()
}
}
this.actionRow {
this.components.addAll(EmbedUtil.getTimePlannerButtons().components)

View file

@ -20,9 +20,9 @@ package net.moonleay.lilJudd.extensions
import com.kotlindiscord.kord.extensions.extensions.Extension
import com.kotlindiscord.kord.extensions.extensions.publicSlashCommand
import com.kotlindiscord.kord.extensions.types.respond
import com.kotlindiscord.kord.extensions.utils.hasPermission
import dev.kord.common.entity.Permission
import dev.kord.rest.builder.message.embed
import net.moonleay.lilJudd.features.AvailabilityManager
import net.moonleay.lilJudd.util.EmbedColor
import net.moonleay.lilJudd.util.Logger
@ -42,30 +42,31 @@ class UpdateRolesExtension : Extension() {
.hasPermission(Permission.Administrator)
) {
this.respond {
this.embeds.add(
MessageUtil.getEmbed(
EmbedColor.ERROR,
"403: Forbidden",
"You need to be an administrator to use this command.",
user.asUser().username + "#" + user.asUser().discriminator
)
)
this.embed {
this.color = EmbedColor.ERROR.color
this.title = "403: Forbidden"
this.description =
"You cannot update roles, as you don't have the Administrator permission."
this.footer {
this.icon = user.asUser().avatar?.cdnUrl?.toUrl()
this.text = MessageUtil.getFooter(user)
}
}
}
return@action
}
this.respond {
this.embeds.add(
MessageUtil.getEmbed(
EmbedColor.SUCCESS,
"200: Success",
"Updating roles.\n" +
"This may take a while, please be patient.",
user.asUser().username + "#" + user.asUser().discriminator
)
)
this.embed {
this.color = EmbedColor.INFO.color
this.title = "200: Success"
this.description = "Updating roles.\n" +
"This may take a while, please be patient."
this.footer {
this.icon = user.asUser().avatar?.cdnUrl?.toUrl()
this.text = MessageUtil.getFooter(user)
}
}
}
// -- below here is the code of the cronjob --
Logger.out("Starting to update roles...")
AvailabilityManager.updateInChannel(this.channel.id)

View file

@ -26,7 +26,8 @@ import dev.kord.core.behavior.channel.createMessage
import dev.kord.core.entity.channel.Channel
import dev.kord.core.entity.channel.MessageChannel
import dev.kord.rest.builder.message.EmbedBuilder
import dev.kord.rest.builder.message.create.actionRow
import dev.kord.rest.builder.message.actionRow
import dev.kord.rest.builder.message.embed
import kotlinx.coroutines.delay
import net.moonleay.lilJudd.Bot
import net.moonleay.lilJudd.data.database.entry.TimePlanningChannelsData
@ -78,33 +79,33 @@ object TimeManager : IFeature {
c.createMessage {
this.content =
"The weekly planning starts now <@&${Snowflake(targetedRoles[ch2]?.wantsToBeNotifiedID!!)}>"
this.embeds.add(
MessageUtil.getEmbed(
EmbedColor.INFO,
"Time Planning Feature",
"Do you have time on the following Days?",
"Automated Message"
)
)
this.embed {
this.color = EmbedColor.INFO.color
this.title = "Time Planning Feature"
this.description = "Do you have time on the following Days?"
this.footer {
this.icon = Bot.bot.kordRef.getSelf().avatar?.cdnUrl?.toUrl()
this.text = MessageUtil.getFooter()
}
}
}
} else {
c.createMessage {
this.embeds.add(
MessageUtil.getEmbed(
EmbedColor.INFO,
"Time Planning Feature",
"Do you have time on the following Days?",
"Automated Message"
)
)
this.embed {
this.color = EmbedColor.INFO.color
this.title = "Time Planning Feature"
this.description = "Do you have time on the following Days?"
this.footer {
this.icon = Bot.bot.kordRef.getSelf().avatar?.cdnUrl?.toUrl()
this.text = MessageUtil.getFooter()
}
}
}
}
delay(2000)
var then = ZonedDateTime.now(ZoneId.of("Europe/Berlin")).withHour(4).withMinute(0).withSecond(0)
repeat(7) {
val msg = c.createMessage {
this.embeds.add(
MessageUtil.getEmbedWithTable(
val eb = MessageUtil.getEmbedWithTable(
EmbedColor.INFO,
"",
"${then.dayOfWeek.name}, ${then.dayOfMonth}.${then.monthValue}.${then.year} /${it + 1}. weekday",
@ -114,7 +115,17 @@ object TimeManager : IFeature {
"Is not available" to listOf()
)
)
)
val msg = c.createMessage {
this.embed {
this.color = eb.color
this.title = eb.title
this.description = eb.description
this.fields = eb.fields
this.footer {
this.icon = Bot.bot.kordRef.getSelf().avatar?.cdnUrl?.toUrl()
this.text = MessageUtil.getFooter()
}
}
this.actionRow {
this.components.addAll(EmbedUtil.getTimePlannerButtons().components)

View file

@ -41,7 +41,7 @@ object StatusUpdater : ICronjob {
private var statusList = listOf<String>()
private var index = 0
// I h8 this job. I'll recode this someday.
// I h8 this cronjob. I'll recode this someday.
override suspend fun jobFunction() {
if (index >= statusList.size) {
index = 0

View file

@ -18,10 +18,7 @@
package net.moonleay.lilJudd.util
import com.kotlindiscord.kord.extensions.commands.Arguments
import com.kotlindiscord.kord.extensions.commands.application.slash.PublicSlashCommandContext
import com.kotlindiscord.kord.extensions.components.forms.ModalForm
import com.kotlindiscord.kord.extensions.types.respond
import dev.kord.core.behavior.UserBehavior
import dev.kord.core.entity.Embed
import dev.kord.rest.builder.message.EmbedBuilder
import java.time.LocalDateTime
@ -30,44 +27,9 @@ import java.time.format.DateTimeFormatter
object MessageUtil {
private val dtf: DateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy @ HH:mm:ss")
///Send an embedded message as a reply
suspend fun sendEmbedForPublicSlashCommand(
ctx: PublicSlashCommandContext<Arguments, ModalForm>,
color: EmbedColor,
title: String,
description: String
) {
ctx.respond {
embeds.add(
getEmbed(
color,
title,
description,
ctx.user.asUser().username + "#" + ctx.user.asUser().discriminator
)
)
}
}
///Send an embedded message with an image as a reply
suspend fun sendEmbedForPublicSlashCommandWithImage(
ctx: PublicSlashCommandContext<Arguments, ModalForm>,
color: EmbedColor,
title: String,
description: String,
thumbnailUrl: String
) {
ctx.respond {
embeds.add(
getEmbedWithImage(
color,
title,
description,
ctx.user.asUser().username + "#" + ctx.user.asUser().discriminator,
thumbnailUrl
)
)
}
suspend fun getFooter(u: UserBehavior? = null): String {
val now: LocalDateTime = LocalDateTime.now()
return ">" + dtf.format(now) + " - ${u?.asUser()?.username ?: "Automated Message"}"
}
///Get a cloned embedded message
@ -101,20 +63,6 @@ object MessageUtil {
return ebb
}
fun getEmbedWithTableWithFooter(
color: EmbedColor,
title: String,
description: String,
values: Map<String, List<String>>?,
footer: String
): EmbedBuilder {
val ebb = getEmbedWithTable(color, title, description, values)
ebb.footer = EmbedBuilder.Footer()
ebb.footer!!.text = ">m.id/$footer"
return ebb
}
///Get an embedded msg with image, title and description
fun getEmbedWithTable(
color: EmbedColor,
title: String,
@ -136,7 +84,6 @@ object MessageUtil {
return ebb
}
///Get an embedded msg with title and description
fun getEmbedSmall(
color: EmbedColor,
@ -164,17 +111,4 @@ object MessageUtil {
return ebb
}
///Get an embedded msg with image, title, description and a src
fun getEmbedWithImage(
color: EmbedColor,
title: String,
description: String,
source: String,
thumbnailUrl: String
): EmbedBuilder {
val ebb = getEmbed(color, title, description, source)
ebb.thumbnail = EmbedBuilder.Thumbnail()
ebb.thumbnail!!.url = thumbnailUrl
return ebb
}
}