Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add named files and attachments #379

Merged
merged 3 commits into from
Sep 5, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions rest/src/main/kotlin/NamedFile.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package dev.kord.rest

import java.io.InputStream

class NamedFile(val name: String, val inputStream: InputStream) {

val url: String get() = "attachment://$name"

operator fun component1() = name
operator fun component2() = inputStream
operator fun component3() = url
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package dev.kord.rest.builder.message.create

import dev.kord.rest.NamedFile
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.io.InputStream
Expand All @@ -14,13 +15,13 @@ interface PersistentMessageCreateBuilder : MessageCreateBuilder {
/**
* The files to include as attachments.
*/
val files: MutableList<Pair<String, InputStream>>
val files: MutableList<NamedFile>

/**
* Adds a file with the [name] and [content] to the attachments.
*/
fun addFile(name: String, content: InputStream) {
files += name to content
files += NamedFile(name, content)
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package dev.kord.rest.builder.message.create

import dev.kord.common.annotation.KordPreview
import dev.kord.common.entity.optional.*
import dev.kord.rest.NamedFile
import dev.kord.rest.builder.RequestBuilder
import dev.kord.rest.builder.component.MessageComponentBuilder
import dev.kord.rest.builder.message.AllowedMentionsBuilder
Expand Down Expand Up @@ -30,7 +31,7 @@ class PublicFollowupMessageCreateBuilder

override val components: MutableList<MessageComponentBuilder> = mutableListOf()

override val files: MutableList<Pair<String, InputStream>> = mutableListOf()
override val files: MutableList<NamedFile> = mutableListOf()

override fun toRequest(): MultipartFollowupMessageCreateRequest {
return MultipartFollowupMessageCreateRequest(
Expand All @@ -41,7 +42,7 @@ class PublicFollowupMessageCreateBuilder
allowedMentions = Optional(allowedMentions).coerceToMissing().map { it.build() },
components = Optional(components).coerceToMissing().mapList { it.build() },
),
Optional(files)
files
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package dev.kord.rest.builder.message.create
import dev.kord.common.annotation.KordPreview
import dev.kord.common.entity.InteractionResponseType
import dev.kord.common.entity.optional.*
import dev.kord.rest.NamedFile
import dev.kord.rest.builder.RequestBuilder
import dev.kord.rest.builder.component.MessageComponentBuilder
import dev.kord.rest.builder.message.AllowedMentionsBuilder
Expand Down Expand Up @@ -31,7 +32,7 @@ class PublicInteractionResponseCreateBuilder

override val components: MutableList<MessageComponentBuilder> = mutableListOf()

override val files: MutableList<Pair<String, InputStream>> = mutableListOf()
override val files: MutableList<NamedFile> = mutableListOf()

override fun toRequest(): MultipartInteractionResponseCreateRequest {
return MultipartInteractionResponseCreateRequest(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import dev.kord.common.annotation.KordPreview
import dev.kord.common.entity.DiscordMessageReference
import dev.kord.common.entity.Snowflake
import dev.kord.common.entity.optional.*
import dev.kord.rest.NamedFile
import dev.kord.rest.builder.RequestBuilder
import dev.kord.rest.builder.component.MessageComponentBuilder
import dev.kord.rest.builder.message.AllowedMentionsBuilder
Expand Down Expand Up @@ -50,7 +51,7 @@ class UserMessageCreateBuilder
*/
var failIfNotExists: Boolean? = null

override val files: MutableList<Pair<String, InputStream>> = mutableListOf()
override val files: MutableList<NamedFile> = mutableListOf()

@OptIn(KordPreview::class)
override fun toRequest(): MultipartMessageCreateRequest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package dev.kord.rest.builder.message.create

import dev.kord.common.annotation.KordPreview
import dev.kord.common.entity.optional.*
import dev.kord.rest.NamedFile
import dev.kord.rest.builder.RequestBuilder
import dev.kord.rest.builder.component.MessageComponentBuilder
import dev.kord.rest.builder.message.AllowedMentionsBuilder
Expand Down Expand Up @@ -32,7 +33,7 @@ class WebhookMessageCreateBuilder

override val components: MutableList<MessageComponentBuilder> = mutableListOf()

override val files: MutableList<Pair<String, InputStream>> = mutableListOf()
override val files: MutableList<NamedFile> = mutableListOf()

@OptIn(KordPreview::class)
override fun toRequest(): MultiPartWebhookExecuteRequest {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package dev.kord.rest.builder.message.modify

import dev.kord.common.annotation.KordPreview
import dev.kord.common.entity.MessageFlag
import dev.kord.common.entity.MessageFlags
import dev.kord.common.entity.optional.Optional
Expand Down Expand Up @@ -36,10 +35,11 @@ class EphemeralInteractionResponseModifyBuilder
return MultipartInteractionResponseModifyRequest(
InteractionResponseModifyRequest(
content = state.content,
embeds = state.embeds.mapList { it.toRequest() },
allowedMentions = state.allowedMentions.map { it.build() },
flags = Optional(MessageFlags(MessageFlag.Ephemeral)),
components = state.components.mapList { it.build() },
embeds = state.embeds.mapList { it.toRequest() },
flags = Optional(MessageFlags(MessageFlag.Ephemeral))
attachments = state.attachments
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

attachments aren't declared anywhere in the builder itself

)
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package dev.kord.rest.builder.message.modify

import dev.kord.common.annotation.KordPreview
import dev.kord.common.entity.DiscordAttachment
import dev.kord.common.entity.MessageFlags
import dev.kord.common.entity.optional.Optional
import dev.kord.rest.NamedFile
import dev.kord.rest.builder.component.MessageComponentBuilder
import dev.kord.rest.builder.message.AllowedMentionsBuilder
import dev.kord.rest.builder.message.EmbedBuilder
Expand All @@ -14,7 +16,7 @@ import java.io.InputStream
*/
internal class MessageModifyStateHolder {

var files: Optional<MutableList<Pair<String, InputStream>>> = Optional.Missing()
var files: Optional<MutableList<NamedFile>> = Optional.Missing()

var content: Optional<String?> = Optional.Missing()

Expand All @@ -24,6 +26,7 @@ internal class MessageModifyStateHolder {

var allowedMentions: Optional<AllowedMentionsBuilder> = Optional.Missing()

var attachments: Optional<MutableList<DiscordAttachment>> = Optional.Missing()

var components: Optional<MutableList<MessageComponentBuilder>> = Optional.Missing()

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package dev.kord.rest.builder.message.modify

import dev.kord.common.entity.DiscordAttachment
import dev.kord.rest.NamedFile
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.io.InputStream
Expand All @@ -14,11 +16,13 @@ interface PersistentMessageModifyBuilder : MessageModifyBuilder {
/**
* The files to include as attachments
*/
var files: MutableList<Pair<String, InputStream>>?
var files: MutableList<NamedFile>?

var attachments: MutableList<DiscordAttachment>?

fun addFile(name: String, content: InputStream) {
files = (files ?: mutableListOf()).also {
it.add(name to content)
it.add(NamedFile(name, content))
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package dev.kord.rest.builder.message.modify

import dev.kord.common.annotation.KordPreview
import dev.kord.common.entity.DiscordAttachment
import dev.kord.common.entity.optional.Optional
import dev.kord.common.entity.optional.coerceToMissing
import dev.kord.common.entity.optional.delegate.delegate
import dev.kord.common.entity.optional.map
import dev.kord.common.entity.optional.mapList
import dev.kord.rest.NamedFile
import dev.kord.rest.builder.RequestBuilder
import dev.kord.rest.builder.component.MessageComponentBuilder
import dev.kord.rest.builder.message.AllowedMentionsBuilder
Expand All @@ -21,7 +23,9 @@ class PublicFollowupMessageModifyBuilder

private var state = MessageModifyStateHolder()

override var files: MutableList<Pair<String, InputStream>>? by state::files.delegate()
override var files: MutableList<NamedFile>? by state::files.delegate()

override var attachments: MutableList<DiscordAttachment>? by state::attachments.delegate()

override var content: String? by state::content.delegate()

Expand All @@ -38,7 +42,8 @@ class PublicFollowupMessageModifyBuilder
content = state.content,
embeds = state.embeds.mapList { it.toRequest() },
allowedMentions = state.allowedMentions.map { it.build() },
components = Optional(components).coerceToMissing().mapList { it.build() },
components = state.components.mapList { it.build() },
attachments = state.attachments
),
state.files
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package dev.kord.rest.builder.message.modify

import dev.kord.common.annotation.KordPreview
import dev.kord.common.entity.DiscordAttachment
import dev.kord.common.entity.optional.Optional
import dev.kord.common.entity.optional.coerceToMissing
import dev.kord.common.entity.optional.delegate.delegate
import dev.kord.common.entity.optional.map
import dev.kord.common.entity.optional.mapList
import dev.kord.rest.NamedFile
import dev.kord.rest.builder.RequestBuilder
import dev.kord.rest.builder.component.MessageComponentBuilder
import dev.kord.rest.builder.message.AllowedMentionsBuilder
import dev.kord.rest.builder.message.EmbedBuilder
import dev.kord.rest.json.request.InteractionResponseModifyRequest
import dev.kord.rest.json.request.MultipartInteractionResponseModifyRequest
import java.io.InputStream


class PublicInteractionResponseModifyBuilder
Expand All @@ -21,7 +21,9 @@ class PublicInteractionResponseModifyBuilder

private var state = MessageModifyStateHolder()

override var files: MutableList<Pair<String, InputStream>>? by state::files.delegate()
override var files: MutableList<NamedFile>? by state::files.delegate()

override var attachments: MutableList<DiscordAttachment>? by state::attachments.delegate()

override var content: String? by state::content.delegate()

Expand All @@ -38,7 +40,8 @@ class PublicInteractionResponseModifyBuilder
content = state.content,
embeds = state.embeds.mapList { it.toRequest() },
allowedMentions = state.allowedMentions.map { it.build() },
components = Optional(components).coerceToMissing().mapList { it.build() },
components = state.components.mapList { it.build() },
attachments = state.attachments
),
state.files
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,51 +1,49 @@
package dev.kord.rest.builder.message.modify

import dev.kord.common.annotation.KordPreview
import dev.kord.common.entity.InteractionResponseType
import dev.kord.common.entity.MessageFlags
import dev.kord.common.entity.optional.coerceToMissing
import dev.kord.common.entity.optional.*
import dev.kord.common.entity.optional.delegate.delegate
import dev.kord.common.entity.optional.map
import dev.kord.common.entity.optional.mapList
import dev.kord.common.entity.optional.optional
import dev.kord.rest.NamedFile
import dev.kord.rest.builder.RequestBuilder
import dev.kord.rest.builder.component.MessageComponentBuilder
import dev.kord.rest.builder.message.AllowedMentionsBuilder
import dev.kord.rest.builder.message.EmbedBuilder
import dev.kord.rest.builder.message.create.PersistentMessageCreateBuilder
import dev.kord.rest.json.request.InteractionApplicationCommandCallbackData
import dev.kord.rest.json.request.InteractionResponseCreateRequest
import dev.kord.rest.json.request.MultipartInteractionResponseCreateRequest
import java.io.InputStream


class UpdatePublicMessageInteractionResponseCreateBuilder :
PersistentMessageModifyBuilder,
PersistentMessageCreateBuilder,
RequestBuilder<MultipartInteractionResponseCreateRequest> {

private var state = MessageModifyStateHolder()

override var files: MutableList<Pair<String, InputStream>>? by state::files.delegate()
override var files: MutableList<NamedFile> = mutableListOf()

override var content: String? by state::content.delegate()
override var content: String? = null

override var embeds: MutableList<EmbedBuilder>? by state::embeds.delegate()
override var tts: Boolean? = null

override var allowedMentions: AllowedMentionsBuilder? by state::allowedMentions.delegate()
override var embeds: MutableList<EmbedBuilder> = mutableListOf()

override var components: MutableList<MessageComponentBuilder>? by state::components.delegate()
override var allowedMentions: AllowedMentionsBuilder? = null

override var components: MutableList<MessageComponentBuilder> = mutableListOf()

override fun toRequest(): MultipartInteractionResponseCreateRequest {
return MultipartInteractionResponseCreateRequest(
InteractionResponseCreateRequest(
InteractionResponseType.UpdateMessage,
InteractionApplicationCommandCallbackData(
content = state.content,
embeds = state.embeds.mapList { it.toRequest() },
allowedMentions = state.allowedMentions.map { it.build() },
components = state.components.mapList { it.build() }
content = Optional(content).coerceToMissing(),
embeds = Optional(embeds).mapList { it.toRequest() },
allowedMentions = Optional(allowedMentions).map { it.build() },
components = Optional(components).mapList { it.build() },
tts = Optional(tts).coerceToMissing().toPrimitive()
).optional()
),
state.files
Optional(files)
)

}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,28 @@
package dev.kord.rest.builder.message.modify

import dev.kord.common.annotation.KordPreview
import dev.kord.common.entity.DiscordAttachment
import dev.kord.common.entity.MessageFlags
import dev.kord.common.entity.optional.delegate.delegate
import dev.kord.common.entity.optional.map
import dev.kord.common.entity.optional.mapList
import dev.kord.rest.NamedFile
import dev.kord.rest.builder.RequestBuilder
import dev.kord.rest.builder.component.MessageComponentBuilder
import dev.kord.rest.builder.message.AllowedMentionsBuilder
import dev.kord.rest.builder.message.EmbedBuilder
import dev.kord.rest.json.request.MessageEditPatchRequest
import dev.kord.rest.json.request.MultipartMessagePatchRequest
import java.io.InputStream

class UserMessageModifyBuilder
: PersistentMessageModifyBuilder,
RequestBuilder<MultipartMessagePatchRequest> {

private var state = MessageModifyStateHolder()

override var files: MutableList<Pair<String, InputStream>>? by state::files.delegate()
override var files: MutableList<NamedFile>? by state::files.delegate()

override var attachments: MutableList<DiscordAttachment>? by state::attachments.delegate()

override var content: String? by state::content.delegate()

Expand All @@ -39,7 +42,8 @@ class UserMessageModifyBuilder
embeds = state.embeds.mapList { it.toRequest() },
flags = state.flags,
allowedMentions = state.allowedMentions.map { it.build() },
components = state.components.mapList { it.build() }
components = state.components.mapList { it.build() },
attachments = state.attachments
),
state.files,
)
Expand Down
Loading