Skip to content

Commit e4df609

Browse files
committed
More QoL updates
1 parent b692e60 commit e4df609

File tree

3 files changed

+26
-6
lines changed

3 files changed

+26
-6
lines changed

src/main/kotlin/me/devoxin/flight/api/context/Context.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package me.devoxin.flight.api.context
22

33
import me.devoxin.flight.api.CommandClient
44
import me.devoxin.flight.internal.entities.Executable
5+
import net.dv8tion.jda.api.EmbedBuilder
56
import net.dv8tion.jda.api.JDA
67
import net.dv8tion.jda.api.entities.Guild
78
import net.dv8tion.jda.api.entities.Member
@@ -37,11 +38,30 @@ interface Context {
3738
val guildChannel: GuildMessageChannel?
3839
val isFromGuild: Boolean
3940

41+
/**
42+
* Sends "Bot is thinking..." for slash commands, or a typing indicator for message commands.
43+
*/
44+
fun think(ephemeral: Boolean = false): CompletableFuture<*> {
45+
return asSlashContext?.defer0(ephemeral)
46+
?: messageChannel.sendTyping().submit()
47+
}
48+
49+
/**
50+
* Responds to the event. This differs from [send] in that it'll fulfill the "Bot is thinking..." message
51+
* for slash commands.
52+
*/
4053
fun respond(content: String): CompletableFuture<*> {
4154
return asSlashContext?.respond0(MessageCreateData.fromContent(content))
4255
?: messageChannel.sendMessage(content).submit()
4356
}
4457

58+
fun respond(embed: EmbedBuilder.() -> Unit): CompletableFuture<*> {
59+
val create = MessageCreateData.fromEmbeds(EmbedBuilder().apply(embed).build())
60+
61+
return asSlashContext?.respond0(create)
62+
?: messageChannel.sendMessage(create).submit()
63+
}
64+
4565
fun respond(message: MessageCreateData): CompletableFuture<*> {
4666
return asSlashContext?.respond0(message)
4767
?: messageChannel.sendMessage(message).submit()

src/main/kotlin/me/devoxin/flight/api/context/MessageContext.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import net.dv8tion.jda.api.requests.RestAction
1515
import net.dv8tion.jda.api.utils.FileUpload
1616
import net.dv8tion.jda.api.utils.messages.MessageCreateBuilder
1717
import net.dv8tion.jda.api.utils.messages.MessageCreateData
18+
import java.util.concurrent.CompletableFuture
1819
import java.util.regex.Pattern
1920

2021
class MessageContext(

src/main/kotlin/me/devoxin/flight/api/context/SlashContext.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,18 @@ class SlashContext(
3232
private set
3333

3434
fun defer(ephemeral: Boolean = false) {
35-
if (!deferred) { // Idempotency handling
36-
event.deferReply(ephemeral).queue { deferred = true }
37-
}
35+
defer0(ephemeral)
3836
}
3937

40-
suspend fun deferAsync(ephemeral: Boolean): InteractionHook {
38+
suspend fun deferAsync(ephemeral: Boolean = false) = defer0(ephemeral).await()
39+
40+
internal fun defer0(ephemeral: Boolean): CompletableFuture<InteractionHook> {
4141
if (!deferred) { // Idempotency handling
4242
return event.deferReply(ephemeral).submit()
4343
.thenApply { deferred = true; it }
44-
.await()
4544
}
4645

47-
return event.hook
46+
return CompletableFuture.completedFuture(event.hook)
4847
}
4948

5049
fun reply(content: String, ephemeral: Boolean = false) {

0 commit comments

Comments
 (0)