mirror of
https://github.com/Eyre-S/Coeur-Morny-Cono.git
synced 2024-11-23 03:27:39 +08:00
[[[release 0.6.3.3]]]
## 🧯Bug Fix - SlashAction 现在可以正常的使用频道身份的频道名作为显示名称 (但是受API限制无法跟随链接找到频道) #30 - 添加 /user 命令对触发身份是否为频道身份的检查,以避免输出占位符的查询结果而直接弹出"频道身份"的提示 #30 - 修复 inline.user-information 的跨用户缓存问题,并缩短缓存时间到10s #32 ## 📇功能 - 添加对私聊中的 "安妮今天吃什么" 的查询,仅允许设定了允许查询"吃什么"的用户使用 ## 🔌系统接口 - 添加 --trusted-reader-dinner 参数用于指定一个用户可以获取"安妮今天吃什么"的数据,参数可以重复使用 - MornyTrusted 字段添加了 isTrustedForDinnerRead 字段用于验证用户是否有使用"安妮今天吃什么"的权限 - MornyCoeur 编入了 DINNER_CHAT_ID 字段 - 添加了一个 InlineQueryUnit 包装类用于包装单个 InlineQueryResult 使其提供自己的缓存要求 - 整合后的 InlineQuery 返回数据组将会继承 isPersonal 的设置,同时取返回值组中的缓存时间最低值 ## 🔩技术修改/typo - GetUserNameAndId 现在将会停止对 channel_bot(id:136817688) 的数据返回 #30
This commit is contained in:
commit
6b7c895ddc
@ -1,6 +1,6 @@
|
|||||||
## Core
|
## Core
|
||||||
|
|
||||||
VERSION = 0.6.2.0
|
VERSION = 0.6.3.3
|
||||||
|
|
||||||
# dependencies
|
# dependencies
|
||||||
|
|
||||||
|
@ -4,6 +4,6 @@ package cc.sukazyo.cono.morny;
|
|||||||
* the final field that will be updated by gradle automatically.
|
* the final field that will be updated by gradle automatically.
|
||||||
*/
|
*/
|
||||||
public class GradleProjectConfigures {
|
public class GradleProjectConfigures {
|
||||||
public static final String VERSION = "0.6.2.0";
|
public static final String VERSION = "0.6.3.3";
|
||||||
public static final long COMPILE_TIMESTAMP = 1647534871045L;
|
public static final long COMPILE_TIMESTAMP = 1652195187089L;
|
||||||
}
|
}
|
||||||
|
@ -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.bot.query.MornyQueries;
|
||||||
import cc.sukazyo.cono.morny.data.tracker.TrackerDataManager;
|
import cc.sukazyo.cono.morny.data.tracker.TrackerDataManager;
|
||||||
import cc.sukazyo.untitled.telegram.api.extra.ExtraAction;
|
import cc.sukazyo.untitled.telegram.api.extra.ExtraAction;
|
||||||
|
|
||||||
import com.pengrad.telegrambot.TelegramBot;
|
import com.pengrad.telegrambot.TelegramBot;
|
||||||
import com.pengrad.telegrambot.model.DeleteMyCommands;
|
|
||||||
import com.pengrad.telegrambot.request.GetMe;
|
import com.pengrad.telegrambot.request.GetMe;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import static cc.sukazyo.cono.morny.Log.logger;
|
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 coeurStartTimestamp = System.currentTimeMillis();
|
||||||
|
|
||||||
|
public static final long DINNER_CHAT_ID = -1001707106392L;
|
||||||
|
|
||||||
private record LogInResult(TelegramBot account, String username) { }
|
private record LogInResult(TelegramBot account, String username) { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -74,7 +75,8 @@ public class MornyCoeur {
|
|||||||
*/
|
*/
|
||||||
private MornyCoeur (
|
private MornyCoeur (
|
||||||
@Nonnull String botKey, @Nullable String botUsername,
|
@Nonnull String botKey, @Nullable String botUsername,
|
||||||
long master, long trustedChat, long latestEventTimestamp,
|
long master, long trustedChat, Set<Long> trustedRDinner,
|
||||||
|
long latestEventTimestamp,
|
||||||
boolean isRemoveCommandListWhenExit
|
boolean isRemoveCommandListWhenExit
|
||||||
) {
|
) {
|
||||||
|
|
||||||
@ -91,7 +93,7 @@ public class MornyCoeur {
|
|||||||
final LogInResult loginResult = login(botKey, botUsername);
|
final LogInResult loginResult = login(botKey, botUsername);
|
||||||
this.account = loginResult.account;
|
this.account = loginResult.account;
|
||||||
this.username = loginResult.username;
|
this.username = loginResult.username;
|
||||||
this.trusted = new MornyTrusted(master, trustedChat);
|
this.trusted = new MornyTrusted(master, trustedChat, trustedRDinner);
|
||||||
logger.info(String.format("""
|
logger.info(String.format("""
|
||||||
trusted param set:
|
trusted param set:
|
||||||
- master (id)
|
- master (id)
|
||||||
@ -122,14 +124,14 @@ public class MornyCoeur {
|
|||||||
*/
|
*/
|
||||||
public static void main (
|
public static void main (
|
||||||
@Nonnull String botKey, @Nullable String botUsername,
|
@Nonnull String botKey, @Nullable String botUsername,
|
||||||
long master, long trustedChat, long latestEventTimestamp,
|
long master, long trustedChat, Set<Long> trustedRDinner, long latestEventTimestamp,
|
||||||
boolean isAutomaticResetCommandList, boolean isRemoveCommandListWhenExit
|
boolean isAutomaticResetCommandList, boolean isRemoveCommandListWhenExit
|
||||||
) {
|
) {
|
||||||
if (INSTANCE == null) {
|
if (INSTANCE == null) {
|
||||||
logger.info("System Starting");
|
logger.info("System Starting");
|
||||||
INSTANCE = new MornyCoeur(
|
INSTANCE = new MornyCoeur(
|
||||||
botKey, botUsername,
|
botKey, botUsername,
|
||||||
master, trustedChat,
|
master, trustedChat, trustedRDinner,
|
||||||
latestEventTimestamp,
|
latestEventTimestamp,
|
||||||
isRemoveCommandListWhenExit
|
isRemoveCommandListWhenExit
|
||||||
);
|
);
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package cc.sukazyo.cono.morny;
|
package cc.sukazyo.cono.morny;
|
||||||
|
|
||||||
import com.pengrad.telegrambot.model.ChatMember.Status;
|
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 final long MASTER;
|
||||||
|
|
||||||
public MornyTrusted (long master, long trustedChatId) {
|
public final Set<Long> TRUSTED_READERS_OF_DINNER;
|
||||||
|
|
||||||
|
public MornyTrusted (long master, long trustedChatId, Set<Long> trustedRDinner) {
|
||||||
this.TRUSTED_CHAT_ID = trustedChatId;
|
this.TRUSTED_CHAT_ID = trustedChatId;
|
||||||
this.MASTER = master;
|
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);
|
return MornyCoeur.extra().isUserInGroup(userId, TRUSTED_CHAT_ID, Status.administrator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isTrustedForDinnerRead (long userId) {
|
||||||
|
return TRUSTED_READERS_OF_DINNER.contains(userId);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,9 @@ import cc.sukazyo.cono.morny.util.CommonFormatUtils;
|
|||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import static cc.sukazyo.cono.morny.Log.logger;
|
import static cc.sukazyo.cono.morny.Log.logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -75,6 +78,7 @@ public class ServerMain {
|
|||||||
String username = null;
|
String username = null;
|
||||||
boolean outdatedBlock = false;
|
boolean outdatedBlock = false;
|
||||||
long master = 793274677L;
|
long master = 793274677L;
|
||||||
|
Set<Long> trustedReadersOfDinner = new HashSet<>();
|
||||||
long trustedChat = -1001541451710L;
|
long trustedChat = -1001541451710L;
|
||||||
boolean autoCmdList = false;
|
boolean autoCmdList = false;
|
||||||
boolean autoCmdRemove = false;
|
boolean autoCmdRemove = false;
|
||||||
@ -120,6 +124,10 @@ public class ServerMain {
|
|||||||
trustedChat = Long.parseLong(args[i]);
|
trustedChat = Long.parseLong(args[i]);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
case "--trusted-reader-dinner" -> {
|
||||||
|
trustedReadersOfDinner.add(Long.parseLong(args[i]));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
case "--auto-cmd-list", "-ca" -> {
|
case "--auto-cmd-list", "-ca" -> {
|
||||||
autoCmdList = true;
|
autoCmdList = true;
|
||||||
continue;
|
continue;
|
||||||
@ -165,7 +173,7 @@ public class ServerMain {
|
|||||||
}
|
}
|
||||||
MornyCoeur.main(
|
MornyCoeur.main(
|
||||||
key, username,
|
key, username,
|
||||||
master, trustedChat,
|
master, trustedChat, trustedReadersOfDinner,
|
||||||
outdatedBlock?System.currentTimeMillis():0,
|
outdatedBlock?System.currentTimeMillis():0,
|
||||||
autoCmdList, autoCmdRemove
|
autoCmdList, autoCmdRemove
|
||||||
);
|
);
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
package cc.sukazyo.cono.morny.bot.api;
|
||||||
|
|
||||||
|
import com.pengrad.telegrambot.model.request.InlineQueryResult;
|
||||||
|
|
||||||
|
public class InlineQueryUnit<T extends InlineQueryResult<T>> {
|
||||||
|
|
||||||
|
public static final int DEFAULT_INLINE_CACHE_TIME = 300;
|
||||||
|
public static final boolean DEFAULT_INLINE_PERSONAL_RESP = false;
|
||||||
|
|
||||||
|
private int cacheTime = DEFAULT_INLINE_CACHE_TIME;
|
||||||
|
private boolean isPersonal = DEFAULT_INLINE_PERSONAL_RESP;
|
||||||
|
public final T result;
|
||||||
|
|
||||||
|
public InlineQueryUnit (T result) {
|
||||||
|
this.result = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int cacheTime () {
|
||||||
|
return cacheTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public InlineQueryUnit<T> cacheTime (int cacheTime) {
|
||||||
|
this.cacheTime = cacheTime;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPersonal () {
|
||||||
|
return isPersonal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public InlineQueryUnit<T> isPersonal (boolean isPersonal) {
|
||||||
|
this.isPersonal = isPersonal;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -32,7 +32,7 @@ public class GetUsernameAndId implements ITelegramCommand {
|
|||||||
|
|
||||||
long userId = event.message().from().id();
|
long userId = event.message().from().id();
|
||||||
|
|
||||||
if ( event.message().replyToMessage()!= null) {
|
if (event.message().replyToMessage()!= null) {
|
||||||
userId = event.message().replyToMessage().from().id();
|
userId = event.message().replyToMessage().from().id();
|
||||||
}
|
}
|
||||||
if (args.length > 0) {
|
if (args.length > 0) {
|
||||||
@ -61,6 +61,14 @@ public class GetUsernameAndId implements ITelegramCommand {
|
|||||||
|
|
||||||
final User user = response.chatMember().user();
|
final User user = response.chatMember().user();
|
||||||
|
|
||||||
|
if (user.id() == 136817688) {
|
||||||
|
MornyCoeur.extra().exec(new SendMessage(
|
||||||
|
event.message().chat().id(),
|
||||||
|
"<code>$__channel_identify</code>"
|
||||||
|
));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
MornyCoeur.extra().exec(new SendMessage(
|
MornyCoeur.extra().exec(new SendMessage(
|
||||||
event.message().chat().id(),
|
event.message().chat().id(),
|
||||||
TelegramUserInformation.informationOutputHTML(user)
|
TelegramUserInformation.informationOutputHTML(user)
|
||||||
|
@ -4,13 +4,18 @@ import cc.sukazyo.cono.morny.MornyCoeur;
|
|||||||
import cc.sukazyo.cono.morny.MornyTrusted;
|
import cc.sukazyo.cono.morny.MornyTrusted;
|
||||||
import cc.sukazyo.cono.morny.bot.api.EventListener;
|
import cc.sukazyo.cono.morny.bot.api.EventListener;
|
||||||
import cc.sukazyo.cono.morny.data.TelegramStickers;
|
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.telegram.api.formatting.TGToString;
|
||||||
|
import cc.sukazyo.untitled.util.telegram.formatting.MsgEscape;
|
||||||
import com.pengrad.telegrambot.model.Chat;
|
import com.pengrad.telegrambot.model.Chat;
|
||||||
|
import com.pengrad.telegrambot.model.Message;
|
||||||
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.ForwardMessage;
|
import com.pengrad.telegrambot.request.ForwardMessage;
|
||||||
|
import com.pengrad.telegrambot.request.GetChat;
|
||||||
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.response.SendResponse;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
@ -46,6 +51,8 @@ public class OnCallMe extends EventListener {
|
|||||||
requestSteamJoin(update);
|
requestSteamJoin(update);
|
||||||
case "hana paresu", "花宫", "内群" ->
|
case "hana paresu", "花宫", "内群" ->
|
||||||
requestHanaParesuJoin(update);
|
requestHanaParesuJoin(update);
|
||||||
|
case "dinner", "lunch", "breakfast", "meal", "eating", "安妮今天吃什么" ->
|
||||||
|
requestLastDinner(update);
|
||||||
default -> {
|
default -> {
|
||||||
if (update.message().text().startsWith("cc::")) {
|
if (update.message().text().startsWith("cc::")) {
|
||||||
requestCustomCall(update);
|
requestCustomCall(update);
|
||||||
@ -96,6 +103,52 @@ public class OnCallMe extends EventListener {
|
|||||||
).parseMode(ParseMode.HTML));
|
).parseMode(ParseMode.HTML));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对访问最近一次的饭局的请求进行回复<br>
|
||||||
|
*
|
||||||
|
* @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("<i>on</i> <code>%s [UTC+8]</code>\n- <code>%s</code> <i>before</i>",
|
||||||
|
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 <b>Last Annie Dinner</b>
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 执行自定义呼叫<br>
|
* 执行自定义呼叫<br>
|
||||||
* 将会向 {@link #ME} 发送一个 request 数据消息和转发的原始请求消息<br>
|
* 将会向 {@link #ME} 发送一个 request 数据消息和转发的原始请求消息<br>
|
||||||
|
@ -2,6 +2,7 @@ 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.bot.api.InlineQueryUnit;
|
||||||
import com.pengrad.telegrambot.model.Update;
|
import com.pengrad.telegrambot.model.Update;
|
||||||
import com.pengrad.telegrambot.model.request.InlineQueryResult;
|
import com.pengrad.telegrambot.model.request.InlineQueryResult;
|
||||||
import com.pengrad.telegrambot.request.AnswerInlineQuery;
|
import com.pengrad.telegrambot.request.AnswerInlineQuery;
|
||||||
@ -23,11 +24,22 @@ public class OnInlineQueries extends EventListener {
|
|||||||
@Override
|
@Override
|
||||||
public boolean onInlineQuery (@Nonnull Update update) {
|
public boolean onInlineQuery (@Nonnull Update update) {
|
||||||
|
|
||||||
List<InlineQueryResult<?>> results = MornyCoeur.queryManager().query(update);
|
List<InlineQueryUnit<?>> results = MornyCoeur.queryManager().query(update);
|
||||||
|
|
||||||
|
int cacheTime = Integer.MAX_VALUE;
|
||||||
|
boolean isPersonal = InlineQueryUnit.DEFAULT_INLINE_PERSONAL_RESP;
|
||||||
|
InlineQueryResult<?>[] inlineQueryResults = new InlineQueryResult<?>[results.size()];
|
||||||
|
for (int i = 0; i < results.size(); i++) {
|
||||||
|
inlineQueryResults[i] = results.get(i).result;
|
||||||
|
if (cacheTime > results.get(i).cacheTime()) cacheTime = results.get(i).cacheTime();
|
||||||
|
if (results.get(i).isPersonal()) isPersonal = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (results.size() == 0) return false;
|
if (results.size() == 0) return false;
|
||||||
|
|
||||||
MornyCoeur.extra().exec(new AnswerInlineQuery(update.inlineQuery().id(), results.toArray(InlineQueryResult[]::new)));
|
MornyCoeur.extra().exec(new AnswerInlineQuery(
|
||||||
|
update.inlineQuery().id(), inlineQueryResults
|
||||||
|
).cacheTime(cacheTime).isPersonal(isPersonal));
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,12 +2,13 @@ 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.tgapi.TGToStringFromMessage;
|
||||||
import cc.sukazyo.untitled.telegram.api.formatting.TGToString;
|
import cc.sukazyo.untitled.telegram.api.formatting.TGToString;
|
||||||
import cc.sukazyo.untitled.util.command.CommonCommand;
|
import cc.sukazyo.untitled.util.command.CommonCommand;
|
||||||
import cc.sukazyo.untitled.util.string.StringArrays;
|
import cc.sukazyo.untitled.util.string.StringArrays;
|
||||||
|
|
||||||
|
import com.pengrad.telegrambot.model.Message;
|
||||||
import com.pengrad.telegrambot.model.Update;
|
import com.pengrad.telegrambot.model.Update;
|
||||||
import com.pengrad.telegrambot.model.User;
|
|
||||||
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;
|
||||||
|
|
||||||
@ -55,22 +56,22 @@ public class OnUserSlashAction extends EventListener {
|
|||||||
hasObject ?
|
hasObject ?
|
||||||
StringArrays.connectStringArray(action, " ", isHardParse?2:1, action.length-1) :
|
StringArrays.connectStringArray(action, " ", isHardParse?2:1, action.length-1) :
|
||||||
"";
|
"";
|
||||||
final User origin = event.message().from();
|
final Message origin = event.message();
|
||||||
final User target = (event.message().replyToMessage() == null ? (
|
final Message target = (event.message().replyToMessage() == null ? (
|
||||||
origin
|
origin
|
||||||
): (
|
): (
|
||||||
event.message().replyToMessage().from()
|
event.message().replyToMessage()
|
||||||
));
|
));
|
||||||
|
|
||||||
MornyCoeur.extra().exec(new SendMessage(
|
MornyCoeur.extra().exec(new SendMessage(
|
||||||
event.message().chat().id(),
|
event.message().chat().id(),
|
||||||
String.format(
|
String.format(
|
||||||
"%s %s%s %s %s!",
|
"%s %s%s %s %s!",
|
||||||
TGToString.as(origin).firstnameRefHtml(),
|
TGToStringFromMessage.as(origin).getSenderFirstNameRefHtml(),
|
||||||
escapeHtml(verb), escapeHtml((hasObject?"":"了")),
|
escapeHtml(verb), escapeHtml((hasObject?"":"了")),
|
||||||
origin==target ?
|
origin==target ?
|
||||||
"<a href='tg://user?id="+target.id()+"'>自己</a>" :
|
"<a href='tg://user?id="+TGToStringFromMessage.as(target).getSenderId()+"'>自己</a>" :
|
||||||
TGToString.as(target).firstnameRefHtml(),
|
TGToStringFromMessage.as(target).getSenderFirstNameRefHtml(),
|
||||||
escapeHtml(hasObject ? object+" " : "")
|
escapeHtml(hasObject ? object+" " : "")
|
||||||
)
|
)
|
||||||
).parseMode(ParseMode.HTML).replyToMessageId(event.message().messageId()));
|
).parseMode(ParseMode.HTML).replyToMessageId(event.message().messageId()));
|
||||||
|
@ -2,12 +2,13 @@ package cc.sukazyo.cono.morny.bot.query;
|
|||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import cc.sukazyo.cono.morny.bot.api.InlineQueryUnit;
|
||||||
import com.pengrad.telegrambot.model.Update;
|
import com.pengrad.telegrambot.model.Update;
|
||||||
import com.pengrad.telegrambot.model.request.InlineQueryResult;
|
import com.pengrad.telegrambot.model.request.InlineQueryResult;
|
||||||
|
|
||||||
public interface ITelegramQuery <T extends InlineQueryResult<T>> {
|
public interface ITelegramQuery <T extends InlineQueryResult<T>> {
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
T query (Update event);
|
InlineQueryUnit<T> query (Update event);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package cc.sukazyo.cono.morny.bot.query;
|
package cc.sukazyo.cono.morny.bot.query;
|
||||||
|
|
||||||
|
import cc.sukazyo.cono.morny.bot.api.InlineQueryUnit;
|
||||||
import com.pengrad.telegrambot.model.Update;
|
import com.pengrad.telegrambot.model.Update;
|
||||||
import com.pengrad.telegrambot.model.request.InlineQueryResult;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -17,10 +17,10 @@ public class MornyQueries {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
public List<InlineQueryResult<?>> query (@Nonnull Update event) {
|
public List<InlineQueryUnit<?>> query (@Nonnull Update event) {
|
||||||
final List<InlineQueryResult<?>> results = new ArrayList<>();
|
final List<InlineQueryUnit<?>> results = new ArrayList<>();
|
||||||
for (ITelegramQuery<?> instance : queryInstances) {
|
for (ITelegramQuery<?> instance : queryInstances) {
|
||||||
final InlineQueryResult<?> r = instance.query(event);
|
final InlineQueryUnit<?> r = instance.query(event);
|
||||||
if (r!=null) results.add(r);
|
if (r!=null) results.add(r);
|
||||||
}
|
}
|
||||||
return results;
|
return results;
|
||||||
|
@ -2,6 +2,7 @@ package cc.sukazyo.cono.morny.bot.query;
|
|||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import cc.sukazyo.cono.morny.bot.api.InlineQueryUnit;
|
||||||
import com.pengrad.telegrambot.model.Update;
|
import com.pengrad.telegrambot.model.Update;
|
||||||
import com.pengrad.telegrambot.model.request.InlineQueryResultArticle;
|
import com.pengrad.telegrambot.model.request.InlineQueryResultArticle;
|
||||||
import com.pengrad.telegrambot.model.request.InputTextMessageContent;
|
import com.pengrad.telegrambot.model.request.InputTextMessageContent;
|
||||||
@ -16,11 +17,14 @@ public class MyInformation implements ITelegramQuery<InlineQueryResultArticle> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public InlineQueryResultArticle query(Update event) {
|
public InlineQueryUnit<InlineQueryResultArticle> query(Update event) {
|
||||||
if (!(event.inlineQuery().query() == null || "".equals(event.inlineQuery().query()))) return null;
|
if (!(event.inlineQuery().query() == null || "".equals(event.inlineQuery().query()))) return null;
|
||||||
return new InlineQueryResultArticle(ID_PREFIX, TITLE, new InputTextMessageContent(
|
return new InlineQueryUnit<>(new InlineQueryResultArticle(
|
||||||
TelegramUserInformation.informationOutputHTML(event.inlineQuery().from())
|
ID_PREFIX, TITLE,
|
||||||
).parseMode(ParseMode.HTML));
|
new InputTextMessageContent(
|
||||||
|
TelegramUserInformation.informationOutputHTML(event.inlineQuery().from())
|
||||||
|
).parseMode(ParseMode.HTML)
|
||||||
|
)).isPersonal(true).cacheTime(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cc.sukazyo.cono.morny.bot.query;
|
package cc.sukazyo.cono.morny.bot.query;
|
||||||
|
|
||||||
|
import cc.sukazyo.cono.morny.bot.api.InlineQueryUnit;
|
||||||
import cc.sukazyo.cono.morny.util.EncryptUtils;
|
import cc.sukazyo.cono.morny.util.EncryptUtils;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
@ -15,13 +16,13 @@ public class RawText implements ITelegramQuery<InlineQueryResultArticle> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public InlineQueryResultArticle query (Update event) {
|
public InlineQueryUnit<InlineQueryResultArticle> query (Update event) {
|
||||||
if (event.inlineQuery().query() == null || "".equals(event.inlineQuery().query())) return null;
|
if (event.inlineQuery().query() == null || "".equals(event.inlineQuery().query())) return null;
|
||||||
return new InlineQueryResultArticle(
|
return new InlineQueryUnit<>(new InlineQueryResultArticle(
|
||||||
ID_PREFIX + EncryptUtils.encryptByMD5(event.inlineQuery().query()),
|
ID_PREFIX + EncryptUtils.encryptByMD5(event.inlineQuery().query()),
|
||||||
TITLE,
|
TITLE,
|
||||||
new InputTextMessageContent(event.inlineQuery().query())
|
new InputTextMessageContent(event.inlineQuery().query())
|
||||||
);
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,30 @@
|
|||||||
|
package cc.sukazyo.cono.morny.util.tgapi;
|
||||||
|
|
||||||
|
import cc.sukazyo.untitled.telegram.api.formatting.TGToString;
|
||||||
|
import cc.sukazyo.untitled.util.telegram.formatting.MsgEscape;
|
||||||
|
import com.pengrad.telegrambot.model.Message;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
|
public class TGToStringFromMessage extends TGToString {
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
private final Message message;
|
||||||
|
|
||||||
|
public TGToStringFromMessage (@Nonnull Message message) { this.message = message; }
|
||||||
|
public static TGToStringFromMessage as (@Nonnull Message message) { return new TGToStringFromMessage(message); }
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
public String getSenderFirstNameRefHtml () {
|
||||||
|
return message.senderChat()==null ? TGToString.as(message.from()).firstnameRefHtml() : String.format(
|
||||||
|
"<a href='tg://user?id=%d'>%s</a>",
|
||||||
|
message.senderChat().id(),
|
||||||
|
MsgEscape.escapeHtml(message.senderChat().title())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getSenderId () {
|
||||||
|
return message.senderChat()==null ? message.from().id() : message.senderChat().id();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user