3131
3232public class BotHandler extends BaseBotHandler {
3333
34- private final Pattern delPattern = Pattern .compile ("/del(\\ d+)m(\\ d+)" );
35- private final Pattern comparePattern = Pattern .compile ("/compare(\\ d+)m(\\ d+)x(\\ d+)" );
34+ private static final int RADIX = 36 ;
35+ private final Pattern delPattern = Pattern .compile ("/del([^_]+)_(\\ d+)" );
36+ private final Pattern comparePattern = Pattern .compile ("/cmp([^-]+)_([^-]+)_(.*)" );
3637
3738 private final ImageIndexer indexer ;
3839 private long adminId ;
@@ -70,8 +71,8 @@ private Optional<Post> processDelCommand(Matcher m) {
7071 if (!m .find ()) {
7172 return Optional .empty ();
7273 }
73- final var channelId = Long . parseLong ( "-100" + m .group (1 ));
74- final var messageId = Integer .parseInt (m .group (2 ));
74+ final var channelId = parseChannelIdForCommand ( m .group (1 ));
75+ final var messageId = Integer .parseInt (m .group (2 ), RADIX );
7576 LOGGER .debug ("Delete message {} in {}" , messageId , channelId );
7677 bot .execute (new DeleteMessage (channelId , messageId ));
7778 try {
@@ -86,9 +87,9 @@ private Optional<Post> processCompareCommand(Matcher m) {
8687 if (!m .find ()) {
8788 return Optional .empty ();
8889 }
89- final var channelId = Long . parseLong ( "-100" + m .group (1 ));
90- final var messageA = Integer .parseInt (m .group (2 ));
91- final var messageB = Integer .parseInt (m .group (3 ));
90+ final var channelId = parseChannelIdForCommand ( m .group (1 ));
91+ final var messageA = Integer .parseInt (m .group (2 ), RADIX );
92+ final var messageB = messageA - Integer .parseInt (m .group (3 ), RADIX );
9293 LOGGER .debug ("Compare messages {} and {} in {}" , messageA , messageB , channelId );
9394
9495 // Forward and get photo to compare
@@ -139,21 +140,20 @@ private void processUpdates(List<Update> updates, Set<Post> ignoredPosts) {
139140
140141 private void sendReport (List <SimilarImagesInfo > infos ) {
141142 String report = infos .stream ().map (info -> {
142- final var post = info .getOriginalPost ();
143- final var channelId = post .getChannelId (). toString (). replace ( "-100" , "" );
144- String text = "For post " + formatPostLink (post ) + " found:\n " ;
143+ final var originalPost = info .getOriginalPost ();
144+ final var channelId = formatChannelIdForCommands ( originalPost .getChannelId ());
145+ String text = "For originalPost " + formatPostLink (originalPost ) + " found:\n " ;
145146 // Matching results
146147 text += info .getResults ().stream ()
147148 .map (r -> String .format (" %s, dst: %.2f" , formatPostLink (r .getPost ()), r .getDistance ()))
148149 .collect (Collectors .joining ("\n " ));
149150 // /compare command
150151 text += info .getResults ().stream ()
151152 .map (ImageResult ::getPost )
152- .map (p -> String .format ("%n/compare%sm%dx%d" ,
153- channelId , post .getMessageId (), p .getMessageId ()))
153+ .map (p -> formatCompareCommand (channelId , originalPost ,p ))
154154 .collect (Collectors .joining ());
155155 // /del command
156- text += String . format ( "%n/del%sm%d" , channelId , post . getMessageId () );
156+ text += formatDelCommand ( channelId , originalPost );
157157 return text ;
158158 }).collect (Collectors .joining ("\n \n " ));
159159
@@ -164,11 +164,32 @@ private void sendReport(List<SimilarImagesInfo> infos) {
164164 }
165165 }
166166
167+ private String formatChannelIdForCommands (Long channelId ) {
168+ var id = channelId .toString ().replace ("-100" , "" );
169+ return Long .toString (Long .parseLong (id ), RADIX );
170+ }
171+
172+ private long parseChannelIdForCommand (String str ) {
173+ return Long .parseLong ("-100" + Long .parseLong (str , RADIX ));
174+ }
175+
167176 private String formatPostLink (Post post ) {
168177 String link = linkToMessage (post .getChannelId (), post .getMessageId ());
169178 return String .format ("[#%d](%s)" , post .getMessageId (), link );
170179 }
171180
181+ private String formatCompareCommand (String channelId , Post originalPost , Post currentPost ) {
182+ final var originalPostId = originalPost .getMessageId ();
183+ final var postDiffId = originalPostId - currentPost .getMessageId ();
184+ return String .format ("%n/cmp%s_%s_%s" ,
185+ channelId , Integer .toString (originalPostId , RADIX ), Integer .toString (postDiffId , RADIX ));
186+ }
187+
188+ private String formatDelCommand (String channelId , Post originalPost ) {
189+ final var originalPostId = originalPost .getMessageId ();
190+ return String .format ("%n/del%s_%s" , channelId , Integer .toString (originalPostId , RADIX ));
191+ }
192+
172193 private String linkToMessage (Message msg ) {
173194 return linkToMessage (msg .chat ().id (), msg .messageId ());
174195 }
0 commit comments