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(); + } + }