support QuestionMarkReply to reply more than 1 mark char message. add javadoc

This commit is contained in:
A.C.Sukazyo Eyre 2022-11-20 12:45:20 +08:00
parent 0e3a9d3f9b
commit 031a799070
Signed by: Eyre_S
GPG Key ID: C17CE40291207874
3 changed files with 35 additions and 8 deletions

View File

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

View File

@ -12,21 +12,26 @@ import static cc.sukazyo.cono.morny.util.CommonRandom.probabilityTrue;
public class OnQuestionMarkReply extends EventListener {
public static final Set<String> QUESTION_MARKS = Set.of("?", "", "¿", "", "", "", "", "");
/**
* 一个 unicode 的问号字符列表. 不仅有半角全角问号也包含了变体问号和叹号结合的问好以及 uni-emoji 问号
* @since 1.0.0-RC3.2
*/
public static final Set<Character> 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;
if (!probabilityTrue(8)) return false;
for (char c : update.message().text().toCharArray()) {
if (!QUESTION_MARKS.contains(c)) return false;
}
return false;
MornyCoeur.extra().exec(new SendMessage(
update.message().chat().id(), update.message().text()
).replyToMessageId(update.message().messageId()));
return true;
}

View File

@ -5,16 +5,38 @@ import java.util.concurrent.ThreadLocalRandom;
public class CommonRandom {
/**
* 通过 {@link ThreadLocalRandom} 以指定的一定几率返回 true.
* @param probability 一个正整数决定在样本空间中有多大的可能性为 true
* @param base 一个正整数决定样本空间有多大
* @return {@code base} 分之 {@code probability} 的几率返回值为 {@link true}.
* 如果 {@code probability} 大于 {@code base}也就是为 true 的可能性大于 100%则会永远为 true
* @throws IllegalArgumentException
* 当参数 base 或是 probability 不为正整数时
* @since 1.0.0-RC3.2
*/
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);
}
/**
* 以一定几率返回 true.
* @return {@code probabilityIn} 分之 {@link 1} 的几率为 {@link true}.
* @see #probabilityTrue(int, int)
* @since 1.0.0-RC3.2
*/
public static boolean probabilityTrue (@Nonnegative int probabilityIn) {
return (probabilityTrue(1, probabilityIn));
}
/**
* 通过 {@link ThreadLocalRandom} 实现的随机 boolean 取值.
* @return 随机的 {@link true} {@link false}各占(近似)一半可能性.
* @see ThreadLocalRandom#nextBoolean()
* @since 1.0.0-RC3.2
*/
public static boolean iif () {
return ThreadLocalRandom.current().nextBoolean();
}