blob: 465d79cd4900c4d3790fa56fc4c40678470203ab (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
package com.romangraef.jdacommander
import com.beust.jcommander.JCommander
import net.dv8tion.jda.api.JDABuilder
import net.dv8tion.jda.api.events.message.MessageReceivedEvent
import net.dv8tion.jda.api.hooks.ListenerAdapter
import org.reflections.Reflections
fun loadCommands(packageName: String): Map<String, Class<out ICommand>> {
val reflections = Reflections(packageName)
return reflections.getTypesAnnotatedWith(Command::class.java)
.map {
println(it)
it
}
.filter { ICommand::class.java.isAssignableFrom(it) }
.map {
it.getAnnotation(Command::class.java).value to (it as Class<out ICommand>)
}.toMap()
}
fun main() {
val allCommands = loadCommands("com.romangraef.jdacommander.commands")
JDABuilder.createDefault(System.getenv("DISCORD_TOKEN"))
.addEventListeners(object : ListenerAdapter() {
override fun onMessageReceived(event: MessageReceivedEvent) {
val text = event.message.contentRaw
if (!text.startsWith("!")) return
val jCommander = JCommander()
val bi = BaseInformation()
allCommands.forEach { (name, `class`) ->
jCommander.addCommand(name, `class`.newInstance())
}
jCommander.addObject(bi)
jCommander.parse(*text.substring(1).split("\\s+".toRegex()).toTypedArray())
val parsedCommand = jCommander.parsedCommand
jCommander.findCommandByAlias(parsedCommand).objects.filterIsInstance<ICommand>().forEach {
it.base = bi
it.message = event.message
it.run()
}
}
})
.build()
}
|