Skip to content

Commit 832f8ec

Browse files
committed
handle 204's as an expected response
1 parent c923c66 commit 832f8ec

12 files changed

+58
-53
lines changed

src/main/java/vc/commands/ChatSearchCommand.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,14 @@
44
import discord4j.core.event.domain.interaction.ButtonInteractionEvent;
55
import discord4j.core.event.domain.interaction.ChatInputInteractionEvent;
66
import discord4j.core.event.domain.interaction.DeferrableInteractionEvent;
7-
import discord4j.core.object.command.ApplicationCommandInteractionOption;
8-
import discord4j.core.object.command.ApplicationCommandInteractionOptionValue;
97
import discord4j.core.object.entity.Message;
108
import discord4j.core.spec.EmbedCreateSpec;
119
import discord4j.rest.util.Color;
1210
import org.slf4j.Logger;
1311
import org.springframework.stereotype.Component;
1412
import reactor.core.publisher.Mono;
1513
import vc.api.model.ProfileDataImpl;
14+
import vc.openapi.handler.ApiException;
1615
import vc.openapi.handler.ChatsApi;
1716
import vc.openapi.model.ChatSearchResponse;
1817

@@ -40,9 +39,7 @@ public String getName() {
4039

4140
@Override
4241
public Mono<Message> handle(final ChatInputInteractionEvent event) {
43-
Optional<String> wordOptional = event.getOption("word")
44-
.flatMap(ApplicationCommandInteractionOption::getValue)
45-
.map(ApplicationCommandInteractionOptionValue::asString);
42+
Optional<String> wordOptional = event.getOptionAsString("word");
4643
if (wordOptional.isEmpty()) {
4744
return error(event, "No word supplied");
4845
}
@@ -61,9 +58,7 @@ public Mono<Message> handle(final ChatInputInteractionEvent event) {
6158
} catch (Exception e) {
6259
return error(event, "Invalid date. Required format: YYYY-MM-DD");
6360
}
64-
int page = event.getOption("page")
65-
.flatMap(ApplicationCommandInteractionOption::getValue)
66-
.map(ApplicationCommandInteractionOptionValue::asLong)
61+
int page = event.getOptionAsLong("page")
6762
.map(Long::intValue)
6863
.orElse(1);
6964
if (page <= 0)
@@ -73,13 +68,16 @@ public Mono<Message> handle(final ChatInputInteractionEvent event) {
7368

7469
public Mono<Message> resolve(DeferrableInteractionEvent event, String word, int page, LocalDate startDate, LocalDate endDate) {
7570
return Mono.defer(() -> {
76-
ChatSearchResponse response;
71+
ChatSearchResponse response = null;
7772
try {
7873
response = chatsApi.chatSearch(word, startDate, endDate, 25, page);
7974
} catch (final Exception e) {
80-
LOGGER.error("Error searching chats for word: {}", word, e);
81-
return error(event, "Error during search");
75+
if (!(e instanceof ApiException apiException) || apiException.getCode() != 204) {
76+
LOGGER.error("Error searching for word: {}", word, e);
77+
}
8278
}
79+
if (response == null || response.getChats() == null || response.getChats().isEmpty())
80+
return error(event, "No chats found");
8381
var chatStrings = response.getChats().stream()
8482
.map(c -> SHORT_DATE_TIME.format(c.getTime().toInstant()) + " **" + escape(c.getPlayerName()) + ":** " + escape(c.getChat()))
8583
.toList();

src/main/java/vc/commands/ChatsCommand.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.springframework.stereotype.Component;
1212
import reactor.core.publisher.Mono;
1313
import vc.api.model.ProfileData;
14+
import vc.openapi.handler.ApiException;
1415
import vc.openapi.handler.ChatsApi;
1516
import vc.openapi.model.ChatsResponse;
1617
import vc.util.PlayerLookup;
@@ -48,7 +49,9 @@ private Mono<Message> resolveChats(final DeferrableInteractionEvent event, final
4849
try {
4950
chatsResponse = chatsApi.chats(identity.uuid(), null, startDate, endDate, 25, page);
5051
} catch (final Exception e) {
51-
LOGGER.error("Error processing chats response", e);
52+
if (!(e instanceof ApiException apiException) || apiException.getCode() != 204) {
53+
LOGGER.error("Error processing chats response", e);
54+
}
5255
}
5356
if (chatsResponse == null || chatsResponse.getChats() == null || chatsResponse.getChats().isEmpty())
5457
return error(event, "No chats found");

src/main/java/vc/commands/ConnectionsCommand.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.springframework.stereotype.Component;
1212
import reactor.core.publisher.Mono;
1313
import vc.api.model.ProfileData;
14+
import vc.openapi.handler.ApiException;
1415
import vc.openapi.handler.ConnectionsApi;
1516
import vc.openapi.model.ConnectionsResponse;
1617
import vc.util.PlayerLookup;
@@ -47,8 +48,10 @@ private Mono<Message> resolveConnections(final DeferrableInteractionEvent event,
4748
ConnectionsResponse connectionsResponse = null;
4849
try {
4950
connectionsResponse = connectionsApi.connections(identity.uuid(), null, startDate, endDate, 25, page);
50-
} catch (final Exception e){
51-
LOGGER.error("Error processing connections response", e);
51+
} catch (final Exception e) {
52+
if (!(e instanceof ApiException apiException) || apiException.getCode() != 204) {
53+
LOGGER.error("Error processing connections response", e);
54+
}
5255
}
5356
if (connectionsResponse == null || connectionsResponse.getConnections() == null || connectionsResponse.getConnections().isEmpty())
5457
return error(event, "No connections found for player");

src/main/java/vc/commands/DataCommand.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import reactor.core.publisher.Mono;
1111
import vc.api.VcDataDumpApi;
1212
import vc.api.model.ProfileData;
13+
import vc.openapi.handler.ApiException;
1314
import vc.util.PlayerLookup;
1415

1516
import java.io.ByteArrayInputStream;
@@ -41,10 +42,12 @@ public Mono<Message> resolvePlayerDataDump(ChatInputInteractionEvent event, Prof
4142
try {
4243
playerDataDump = vcDataDumpApi.getPlayerDataDump(playerIdentity.uuid(), null);
4344
} catch (final Exception e){
44-
LOGGER.error("Failed to get player data dump", e);
45+
if (!(e instanceof ApiException apiException) || apiException.getCode() != 204) {
46+
LOGGER.error("Failed to get player data dump", e);
47+
}
4548
}
4649
if (playerDataDump == null)
47-
return error(event, "Unable to find player");
50+
return error(event, "No data found");
4851
return event.createFollowup()
4952
.withFiles(MessageCreateFields.File.of(playerIdentity.name() + ".csv", new ByteArrayInputStream(playerDataDump.getBytes())))
5053
.withEmbeds(populateIdentity(EmbedCreateSpec.builder(), playerIdentity)

src/main/java/vc/commands/DeathsCommand.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.springframework.stereotype.Component;
1212
import reactor.core.publisher.Mono;
1313
import vc.api.model.ProfileData;
14+
import vc.openapi.handler.ApiException;
1415
import vc.openapi.handler.DeathsApi;
1516
import vc.openapi.model.DeathsResponse;
1617
import vc.util.PlayerLookup;
@@ -48,7 +49,9 @@ private Mono<Message> resolveDeaths(final DeferrableInteractionEvent event, fina
4849
try {
4950
deathsResponse = deathsApi.deaths(identity.uuid(), null, startDate, endDate, 25, page);
5051
} catch (final Exception e) {
51-
LOGGER.error("Failed to get deaths", e);
52+
if (!(e instanceof ApiException apiException) || apiException.getCode() != 204) {
53+
LOGGER.error("Failed to get deaths", e);
54+
}
5255
}
5356
if (deathsResponse == null || deathsResponse.getDeaths() == null || deathsResponse.getDeaths().isEmpty())
5457
return error(event, "No deaths found for player");

src/main/java/vc/commands/KillsCommand.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.springframework.stereotype.Component;
1212
import reactor.core.publisher.Mono;
1313
import vc.api.model.ProfileData;
14+
import vc.openapi.handler.ApiException;
1415
import vc.openapi.handler.DeathsApi;
1516
import vc.openapi.model.KillsResponse;
1617
import vc.util.PlayerLookup;
@@ -48,7 +49,9 @@ private Mono<Message> resolveKills(final DeferrableInteractionEvent event, final
4849
try {
4950
killsResponse = deathsApi.kills(identity.uuid(), null, startDate, endDate, 25, page);
5051
} catch (final Exception e) {
51-
LOGGER.error("Error resolving kills", e);
52+
if (!(e instanceof ApiException apiException) || apiException.getCode() != 204) {
53+
LOGGER.error("Error resolving kills", e);
54+
}
5255
}
5356
if (killsResponse == null || killsResponse.getKills() == null || killsResponse.getKills().isEmpty())
5457
return error(event, "No kills found for player");

src/main/java/vc/commands/PlayerLookupCommand.java

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package vc.commands;
22

33
import discord4j.core.event.domain.interaction.ChatInputInteractionEvent;
4-
import discord4j.core.object.command.ApplicationCommandInteractionOption;
5-
import discord4j.core.object.command.ApplicationCommandInteractionOptionValue;
64
import discord4j.core.object.entity.Message;
75
import discord4j.core.spec.EmbedCreateSpec;
86
import reactor.core.publisher.Mono;
@@ -33,9 +31,7 @@ public interface SimpleResolveFunction {
3331
}
3432

3533
Mono<Message> resolveData(ChatInputInteractionEvent event, SimpleResolveFunction resolveFunction) {
36-
Optional<String> playerNameOptional = event.getOption("player")
37-
.flatMap(ApplicationCommandInteractionOption::getValue)
38-
.map(ApplicationCommandInteractionOptionValue::asString);
34+
Optional<String> playerNameOptional = event.getOptionAsString("player");
3935
if (playerNameOptional.isEmpty()) {
4036
return error(event, "No player name");
4137
}
@@ -59,9 +55,7 @@ public interface PaginatedResolveFunction {
5955
}
6056

6157
Mono<Message> resolveData(ChatInputInteractionEvent event, PaginatedResolveFunction resolveFunction) {
62-
Optional<String> playerNameOptional = event.getOption("player")
63-
.flatMap(ApplicationCommandInteractionOption::getValue)
64-
.map(ApplicationCommandInteractionOptionValue::asString);
58+
var playerNameOptional = event.getOptionAsString("player");
6559
if (playerNameOptional.isEmpty()) {
6660
return error(event, "No player name");
6761
}
@@ -80,9 +74,7 @@ Mono<Message> resolveData(ChatInputInteractionEvent event, PaginatedResolveFunct
8074
} catch (Exception e) {
8175
return error(event, "Invalid date. Required format: YYYY-MM-DD");
8276
}
83-
int page = event.getOption("page")
84-
.flatMap(ApplicationCommandInteractionOption::getValue)
85-
.map(ApplicationCommandInteractionOptionValue::asLong)
77+
int page = event.getOptionAsLong("page")
8678
.map(Long::intValue)
8779
.orElse(1);
8880
if (page <= 0)

src/main/java/vc/commands/PlayerStatsCommand.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
package vc.commands;
22

33
import discord4j.core.event.domain.interaction.ChatInputInteractionEvent;
4-
import discord4j.core.object.command.ApplicationCommandInteractionOption;
5-
import discord4j.core.object.command.ApplicationCommandInteractionOptionValue;
64
import discord4j.core.object.entity.Message;
75
import discord4j.core.spec.EmbedCreateSpec;
86
import discord4j.rest.util.Color;
97
import org.slf4j.Logger;
108
import org.springframework.stereotype.Component;
119
import reactor.core.publisher.Mono;
10+
import vc.openapi.handler.ApiException;
1211
import vc.openapi.handler.StatsApi;
1312
import vc.openapi.model.PlayerStats;
1413
import vc.util.PlayerLookup;
@@ -36,9 +35,7 @@ public String getName() {
3635

3736
@Override
3837
public Mono<Message> handle(final ChatInputInteractionEvent event) {
39-
Optional<String> playerNameOptional = event.getOption("player")
40-
.flatMap(ApplicationCommandInteractionOption::getValue)
41-
.map(ApplicationCommandInteractionOptionValue::asString);
38+
Optional<String> playerNameOptional = event.getOptionAsString("player");
4239
if (playerNameOptional.isEmpty())
4340
return error(event, "No player name provided");
4441
if (!Validator.isValidPlayerName(playerNameOptional.get()))
@@ -50,10 +47,12 @@ public Mono<Message> handle(final ChatInputInteractionEvent event) {
5047
try {
5148
playerStats = statsApi.playerStats(playerIdentityOptional.get().uuid(), null);
5249
} catch (final Exception e) {
53-
LOGGER.error("Failed to get stats for player: {}", playerIdentityOptional.get().uuid(), e);
50+
if (!(e instanceof ApiException apiException) || apiException.getCode() != 204) {
51+
LOGGER.error("Failed to get stats for player: {}", playerIdentityOptional.get().uuid(), e);
52+
}
5453
}
5554
if (playerStats == null)
56-
return error(event, "Unable to find player");
55+
return error(event, "No data found");
5756
return event.createFollowup()
5857
.withEmbeds(populateIdentity(EmbedCreateSpec.builder(), playerIdentityOptional.get())
5958
.title("Player Stats")

src/main/java/vc/commands/PlaytimeCommand.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.springframework.stereotype.Component;
99
import reactor.core.publisher.Mono;
1010
import vc.api.model.ProfileData;
11+
import vc.openapi.handler.ApiException;
1112
import vc.openapi.handler.PlaytimeApi;
1213
import vc.openapi.model.PlaytimeResponse;
1314
import vc.util.PlayerLookup;
@@ -43,7 +44,9 @@ private Mono<Message> resolvePlaytime(ChatInputInteractionEvent event, final Pro
4344
try {
4445
playtime = playtimeApi.playtime(profileUUID, null);
4546
} catch (final Exception e) {
46-
LOGGER.error("Failed to get playtime for player: {}", profileUUID, e);
47+
if (!(e instanceof ApiException apiException) || apiException.getCode() != 204) {
48+
LOGGER.error("Failed to get playtime for player: {}", profileUUID, e);
49+
}
4750
}
4851
if (isNull(playtime)) return error(event, "No playtime found");
4952
Integer playtimeSeconds = playtime.getPlaytimeSeconds();

src/main/java/vc/commands/SeenCommand.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.springframework.stereotype.Component;
99
import reactor.core.publisher.Mono;
1010
import vc.api.model.ProfileData;
11+
import vc.openapi.handler.ApiException;
1112
import vc.openapi.handler.SeenApi;
1213
import vc.openapi.model.SeenResponse;
1314
import vc.util.PlayerLookup;
@@ -46,7 +47,9 @@ private Mono<Message> resolveSeen(final ChatInputInteractionEvent event, final P
4647
try {
4748
seenResponse = seenApi.seen(uuid, null);
4849
} catch (final Exception e) {
49-
LOGGER.error("Failed to get seen for player: " + uuid, e);
50+
if (!(e instanceof ApiException apiException) || apiException.getCode() != 204) {
51+
LOGGER.error("Failed to get seen for player: {}", uuid, e);
52+
}
5053
}
5154
if (isNull(seenResponse)) return error(event, "Player has not been seen");
5255
return event.createFollowup()

0 commit comments

Comments
 (0)