diff --git a/gradle.properties b/gradle.properties
index eb58aeb..3fa9e53 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,6 +1,6 @@
## Core
-VERSION = 0.7.2.1
+VERSION = 0.8.0.0
CODENAME = fuzhou
diff --git a/src/main/java/cc/sukazyo/cono/morny/GradleProjectConfigures.java b/src/main/java/cc/sukazyo/cono/morny/GradleProjectConfigures.java
index 9dcb287..1d1528b 100644
--- a/src/main/java/cc/sukazyo/cono/morny/GradleProjectConfigures.java
+++ b/src/main/java/cc/sukazyo/cono/morny/GradleProjectConfigures.java
@@ -4,7 +4,7 @@ package cc.sukazyo.cono.morny;
* the final field that will be updated by gradle automatically.
*/
public class GradleProjectConfigures {
- public static final String VERSION = "0.7.2.1";
+ public static final String VERSION = "0.8.0.0";
public static final String CODENAME = "fuzhou";
- public static final long COMPILE_TIMESTAMP = 1663602816303L;
+ public static final long COMPILE_TIMESTAMP = 1664615965858L;
}
diff --git a/src/main/java/cc/sukazyo/cono/morny/MornyCoeur.java b/src/main/java/cc/sukazyo/cono/morny/MornyCoeur.java
index d2cb07e..4e716b8 100644
--- a/src/main/java/cc/sukazyo/cono/morny/MornyCoeur.java
+++ b/src/main/java/cc/sukazyo/cono/morny/MornyCoeur.java
@@ -59,7 +59,7 @@ public class MornyCoeur {
* {@link cc.sukazyo.cono.morny.bot.event.OnUpdateTimestampOffsetLock}
* 会根据这里定义的时间戳取消掉比此时间更早的事件链
*/
- public long latestEventTimestamp;
+ public final long latestEventTimestamp;
/**
* morny 主程序启动时间
* 用于统计数据
diff --git a/src/main/java/cc/sukazyo/cono/morny/ServerMain.java b/src/main/java/cc/sukazyo/cono/morny/ServerMain.java
index 9f58547..17a831f 100644
--- a/src/main/java/cc/sukazyo/cono/morny/ServerMain.java
+++ b/src/main/java/cc/sukazyo/cono/morny/ServerMain.java
@@ -1,6 +1,6 @@
package cc.sukazyo.cono.morny;
-import cc.sukazyo.cono.morny.util.CommonFormatUtils;
+import cc.sukazyo.cono.morny.util.CommonFormat;
import javax.annotation.Nonnull;
@@ -205,7 +205,7 @@ public class ServerMain {
MornySystem.VERSION, MornySystem.CODENAME.toUpperCase(),
MornySystem.getJarMd5(),
GradleProjectConfigures.COMPILE_TIMESTAMP,
- CommonFormatUtils.formatDate(GradleProjectConfigures.COMPILE_TIMESTAMP, 0)
+ CommonFormat.formatDate(GradleProjectConfigures.COMPILE_TIMESTAMP, 0)
));
return;
diff --git a/src/main/java/cc/sukazyo/cono/morny/bot/command/MornyCommands.java b/src/main/java/cc/sukazyo/cono/morny/bot/command/MornyCommands.java
index 2918a80..968cd2d 100644
--- a/src/main/java/cc/sukazyo/cono/morny/bot/command/MornyCommands.java
+++ b/src/main/java/cc/sukazyo/cono/morny/bot/command/MornyCommands.java
@@ -27,8 +27,8 @@ import java.util.List;
import java.util.Map;
import static cc.sukazyo.cono.morny.Log.logger;
-import static cc.sukazyo.cono.morny.util.CommonFormatUtils.formatDate;
-import static cc.sukazyo.cono.morny.util.CommonFormatUtils.formatDuration;
+import static cc.sukazyo.cono.morny.util.CommonFormat.formatDate;
+import static cc.sukazyo.cono.morny.util.CommonFormat.formatDuration;
import static cc.sukazyo.untitled.util.telegram.formatting.MsgEscape.escapeHtml;
public class MornyCommands {
diff --git a/src/main/java/cc/sukazyo/cono/morny/bot/event/OnCallMe.java b/src/main/java/cc/sukazyo/cono/morny/bot/event/OnCallMe.java
index 1684d69..777fe40 100644
--- a/src/main/java/cc/sukazyo/cono/morny/bot/event/OnCallMe.java
+++ b/src/main/java/cc/sukazyo/cono/morny/bot/event/OnCallMe.java
@@ -4,7 +4,7 @@ import cc.sukazyo.cono.morny.MornyCoeur;
import cc.sukazyo.cono.morny.MornyTrusted;
import cc.sukazyo.cono.morny.bot.api.EventListener;
import cc.sukazyo.cono.morny.data.TelegramStickers;
-import cc.sukazyo.cono.morny.util.CommonFormatUtils;
+import cc.sukazyo.cono.morny.util.CommonFormat;
import cc.sukazyo.untitled.telegram.api.formatting.TGToString;
import cc.sukazyo.untitled.util.telegram.formatting.MsgEscape;
import com.pengrad.telegrambot.model.Chat;
@@ -122,9 +122,9 @@ public class OnCallMe extends EventListener {
event.message().from().id(),
String.format("on %s [UTC+8]
\n- %s
before",
MsgEscape.escapeHtml(
- CommonFormatUtils.formatDate((long)lastDinnerData.forwardDate()*1000, 8)
+ CommonFormat.formatDate((long)lastDinnerData.forwardDate()*1000, 8)
), MsgEscape.escapeHtml(
- CommonFormatUtils.formatDuration(System.currentTimeMillis()-(long)lastDinnerData.forwardDate()*1000)
+ CommonFormat.formatDuration(System.currentTimeMillis()-(long)lastDinnerData.forwardDate()*1000)
)
)
).replyToMessageId(sendResp.message().messageId()).parseMode(ParseMode.HTML));
diff --git a/src/main/java/cc/sukazyo/cono/morny/bot/query/RawText.java b/src/main/java/cc/sukazyo/cono/morny/bot/query/RawText.java
index 91333ed..f9f9d4f 100644
--- a/src/main/java/cc/sukazyo/cono/morny/bot/query/RawText.java
+++ b/src/main/java/cc/sukazyo/cono/morny/bot/query/RawText.java
@@ -1,7 +1,6 @@
package cc.sukazyo.cono.morny.bot.query;
import cc.sukazyo.cono.morny.bot.api.InlineQueryUnit;
-import cc.sukazyo.cono.morny.util.EncryptUtils;
import javax.annotation.Nullable;
@@ -9,6 +8,9 @@ import com.pengrad.telegrambot.model.Update;
import com.pengrad.telegrambot.model.request.InlineQueryResultArticle;
import com.pengrad.telegrambot.model.request.InputTextMessageContent;
+import static cc.sukazyo.cono.morny.util.CommonConvert.byteArrayToHex;
+import static cc.sukazyo.cono.morny.util.CommonEncrypt.encryptByMD5;
+
public class RawText implements ITelegramQuery {
public static final String ID_PREFIX = "[morny/r/text]";
@@ -19,7 +21,7 @@ public class RawText implements ITelegramQuery {
public InlineQueryUnit query (Update event) {
if (event.inlineQuery().query() == null || "".equals(event.inlineQuery().query())) return null;
return new InlineQueryUnit<>(new InlineQueryResultArticle(
- ID_PREFIX + EncryptUtils.encryptByMD5(event.inlineQuery().query()),
+ ID_PREFIX + byteArrayToHex(encryptByMD5(event.inlineQuery().query())),
TITLE,
new InputTextMessageContent(event.inlineQuery().query())
));
diff --git a/src/main/java/cc/sukazyo/cono/morny/daemon/MedicationTimer.java b/src/main/java/cc/sukazyo/cono/morny/daemon/MedicationTimer.java
index 5932bb8..813640b 100644
--- a/src/main/java/cc/sukazyo/cono/morny/daemon/MedicationTimer.java
+++ b/src/main/java/cc/sukazyo/cono/morny/daemon/MedicationTimer.java
@@ -1,7 +1,7 @@
package cc.sukazyo.cono.morny.daemon;
import cc.sukazyo.cono.morny.MornyCoeur;
-import cc.sukazyo.cono.morny.util.CommonFormatUtils;
+import cc.sukazyo.cono.morny.util.CommonFormat;
import com.pengrad.telegrambot.model.Message;
import com.pengrad.telegrambot.model.MessageEntity;
import com.pengrad.telegrambot.model.request.ParseMode;
@@ -54,7 +54,7 @@ public class MedicationTimer extends Thread {
public void refreshNotificationWrite (Message edited) {
if (edited.messageId() != lastNotify) return;
- final String editTime = CommonFormatUtils.formatDate(edited.editDate()*1000, 8);
+ final String editTime = CommonFormat.formatDate(edited.editDate()*1000, 8);
ArrayList entities = new ArrayList<>();
if (edited.entities() != null) entities.addAll(List.of(edited.entities()));
entities.add(new MessageEntity(MessageEntity.Type.italic, edited.text().length() + "\n-- ".length(), editTime.length()));
diff --git a/src/main/java/cc/sukazyo/cono/morny/data/MornyJrrp.java b/src/main/java/cc/sukazyo/cono/morny/data/MornyJrrp.java
index 2fd858e..f3b2db1 100644
--- a/src/main/java/cc/sukazyo/cono/morny/data/MornyJrrp.java
+++ b/src/main/java/cc/sukazyo/cono/morny/data/MornyJrrp.java
@@ -1,6 +1,7 @@
package cc.sukazyo.cono.morny.data;
-import cc.sukazyo.cono.morny.util.EncryptUtils;
+import cc.sukazyo.cono.morny.util.CommonConvert;
+import cc.sukazyo.cono.morny.util.CommonEncrypt;
import com.pengrad.telegrambot.model.User;
/**
@@ -39,7 +40,7 @@ public class MornyJrrp {
* @return 算法得到的 jrrp 值,取值为 {@code [0.00. 100.00]}
*/
public static double calcJrrpXmomi (long userId, long dayStamp) {
- return (double)Long.parseLong(EncryptUtils.encryptByMD5(userId + "@" + dayStamp).substring(0, 4), 16) / (double)0xffff;
+ return (double)Long.parseLong(CommonConvert.byteArrayToHex(CommonEncrypt.encryptByMD5(userId + "@" + dayStamp)).substring(0, 4), 16) / (double)0xffff;
}
}
diff --git a/src/main/java/cc/sukazyo/cono/morny/util/CommonConvert.java b/src/main/java/cc/sukazyo/cono/morny/util/CommonConvert.java
new file mode 100644
index 0000000..eddf5fa
--- /dev/null
+++ b/src/main/java/cc/sukazyo/cono/morny/util/CommonConvert.java
@@ -0,0 +1,36 @@
+package cc.sukazyo.cono.morny.util;
+
+import javax.annotation.Nonnull;
+
+public class CommonConvert {
+
+ private final static String[] hexArray = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
+
+ /**
+ * 将字节数组转换成十六进制,并以字符串的形式返回
+ * 128位是指二进制位。二进制太长,所以一般都改写成16进制,
+ * 每一位16进制数可以代替4位二进制数,所以128位二进制数写成16进制就变成了128/4=32位。
+ */
+ @Nonnull
+ public static String byteArrayToHex(@Nonnull byte[] b){
+ StringBuilder sb = new StringBuilder();
+ for (byte value : b) {
+ sb.append(byteToHex(value));
+ }
+ return sb.toString();
+ }
+
+ /**
+ * 将一个字节转换成十六进制,并以字符串的形式返回
+ */
+ @Nonnull
+ public static String byteToHex(byte b) {
+ int n = b;
+ if (n < 0)
+ n = n + 256;
+ int d1 = n / 16;
+ int d2 = n % 16;
+ return hexArray[d1]+hexArray[d2];
+ }
+
+}
diff --git a/src/main/java/cc/sukazyo/cono/morny/util/CommonEncrypt.java b/src/main/java/cc/sukazyo/cono/morny/util/CommonEncrypt.java
new file mode 100644
index 0000000..7bcf21d
--- /dev/null
+++ b/src/main/java/cc/sukazyo/cono/morny/util/CommonEncrypt.java
@@ -0,0 +1,38 @@
+package cc.sukazyo.cono.morny.util;
+
+import javax.annotation.Nonnull;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * 用于数据加密或编码的工具类
+ * 显然大部分代码是抄来的
+ *
+ */
+public class CommonEncrypt {
+
+ public static final Charset ENCRYPT_STANDARD_CHARSET = StandardCharsets.UTF_8;
+
+ /***
+ * 对指定的字符串进行MD5加密
+ */
+
+ @Nonnull
+ public static byte[] encryptByMD5(@Nonnull byte[] data) {
+ try {
+ return MessageDigest.getInstance("md5").digest(data);
+ } catch (NoSuchAlgorithmException e) {
+ throw new IllegalStateException();
+ }
+
+ }
+ @Nonnull
+ public static byte[] encryptByMD5(String originString) {
+ return encryptByMD5(originString.getBytes(ENCRYPT_STANDARD_CHARSET));
+ }
+
+}
diff --git a/src/main/java/cc/sukazyo/cono/morny/util/CommonFormatUtils.java b/src/main/java/cc/sukazyo/cono/morny/util/CommonFormat.java
similarity index 79%
rename from src/main/java/cc/sukazyo/cono/morny/util/CommonFormatUtils.java
rename to src/main/java/cc/sukazyo/cono/morny/util/CommonFormat.java
index c629548..0598ba6 100644
--- a/src/main/java/cc/sukazyo/cono/morny/util/CommonFormatUtils.java
+++ b/src/main/java/cc/sukazyo/cono/morny/util/CommonFormat.java
@@ -6,10 +6,12 @@ import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
-public class CommonFormatUtils {
+public class CommonFormat {
+
+ public static final String DATE_TIME_PATTERN_FULL_MILLIS = "yyyy-MM-dd HH:mm:ss:SSS";
public static String formatDate (long timestamp, int utcOffset) {
- return DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS").format(LocalDateTime.ofInstant(
+ return DateTimeFormatter.ofPattern(DATE_TIME_PATTERN_FULL_MILLIS).format(LocalDateTime.ofInstant(
Instant.ofEpochMilli(timestamp),
ZoneId.ofOffset("UTC", ZoneOffset.ofHours(utcOffset))
));
diff --git a/src/main/java/cc/sukazyo/cono/morny/util/EncryptUtils.java b/src/main/java/cc/sukazyo/cono/morny/util/EncryptUtils.java
deleted file mode 100644
index 243389a..0000000
--- a/src/main/java/cc/sukazyo/cono/morny/util/EncryptUtils.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package cc.sukazyo.cono.morny.util;
-
-import javax.annotation.Nonnull;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-
-/**
- * 用于数据加密或编码的工具类
- * 显然大部分代码是抄来的
- *
- */
-public class EncryptUtils {
-
- private final static String[] hexArray = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
-
- /***
- * 对指定的字符串进行MD5加密
- */
- @Nonnull
- public static String encryptByMD5(String originString) {
- try {
- //创建具有MD5算法的信息摘要
- MessageDigest md = MessageDigest.getInstance("MD5");
- //使用指定的字节数组对摘要进行最后更新,然后完成摘要计算
- byte[] bytes = md.digest(originString.getBytes());
- //将得到的字节数组变成字符串返回
- String s = byteArrayToHex(bytes);
- return s.toUpperCase();
- } catch (NoSuchAlgorithmException e) {
- throw new IllegalStateException();
- }
- }
-
- /**
- * 将字节数组转换成十六进制,并以字符串的形式返回
- * 128位是指二进制位。二进制太长,所以一般都改写成16进制,
- * 每一位16进制数可以代替4位二进制数,所以128位二进制数写成16进制就变成了128/4=32位。
- */
- private static String byteArrayToHex(byte[] b){
- StringBuilder sb = new StringBuilder();
- for (byte value : b) {
- sb.append(byteToHex(value));
- }
- return sb.toString();
- }
-
- /**
- * 将一个字节转换成十六进制,并以字符串的形式返回
- */
- public static String byteToHex(byte b) {
- int n = b;
- if (n < 0)
- n = n + 256;
- int d1 = n / 16;
- int d2 = n % 16;
- return hexArray[d1]+hexArray[d2];
- }
-
-}