@@ -10,8 +10,10 @@ import net.dv8tion.jda.api.events.interaction.command.GenericCommandInteractionE
1010import net.dv8tion.jda.api.interactions.commands.Command
1111import net.dv8tion.jda.api.interactions.commands.CommandAutoCompleteInteraction
1212import net.dv8tion.jda.api.requests.restaction.CommandListUpdateAction
13+ import net.dv8tion.jda.api.utils.MarkdownUtil
1314import org.jsoup.Jsoup
1415import org.yttr.glyph.bot.wrappers.Wikipedia
16+ import java.time.Instant
1517
1618class WikipediaModule (private val wikipedia : Wikipedia = Wikipedia ()) : Module {
1719 override fun boot (jda : JDA ) {
@@ -43,6 +45,8 @@ class WikipediaModule(private val wikipedia: Wikipedia = Wikipedia()) : Module {
4345 }
4446
4547 private suspend fun summarizeArticle (event : GenericCommandInteractionEvent ) {
48+ // event.deferReply().queue()
49+
4650 val result = event.getOption(" article" )?.asLong?.let { wikipedia.extract(it) }
4751
4852 if (result == null ) {
@@ -52,10 +56,11 @@ class WikipediaModule(private val wikipedia: Wikipedia = Wikipedia()) : Module {
5256
5357 val embed = Embed {
5458 title = result.title
55- description = Jsoup .parse (result.extract).text( ).let { extract ->
56- extract.take(MAX_LENGTH ) + if (extract.length > MAX_LENGTH ) " ..." else " "
59+ description = formatDescription (result.extract).let { extract ->
60+ extract.take(MAX_LENGTH ).substringBeforeLast( " " , " " ) + if (extract.length > MAX_LENGTH ) " ..." else " "
5761 }
5862 url = " https://en.wikipedia.org/wiki/${result.title.replace(" " , " _" )} "
63+ timestamp = Instant .now()
5964
6065 footer {
6166 name = " Wikipedia"
@@ -65,6 +70,28 @@ class WikipediaModule(private val wikipedia: Wikipedia = Wikipedia()) : Module {
6570 event.replyEmbeds(embed).queue()
6671 }
6772
73+ private fun formatDescription (extract : String ): String {
74+ val soup = Jsoup .parse(extract)
75+
76+ for (link in soup.select(" a" )) {
77+ link.text(MarkdownUtil .maskedLink(link.text(), link.attr(" href" )))
78+ }
79+
80+ for (bold in soup.select(" b" )) {
81+ bold.text(MarkdownUtil .bold(bold.text()))
82+ }
83+
84+ for (italic in soup.select(" i" )) {
85+ italic.text(MarkdownUtil .italics(italic.text()))
86+ }
87+
88+ for (sup in soup.select(" sup" )) {
89+ sup.prependText(" ^" )
90+ }
91+
92+ return soup.text()
93+ }
94+
6895 companion object {
6996 private const val MAX_RESULTS = 10
7097 private const val MAX_LENGTH = 512
0 commit comments