From 7ce151b9bfe7302e72a3328e0b3eda9ca92f13c0 Mon Sep 17 00:00:00 2001 From: Eyre_S Date: Tue, 10 May 2022 23:10:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20calling"=E5=AE=89=E5=A6=AE?= =?UTF-8?q?=E4=BB=8A=E5=A4=A9=E5=90=83=E4=BB=80=E4=B9=88"=20=E5=92=8C?= =?UTF-8?q?=E5=85=B6=E6=9D=83=E9=99=90=E6=8E=A7=E5=88=B6=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit > merged from major/0.6-hot-update/calling-last-dinner-get - 添加对私聊的 "安妮今天吃什么" 事件处理 - 添加 --trusted-reader-dinner 参数用于指定一个用户可以获取"安妮今天吃什么"的数据 - 参数可以重复指定,以便为多个账户授权 --- gradle.properties | 2 +- .../cono/morny/GradleProjectConfigures.java | 4 +- .../cc/sukazyo/cono/morny/MornyCoeur.java | 14 ++--- .../cc/sukazyo/cono/morny/MornyTrusted.java | 14 ++++- .../cc/sukazyo/cono/morny/ServerMain.java | 10 +++- .../cono/morny/bot/event/OnCallMe.java | 53 +++++++++++++++++++ 6 files changed, 86 insertions(+), 11 deletions(-) diff --git a/gradle.properties b/gradle.properties index 5c9ffe4..fb078c2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ ## Core -VERSION = 0.6.3.2 +VERSION = 0.6.3.3 # dependencies diff --git a/src/main/java/cc/sukazyo/cono/morny/GradleProjectConfigures.java b/src/main/java/cc/sukazyo/cono/morny/GradleProjectConfigures.java index d08ca5a..deefd90 100644 --- a/src/main/java/cc/sukazyo/cono/morny/GradleProjectConfigures.java +++ b/src/main/java/cc/sukazyo/cono/morny/GradleProjectConfigures.java @@ -4,6 +4,6 @@ package cc.sukazyo.cono.morny; * the final field that will be updated by gradle automatically. */ public class GradleProjectConfigures { - public static final String VERSION = "0.6.3.2"; - public static final long COMPILE_TIMESTAMP = 1651806802187L; + public static final String VERSION = "0.6.3.3"; + public static final long COMPILE_TIMESTAMP = 1652195187089L; } diff --git a/src/main/java/cc/sukazyo/cono/morny/MornyCoeur.java b/src/main/java/cc/sukazyo/cono/morny/MornyCoeur.java index 07ff390..90ae3e1 100644 --- a/src/main/java/cc/sukazyo/cono/morny/MornyCoeur.java +++ b/src/main/java/cc/sukazyo/cono/morny/MornyCoeur.java @@ -6,13 +6,12 @@ import cc.sukazyo.cono.morny.bot.event.EventListeners; import cc.sukazyo.cono.morny.bot.query.MornyQueries; import cc.sukazyo.cono.morny.data.tracker.TrackerDataManager; import cc.sukazyo.untitled.telegram.api.extra.ExtraAction; - import com.pengrad.telegrambot.TelegramBot; -import com.pengrad.telegrambot.model.DeleteMyCommands; import com.pengrad.telegrambot.request.GetMe; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import java.util.Set; import static cc.sukazyo.cono.morny.Log.logger; @@ -58,6 +57,8 @@ public class MornyCoeur { */ public static final long coeurStartTimestamp = System.currentTimeMillis(); + public static final long DINNER_CHAT_ID = -1001707106392L; + private record LogInResult(TelegramBot account, String username) { } /** @@ -74,7 +75,8 @@ public class MornyCoeur { */ private MornyCoeur ( @Nonnull String botKey, @Nullable String botUsername, - long master, long trustedChat, long latestEventTimestamp, + long master, long trustedChat, Set trustedRDinner, + long latestEventTimestamp, boolean isRemoveCommandListWhenExit ) { @@ -91,7 +93,7 @@ public class MornyCoeur { final LogInResult loginResult = login(botKey, botUsername); this.account = loginResult.account; this.username = loginResult.username; - this.trusted = new MornyTrusted(master, trustedChat); + this.trusted = new MornyTrusted(master, trustedChat, trustedRDinner); logger.info(String.format(""" trusted param set: - master (id) @@ -122,14 +124,14 @@ public class MornyCoeur { */ public static void main ( @Nonnull String botKey, @Nullable String botUsername, - long master, long trustedChat, long latestEventTimestamp, + long master, long trustedChat, Set trustedRDinner, long latestEventTimestamp, boolean isAutomaticResetCommandList, boolean isRemoveCommandListWhenExit ) { if (INSTANCE == null) { logger.info("System Starting"); INSTANCE = new MornyCoeur( botKey, botUsername, - master, trustedChat, + master, trustedChat, trustedRDinner, latestEventTimestamp, isRemoveCommandListWhenExit ); diff --git a/src/main/java/cc/sukazyo/cono/morny/MornyTrusted.java b/src/main/java/cc/sukazyo/cono/morny/MornyTrusted.java index eb9305e..1c7009a 100644 --- a/src/main/java/cc/sukazyo/cono/morny/MornyTrusted.java +++ b/src/main/java/cc/sukazyo/cono/morny/MornyTrusted.java @@ -1,6 +1,8 @@ package cc.sukazyo.cono.morny; import com.pengrad.telegrambot.model.ChatMember.Status; +import java.util.HashSet; +import java.util.Set; /** * 对用户进行身份权限验证的管理类 @@ -19,9 +21,15 @@ public class MornyTrusted { */ public final long MASTER; - public MornyTrusted (long master, long trustedChatId) { + public final Set TRUSTED_READERS_OF_DINNER; + + public MornyTrusted (long master, long trustedChatId, Set trustedRDinner) { this.TRUSTED_CHAT_ID = trustedChatId; this.MASTER = master; + this.TRUSTED_READERS_OF_DINNER = new HashSet<>(){{ + this.add(master); + this.addAll(trustedRDinner); + }}; } /** @@ -39,4 +47,8 @@ public class MornyTrusted { return MornyCoeur.extra().isUserInGroup(userId, TRUSTED_CHAT_ID, Status.administrator); } + public boolean isTrustedForDinnerRead (long userId) { + return TRUSTED_READERS_OF_DINNER.contains(userId); + } + } diff --git a/src/main/java/cc/sukazyo/cono/morny/ServerMain.java b/src/main/java/cc/sukazyo/cono/morny/ServerMain.java index b7d9d78..88a269c 100644 --- a/src/main/java/cc/sukazyo/cono/morny/ServerMain.java +++ b/src/main/java/cc/sukazyo/cono/morny/ServerMain.java @@ -4,6 +4,9 @@ import cc.sukazyo.cono.morny.util.CommonFormatUtils; import javax.annotation.Nonnull; +import java.util.HashSet; +import java.util.Set; + import static cc.sukazyo.cono.morny.Log.logger; /** @@ -75,6 +78,7 @@ public class ServerMain { String username = null; boolean outdatedBlock = false; long master = 793274677L; + Set trustedReadersOfDinner = new HashSet<>(); long trustedChat = -1001541451710L; boolean autoCmdList = false; boolean autoCmdRemove = false; @@ -120,6 +124,10 @@ public class ServerMain { trustedChat = Long.parseLong(args[i]); continue; } + case "--trusted-reader-dinner" -> { + trustedReadersOfDinner.add(Long.parseLong(args[i])); + continue; + } case "--auto-cmd-list", "-ca" -> { autoCmdList = true; continue; @@ -165,7 +173,7 @@ public class ServerMain { } MornyCoeur.main( key, username, - master, trustedChat, + master, trustedChat, trustedReadersOfDinner, outdatedBlock?System.currentTimeMillis():0, autoCmdList, autoCmdRemove ); 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 ef4e85b..1684d69 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,13 +4,18 @@ 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.untitled.telegram.api.formatting.TGToString; +import cc.sukazyo.untitled.util.telegram.formatting.MsgEscape; import com.pengrad.telegrambot.model.Chat; +import com.pengrad.telegrambot.model.Message; import com.pengrad.telegrambot.model.Update; import com.pengrad.telegrambot.model.request.ParseMode; import com.pengrad.telegrambot.request.ForwardMessage; +import com.pengrad.telegrambot.request.GetChat; import com.pengrad.telegrambot.request.SendMessage; import com.pengrad.telegrambot.request.SendSticker; +import com.pengrad.telegrambot.response.SendResponse; import javax.annotation.Nonnull; @@ -46,6 +51,8 @@ public class OnCallMe extends EventListener { requestSteamJoin(update); case "hana paresu", "花宫", "内群" -> requestHanaParesuJoin(update); + case "dinner", "lunch", "breakfast", "meal", "eating", "安妮今天吃什么" -> + requestLastDinner(update); default -> { if (update.message().text().startsWith("cc::")) { requestCustomCall(update); @@ -96,6 +103,52 @@ public class OnCallMe extends EventListener { ).parseMode(ParseMode.HTML)); } + /** + * 对访问最近一次的饭局的请求进行回复
+ * + * @param event 执行呼叫的tg事件 + */ + private static void requestLastDinner (Update event) { + boolean isAllowed = false; + Message lastDinnerData = null; + if (MornyCoeur.trustedInstance().isTrustedForDinnerRead(event.message().from().id())) { + lastDinnerData = MornyCoeur.extra().exec(new GetChat(MornyCoeur.DINNER_CHAT_ID)).chat().pinnedMessage(); + SendResponse sendResp = MornyCoeur.extra().exec(new ForwardMessage( + event.message().from().id(), + lastDinnerData.forwardFromChat().id(), + lastDinnerData.forwardFromMessageId() + )); + MornyCoeur.extra().exec(new SendMessage( + event.message().from().id(), + String.format("on %s [UTC+8]\n- %s before", + MsgEscape.escapeHtml( + CommonFormatUtils.formatDate((long)lastDinnerData.forwardDate()*1000, 8) + ), MsgEscape.escapeHtml( + CommonFormatUtils.formatDuration(System.currentTimeMillis()-(long)lastDinnerData.forwardDate()*1000) + ) + ) + ).replyToMessageId(sendResp.message().messageId()).parseMode(ParseMode.HTML)); + isAllowed = true; + } else { + MornyCoeur.extra().exec(new SendSticker( + event.message().from().id(), + TelegramStickers.ID_403 + ).replyToMessageId(event.message().messageId())); + } + MornyCoeur.extra().exec(new SendMessage( + ME, String.format( + """ + request Last Annie Dinner + from %s + %s""", + TGToString.as(event.message().from()).fullnameRefHtml(), + isAllowed ? "Allowed and returned " + String.format( + "https://t.me/c/%d/%d", Math.abs(lastDinnerData.forwardFromChat().id()+1000000000000L), lastDinnerData.forwardFromMessageId() + ) : "Forbidden by perm check." + ) + ).parseMode(ParseMode.HTML)); + } + /** * 执行自定义呼叫
* 将会向 {@link #ME} 发送一个 request 数据消息和转发的原始请求消息