31
31
32
32
public class BotHandler extends BaseBotHandler {
33
33
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([^-]+)_([^-]+)_(.*)" );
36
37
37
38
private final ImageIndexer indexer ;
38
39
private long adminId ;
@@ -70,8 +71,8 @@ private Optional<Post> processDelCommand(Matcher m) {
70
71
if (!m .find ()) {
71
72
return Optional .empty ();
72
73
}
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 );
75
76
LOGGER .debug ("Delete message {} in {}" , messageId , channelId );
76
77
bot .execute (new DeleteMessage (channelId , messageId ));
77
78
try {
@@ -86,9 +87,9 @@ private Optional<Post> processCompareCommand(Matcher m) {
86
87
if (!m .find ()) {
87
88
return Optional .empty ();
88
89
}
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 );
92
93
LOGGER .debug ("Compare messages {} and {} in {}" , messageA , messageB , channelId );
93
94
94
95
// Forward and get photo to compare
@@ -139,21 +140,20 @@ private void processUpdates(List<Update> updates, Set<Post> ignoredPosts) {
139
140
140
141
private void sendReport (List <SimilarImagesInfo > infos ) {
141
142
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 " ;
145
146
// Matching results
146
147
text += info .getResults ().stream ()
147
148
.map (r -> String .format (" %s, dst: %.2f" , formatPostLink (r .getPost ()), r .getDistance ()))
148
149
.collect (Collectors .joining ("\n " ));
149
150
// /compare command
150
151
text += info .getResults ().stream ()
151
152
.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 ))
154
154
.collect (Collectors .joining ());
155
155
// /del command
156
- text += String . format ( "%n/del%sm%d" , channelId , post . getMessageId () );
156
+ text += formatDelCommand ( channelId , originalPost );
157
157
return text ;
158
158
}).collect (Collectors .joining ("\n \n " ));
159
159
@@ -164,11 +164,32 @@ private void sendReport(List<SimilarImagesInfo> infos) {
164
164
}
165
165
}
166
166
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
+
167
176
private String formatPostLink (Post post ) {
168
177
String link = linkToMessage (post .getChannelId (), post .getMessageId ());
169
178
return String .format ("[#%d](%s)" , post .getMessageId (), link );
170
179
}
171
180
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
+
172
193
private String linkToMessage (Message msg ) {
173
194
return linkToMessage (msg .chat ().id (), msg .messageId ());
174
195
}
0 commit comments