diff --git a/build.gradle b/build.gradle index 709257b..39fa77f 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { } group 'cc.sukazyo' -version '0.3.1' +version '0.3.2' project.ext.archiveBaseName = 'Coeur_Morny_Cono' project.ext.artifactId = 'morny-coeur' mainClassName = 'cc.sukazyo.cono.morny.MornyCoeur' 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/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..cf35c87 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,42 @@ 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; + + } + }