Skip to content

Commit

Permalink
Use shorter command parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
aNNiMON committed Jan 8, 2022
1 parent 21c973e commit 2ff2895
Showing 1 changed file with 34 additions and 13 deletions.
47 changes: 34 additions & 13 deletions src/main/java/com/annimon/similarimagesbot/BotHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,9 @@

public class BotHandler extends BaseBotHandler {

private final Pattern delPattern = Pattern.compile("/del(\\d+)m(\\d+)");
private final Pattern comparePattern = Pattern.compile("/compare(\\d+)m(\\d+)x(\\d+)");
private static final int RADIX = 36;
private final Pattern delPattern = Pattern.compile("/del([^_]+)_(\\d+)");
private final Pattern comparePattern = Pattern.compile("/cmp([^-]+)_([^-]+)_(.*)");

private final ImageIndexer indexer;
private long adminId;
Expand Down Expand Up @@ -70,8 +71,8 @@ private Optional<Post> processDelCommand(Matcher m) {
if (!m.find()) {
return Optional.empty();
}
final var channelId = Long.parseLong("-100" + m.group(1));
final var messageId = Integer.parseInt(m.group(2));
final var channelId = parseChannelIdForCommand(m.group(1));
final var messageId = Integer.parseInt(m.group(2), RADIX);
LOGGER.debug("Delete message {} in {}", messageId, channelId);
bot.execute(new DeleteMessage(channelId, messageId));
try {
Expand All @@ -86,9 +87,9 @@ private Optional<Post> processCompareCommand(Matcher m) {
if (!m.find()) {
return Optional.empty();
}
final var channelId = Long.parseLong("-100" + m.group(1));
final var messageA = Integer.parseInt(m.group(2));
final var messageB = Integer.parseInt(m.group(3));
final var channelId = parseChannelIdForCommand(m.group(1));
final var messageA = Integer.parseInt(m.group(2), RADIX);
final var messageB = messageA - Integer.parseInt(m.group(3), RADIX);
LOGGER.debug("Compare messages {} and {} in {}", messageA, messageB, channelId);

// Forward and get photo to compare
Expand Down Expand Up @@ -139,21 +140,20 @@ private void processUpdates(List<Update> updates, Set<Post> ignoredPosts) {

private void sendReport(List<SimilarImagesInfo> infos) {
String report = infos.stream().map(info -> {
final var post = info.getOriginalPost();
final var channelId = post.getChannelId().toString().replace("-100", "");
String text = "For post " + formatPostLink(post) + " found:\n";
final var originalPost = info.getOriginalPost();
final var channelId = formatChannelIdForCommands(originalPost.getChannelId());
String text = "For originalPost " + formatPostLink(originalPost) + " found:\n";
// Matching results
text += info.getResults().stream()
.map(r -> String.format(" %s, dst: %.2f", formatPostLink(r.getPost()), r.getDistance()))
.collect(Collectors.joining("\n"));
// /compare command
text += info.getResults().stream()
.map(ImageResult::getPost)
.map(p -> String.format("%n/compare%sm%dx%d",
channelId, post.getMessageId(), p.getMessageId()))
.map(p -> formatCompareCommand(channelId, originalPost,p))
.collect(Collectors.joining());
// /del command
text += String.format("%n/del%sm%d", channelId, post.getMessageId());
text += formatDelCommand(channelId, originalPost);
return text;
}).collect(Collectors.joining("\n\n"));

Expand All @@ -164,11 +164,32 @@ private void sendReport(List<SimilarImagesInfo> infos) {
}
}

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) {
String link = linkToMessage(post.getChannelId(), post.getMessageId());
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) {
return linkToMessage(msg.chat().id(), msg.messageId());
}
Expand Down

0 comments on commit 2ff2895

Please sign in to comment.