diff --git a/build.gradle b/build.gradle
index fb0257b..0bd3331 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,7 +6,7 @@ plugins {
}
group 'cc.sukazyo'
-version '0.3.0'
+version '0.3.3'
project.ext.archiveBaseName = 'Coeur_Morny_Cono'
project.ext.artifactId = 'morny-coeur'
mainClassName = 'cc.sukazyo.cono.morny.MornyCoeur'
@@ -24,6 +24,12 @@ dependencies {
}
+compileJava.doFirst {
+ ant.replaceregexp(match:'VERSION = ["a-zA-Z0-9.\\-_+@]+;', replace:"VERSION = \"$project.version\";", flags:'g', byline:true) {
+ fileset(dir: 'src/main/java/cc/sukazyo/cono/morny', includes: 'MornySystem.java')
+ }
+}
+
test {
useJUnitPlatform()
}
@@ -46,15 +52,6 @@ tasks.test {
useJUnitPlatform()
}
-apply plugin: 'com.github.johnrengelman.shadow'
-apply plugin: 'application'
-
-shadowJar {
- archiveBaseName.set("${project.ext.archiveBaseName}")
- archiveVersion.set("${project.version}")
- archiveClassifier.set("fat")
-}
-
shadowJar {
archiveBaseName.set("${project.ext.archiveBaseName}")
archiveVersion.set("${project.version}")
diff --git a/src/main/java/cc/sukazyo/cono/morny/MornyCoeur.java b/src/main/java/cc/sukazyo/cono/morny/MornyCoeur.java
index e6fd6cd..f652188 100644
--- a/src/main/java/cc/sukazyo/cono/morny/MornyCoeur.java
+++ b/src/main/java/cc/sukazyo/cono/morny/MornyCoeur.java
@@ -15,7 +15,10 @@ public class MornyCoeur {
public static void main (String[] args) {
- logger.info(MornyHello.MORNY_PREVIEW_IMAGE_ASCII);
+ if (!(args.length > 1 && "--no-hello".equals(args[1])))
+ logger.info(MornyHello.MORNY_PREVIEW_IMAGE_ASCII);
+ if (args.length > 1 && "--only-hello".equals(args[1]))
+ return;
logger.info("System Starting");
configureSafeExit();
diff --git a/src/main/java/cc/sukazyo/cono/morny/MornySystem.java b/src/main/java/cc/sukazyo/cono/morny/MornySystem.java
index bedb6b3..49e8a08 100644
--- a/src/main/java/cc/sukazyo/cono/morny/MornySystem.java
+++ b/src/main/java/cc/sukazyo/cono/morny/MornySystem.java
@@ -6,7 +6,7 @@ import java.net.URISyntaxException;
public class MornySystem {
- public static final String VERSION = "0.3.0";
+ public static final String VERSION = "0.3.3";
public static String getJarMd5() {
try {
diff --git a/src/main/java/cc/sukazyo/cono/morny/bot/event/EventListeners.java b/src/main/java/cc/sukazyo/cono/morny/bot/event/EventListeners.java
index bd26c6b..8359fef 100644
--- a/src/main/java/cc/sukazyo/cono/morny/bot/event/EventListeners.java
+++ b/src/main/java/cc/sukazyo/cono/morny/bot/event/EventListeners.java
@@ -6,11 +6,13 @@ public class EventListeners {
public static final OnCommandExecute COMMANDS_LISTENER = new OnCommandExecute();
public static final OnActivityRecord ACTIVITY_RECORDER = new OnActivityRecord();
+ public static final OnUserSlashAction USER_SLASH_ACTION = new OnUserSlashAction();
public static void registerAllListeners () {
EventListenerManager.addListener(
ACTIVITY_RECORDER,
- COMMANDS_LISTENER
+ COMMANDS_LISTENER,
+ USER_SLASH_ACTION
);
}
diff --git a/src/main/java/cc/sukazyo/cono/morny/bot/event/OnCommandExecute.java b/src/main/java/cc/sukazyo/cono/morny/bot/event/OnCommandExecute.java
index 67af138..389b329 100644
--- a/src/main/java/cc/sukazyo/cono/morny/bot/event/OnCommandExecute.java
+++ b/src/main/java/cc/sukazyo/cono/morny/bot/event/OnCommandExecute.java
@@ -4,6 +4,8 @@ import cc.sukazyo.cono.morny.MornyCoeur;
import cc.sukazyo.cono.morny.MornySystem;
import cc.sukazyo.cono.morny.MornyTrusted;
import cc.sukazyo.cono.morny.bot.api.EventListener;
+import cc.sukazyo.cono.morny.bot.event.on_commands.GetUsernameAndId;
+import cc.sukazyo.cono.morny.util.StringUtils;
import com.pengrad.telegrambot.model.Update;
import com.pengrad.telegrambot.model.request.ParseMode;
import com.pengrad.telegrambot.request.SendMessage;
@@ -23,7 +25,13 @@ public class OnCommandExecute extends EventListener {
if (event.message().text() == null) {
return false;
}
- switch (event.message().text()) {
+ String[] command = StringUtils.formatCommand(event.message().text());
+ if (command.length == 0) return false;
+ switch (command[0]) {
+ case "/user":
+ case "/user@" + MornyCoeur.USERNAME:
+ GetUsernameAndId.exec(command, event);
+ break;
case "/o":
case "/o@" + MornyCoeur.USERNAME:
onCommandOnExec(event);
@@ -94,7 +102,7 @@ public class OnCommandExecute extends EventListener {
MornySystem.VERSION,
MornySystem.getJarMd5()
)
- ).parseMode(ParseMode.HTML));
+ ).replyToMessageId(event.message().messageId()).parseMode(ParseMode.HTML));
}
}
diff --git a/src/main/java/cc/sukazyo/cono/morny/bot/event/OnUserSlashAction.java b/src/main/java/cc/sukazyo/cono/morny/bot/event/OnUserSlashAction.java
new file mode 100644
index 0000000..b43b554
--- /dev/null
+++ b/src/main/java/cc/sukazyo/cono/morny/bot/event/OnUserSlashAction.java
@@ -0,0 +1,63 @@
+package cc.sukazyo.cono.morny.bot.event;
+
+import cc.sukazyo.cono.morny.MornyCoeur;
+import cc.sukazyo.cono.morny.bot.api.EventListener;
+import cc.sukazyo.cono.morny.util.StringUtils;
+import com.pengrad.telegrambot.model.Update;
+import com.pengrad.telegrambot.model.User;
+import com.pengrad.telegrambot.model.request.ParseMode;
+import com.pengrad.telegrambot.request.SendMessage;
+
+public class OnUserSlashAction extends EventListener {
+
+ @Override
+ public boolean onMessage (Update event) {
+ String text = event.message().text();
+ if (text == null) return false;
+
+ if (text.startsWith("/")) {
+ int prefixLength = 1;
+ boolean useVerbSuffix = true;
+ boolean useObjectPrefix = true;
+ if (text.startsWith("//#") || text.startsWith("///")) {
+ useVerbSuffix = false;
+ useObjectPrefix = false;
+ prefixLength = 3;
+ } else if (text.startsWith("/#")) {
+ useObjectPrefix = false;
+ prefixLength = 2;
+ } else if (text.startsWith("//")) {
+ useVerbSuffix = false;
+ prefixLength = 2;
+ }
+
+ String[] action = StringUtils.formatCommand(text.substring(prefixLength));
+ String verb = action[0];
+ boolean hasObject = action.length != 1;
+ String object = StringUtils.connectStringArray(action, " ", 1, action.length-1);
+ User origin = event.message().from();
+ User target = (event.message().replyToMessage() == null ? (
+ origin
+ ): (
+ event.message().replyToMessage().from()
+ ));
+
+ MornyCoeur.getAccount().execute(new SendMessage(
+ event.message().chat().id(),
+ String.format(
+ "%s %s%s %s%s%s",
+ origin.id(), origin.firstName(),
+ verb, (useVerbSuffix?"了":""),
+ target.id(), (origin==target ? "自己" : target.firstName()),
+ (hasObject ? (useObjectPrefix ?" 的": " ") : ""),
+ (hasObject ? object : "")
+ )
+ ).parseMode(ParseMode.HTML));
+
+ return true;
+
+ }
+ return false;
+ }
+
+}
diff --git a/src/main/java/cc/sukazyo/cono/morny/bot/event/on_commands/GetUsernameAndId.java b/src/main/java/cc/sukazyo/cono/morny/bot/event/on_commands/GetUsernameAndId.java
new file mode 100644
index 0000000..f896e50
--- /dev/null
+++ b/src/main/java/cc/sukazyo/cono/morny/bot/event/on_commands/GetUsernameAndId.java
@@ -0,0 +1,100 @@
+package cc.sukazyo.cono.morny.bot.event.on_commands;
+
+import cc.sukazyo.cono.morny.MornyCoeur;
+import com.pengrad.telegrambot.model.Update;
+import com.pengrad.telegrambot.model.User;
+import com.pengrad.telegrambot.model.request.ParseMode;
+import com.pengrad.telegrambot.request.GetChatMember;
+import com.pengrad.telegrambot.request.SendMessage;
+import com.pengrad.telegrambot.response.GetChatMemberResponse;
+
+public class GetUsernameAndId {
+
+ public static void exec (String[] command, Update event) {
+
+ if (command.length > 2) { MornyCoeur.getAccount().execute(new SendMessage(
+ event.message().chat().id(),
+ "[Unavailable] Too much arguments."
+ ).replyToMessageId(event.message().messageId())); return; }
+
+ long userId = 0;
+
+ if ( event.message().replyToMessage()!= null) {
+ userId = event.message().replyToMessage().from().id();
+ }
+ if (command.length > 1) {
+ try {
+ userId = Long.parseLong(command[1]);
+ } catch (NumberFormatException e) {
+ MornyCoeur.getAccount().execute(new SendMessage(
+ event.message().chat().id(),
+ "[Unavailable] " + e.getMessage()
+ ).replyToMessageId(event.message().messageId()));
+ return;
+ }
+ }
+
+ if (userId == 0) {
+ MornyCoeur.getAccount().execute(new SendMessage(
+ event.message().chat().id(),
+ "[Unavailable] no userid given."
+ ).replyToMessageId(event.message().messageId()));
+ return;
+ }
+
+ GetChatMemberResponse response = MornyCoeur.getAccount().execute(
+ new GetChatMember(event.message().chat().id(), userId)
+ );
+
+ if (response.chatMember() == null) {
+ MornyCoeur.getAccount().execute(new SendMessage(
+ event.message().chat().id(),
+ "[Unavailable] user not found."
+ ).replyToMessageId(event.message().messageId()));
+ return;
+ }
+
+ User user = response.chatMember().user();
+
+ StringBuilder userInformation = new StringBuilder();
+ userInformation.append(String.format(
+ "userid :\n" +
+ "- %d
\n" +
+ "username :\n" +
+ "- %s
",
+ userId, user.username()
+ ));
+ if (user.firstName() == null) {
+ userInformation.append("\nfirstname : null");
+ } else {
+ userInformation.append(String.format(
+ "\nfirstname :\n" +
+ "- %s
",
+ user.firstName()
+ ));
+ }
+ if (user.lastName() == null) {
+ userInformation.append("\nlastname : null");
+ } else {
+ userInformation.append(String.format(
+ "\nlastname :\n" +
+ "- %s
",
+ user.lastName()
+ ));
+ }
+ if (user.languageCode() != null) {
+ userInformation.append(String.format(
+ "\nlanguage-code :\n" +
+ "- %s
",
+ user.languageCode()
+ ));
+ }
+
+ MornyCoeur.getAccount().execute(new SendMessage(
+ event.message().chat().id(),
+ userInformation.toString()
+ ).replyToMessageId(event.message().messageId()).parseMode(ParseMode.HTML));
+
+ }
+
+}
diff --git a/src/main/java/cc/sukazyo/cono/morny/util/StringUtils.java b/src/main/java/cc/sukazyo/cono/morny/util/StringUtils.java
index 7190670..1a31249 100644
--- a/src/main/java/cc/sukazyo/cono/morny/util/StringUtils.java
+++ b/src/main/java/cc/sukazyo/cono/morny/util/StringUtils.java
@@ -1,5 +1,6 @@
package cc.sukazyo.cono.morny.util;
+import java.util.ArrayList;
import java.util.Arrays;
public class StringUtils {
@@ -10,4 +11,52 @@ public class StringUtils {
return new String(chars);
}
+ public static String[] formatCommand (String com) {
+
+ ArrayList arr = new ArrayList<>();
+
+ StringBuilder tmp = new StringBuilder();
+ char[] coma = com.toCharArray();
+ for (int i = 0; i < coma.length; i++) {
+ if (coma[i] == ' ') {
+ if (!tmp.toString().equals("")) { arr.add(tmp.toString()); }
+ tmp.setLength(0);
+ } else if (coma[i] == '"') {
+ while (true) {
+ i++;
+ if (coma[i] == '"') {
+ break;
+ } else if (coma[i] == '\\' && (coma[i+1] == '"' || coma[i+1] == '\\')) {
+ i++;
+ tmp.append(coma[i]);
+ } else {
+ tmp.append(coma[i]);
+ }
+ }
+ } else if (coma[i] == '\\' && (coma[i+1] == ' ' || coma[i+1] == '"' || coma[i+1] == '\\')) {
+ i++;
+ tmp.append(coma[i]);
+ } else {
+ tmp.append(coma[i]);
+ }
+ }
+ if (!tmp.toString().equals("")) { arr.add(tmp.toString()); }
+ tmp.setLength(0);
+
+ String[] out = new String[arr.size()];
+ arr.toArray(out);
+ return out;
+
+ }
+
+ public static String connectStringArray (String[] array, String connector, int startIndex, int stopIndex) {
+ StringBuilder builder = new StringBuilder();
+ for (int i = startIndex; i < stopIndex; i++) {
+ builder.append(array[i]);
+ builder.append(connector);
+ }
+ builder.append(array[stopIndex]);
+ return builder.toString();
+ }
+
}