88import com .pengrad .telegrambot .model .PhotoSize ;
99import com .pengrad .telegrambot .model .Update ;
1010import com .pengrad .telegrambot .model .request .ParseMode ;
11+ import com .pengrad .telegrambot .request .DeleteMessage ;
1112import com .pengrad .telegrambot .request .GetFile ;
1213import com .pengrad .telegrambot .request .GetUpdates ;
1314import com .pengrad .telegrambot .request .SendMessage ;
2021import java .util .Comparator ;
2122import java .util .List ;
2223import java .util .Objects ;
24+ import java .util .regex .Pattern ;
2325import java .util .stream .Collectors ;
2426import javax .imageio .ImageIO ;
2527
@@ -42,13 +44,37 @@ public void setAdminId(long adminId) {
4244
4345 public void run () {
4446 bot .setUpdatesListener (updates -> {
47+ processAdminCommands (updates );
4548 processUpdates (updates );
4649 return UpdatesListener .CONFIRMED_UPDATES_ALL ;
4750 });
4851 }
4952
5053 public void runOnce () {
51- processUpdates (bot .execute (new GetUpdates ()).updates ());
54+ final var updates = bot .execute (new GetUpdates ()).updates ();
55+ processAdminCommands (updates );
56+ processUpdates (updates );
57+ }
58+
59+ private void processAdminCommands (List <Update > updates ) {
60+ final var delPattern = Pattern .compile ("/del(\\ d+)m(\\ d+)" );
61+ updates .stream ()
62+ .map (Update ::message )
63+ .filter (Objects ::nonNull )
64+ .filter (msg -> msg .chat ().id () == adminId )
65+ .map (Message ::text )
66+ .filter (Objects ::nonNull )
67+ .forEach (command -> {
68+ final var m = delPattern .matcher (command );
69+ if (m .find ()) {
70+ final var channelId = Long .parseLong ("-100" + m .group (1 ));
71+ final var messageId = Integer .parseInt (m .group (2 ));
72+ bot .execute (new DeleteMessage (channelId , messageId ));
73+ try {
74+ indexer .deleteImage (channelId , messageId );
75+ } catch (SQLException ignored ) {}
76+ }
77+ });
5278 }
5379
5480 private void processUpdates (List <Update > updates ) {
@@ -84,10 +110,14 @@ private List<Message> getChannelPostsWithPhotos(List<Update> updates) {
84110
85111 private void sendReport (List <SimilarImagesInfo > infos ) {
86112 String report = infos .stream ().map (info -> {
87- String text = "For post " + formatPostLink (info .getOriginalPost ()) + " found:\n " ;
113+ final var post = info .getOriginalPost ();
114+ String text = "For post " + formatPostLink (post ) + " found:\n " ;
88115 text += info .getResults ().stream ()
89116 .map (r -> String .format (" %s, dst: %.2f" , formatPostLink (r .getPost ()), r .getDistance ()))
90117 .collect (Collectors .joining ("\n " ));
118+ text += String .format ("%n/del%sm%d" ,
119+ post .getChannelId ().toString ().replace ("-100" , "" ),
120+ post .getMessageId ());
91121 return text ;
92122 }).collect (Collectors .joining ("\n \n " ));
93123
0 commit comments