Skip to content
This repository was archived by the owner on Jun 23, 2021. It is now read-only.

Commit 894fdd2

Browse files
committed
Add followup messages and methods for deleting & editing responses
1 parent 19eed20 commit 894fdd2

File tree

4 files changed

+107
-4
lines changed

4 files changed

+107
-4
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>de.cerus</groupId>
88
<artifactId>jda-slash-commands</artifactId>
9-
<version>1.0.0</version>
9+
<version>1.0.1-SNAPSHOT</version>
1010

1111
<properties>
1212
<maven.compiler.source>11</maven.compiler.source>

src/main/java/de/cerus/jdasc/JDASlashCommands.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ public static CompletableFuture<Long> submitGuildCommand(final ApplicationComman
127127
*/
128128
public static CompletableFuture<Void> submitInteractionResponse(final Interaction interaction, final InteractionResponse response) {
129129
final CompletableFuture<Void> future = new CompletableFuture<>();
130-
discordHttpClient.submitInteractionReply(interaction, response).whenComplete((rsp, t) -> {
130+
discordHttpClient.submitInteractionResponse(interaction, response).whenComplete((rsp, t) -> {
131131
if (t != null) {
132132
future.completeExceptionally(t);
133133
} else {

src/main/java/de/cerus/jdasc/http/DiscordHttpClient.java

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@
22

33
import com.google.gson.Gson;
44
import com.google.gson.GsonBuilder;
5+
import com.google.gson.JsonObject;
56
import de.cerus.jdasc.command.ApplicationCommand;
67
import de.cerus.jdasc.command.ApplicationCommandOptionType;
78
import de.cerus.jdasc.gson.ApplicationCommandOptionTypeTypeAdapter;
89
import de.cerus.jdasc.gson.InteractionResponseTypeAdapter;
910
import de.cerus.jdasc.gson.InteractionResponseTypeTypeAdapter;
1011
import de.cerus.jdasc.gson.MessageEmbedTypeAdapter;
1112
import de.cerus.jdasc.interaction.Interaction;
13+
import de.cerus.jdasc.interaction.followup.FollowupMessage;
14+
import de.cerus.jdasc.interaction.response.InteractionApplicationCommandCallbackData;
1215
import de.cerus.jdasc.interaction.response.InteractionResponse;
1316
import de.cerus.jdasc.interaction.response.InteractionResponseType;
1417
import java.io.IOException;
@@ -27,7 +30,6 @@
2730
public class DiscordHttpClient {
2831

2932
private final Gson gson;
30-
3133
private final String applicationId;
3234
private final String botToken;
3335
private final ExecutorService executorService;
@@ -60,7 +62,57 @@ public DiscordHttpClient(final JDA jda, final String applicationId, final String
6062
.create();
6163
}
6264

63-
public CompletableFuture<Response> submitInteractionReply(final Interaction interaction, final InteractionResponse response) {
65+
public CompletableFuture<Response> deleteFollowupMessage(final Interaction interaction, final long messageId) {
66+
return this.execute(new Request.Builder()
67+
.url(String.format("https://discord.com/api/v8/webhooks/%s/%s/messages/%d", this.applicationId, interaction.getToken(), messageId))
68+
.delete()
69+
.addHeader("Authorization", "Bot " + this.botToken)
70+
.build(), 200, 204);
71+
}
72+
73+
public CompletableFuture<Response> editFollowupMessage(final Interaction interaction, final long messageId, final FollowupMessage message) {
74+
final JsonObject jsonObject = this.gson.toJsonTree(message).getAsJsonObject();
75+
jsonObject.remove("tts");
76+
jsonObject.remove("username");
77+
jsonObject.remove("avatar_url");
78+
final String body = jsonObject.toString();
79+
80+
return this.execute(new Request.Builder()
81+
.url(String.format("https://discord.com/api/v8/webhooks/%s/%s/messages/%d", this.applicationId, interaction.getToken(), messageId))
82+
.patch(RequestBody.create(body, MediaType.get("application/json; charset=utf-8")))
83+
.addHeader("Authorization", "Bot " + this.botToken)
84+
.build(), 200, 204);
85+
}
86+
87+
public CompletableFuture<Response> submitFollowupMessage(final Interaction interaction, final FollowupMessage message) {
88+
final String body = this.gson.toJson(message);
89+
return this.execute(new Request.Builder()
90+
.url(String.format("https://discord.com/api/v8/webhooks/%s/%s", this.applicationId, interaction.getToken()))
91+
.post(RequestBody.create(body, MediaType.get("application/json; charset=utf-8")))
92+
.addHeader("Authorization", "Bot " + this.botToken)
93+
.build(), 200, 204, 201);
94+
}
95+
96+
public CompletableFuture<Response> deleteInteractionResponse(final Interaction interaction) {
97+
return this.execute(new Request.Builder()
98+
.url(String.format("https://discord.com/api/v8/webhooks/%s/%s/messages/@original", this.applicationId, interaction.getToken()))
99+
.delete()
100+
.addHeader("Authorization", "Bot " + this.botToken)
101+
.build(), 204);
102+
}
103+
104+
public CompletableFuture<Response> editInteractionResponse(final Interaction interaction, final InteractionApplicationCommandCallbackData data) {
105+
final JsonObject payload = this.gson.toJsonTree(data).getAsJsonObject();
106+
payload.remove("tts");
107+
final String body = payload.toString();
108+
return this.execute(new Request.Builder()
109+
.url(String.format("https://discord.com/api/v8/webhooks/%s/%s/messages/@original", this.applicationId, interaction.getToken()))
110+
.patch(RequestBody.create(body, MediaType.get("application/json; charset=utf-8")))
111+
.addHeader("Authorization", "Bot " + this.botToken)
112+
.build(), 200, 204);
113+
}
114+
115+
public CompletableFuture<Response> submitInteractionResponse(final Interaction interaction, final InteractionResponse response) {
64116
final String body = this.gson.toJson(response);
65117
return this.execute(new Request.Builder()
66118
.url(String.format("https://discord.com/api/v8/interactions/%d/%s/callback", interaction.getId(), interaction.getToken()))
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package de.cerus.jdasc.interaction.followup;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
import java.util.List;
5+
import net.dv8tion.jda.api.entities.MessageEmbed;
6+
7+
/**
8+
* Represents a followup message. Basically the same as a webhook message.
9+
*/
10+
public class FollowupMessage {
11+
12+
private final String content;
13+
private final String username;
14+
@SerializedName("avatar_url")
15+
private final String avatarUrl;
16+
private final boolean tts;
17+
private final List<MessageEmbed> embeds;
18+
19+
public FollowupMessage(final String content,
20+
final String username,
21+
final String avatarUrl,
22+
final boolean tts,
23+
final List<MessageEmbed> embeds) {
24+
this.content = content;
25+
this.username = username;
26+
this.avatarUrl = avatarUrl;
27+
this.tts = tts;
28+
this.embeds = embeds;
29+
}
30+
31+
public String getContent() {
32+
return this.content;
33+
}
34+
35+
public String getUsername() {
36+
return this.username;
37+
}
38+
39+
public String getAvatarUrl() {
40+
return this.avatarUrl;
41+
}
42+
43+
public boolean isTts() {
44+
return this.tts;
45+
}
46+
47+
public List<MessageEmbed> getEmbeds() {
48+
return this.embeds;
49+
}
50+
51+
}

0 commit comments

Comments
 (0)