Skip to content

Commit e241d3e

Browse files
authored
Merge branch 'main' into slash-commands
2 parents 84c101e + 0f978cc commit e241d3e

File tree

12 files changed

+498
-40
lines changed

12 files changed

+498
-40
lines changed

api/src/main/java/com/javadiscord/jdi/core/api/ChannelRequest.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -225,14 +225,8 @@ public AsyncResponse<List<ThreadMember>> listThreadMembers(ListThreadMembersBuil
225225
return responseParser.callAndParseList(ThreadMember.class, builder.build());
226226
}
227227

228-
public AsyncResponse<Channel> modifyChannel(
229-
long channelId,
230-
String name,
231-
String base64EncodedIcon
232-
) {
233-
return responseParser.callAndParse(
234-
Channel.class, new ModifyChannelRequest(channelId, name, base64EncodedIcon)
235-
);
228+
public AsyncResponse<Channel> modifyChannel(ModifyChannelBuilder builder) {
229+
return responseParser.callAndParse(Channel.class, builder.build());
236230
}
237231

238232
public AsyncResponse<Void> pinMessage(long channelId, long messageId) {

api/src/main/java/com/javadiscord/jdi/core/api/EmojiRequest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,16 @@ Emoji.class, new CreateEmojiRequest(guildId, name, image, roles)
2121
);
2222
}
2323

24-
public AsyncResponse<Emoji> deleteEmoji(long emojiId) {
25-
return responseParser.callAndParse(Emoji.class, new DeleteEmojiRequest(guildId, emojiId));
24+
public AsyncResponse<Void> deleteEmoji(long emojiId) {
25+
return responseParser.callAndParse(Void.class, new DeleteEmojiRequest(guildId, emojiId));
2626
}
2727

2828
public AsyncResponse<Emoji> getEmoji(long emojiId) {
2929
return responseParser.callAndParse(Emoji.class, new GetEmojiRequest(guildId, emojiId));
3030
}
3131

32-
public AsyncResponse<Emoji> getEmojis() {
33-
return responseParser.callAndParse(Emoji.class, new GetEmojisRequest(guildId));
32+
public AsyncResponse<List<Emoji>> getEmojis() {
33+
return responseParser.callAndParseList(Emoji.class, new GetEmojisRequest(guildId));
3434
}
3535

3636
public AsyncResponse<Emoji> modifyEmoji(ModifyEmojiBuilder builder) {

api/src/main/java/com/javadiscord/jdi/core/api/builders/CreateMessageBuilder.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.javadiscord.jdi.core.api.builders;
22

33
import java.nio.file.Path;
4-
import java.util.ArrayList;
54
import java.util.List;
65
import java.util.Optional;
76

@@ -22,8 +21,7 @@ public class CreateMessageBuilder {
2221
private Optional<List<Integer>> components;
2322
private Optional<List<Long>> stickerIds;
2423
private Optional<List<Path>> files;
25-
private Optional<String> payloadJson;
26-
private List<MessageAttachment> attachments;
24+
private Optional<List<MessageAttachment>> attachments;
2725
private Optional<Integer> flags;
2826
private Optional<Boolean> enforceNonce;
2927

@@ -38,8 +36,7 @@ public CreateMessageBuilder(long channelId) {
3836
this.components = Optional.empty();
3937
this.stickerIds = Optional.empty();
4038
this.files = Optional.empty();
41-
this.payloadJson = Optional.empty();
42-
this.attachments = new ArrayList<>();
39+
this.attachments = Optional.empty();
4340
this.flags = Optional.empty();
4441
this.enforceNonce = Optional.empty();
4542
}
@@ -89,13 +86,8 @@ public CreateMessageBuilder files(List<Path> files) {
8986
return this;
9087
}
9188

92-
public CreateMessageBuilder payloadJson(String payloadJson) {
93-
this.payloadJson = Optional.of(payloadJson);
94-
return this;
95-
}
96-
9789
public CreateMessageBuilder attachments(List<MessageAttachment> attachments) {
98-
this.attachments = attachments;
90+
this.attachments = Optional.of(attachments);
9991
return this;
10092
}
10193

@@ -121,7 +113,6 @@ public CreateMessageRequest build() {
121113
components,
122114
stickerIds,
123115
files,
124-
payloadJson,
125116
attachments,
126117
flags,
127118
enforceNonce
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.javadiscord.jdi.core.api.builders;
2+
3+
import java.util.Optional;
4+
5+
import com.javadiscord.jdi.internal.api.channel.ModifyChannelRequest;
6+
7+
public class ModifyChannelBuilder {
8+
private final long channelId;
9+
private Optional<String> name;
10+
private Optional<String> base64EncodedIcon;
11+
12+
public ModifyChannelBuilder(long channelId) {
13+
this.channelId = channelId;
14+
this.name = Optional.empty();
15+
this.base64EncodedIcon = Optional.empty();
16+
}
17+
18+
public ModifyChannelBuilder name(String name) {
19+
this.name = Optional.of(name);
20+
return this;
21+
}
22+
23+
public ModifyChannelBuilder base64EncodedIcon(String base64EncodedIcon) {
24+
this.base64EncodedIcon = Optional.of(base64EncodedIcon);
25+
return this;
26+
}
27+
28+
public ModifyChannelRequest build() {
29+
return new ModifyChannelRequest(channelId, name, base64EncodedIcon);
30+
}
31+
}

api/src/main/java/com/javadiscord/jdi/internal/api/channel/CreateMessageRequest.java

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
11
package com.javadiscord.jdi.internal.api.channel;
22

3+
import java.io.FileNotFoundException;
34
import java.nio.file.Path;
45
import java.util.HashMap;
56
import java.util.List;
67
import java.util.Map;
78
import java.util.Optional;
89

10+
import com.javadiscord.jdi.core.api.utils.DiscordImageUtil;
911
import com.javadiscord.jdi.core.models.channel.ChannelMention;
1012
import com.javadiscord.jdi.core.models.message.MessageAttachment;
1113
import com.javadiscord.jdi.core.models.message.MessageReference;
1214
import com.javadiscord.jdi.core.models.message.embed.Embed;
1315
import com.javadiscord.jdi.internal.api.DiscordRequest;
1416
import com.javadiscord.jdi.internal.api.DiscordRequestBuilder;
1517

18+
import com.github.mizosoft.methanol.MediaType;
1619
import com.github.mizosoft.methanol.MultipartBodyPublisher;
1720

1821
public record CreateMessageRequest(
@@ -26,18 +29,18 @@ public record CreateMessageRequest(
2629
Optional<List<Integer>> components,
2730
Optional<List<Long>> stickerIds,
2831
Optional<List<Path>> files,
29-
Optional<String> payloadJson,
30-
List<MessageAttachment> attachments,
32+
Optional<List<MessageAttachment>> attachments,
3133
Optional<Integer> flags,
3234
Optional<Boolean> enforceNonce
3335
) implements DiscordRequest {
3436

3537
/** TODO: Add functionality for the enforceNonce flag */
3638
@Override
3739
public DiscordRequestBuilder create() {
38-
MultipartBodyPublisher.Builder bodyBuilder = MultipartBodyPublisher.newBuilder();
40+
MultipartBodyPublisher.Builder multiPartBody = MultipartBodyPublisher.newBuilder();
3941

4042
Map<String, Object> body = new HashMap<>();
43+
4144
content.ifPresent(val -> body.put("content", val));
4245
nonce.ifPresent(val -> body.put("nonce", val));
4346
tts.ifPresent(val -> body.put("tts", val));
@@ -47,16 +50,39 @@ public DiscordRequestBuilder create() {
4750
components.ifPresent(val -> body.put("components", val));
4851
stickerIds.ifPresent(val -> body.put("sticker_ids", val));
4952
flags.ifPresent(val -> body.put("flags", val));
53+
54+
attachments.ifPresent(val -> body.put("attachments", val));
55+
5056
enforceNonce.ifPresent(val -> body.put("enforce_nonce", val));
5157

52-
if (payloadJson.isPresent()) {
58+
if (files.isPresent()) {
59+
List<Path> f = files.get();
60+
for (int i = 0; i < f.size(); i++) {
61+
try {
62+
Path path = f.get(i);
63+
String name = "files[" + i + "]";
64+
65+
String extension = DiscordImageUtil.getExtension(path);
66+
67+
switch (extension) {
68+
case "png" -> multiPartBody.filePart(name, path, MediaType.IMAGE_PNG);
69+
case "jpg", "jpeg" ->
70+
multiPartBody.filePart(name, path, MediaType.IMAGE_JPEG);
71+
case "gif" -> multiPartBody.filePart(name, path, MediaType.IMAGE_GIF);
72+
default -> multiPartBody.filePart(name, path, MediaType.ANY);
73+
}
74+
75+
} catch (FileNotFoundException e) {
76+
throw new RuntimeException(e);
77+
}
78+
}
5379

54-
bodyBuilder.textPart("payload_json", body);
80+
body.forEach(multiPartBody::textPart);
5581

5682
return new DiscordRequestBuilder()
5783
.post()
5884
.path("/channels/%s/messages".formatted(channelId))
59-
.multipartBody(bodyBuilder.build());
85+
.multipartBody(multiPartBody.build());
6086
}
6187

6288
return new DiscordRequestBuilder()

api/src/main/java/com/javadiscord/jdi/internal/api/channel/CreateReactionRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public DiscordRequestBuilder create() {
1515
.put()
1616
.path(
1717
"/channels/%s/messages/%s/reactions/%s/@me"
18-
.formatted(channelId, messageId, emoji)
18+
.formatted(channelId, messageId, ":%s:%d".formatted(emoji.name(), emoji.id()))
1919
);
2020
}
2121
}

api/src/main/java/com/javadiscord/jdi/internal/api/channel/FetchChannelMessagesRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public DiscordRequestBuilder create() {
3232
after.ifPresent(val -> requestBuilder.queryParam("after", val));
3333

3434
requestBuilder.queryParam("limit", limit);
35-
requestBuilder.path("/channels/%s".formatted(channelId));
35+
requestBuilder.path("/channels/%s/messages".formatted(channelId));
3636
return requestBuilder;
3737
}
3838
}
Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,28 @@
11
package com.javadiscord.jdi.internal.api.channel;
22

3+
import java.util.HashMap;
34
import java.util.Map;
5+
import java.util.Optional;
46

57
import com.javadiscord.jdi.internal.api.DiscordRequest;
68
import com.javadiscord.jdi.internal.api.DiscordRequestBuilder;
79

810
public record ModifyChannelRequest(
911
long channelId,
10-
String name,
11-
String base64EncodedIcon
12+
Optional<String> name,
13+
Optional<String> base64EncodedIcon
1214
) implements DiscordRequest {
1315

1416
@Override
1517
public DiscordRequestBuilder create() {
18+
Map<String, Object> body = new HashMap<>();
19+
20+
name.ifPresent(val -> body.put("name", val));
21+
base64EncodedIcon.ifPresent(val -> body.put("icon", val));
22+
1623
return new DiscordRequestBuilder()
1724
.patch()
1825
.path("/channels/%s".formatted(channelId))
19-
.body(
20-
Map.of(
21-
"name", name,
22-
"icon", base64EncodedIcon
23-
)
24-
);
26+
.body(body);
2527
}
2628
}

0 commit comments

Comments
 (0)