Skip to content

Commit 92c70f0

Browse files
author
Kaleidox
committed
allow custom name capitalization per context definition
1 parent 02f681c commit 92c70f0

File tree

4 files changed

+35
-21
lines changed

4 files changed

+35
-21
lines changed

src/main/java/org/comroid/interaction/adapter/jda/DiscordNameCapitalizer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ enum DiscordNameCapitalizer implements NameCapitalizer {
88
@Instance INSTANCE;
99

1010
@Override
11-
public Capitalization getCapitalization(ComponentType ignored) {
12-
return ignored == ComponentType.TITLE ? Capitalization.Title_Case : Capitalization.lower_hyphen_case;
11+
public Capitalization getCapitalization(ComponentType type) {
12+
return type == ComponentType.TITLE ? Capitalization.Title_Case : Capitalization.lower_hyphen_case;
1313
}
1414
}

src/main/java/org/comroid/interaction/annotation/Interaction.java

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
import org.comroid.annotations.internal.Annotations;
44
import org.comroid.api.attr.Described;
5+
import org.comroid.api.func.exc.ThrowingFunction;
6+
import org.comroid.api.text.Capitalization;
7+
import org.comroid.interaction.component.NameCapitalizer;
58
import org.comroid.interaction.registry.RegistryHelper;
69
import org.jspecify.annotations.Nullable;
710

@@ -51,22 +54,33 @@ record Resolved(
5154
) implements Interaction, Described {
5255
public static Resolved of(Element element, @Nullable Element parent) {
5356
var detached = element.interaction.detached();
54-
return new Resolved(RegistryHelper.findName(element).orElseThrow(),
57+
var filters = Stream.concat(Arrays.stream(element.interaction.filter()),
58+
Stream.ofNullable(parent)
59+
.filter($ -> !detached)
60+
.filter(Objects::nonNull)
61+
.map(Element::interaction)
62+
.flatMap(it -> Arrays.stream(it.filter()))).toArray(ContextFilter[]::new);
63+
var definitions = Stream.concat(Arrays.stream(element.interaction.definitions()),
64+
Stream.ofNullable(parent)
65+
.filter($ -> !detached)
66+
.filter(Objects::nonNull)
67+
.map(Element::interaction)
68+
.flatMap(it -> Arrays.stream(it.definitions()))).toArray(ContextDefinition[]::new);
69+
var nameCapitalization = Arrays.stream(definitions)
70+
.filter(def -> def.value().equalsIgnoreCase(NameCapitalizer.CONTEXT_KEY))
71+
.map(ContextDefinition::expr)
72+
.flatMap(Arrays::stream)
73+
.map(ThrowingFunction.fallback(Capitalization::valueOf))
74+
.filter(Objects::nonNull)
75+
.findAny()
76+
.orElse(Capitalization.lowerCamelCase);
77+
78+
return new Resolved(RegistryHelper.findName(element).map(nameCapitalization::convert).orElseThrow(),
5579
RegistryHelper.findDescription(element.annotated).orElse(null),
5680
element.interaction.async() || parent != null && parent.interaction.async(),
5781
element.interaction.privacy(),
58-
Stream.concat(Arrays.stream(element.interaction.filter()),
59-
Stream.ofNullable(parent)
60-
.filter($ -> !detached)
61-
.filter(Objects::nonNull)
62-
.map(Element::interaction)
63-
.flatMap(it -> Arrays.stream(it.filter()))).toArray(ContextFilter[]::new),
64-
Stream.concat(Arrays.stream(element.interaction.definitions()),
65-
Stream.ofNullable(parent)
66-
.filter($ -> !detached)
67-
.filter(Objects::nonNull)
68-
.map(Element::interaction)
69-
.flatMap(it -> Arrays.stream(it.definitions()))).toArray(ContextDefinition[]::new),
82+
filters,
83+
definitions,
7084
detached);
7185
}
7286

src/main/java/org/comroid/interaction/component/NameCapitalizer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import org.comroid.api.text.Capitalization;
44

55
public interface NameCapitalizer {
6+
String CONTEXT_KEY = "capitalization";
7+
68
Capitalization getCapitalization(ComponentType type);
79

810
enum ComponentType {

src/main/java/org/comroid/interaction/model/InteractionContext.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,10 @@ public static InteractionContext.Builder basic(InteractionCore core, String... f
3535
if (!parts.hasNext()) throw new IllegalStateException("Cannot initialize interaction context; command is empty");
3636
var part = new String[]{ parts.next() };
3737

38-
var node = core.getRegistered()
39-
.stream()
40-
.flatMap(tree -> tree.getNodes().stream())
41-
.filter(base -> base.getInteraction().value().equalsIgnoreCase(part[0]))
42-
.findAny()
43-
.orElseThrow(noSuchCommand(part[0]));
38+
var node = core.getRegistered().stream().flatMap(tree -> tree.getNodes().stream()).filter(base -> {
39+
var name = base.getInteraction().value();
40+
return name.contains(" ") ? name.equalsIgnoreCase(String.join(" ", fullCommand)) : name.equalsIgnoreCase(part[0]);
41+
}).findAny().orElseThrow(noSuchCommand(part[0]));
4442

4543
while (parts.hasNext()) {
4644
if (!(node instanceof ParentNode parent)) break;

0 commit comments

Comments
 (0)