Skip to content

Commit 071b7ae

Browse files
committed
Fix bug with exceeding message length limit because of wrapper
1 parent 78d162a commit 071b7ae

File tree

3 files changed

+17
-12
lines changed

3 files changed

+17
-12
lines changed

Procfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
web: build/install/discord-stats-bot/bin/discord-stats-bot --printErrorsToDiscord --fetchMessages
1+
web: build/install/discord-stats-bot/bin/discord-stats-bot --printErrorsToDiscord --fetchMessages --chunkSize=10000

src/main/kotlin/com/vchernogorov/discordbot/OwnerCommandListener.kt

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,7 @@ class OwnerCommandListener(val printErrorsToDiscord: Boolean,
6060
val writer = OutputStreamWriter(baos)
6161
se.printUserMessage(writer, null, 80)
6262
writer.flush()
63-
val splittedHelpMessage = String(baos.toByteArray(), StandardCharsets.UTF_8).split("\n")
64-
val helpMessage = splittedHelpMessage.reduceUntil({ acc, s -> acc.length + s.length > 2000 }) { acc, s ->
65-
acc + "\n" + s
66-
}
67-
helpMessage.forEach {
68-
event.send("```$it```")
69-
}
63+
event.send(String(baos.toByteArray(), StandardCharsets.UTF_8), true)
7064
} catch (e: Exception) {
7165
if (printErrorsToDiscord) {
7266
if (PermissionUtil.checkPermission(event.textChannel, event.guild.selfMember, Permission.MESSAGE_WRITE)) {

src/main/kotlin/com/vchernogorov/discordbot/Utility.kt

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,22 @@ private val logger = KotlinLogging.logger("Utility")
1313
inline fun <reified T> Gson.fromJson(json: String) =
1414
this.fromJson<T>(json, object : TypeToken<T>() {}.type)
1515

16-
fun MessageReceivedEvent.send(message: String) =
17-
textChannel.sendMessage(net.dv8tion.jda.core.MessageBuilder().append(message).build()).complete()
16+
fun MessageReceivedEvent.send(message: String, useWrap: Boolean = false) {
17+
send(MessageBuilder().append(message), useWrap)
18+
}
19+
20+
fun MessageReceivedEvent.send(messageBuilder: MessageBuilder, useWrap: Boolean = false) {
21+
val splittedMessage = messageBuilder.stringBuilder.split("\n")
22+
val maxLength = if (useWrap) 1994 else 2000
23+
val boundedMessages = splittedMessage.reduceUntil({ acc, s -> acc.length + s.length > maxLength }) { acc, s ->
24+
acc + "\n" + s
25+
}
26+
boundedMessages.forEach {
27+
if (useWrap) textChannel.sendMessage(MessageBuilder().append("```$it```").build()).complete()
28+
else textChannel.sendMessage(MessageBuilder().append(it).build()).complete()
29+
}
30+
}
1831

19-
fun MessageReceivedEvent.send(messageBuilder: MessageBuilder) =
20-
textChannel.sendMessage(messageBuilder.build()).complete()
2132

2233
fun MessageChannel.getLatestMessageIdSafe(): String? {
2334
return try {

0 commit comments

Comments
 (0)