From 24d43c4a7fcdf7dfdc051edb96400a9669dd4cbc Mon Sep 17 00:00:00 2001 From: kageru Date: Sat, 8 Jun 2019 21:14:57 +0200 Subject: [PATCH] support @mention of author in response --- src/main/kotlin/moe/kageru/kagebot/Command.kt | 11 +++++++++-- src/main/kotlin/moe/kageru/kagebot/MessageUtil.kt | 9 +++++++++ src/main/kotlin/moe/kageru/kagebot/Util.kt | 7 +++++++ src/main/kotlin/moe/kageru/kagebot/main.kt | 2 +- src/main/resources/config.toml | 8 +++++++- src/test/kotlin/moe/kageru/kagebot/ConfigTest.kt | 2 ++ 6 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 src/main/kotlin/moe/kageru/kagebot/MessageUtil.kt create mode 100644 src/main/kotlin/moe/kageru/kagebot/Util.kt create mode 100644 src/test/kotlin/moe/kageru/kagebot/ConfigTest.kt diff --git a/src/main/kotlin/moe/kageru/kagebot/Command.kt b/src/main/kotlin/moe/kageru/kagebot/Command.kt index b57b90c..52c2c09 100644 --- a/src/main/kotlin/moe/kageru/kagebot/Command.kt +++ b/src/main/kotlin/moe/kageru/kagebot/Command.kt @@ -1,15 +1,22 @@ package moe.kageru.kagebot +import org.javacord.api.entity.message.MessageAuthor +import moe.kageru.kagebot.Util.doIf + +private const val AUTHOR_PLACEHOLDER = "@@" + class Command(trigger: String?, response: String?, matchType: MatchType?) { val trigger: String = trigger!! - val regex: Regex? = if (matchType == MatchType.REGEX) Regex.fromLiteral(trigger!!) else null + val regex: Regex? = if (matchType == MatchType.REGEX) Regex(trigger!!) else null private val response: String = response!! private val matchType: MatchType = matchType ?: MatchType.PREFIX constructor(cmd: Command) : this(cmd.trigger, cmd.response, cmd.matchType) fun matches(msg: String) = this.matchType.matches(msg, this) - fun respond() = this.response + fun respond(author: MessageAuthor) = this.response.doIf({ it.contains(AUTHOR_PLACEHOLDER) }) { + it.replace(AUTHOR_PLACEHOLDER, MessageUtil.mention(author)) + } } enum class MatchType { diff --git a/src/main/kotlin/moe/kageru/kagebot/MessageUtil.kt b/src/main/kotlin/moe/kageru/kagebot/MessageUtil.kt new file mode 100644 index 0000000..9cc065c --- /dev/null +++ b/src/main/kotlin/moe/kageru/kagebot/MessageUtil.kt @@ -0,0 +1,9 @@ +package moe.kageru.kagebot + +import org.javacord.api.entity.message.MessageAuthor + +object MessageUtil { + fun mention(user: MessageAuthor): String { + return "<@${user.id}>" + } +} \ No newline at end of file diff --git a/src/main/kotlin/moe/kageru/kagebot/Util.kt b/src/main/kotlin/moe/kageru/kagebot/Util.kt new file mode 100644 index 0000000..40f02c1 --- /dev/null +++ b/src/main/kotlin/moe/kageru/kagebot/Util.kt @@ -0,0 +1,7 @@ +package moe.kageru.kagebot + +object Util { + inline fun T.doIf(condition: (T) -> Boolean, op: (T) -> T): T { + return if (condition(this)) op(this) else this + } +} \ No newline at end of file diff --git a/src/main/kotlin/moe/kageru/kagebot/main.kt b/src/main/kotlin/moe/kageru/kagebot/main.kt index 8a633e6..c29612e 100644 --- a/src/main/kotlin/moe/kageru/kagebot/main.kt +++ b/src/main/kotlin/moe/kageru/kagebot/main.kt @@ -25,7 +25,7 @@ fun createBot() { api.addMessageCreateListener { event -> for (command in config.commands) { if (command.matches(event.messageContent)) { - event.channel.sendMessage(command.respond()) + event.channel.sendMessage(command.respond(event.messageAuthor)) break } } diff --git a/src/main/resources/config.toml b/src/main/resources/config.toml index e8b7536..826fb5f 100644 --- a/src/main/resources/config.toml +++ b/src/main/resources/config.toml @@ -11,4 +11,10 @@ response = "pong" [[commands]] trigger = "somewhere" response = "found it" -matchType = "CONTAINS" \ No newline at end of file +matchType = "CONTAINS" + +[[commands]] +trigger = "^[^`]*([()|DoOvVcC][-=^']?;|;[-=^']?[()|DoOpPvVcC3]|:wink:|😉)[^`]*$" +response = "@@ Oboe!" +matchType = "REGEX" +deleteMessage = true \ No newline at end of file diff --git a/src/test/kotlin/moe/kageru/kagebot/ConfigTest.kt b/src/test/kotlin/moe/kageru/kagebot/ConfigTest.kt new file mode 100644 index 0000000..e98fa3a --- /dev/null +++ b/src/test/kotlin/moe/kageru/kagebot/ConfigTest.kt @@ -0,0 +1,2 @@ +package moe.kageru.kagebot +