Skip to content

Commit c8741d0

Browse files
committed
Move built-in resolvers to Kotlin source set
1 parent 6096708 commit c8741d0

File tree

12 files changed

+78
-78
lines changed

12 files changed

+78
-78
lines changed

src/main/java/io/github/freya022/botcommands/internal/parameters/resolvers/RoleResolver.kt

Lines changed: 0 additions & 67 deletions
This file was deleted.
Lines changed: 62 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,67 @@
11
package io.github.freya022.botcommands.internal.parameters.resolvers
22

3-
import io.github.freya022.botcommands.api.commands.application.checkGuildOnly
4-
import io.github.freya022.botcommands.api.core.service.annotations.BService
5-
import io.github.freya022.botcommands.api.core.service.annotations.ResolverFactory
6-
import io.github.freya022.botcommands.api.parameters.resolverFactory
3+
import io.github.freya022.botcommands.api.commands.application.slash.options.SlashCommandOption
4+
import io.github.freya022.botcommands.api.commands.text.BaseCommandEvent
5+
import io.github.freya022.botcommands.api.commands.text.options.TextCommandOption
6+
import io.github.freya022.botcommands.api.components.options.ComponentOption
7+
import io.github.freya022.botcommands.api.parameters.ClassParameterResolver
8+
import io.github.freya022.botcommands.api.parameters.resolvers.ComponentParameterResolver
9+
import io.github.freya022.botcommands.api.parameters.resolvers.SlashParameterResolver
10+
import io.github.freya022.botcommands.api.parameters.resolvers.TextParameterResolver
11+
import io.github.freya022.botcommands.internal.utils.throwInternal
712
import net.dv8tion.jda.api.entities.Role
13+
import net.dv8tion.jda.api.events.interaction.component.GenericComponentInteractionCreateEvent
14+
import net.dv8tion.jda.api.events.message.MessageReceivedEvent
15+
import net.dv8tion.jda.api.interactions.commands.CommandInteractionPayload
16+
import net.dv8tion.jda.api.interactions.commands.OptionMapping
17+
import net.dv8tion.jda.api.interactions.commands.OptionType
18+
import java.util.regex.Pattern
819

9-
@BService
10-
internal data object RoleResolverFactoryProvider {
11-
@ResolverFactory
12-
internal fun roleResolverFactory() = resolverFactory { request ->
13-
request.checkGuildOnly(Role::class)
14-
RoleResolver()
20+
/**
21+
* @see RoleResolverFactoryProvider
22+
*/
23+
class RoleResolver : ClassParameterResolver<RoleResolver, Role>(Role::class),
24+
TextParameterResolver<RoleResolver, Role>,
25+
SlashParameterResolver<RoleResolver, Role>,
26+
ComponentParameterResolver<RoleResolver, Role> {
27+
28+
override val pattern: Pattern = Pattern.compile("<@&(\\d+)>|(\\d+)")
29+
override val testExample: String = "<@&1234>"
30+
override fun getHelpExample(option: TextCommandOption, event: BaseCommandEvent): String {
31+
return event.member.roles.stream().findAny()
32+
.or { event.guild.roleCache.streamUnordered().findAny() }
33+
.map { obj: Role -> obj.asMention }
34+
.orElse("role-id/mention")
35+
}
36+
37+
override suspend fun resolveSuspend(
38+
option: TextCommandOption,
39+
event: MessageReceivedEvent,
40+
args: Array<String?>
41+
): Role? {
42+
val id = args[0] ?: args[1] ?: throwInternal("How can it not have either")
43+
if (event.guild.id == id) return null //@everyone role
44+
45+
return event.guild.getRoleById(id)
46+
}
47+
48+
49+
override val optionType: OptionType get() = OptionType.ROLE
50+
51+
override suspend fun resolveSuspend(
52+
option: SlashCommandOption,
53+
event: CommandInteractionPayload,
54+
optionMapping: OptionMapping
55+
): Role = optionMapping.asRole
56+
57+
override suspend fun resolveSuspend(
58+
option: ComponentOption,
59+
event: GenericComponentInteractionCreateEvent,
60+
arg: String
61+
): Role? {
62+
val guild = event.guild
63+
requireNotNull(guild) { "Can't get a role from DMs" }
64+
65+
return guild.getRoleById(arg)
1566
}
16-
}
67+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package io.github.freya022.botcommands.internal.parameters.resolvers
2+
3+
import io.github.freya022.botcommands.api.commands.application.checkGuildOnly
4+
import io.github.freya022.botcommands.api.core.service.annotations.BService
5+
import io.github.freya022.botcommands.api.core.service.annotations.ResolverFactory
6+
import io.github.freya022.botcommands.api.parameters.resolverFactory
7+
import net.dv8tion.jda.api.entities.Role
8+
9+
@BService
10+
internal data object RoleResolverFactoryProvider {
11+
@ResolverFactory
12+
internal fun roleResolverFactory() = resolverFactory { request ->
13+
request.checkGuildOnly(Role::class)
14+
RoleResolver()
15+
}
16+
}

0 commit comments

Comments
 (0)