mirror of
https://github.com/annimon-tutorials/Similar-Images-Bot.git
synced 2024-09-20 03:34:19 +03:00
Use shorter command parameters
This commit is contained in:
parent
21c973e79e
commit
2ff2895be0
@ -31,8 +31,9 @@ import com.pengrad.telegrambot.response.SendResponse;
|
|||||||
|
|
||||||
public class BotHandler extends BaseBotHandler {
|
public class BotHandler extends BaseBotHandler {
|
||||||
|
|
||||||
private final Pattern delPattern = Pattern.compile("/del(\\d+)m(\\d+)");
|
private static final int RADIX = 36;
|
||||||
private final Pattern comparePattern = Pattern.compile("/compare(\\d+)m(\\d+)x(\\d+)");
|
private final Pattern delPattern = Pattern.compile("/del([^_]+)_(\\d+)");
|
||||||
|
private final Pattern comparePattern = Pattern.compile("/cmp([^-]+)_([^-]+)_(.*)");
|
||||||
|
|
||||||
private final ImageIndexer indexer;
|
private final ImageIndexer indexer;
|
||||||
private long adminId;
|
private long adminId;
|
||||||
@ -70,8 +71,8 @@ public class BotHandler extends BaseBotHandler {
|
|||||||
if (!m.find()) {
|
if (!m.find()) {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
final var channelId = Long.parseLong("-100" + m.group(1));
|
final var channelId = parseChannelIdForCommand(m.group(1));
|
||||||
final var messageId = Integer.parseInt(m.group(2));
|
final var messageId = Integer.parseInt(m.group(2), RADIX);
|
||||||
LOGGER.debug("Delete message {} in {}", messageId, channelId);
|
LOGGER.debug("Delete message {} in {}", messageId, channelId);
|
||||||
bot.execute(new DeleteMessage(channelId, messageId));
|
bot.execute(new DeleteMessage(channelId, messageId));
|
||||||
try {
|
try {
|
||||||
@ -86,9 +87,9 @@ public class BotHandler extends BaseBotHandler {
|
|||||||
if (!m.find()) {
|
if (!m.find()) {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
final var channelId = Long.parseLong("-100" + m.group(1));
|
final var channelId = parseChannelIdForCommand(m.group(1));
|
||||||
final var messageA = Integer.parseInt(m.group(2));
|
final var messageA = Integer.parseInt(m.group(2), RADIX);
|
||||||
final var messageB = Integer.parseInt(m.group(3));
|
final var messageB = messageA - Integer.parseInt(m.group(3), RADIX);
|
||||||
LOGGER.debug("Compare messages {} and {} in {}", messageA, messageB, channelId);
|
LOGGER.debug("Compare messages {} and {} in {}", messageA, messageB, channelId);
|
||||||
|
|
||||||
// Forward and get photo to compare
|
// Forward and get photo to compare
|
||||||
@ -139,9 +140,9 @@ public class BotHandler extends BaseBotHandler {
|
|||||||
|
|
||||||
private void sendReport(List<SimilarImagesInfo> infos) {
|
private void sendReport(List<SimilarImagesInfo> infos) {
|
||||||
String report = infos.stream().map(info -> {
|
String report = infos.stream().map(info -> {
|
||||||
final var post = info.getOriginalPost();
|
final var originalPost = info.getOriginalPost();
|
||||||
final var channelId = post.getChannelId().toString().replace("-100", "");
|
final var channelId = formatChannelIdForCommands(originalPost.getChannelId());
|
||||||
String text = "For post " + formatPostLink(post) + " found:\n";
|
String text = "For originalPost " + formatPostLink(originalPost) + " found:\n";
|
||||||
// Matching results
|
// Matching results
|
||||||
text += info.getResults().stream()
|
text += info.getResults().stream()
|
||||||
.map(r -> String.format(" %s, dst: %.2f", formatPostLink(r.getPost()), r.getDistance()))
|
.map(r -> String.format(" %s, dst: %.2f", formatPostLink(r.getPost()), r.getDistance()))
|
||||||
@ -149,11 +150,10 @@ public class BotHandler extends BaseBotHandler {
|
|||||||
// /compare command
|
// /compare command
|
||||||
text += info.getResults().stream()
|
text += info.getResults().stream()
|
||||||
.map(ImageResult::getPost)
|
.map(ImageResult::getPost)
|
||||||
.map(p -> String.format("%n/compare%sm%dx%d",
|
.map(p -> formatCompareCommand(channelId, originalPost,p))
|
||||||
channelId, post.getMessageId(), p.getMessageId()))
|
|
||||||
.collect(Collectors.joining());
|
.collect(Collectors.joining());
|
||||||
// /del command
|
// /del command
|
||||||
text += String.format("%n/del%sm%d", channelId, post.getMessageId());
|
text += formatDelCommand(channelId, originalPost);
|
||||||
return text;
|
return text;
|
||||||
}).collect(Collectors.joining("\n\n"));
|
}).collect(Collectors.joining("\n\n"));
|
||||||
|
|
||||||
@ -164,11 +164,32 @@ public class BotHandler extends BaseBotHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String formatChannelIdForCommands(Long channelId) {
|
||||||
|
var id = channelId.toString().replace("-100", "");
|
||||||
|
return Long.toString(Long.parseLong(id), RADIX);
|
||||||
|
}
|
||||||
|
|
||||||
|
private long parseChannelIdForCommand(String str) {
|
||||||
|
return Long.parseLong("-100" + Long.parseLong(str, RADIX));
|
||||||
|
}
|
||||||
|
|
||||||
private String formatPostLink(Post post) {
|
private String formatPostLink(Post post) {
|
||||||
String link = linkToMessage(post.getChannelId(), post.getMessageId());
|
String link = linkToMessage(post.getChannelId(), post.getMessageId());
|
||||||
return String.format("[#%d](%s)", post.getMessageId(), link);
|
return String.format("[#%d](%s)", post.getMessageId(), link);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String formatCompareCommand(String channelId, Post originalPost, Post currentPost) {
|
||||||
|
final var originalPostId = originalPost.getMessageId();
|
||||||
|
final var postDiffId = originalPostId - currentPost.getMessageId();
|
||||||
|
return String.format("%n/cmp%s_%s_%s",
|
||||||
|
channelId, Integer.toString(originalPostId, RADIX), Integer.toString(postDiffId, RADIX));
|
||||||
|
}
|
||||||
|
|
||||||
|
private String formatDelCommand(String channelId, Post originalPost) {
|
||||||
|
final var originalPostId = originalPost.getMessageId();
|
||||||
|
return String.format("%n/del%s_%s", channelId, Integer.toString(originalPostId, RADIX));
|
||||||
|
}
|
||||||
|
|
||||||
private String linkToMessage(Message msg) {
|
private String linkToMessage(Message msg) {
|
||||||
return linkToMessage(msg.chat().id(), msg.messageId());
|
return linkToMessage(msg.chat().id(), msg.messageId());
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user