diff --git a/build.gradle.kts b/build.gradle.kts
index 86d6a5b..c675a62 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -14,7 +14,7 @@ val ownerID = 372703841151614976L
group = "net.moonleay.rssbot"
version = System.getenv("CI_COMMIT_TAG")?.let { "$it-${System.getenv("CI_COMMIT_SHORT_SHA")}-prod" }
?: System.getenv("CI_COMMIT_SHORT_SHA")?.let { "$it-dev" }
- ?: "0.3.0"
+ ?: "0.2.1"
val kordver = "1.5.10-SNAPSHOT"
val coroutinesver = "1.7.3"
@@ -67,9 +67,6 @@ dependencies {
//rss
shadow("com.prof18.rssparser:rssparser:$rssparserver")
-
- // html to markdown
- shadow("com.kotcrab.remark:remark:1.2.0")
}
diff --git a/src/main/kotlin/net/moonleay/rssbot/Bot.kt b/src/main/kotlin/net/moonleay/rssbot/Bot.kt
index 5a83d6e..ee2decd 100644
--- a/src/main/kotlin/net/moonleay/rssbot/Bot.kt
+++ b/src/main/kotlin/net/moonleay/rssbot/Bot.kt
@@ -24,7 +24,9 @@ import dev.kord.core.event.gateway.ReadyEvent
import dev.kord.core.on
import net.moonleay.rssbot.data.CredentialManager
import net.moonleay.rssbot.data.database.DB
-import net.moonleay.rssbot.extensions.*
+import net.moonleay.rssbot.extensions.FeedExtension
+import net.moonleay.rssbot.extensions.FeedsExtension
+import net.moonleay.rssbot.extensions.StuffExtension
import net.moonleay.rssbot.jobs.FeedUpdater
import net.moonleay.rssbot.jobs.component.JobManager
import net.moonleay.rssbot.util.Logger
@@ -75,8 +77,6 @@ object Bot {
add(::FeedExtension)
add(::StuffExtension)
add(::FeedsExtension)
- add(::SendFeedExtension)
- add(::CleanUpExtension)
}
this.presence {
diff --git a/src/main/kotlin/net/moonleay/rssbot/data/database/entry/SubscriptionData.kt b/src/main/kotlin/net/moonleay/rssbot/data/database/entry/SubscriptionData.kt
index 3896b37..71f47b5 100644
--- a/src/main/kotlin/net/moonleay/rssbot/data/database/entry/SubscriptionData.kt
+++ b/src/main/kotlin/net/moonleay/rssbot/data/database/entry/SubscriptionData.kt
@@ -27,5 +27,4 @@ data class SubscriptionData(
val feedColor: FeedColor,
val feedName: String,
val feedUrl: String,
- val subscriptionTimestamp: Long,
)
diff --git a/src/main/kotlin/net/moonleay/rssbot/data/database/repository/SubscriptionRepository.kt b/src/main/kotlin/net/moonleay/rssbot/data/database/repository/SubscriptionRepository.kt
index 95cc5fb..f80d96b 100644
--- a/src/main/kotlin/net/moonleay/rssbot/data/database/repository/SubscriptionRepository.kt
+++ b/src/main/kotlin/net/moonleay/rssbot/data/database/repository/SubscriptionRepository.kt
@@ -38,8 +38,7 @@ object SubscriptionRepository {
it[SubscriptionsTable.channelId],
EmbedUtil.getColorFromString(it[SubscriptionsTable.subscriptionColor]),
it[SubscriptionsTable.subscriptionName],
- it[SubscriptionsTable.feedUrl],
- it[SubscriptionsTable.subscriptionTimestamp]
+ it[SubscriptionsTable.feedUrl]
)
)
}
@@ -60,8 +59,7 @@ object SubscriptionRepository {
it[SubscriptionsTable.channelId],
EmbedUtil.getColorFromString(it[SubscriptionsTable.subscriptionColor]),
it[SubscriptionsTable.subscriptionName],
- it[SubscriptionsTable.feedUrl],
- it[SubscriptionsTable.subscriptionTimestamp]
+ it[SubscriptionsTable.feedUrl]
)
)
}
@@ -82,8 +80,7 @@ object SubscriptionRepository {
it[SubscriptionsTable.channelId],
EmbedUtil.getColorFromString(it[SubscriptionsTable.subscriptionColor]),
it[SubscriptionsTable.subscriptionName],
- it[SubscriptionsTable.feedUrl],
- it[SubscriptionsTable.subscriptionTimestamp]
+ it[SubscriptionsTable.feedUrl]
)
}
}
@@ -118,7 +115,6 @@ object SubscriptionRepository {
it[subscriptionColor] = data.feedColor.readableName
it[subscriptionName] = data.feedName
it[feedUrl] = data.feedUrl
- it[subscriptionTimestamp] = data.subscriptionTimestamp
}
}
diff --git a/src/main/kotlin/net/moonleay/rssbot/data/database/tables/SubscriptionsTable.kt b/src/main/kotlin/net/moonleay/rssbot/data/database/tables/SubscriptionsTable.kt
index ada2744..de0ce39 100644
--- a/src/main/kotlin/net/moonleay/rssbot/data/database/tables/SubscriptionsTable.kt
+++ b/src/main/kotlin/net/moonleay/rssbot/data/database/tables/SubscriptionsTable.kt
@@ -28,5 +28,4 @@ object SubscriptionsTable : Table(name = "subscriptions") {
val subscriptionColor = text("subscription_color")
val subscriptionName = text("subscription_name")
val feedUrl = text("feed_url")
- val subscriptionTimestamp = long("subscription_timestamp")
}
diff --git a/src/main/kotlin/net/moonleay/rssbot/extensions/CleanUpExtension.kt b/src/main/kotlin/net/moonleay/rssbot/extensions/CleanUpExtension.kt
deleted file mode 100644
index f2abff6..0000000
--- a/src/main/kotlin/net/moonleay/rssbot/extensions/CleanUpExtension.kt
+++ /dev/null
@@ -1,39 +0,0 @@
-package net.moonleay.rssbot.extensions
-
-import com.kotlindiscord.kord.extensions.extensions.Extension
-import com.kotlindiscord.kord.extensions.extensions.ephemeralSlashCommand
-import com.kotlindiscord.kord.extensions.types.respond
-import kotlinx.coroutines.flow.filter
-import net.moonleay.rssbot.Bot
-import net.moonleay.rssbot.data.database.repository.SubscriptionRepository
-import net.moonleay.rssbot.util.EmbedColor
-import net.moonleay.rssbot.util.MessageUtil
-
-class CleanUpExtension : Extension() {
-
- override val name = "cleanup"
- override val allowApplicationCommandInDMs: Boolean
- get() = false
-
-
- override suspend fun setup() {
- ephemeralSlashCommand() {
- name = "cleanup"
- description = "Clean all messages from this bot in this channel"
- this.action {
- val user = this.user.asUser()
- this.channel.messages.filter { it.author?.id == Bot.bot.kordRef.selfId }.collect { it.delete() }
- this.respond {
- this.embeds.add(
- MessageUtil.getEmbed(
- EmbedColor.INFO,
- "Cleaned up",
- "Cleaned up all messages from this bot in this channel",
- user.username
- )
- )
- }
- }
- }
- }
-}
diff --git a/src/main/kotlin/net/moonleay/rssbot/extensions/FeedExtension.kt b/src/main/kotlin/net/moonleay/rssbot/extensions/FeedExtension.kt
index dcfbe81..06b40d1 100644
--- a/src/main/kotlin/net/moonleay/rssbot/extensions/FeedExtension.kt
+++ b/src/main/kotlin/net/moonleay/rssbot/extensions/FeedExtension.kt
@@ -106,8 +106,7 @@ class FeedExtension : Extension() {
this.channel.id.value.toLong(),
feedColor,
feedName,
- feedUrl,
- System.currentTimeMillis()
+ feedUrl
)
)
Logger.out("added feed as id ${id.resultedValues!!.first()[SubscriptionsTable.id]}")
diff --git a/src/main/kotlin/net/moonleay/rssbot/extensions/SendFeedExtension.kt b/src/main/kotlin/net/moonleay/rssbot/extensions/SendFeedExtension.kt
deleted file mode 100644
index 11cf8d9..0000000
--- a/src/main/kotlin/net/moonleay/rssbot/extensions/SendFeedExtension.kt
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * RSSBot
- * Copyright (C) 2023 moonleay
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package net.moonleay.rssbot.extensions
-
-import com.kotlindiscord.kord.extensions.commands.Arguments
-import com.kotlindiscord.kord.extensions.commands.converters.impl.string
-import com.kotlindiscord.kord.extensions.extensions.Extension
-import com.kotlindiscord.kord.extensions.extensions.ephemeralSlashCommand
-import com.kotlindiscord.kord.extensions.types.respond
-import com.overzealous.remark.Options
-import com.overzealous.remark.Remark
-import com.prof18.rssparser.RssParser
-import com.prof18.rssparser.model.RssChannel
-import com.prof18.rssparser.model.RssItem
-import dev.kord.rest.builder.message.EmbedBuilder.Limits.title
-import net.moonleay.rssbot.data.database.repository.RSSRepository
-import net.moonleay.rssbot.data.database.repository.SubscriptionRepository
-import net.moonleay.rssbot.extensions.components.FeedColor
-import net.moonleay.rssbot.util.EmbedColor
-import net.moonleay.rssbot.util.EmbedUtil
-import net.moonleay.rssbot.util.MessageUtil
-
-class SendFeedExtension : Extension() {
-
- override val name = "sendfeed"
- override val allowApplicationCommandInDMs: Boolean
- get() = false
-
-
- override suspend fun setup() {
- ephemeralSlashCommand(::StuffArguments) {
- name = "sendfeed"
- description = "Send a feed to this channel"
- this.action {
- val feedUrl = arguments.feedUrl
- val user = this.user.asUser()
- if (feedUrl == null) {
- this.respond {
- this.embeds.add(
- MessageUtil.getEmbed(
- EmbedColor.ERROR,
- "Missing Arguments",
- "You are missing one or more arguments",
- user.username
- )
- )
- }
- return@action
- }
- val parser = RssParser()
- var rss: RssChannel? = null
- runCatching { // this sucks
- rss = parser.getRssChannel(feedUrl)
- }.onFailure {
- this.respond {
- this.embeds.add(
- MessageUtil.getEmbed(
- EmbedColor.ERROR,
- "Invalid Feed",
- "The feed you provided is invalid",
- user.username
- )
- )
- }
- return@action
- }
- if (rss == null)
- return@action
- rss!!.items.forEach {
- this.respond {
- this.embeds.add(
- MessageUtil.getRSSEmbed(
- FeedColor.GREEN,
- it.author ?: "Anonymous",
- it.title ?: "Untitled",
- if (it.description == null) "No description" else Remark(EmbedUtil.getHTMLtoMarkdownOptions()).convertFragment(it.description!!),
- it.link ?: "https://moonleay.net/",
- it.image ?: "",
- if (it.link != null) EmbedUtil.getSiteLogo(it.link!!) else "https://static.moonleay.net/img/no-image.png",
- "Manual Feed",
- it.pubDate?: "unknown"
- )
- )
- }
- }
-
- }
- }
- }
-
- inner class StuffArguments : Arguments() {
- val feedUrl by string {
- this.name = "url"
- this.description = "The url of the feed to send"
- }
- }
-}
diff --git a/src/main/kotlin/net/moonleay/rssbot/jobs/FeedUpdater.kt b/src/main/kotlin/net/moonleay/rssbot/jobs/FeedUpdater.kt
index 810175c..ff712b6 100644
--- a/src/main/kotlin/net/moonleay/rssbot/jobs/FeedUpdater.kt
+++ b/src/main/kotlin/net/moonleay/rssbot/jobs/FeedUpdater.kt
@@ -18,7 +18,6 @@
package net.moonleay.rssbot.jobs
-import com.overzealous.remark.Remark
import com.prof18.rssparser.RssParser
import com.prof18.rssparser.model.RssChannel
import dev.inmo.krontab.KronScheduler
@@ -36,7 +35,6 @@ import net.moonleay.rssbot.jobs.component.ICronjob
import net.moonleay.rssbot.util.EmbedUtil
import net.moonleay.rssbot.util.Logger
import net.moonleay.rssbot.util.MessageUtil
-import net.moonleay.rssbot.util.TimeUtil
object FeedUpdater : ICronjob {
override val jobName: String
@@ -74,13 +72,7 @@ object FeedUpdater : ICronjob {
if (rss == null)
continue
for (rssData in rss!!.items) {
- if (rssData.guid == null || RSSRepository.exists(
- RSSData(
- rssData.guid!!,
- data.id
- )
- ) || TimeUtil.getUnixTimeFromStamp(rssData.pubDate!!) < data.subscriptionTimestamp
- )
+ if (rssData.guid == null || RSSRepository.exists(RSSData(rssData.guid!!, data.id)))
continue
val channel = Bot.bot.kordRef.getChannel(Snowflake(data.channelId))!!.asChannelOf()
channel.createMessage {
@@ -89,14 +81,11 @@ object FeedUpdater : ICronjob {
data.feedColor,
rssData.author ?: "Anonymous",
rssData.title ?: "Untitled",
- if (rssData.description == null) "No description" else Remark(EmbedUtil.getHTMLtoMarkdownOptions()).convertFragment(
- rssData.description!!
- ),
+ rssData.description ?: "No description",
rssData.link ?: "https://moonleay.net/",
rssData.image ?: "",
if (rssData.link != null) EmbedUtil.getSiteLogo(rssData.link!!) else "https://static.moonleay.net/img/no-image.png",
- "Manual Feed",
- rssData.pubDate ?: "unknown"
+ data.feedName,
)
)
}
diff --git a/src/main/kotlin/net/moonleay/rssbot/util/EmbedUtil.kt b/src/main/kotlin/net/moonleay/rssbot/util/EmbedUtil.kt
index 634d3ce..6ce00ca 100644
--- a/src/main/kotlin/net/moonleay/rssbot/util/EmbedUtil.kt
+++ b/src/main/kotlin/net/moonleay/rssbot/util/EmbedUtil.kt
@@ -18,8 +18,6 @@
package net.moonleay.rssbot.util
-import com.overzealous.remark.IgnoredHtmlElement
-import com.overzealous.remark.Options
import dev.kord.common.entity.ButtonStyle
import dev.kord.core.entity.Embed
import dev.kord.rest.builder.component.ActionRowBuilder
@@ -143,11 +141,4 @@ object EmbedUtil {
return "https://www.google.com/s2/favicons?domain=${str.split("/")[2]}"
}
- fun getHTMLtoMarkdownOptions(): Options {
- val o = Options()
- o.ignoredHtmlElements.add(IgnoredHtmlElement("img"))
- o.inlineLinks = true
- return o
- }
-
}
diff --git a/src/main/kotlin/net/moonleay/rssbot/util/MessageUtil.kt b/src/main/kotlin/net/moonleay/rssbot/util/MessageUtil.kt
index e01058b..d6d8ace 100644
--- a/src/main/kotlin/net/moonleay/rssbot/util/MessageUtil.kt
+++ b/src/main/kotlin/net/moonleay/rssbot/util/MessageUtil.kt
@@ -174,12 +174,11 @@ object MessageUtil {
imageUrl: String,
logo: String,
feedName: String,
- published: String,
): EmbedBuilder {
val ebb = EmbedBuilder()
val now: LocalDateTime = LocalDateTime.now()
- if (title.length > 25)
- ebb.title = title.substring(0, 25) + "..."
+ if (title.length > 250)
+ ebb.title = title.substring(0, 250) + "[...]"
else
ebb.title = title
ebb.author {
@@ -189,7 +188,7 @@ object MessageUtil {
ebb.description = "${if (description != "No description") description else ""}\n[[open full article]]($url)"
ebb.color = color.color.color
ebb.footer {
- this.text = "> rssbot, ($feedName) \n/ pub $published \n/ rel ${dtf.format(now)}"
+ this.text = "> rssbot, ($feedName) / sent at ${dtf.format(now)}"
this.icon = "https://static.moonleay.net/img/rss.png"
}
ebb.thumbnail {
diff --git a/src/main/kotlin/net/moonleay/rssbot/util/TimeUtil.kt b/src/main/kotlin/net/moonleay/rssbot/util/TimeUtil.kt
index 416d3a6..89ff4b8 100644
--- a/src/main/kotlin/net/moonleay/rssbot/util/TimeUtil.kt
+++ b/src/main/kotlin/net/moonleay/rssbot/util/TimeUtil.kt
@@ -18,13 +18,47 @@
package net.moonleay.rssbot.util
+import kotlinx.datetime.DayOfWeek
import java.time.ZonedDateTime
-import java.time.format.DateTimeFormatter
+import java.util.concurrent.TimeUnit
object TimeUtil {
- fun getUnixTimeFromStamp(input: String): Long { // Pattern: Sun, 15 Oct 2023 11:04:57 GMT
- val formatter = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss z")
- return ZonedDateTime.parse(input, formatter).toEpochSecond() * 1000
+
+ fun getTimeFormatedShortend(time2: Long, showS: Boolean): String {
+ var time = time2
+ val days: Long = TimeUnit.MILLISECONDS
+ .toDays(time)
+ time -= TimeUnit.DAYS.toMillis(days)
+ val hours: Long = TimeUnit.MILLISECONDS
+ .toHours(time)
+ time -= TimeUnit.HOURS.toMillis(hours)
+ val minutes: Long = TimeUnit.MILLISECONDS
+ .toMinutes(time)
+ time -= TimeUnit.MINUTES.toMillis(minutes)
+ val seconds: Long = TimeUnit.MILLISECONDS
+ .toSeconds(time)
+ var s = ""
+ if (days >= 1) {
+ s += days.toString() + "d "
+ }
+ if (hours >= 1) {
+ s += hours.toString() + "h "
+ }
+ if (minutes >= 1) {
+ s += minutes.toString() + "m "
+ }
+ if (seconds >= 1 && hours < 1 && showS) {
+ s += seconds.toString() + "s"
+ }
+ if (s.isEmpty() || s.isBlank()) {
+ s = "None"
+ }
+ return s
+ }
+
+ // Returns the day of the month of the monday of this week
+ fun getMondayDayOfMonth(): Int {
+ return ZonedDateTime.now().with(DayOfWeek.MONDAY).dayOfMonth
}
}