Compare commits

...

2 Commits

Author SHA1 Message Date
0e3a9d3f9b
add function to randomly reply "?" message, added a CommonRandom tool, replace all jb.NotNull to javax.Nonnull 2022-11-19 23:27:45 +08:00
17c29036b3
add a function "if something?" to OnUserRandoms
- and now uses @Deprecated not @SuppressWarnings("unused") to tag those unused event.
2022-11-19 22:48:20 +08:00
11 changed files with 84 additions and 35 deletions

View File

@ -5,7 +5,7 @@ MORNY_ARCHIVE_NAME = morny-coeur
MORNY_CODE_STORE = https://github.com/Eyre-S/Coeur-Morny-Cono MORNY_CODE_STORE = https://github.com/Eyre-S/Coeur-Morny-Cono
MORNY_COMMIT_PATH = https://github.com/Eyre-S/Coeur-Morny-Cono/commit/%s MORNY_COMMIT_PATH = https://github.com/Eyre-S/Coeur-Morny-Cono/commit/%s
VERSION = 1.0.0-RC3 VERSION = 1.0.0-RC3.2
USE_DELTA = false USE_DELTA = false
VERSION_DELTA = VERSION_DELTA =

View File

@ -7,7 +7,6 @@ import cc.sukazyo.cono.morny.util.tgapi.InputCommand;
import com.pengrad.telegrambot.model.Update; import com.pengrad.telegrambot.model.Update;
import com.pengrad.telegrambot.model.request.ParseMode; import com.pengrad.telegrambot.model.request.ParseMode;
import com.pengrad.telegrambot.request.SendMessage; import com.pengrad.telegrambot.request.SendMessage;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -29,7 +28,7 @@ public class Ip186Query {
@Nullable @Override public String[] getAliases () { return new String[0]; } @Nullable @Override public String[] getAliases () { return new String[0]; }
@Nonnull @Override public String getParamRule () { return "[ip]"; } @Nonnull @Override public String getParamRule () { return "[ip]"; }
@Nonnull @Override public String getDescription () { return "通过 https://ip.186526.xyz 查询 ip 资料"; } @Nonnull @Override public String getDescription () { return "通过 https://ip.186526.xyz 查询 ip 资料"; }
@Override public void execute (@NotNull InputCommand command, @NotNull Update event) { exec(event, command); } @Override public void execute (@Nonnull InputCommand command, @Nonnull Update event) { exec(event, command); }
} }
public static class Whois implements ITelegramCommand { public static class Whois implements ITelegramCommand {
@ -37,7 +36,7 @@ public class Ip186Query {
@Nullable @Override public String[] getAliases () { return new String[0]; } @Nullable @Override public String[] getAliases () { return new String[0]; }
@Nonnull @Override public String getParamRule () { return "[domain]"; } @Nonnull @Override public String getParamRule () { return "[domain]"; }
@Nonnull @Override public String getDescription () { return "通过 https://ip.186526.xyz 查询域名资料"; } @Nonnull @Override public String getDescription () { return "通过 https://ip.186526.xyz 查询域名资料"; }
@Override public void execute (@NotNull InputCommand command, @NotNull Update event) { exec(event, command); } @Override public void execute (@Nonnull InputCommand command, @Nonnull Update event) { exec(event, command); }
} }
private static void exec (@Nonnull Update event, @Nonnull InputCommand command) { private static void exec (@Nonnull Update event, @Nonnull InputCommand command) {

View File

@ -14,7 +14,6 @@ import com.pengrad.telegrambot.model.request.ParseMode;
import com.pengrad.telegrambot.request.SendMessage; import com.pengrad.telegrambot.request.SendMessage;
import com.pengrad.telegrambot.request.SendSticker; import com.pengrad.telegrambot.request.SendSticker;
import com.pengrad.telegrambot.request.SetMyCommands; import com.pengrad.telegrambot.request.SetMyCommands;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -201,7 +200,7 @@ public class MornyCommands {
private static class ExitAlias implements ISimpleCommand { private static class ExitAlias implements ISimpleCommand {
@Nonnull @Override public String getName () { return "quit"; } @Nonnull @Override public String getName () { return "quit"; }
@Nullable @Override public String[] getAliases () { return new String[]{"stop"}; } @Nullable @Override public String[] getAliases () { return new String[]{"stop"}; }
@Override public void execute (@NotNull InputCommand command, @NotNull Update event) { onCommandExitExec(event); } @Override public void execute (@Nonnull InputCommand command, @Nonnull Update event) { onCommandExitExec(event); }
} }
private static void onCommandExitExec (@Nonnull Update event) { private static void onCommandExitExec (@Nonnull Update event) {
if (MornyCoeur.trustedInstance().isTrusted(event.message().from().id())) { if (MornyCoeur.trustedInstance().isTrusted(event.message().from().id())) {

View File

@ -7,7 +7,8 @@ import com.pengrad.telegrambot.request.SendMessage;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.concurrent.ThreadLocalRandom;
import static cc.sukazyo.cono.morny.util.CommonRandom.probabilityTrue;
@SuppressWarnings("NonAsciiCharacters") @SuppressWarnings("NonAsciiCharacters")
public class 私わね implements ISimpleCommand { public class 私わね implements ISimpleCommand {
@ -20,7 +21,7 @@ public class 私わね implements ISimpleCommand {
@Override @Override
public void execute (@Nonnull InputCommand command, @Nonnull Update event) { public void execute (@Nonnull InputCommand command, @Nonnull Update event) {
if (ThreadLocalRandom.current().nextInt(521) == 0) { if (probabilityTrue(521)) {
// 可以接入未来的心情系统如果有的话 // 可以接入未来的心情系统如果有的话
// final String text = switch (ThreadLocalRandom.current().nextInt(11)) { // final String text = switch (ThreadLocalRandom.current().nextInt(11)) {
// case 0,7,8,9,10 -> "才不是"; // case 0,7,8,9,10 -> "才不是";

View File

@ -5,18 +5,19 @@ import cc.sukazyo.cono.morny.bot.api.EventListenerManager;
public class EventListeners { public class EventListeners {
public static final OnTelegramCommand COMMANDS_LISTENER = new OnTelegramCommand(); public static final OnTelegramCommand COMMANDS_LISTENER = new OnTelegramCommand();
@SuppressWarnings("unused") public static final OnActivityRecord ACTIVITY_RECORDER = new OnActivityRecord(); // public static final OnActivityRecord ACTIVITY_RECORDER = new OnActivityRecord();
public static final OnUserSlashAction USER_SLASH_ACTION = new OnUserSlashAction(); public static final OnUserSlashAction USER_SLASH_ACTION = new OnUserSlashAction();
public static final OnUpdateTimestampOffsetLock UPDATE_TIMESTAMP_OFFSET_LOCK = new OnUpdateTimestampOffsetLock(); public static final OnUpdateTimestampOffsetLock UPDATE_TIMESTAMP_OFFSET_LOCK = new OnUpdateTimestampOffsetLock();
public static final OnInlineQueries INLINE_QUERY = new OnInlineQueries(); public static final OnInlineQueries INLINE_QUERY = new OnInlineQueries();
public static final OnCallMe CALL_ME = new OnCallMe(); public static final OnCallMe CALL_ME = new OnCallMe();
public static final OnEventHackHandle EVENT_HACK_HANDLE = new OnEventHackHandle(); public static final OnEventHackHandle EVENT_HACK_HANDLE = new OnEventHackHandle();
@SuppressWarnings("unused") static final OnKuohuanhuanNeedSleep KUOHUANHUAN_NEED_SLEEP = new OnKuohuanhuanNeedSleep(); // static final OnKuohuanhuanNeedSleep KUOHUANHUAN_NEED_SLEEP = new OnKuohuanhuanNeedSleep();
public static final OnUserRandoms USER_RANDOMS = new OnUserRandoms(); public static final OnUserRandoms USER_RANDOMS = new OnUserRandoms();
public static final OnCallMsgSend CALL_MSG_SEND = new OnCallMsgSend(); public static final OnCallMsgSend CALL_MSG_SEND = new OnCallMsgSend();
public static final OnMedicationNotifyApply MEDICATION_NOTIFY_APPLY = new OnMedicationNotifyApply(); public static final OnMedicationNotifyApply MEDICATION_NOTIFY_APPLY = new OnMedicationNotifyApply();
public static final OnRandomlyTriggered RANDOMLY_TRIGGERED = new OnRandomlyTriggered(); public static final OnRandomlyTriggered RANDOMLY_TRIGGERED = new OnRandomlyTriggered();
public static final OnUniMeowTrigger UNI_MEOW_TRIGGER = new OnUniMeowTrigger(); public static final OnUniMeowTrigger UNI_MEOW_TRIGGER = new OnUniMeowTrigger();
public static final OnQuestionMarkReply QUESTION_MARK_REPLY = new OnQuestionMarkReply();
public static void registerAllListeners () { public static void registerAllListeners () {
EventListenerManager.addListener( EventListenerManager.addListener(
@ -28,6 +29,7 @@ public class EventListeners {
UNI_MEOW_TRIGGER, UNI_MEOW_TRIGGER,
RANDOMLY_TRIGGERED, RANDOMLY_TRIGGERED,
USER_RANDOMS, USER_RANDOMS,
QUESTION_MARK_REPLY,
USER_SLASH_ACTION, USER_SLASH_ACTION,
INLINE_QUERY, INLINE_QUERY,
CALL_ME, CALL_ME,

View File

@ -7,6 +7,7 @@ import com.pengrad.telegrambot.model.Update;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
@Deprecated
public class OnActivityRecord extends EventListener { public class OnActivityRecord extends EventListener {
@Override @Override

View File

@ -10,6 +10,7 @@ import java.util.Calendar;
import java.util.GregorianCalendar; import java.util.GregorianCalendar;
import java.util.Locale; import java.util.Locale;
@Deprecated
public class OnKuohuanhuanNeedSleep extends EventListener { public class OnKuohuanhuanNeedSleep extends EventListener {
@Override @Override

View File

@ -5,17 +5,18 @@ import cc.sukazyo.cono.morny.bot.api.EventListener;
import cc.sukazyo.cono.morny.daemon.MornyDaemons; import cc.sukazyo.cono.morny.daemon.MornyDaemons;
import com.pengrad.telegrambot.model.Message; import com.pengrad.telegrambot.model.Message;
import com.pengrad.telegrambot.model.Update; import com.pengrad.telegrambot.model.Update;
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nonnull;
public class OnMedicationNotifyApply extends EventListener { public class OnMedicationNotifyApply extends EventListener {
@Override @Override
public boolean onEditedChannelPost (@NotNull Update update) { public boolean onEditedChannelPost (@Nonnull Update update) {
return editedMessageProcess(update.editedChannelPost()); return editedMessageProcess(update.editedChannelPost());
} }
@Override @Override
public boolean onEditedMessage (@NotNull Update update) { public boolean onEditedMessage (@Nonnull Update update) {
return editedMessageProcess(update.editedMessage()); return editedMessageProcess(update.editedMessage());
} }

View File

@ -0,0 +1,33 @@
package cc.sukazyo.cono.morny.bot.event;
import cc.sukazyo.cono.morny.MornyCoeur;
import cc.sukazyo.cono.morny.bot.api.EventListener;
import com.pengrad.telegrambot.model.Update;
import com.pengrad.telegrambot.request.SendMessage;
import javax.annotation.Nonnull;
import java.util.Set;
import static cc.sukazyo.cono.morny.util.CommonRandom.probabilityTrue;
public class OnQuestionMarkReply extends EventListener {
public static final Set<String> QUESTION_MARKS = Set.of("?", "", "¿", "", "", "", "", "");
@Override
public boolean onMessage (@Nonnull Update update) {
if (update.message().text() == null) return false;
if (QUESTION_MARKS.contains(update.message().text()) && probabilityTrue(8)) {
MornyCoeur.extra().exec(new SendMessage(
update.message().chat().id(), update.message().text()
).replyToMessageId(update.message().messageId()));
return true;
}
return false;
}
}

View File

@ -2,44 +2,34 @@ package cc.sukazyo.cono.morny.bot.event;
import cc.sukazyo.cono.morny.MornyCoeur; import cc.sukazyo.cono.morny.MornyCoeur;
import cc.sukazyo.cono.morny.bot.api.EventListener; import cc.sukazyo.cono.morny.bot.api.EventListener;
import cc.sukazyo.cono.morny.util.UniversalCommand;
import com.pengrad.telegrambot.model.Update; import com.pengrad.telegrambot.model.Update;
import com.pengrad.telegrambot.request.SendMessage; import com.pengrad.telegrambot.request.SendMessage;
import org.jetbrains.annotations.NotNull;
import java.util.concurrent.ThreadLocalRandom; import javax.annotation.Nonnull;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import static cc.sukazyo.cono.morny.util.CommonRandom.iif;
public class OnUserRandoms extends EventListener { public class OnUserRandoms extends EventListener {
private static final Pattern USER_OR_CN_QUERY = Pattern.compile("(.+)还是(.+)"); private static final Pattern USER_OR_QUERY = Pattern.compile("(.+)(?:还是|or)(.+)");
private static final Pattern USER_OR_EN_QUERY = Pattern.compile("(.+)or(.+)"); private static final Pattern USER_IF_QUERY = Pattern.compile("(.+)[吗?|]+$");
@Override @Override
public boolean onMessage (@NotNull Update update) { public boolean onMessage (@Nonnull Update update) {
if (update.message().text() == null) return false; if (update.message().text() == null) return false;
if (!update.message().text().startsWith("/")) return false; if (!update.message().text().startsWith("/")) return false;
final String[] preProcess = UniversalCommand.format(update.message().text()); final String query = update.message().text().substring(1);
if (preProcess.length > 1) return false;
final String query = preProcess[0];
// ----- START CODE BLOCK COMMENT -----
// 这里实现思路和代码优化有至少一半是 copilot IDEA 提供的
// 实现思路都可以从人类手里抢一半贡献太恐怖了aba
String result = null; String result = null;
final Matcher matcher; Matcher matcher;
if (query.contains("还是")) { if ((matcher = USER_OR_QUERY.matcher(query)).find()) {
matcher = USER_OR_CN_QUERY.matcher(query); result = iif() ? matcher.group(1) : matcher.group(2);
} else { } else if ((matcher = USER_IF_QUERY.matcher(query)).matches()) {
matcher = USER_OR_EN_QUERY.matcher(query); result = (iif()?"":"") + matcher.group(1);
} }
if (matcher.find()) {
result = ThreadLocalRandom.current().nextBoolean() ? matcher.group(1) : matcher.group(2);
}
// ----- STOP CODE BLOCK COMMENT -----
if (result == null) return false; if (result == null) return false;
MornyCoeur.extra().exec(new SendMessage( MornyCoeur.extra().exec(new SendMessage(

View File

@ -0,0 +1,22 @@
package cc.sukazyo.cono.morny.util;
import javax.annotation.Nonnegative;
import java.util.concurrent.ThreadLocalRandom;
public class CommonRandom {
public static boolean probabilityTrue (@Nonnegative int probability, @Nonnegative int base) {
if (probability < 1) throw new IllegalArgumentException("the probability must be a positive value!");
if (base < 1) throw new IllegalArgumentException("the probability base must be a positive value!");
return probability > ThreadLocalRandom.current().nextInt(base);
}
public static boolean probabilityTrue (@Nonnegative int probabilityIn) {
return (probabilityTrue(1, probabilityIn));
}
public static boolean iif () {
return ThreadLocalRandom.current().nextBoolean();
}
}