@@ -21,6 +21,7 @@ TAdminHelper = class(TWebhookAction)
2121 FCurrent: TCurrentEvent;
2222 procedure AdminSpamVerdict (const aIsSpamStr, aCallbackID: String; aInspectedChat, aExecutor: Int64;
2323 aInspectedMessage: Integer);
24+ procedure AdminReactionVerdict (const aIsSpamStr: String; aInspectedChat, aInspectedUser: Int64);
2425 procedure BtClbckMessage ({ %H-} ASender: TObject; { %H-} ACallback: TCallbackQueryObj);
2526 procedure BtClbckSpam ({ %H-} ASender: TObject; { %H-} ACallback: TCallbackQueryObj);
2627 procedure BtCmndSaveFilters ({ %H-} aSender: TObject; const { %H-} ACommand: String; { %H-} aMessage: TTelegramMessageObj);
@@ -29,6 +30,7 @@ TAdminHelper = class(TWebhookAction)
2930 procedure BtCmndUpdate ({ %H-} aSender: TObject; const { %H-} ACommand: String; aMessage: TTelegramMessageObj);
3031 procedure BtRcvChatMemberUpdated ({ %H-} ASender: TTelegramSender; aChatMemberUpdated: TTelegramChatMemberUpdated);
3132 procedure BtRcvMessage ({ %H-} ASender: TObject; AMessage: TTelegramMessageObj);
33+ procedure BtRcvReaction ({ %H-} aSender: TObject; aMessageReaction: TTelegramMessageReactionUpdated);
3234 procedure ChangeKeyboardAfterCheckedOut (aIsSpam: Boolean; aInspectedUser: Int64; const aInspectedUserName: String;
3335 aIsUserPrivacy: Boolean = False);
3436 procedure ComfirmationErroneousBan (aInspectedChat: Int64; aInspectedMessage: Integer);
@@ -104,9 +106,9 @@ function BuildMsgUrl(aChat: TTelegramChatObj; aMsgID: Integer): String;
104106
105107procedure TAdminHelper.BtClbckSpam (ASender: TObject; ACallback: TCallbackQueryObj);
106108var
107- aInspectedChat, aCurrentUserID: Int64;
109+ aInspectedChat, aCurrentUserID, aPar3 : Int64;
108110 aPar: String;
109- aInspectedMessage: Longint ;
111+ aIsReaction: Boolean ;
110112
111113 function NPar (N: Byte): String;
112114 begin
@@ -115,8 +117,12 @@ procedure TAdminHelper.BtClbckSpam(ASender: TObject; ACallback: TCallbackQueryOb
115117
116118 procedure AdminVerdict ;
117119 begin
118- Current.InspectedMessage:=ACallback.Message.Text;
119- AdminSpamVerdict(aPar, ACallback.ID, aInspectedChat, aCurrentUserID, aInspectedMessage);
120+ if aIsReaction then
121+ AdminReactionVerdict(aPar, aInspectedChat, aPar3)
122+ else begin
123+ Current.InspectedMessage:=ACallback.Message.Text;
124+ AdminSpamVerdict(aPar, ACallback.ID, aInspectedChat, aCurrentUserID, aPar3);
125+ end ;
120126 end ;
121127
122128begin
@@ -128,15 +134,16 @@ procedure TAdminHelper.BtClbckSpam(ASender: TObject; ACallback: TCallbackQueryOb
128134 end ;
129135 if not TryStrToInt64(aPar, aInspectedChat) then
130136 Exit;
131- if not TryStrToInt(NPar(3 ), aInspectedMessage) then
137+ aIsReaction:=(NPar(5 )=' r' );
138+ if not TryStrToInt64(NPar(3 ), aPar3) then
132139 Exit;
133140 aCurrentUserID:=ACallback.From.ID;
134141 if not ORM.IsModerator(aInspectedChat, aCurrentUserID) then
135142 Exit;
136143 aPar:=NPar(4 );
137144 case aPar of
138- _dtRC: ComfirmationErroneousBan(aInspectedChat, aInspectedMessage );
139- _dtR: TryRollbackErroneousBan(aInspectedChat, aInspectedMessage , ACallback.ID, ACallback.Message.MessageId);
145+ _dtRC: ComfirmationErroneousBan(aInspectedChat, aPar3 );
146+ _dtR: TryRollbackErroneousBan(aInspectedChat, aPar3 , ACallback.ID, ACallback.Message.MessageId);
140147 else
141148 AdminVerdict;
142149 end ;
@@ -229,12 +236,14 @@ procedure TAdminHelper.BtRcvMessage(ASender: TObject; AMessage: TTelegramMessage
229236 { Check if there is a service message (without text or media) }
230237 if Current.ContentType=cntUnknown then
231238 Exit;
239+ if not Assigned(Current.InspectedUser) then
240+ Exit;
232241 if ORM.UserByID(AMessage.From.ID).Spammer=_msSpam then
233242 begin
234243 Current.AddMessage;
235244 Current.SendMessagesToAdmins(True, False);
236245 Bot.deleteMessage(Current.InspectedChat.ID, Current.InspectedMessageID);
237- Bot.banChatMember(Current.InspectedChat.ID, AMessage.From .ID);
246+ Bot.banChatMember(Current.InspectedChat.ID, Current.InspectedUser .ID);
238247 Exit;
239248 end ;
240249 if ORM.User.IsNewbie then
@@ -244,6 +253,32 @@ procedure TAdminHelper.BtRcvMessage(ASender: TObject; AMessage: TTelegramMessage
244253 Current.ProcessComplaint(False, _msUnknown);
245254end ;
246255
256+ procedure TAdminHelper.BtRcvReaction (aSender: TObject; aMessageReaction: TTelegramMessageReactionUpdated);
257+ var
258+ aChatMember: TTelegramChatMember;
259+ begin
260+ Current.AssignInspectedFromRctn(aMessageReaction);
261+ Current.Complainant:=nil ;
262+ if not Current.IsGroup then
263+ Exit;
264+ if not Assigned(Current.InspectedUser) then
265+ Exit;
266+ if ORM.UserByID(Current.InspectedUser.ID).Spammer=_msSpam then
267+ begin
268+ Current.AddMessage(True);
269+ Current.SendMessagesToAdmins(True, False, True);
270+ Bot.banChatMember(Current.InspectedChat.ID, Current.InspectedUser.ID);
271+ Exit;
272+ end ;
273+ if ORM.User.IsNewbie and Bot.getChatMember(Current.InspectedChat.ID, Current.InspectedUser.ID, aChatMember) then
274+ try
275+ if aChatMember.StatusType<>msMember then
276+ Current.ProcessSpamReaction(False, _msUnknown);
277+ finally
278+ aChatMember.Free;
279+ end ;
280+ end ;
281+
247282function TAdminHelper.GetBotORM : TBotORM;
248283begin
249284 if FBotORM=nil then
@@ -341,6 +376,21 @@ procedure TAdminHelper.AdminSpamVerdict(const aIsSpamStr, aCallbackID: String; a
341376 end ;
342377end ;
343378
379+ procedure TAdminHelper.AdminReactionVerdict (const aIsSpamStr: String; aInspectedChat, aInspectedUser: Int64);
380+ var
381+ aIsSpam: Boolean;
382+ begin
383+ if not TryStrToBool(aIsSpamStr, aIsSpam) then
384+ Exit;
385+ if ORM.GetReaction(aInspectedChat, aInspectedUser) then
386+ begin
387+ Current.BanReactionSpam(aInspectedChat, ORM.Reaction.User, ORM.Reaction.UserName, aIsSpam);
388+ ChangeKeyboardAfterCheckedOut(aIsSpam, ORM.Reaction.User, ORM.Reaction.UserName);
389+ end
390+ else
391+ Bot.Logger.Error(Format(' There is no the reaction user #%d in the chat #%d' , [aInspectedUser, aInspectedChat]));
392+ end ;
393+
344394procedure TAdminHelper.BtClbckMessage (ASender: TObject; ACallback: TCallbackQueryObj);
345395var
346396 aMsg: String;
@@ -471,6 +521,7 @@ constructor TAdminHelper.Create;
471521
472522 Bot.OnReceiveChatMemberUpdated:=@BtRcvChatMemberUpdated;
473523 Bot.OnReceiveMessage:=@BtRcvMessage;
524+ Bot.OnReceiveMessageReaction:=@BtRcvReaction;
474525 Bot.CommandHandlers[' /' +_dSpm]:=@BtCmndSpam;
475526 Bot.CallbackHandlers[' m' ]:=@BtClbckMessage;
476527 Bot.CallbackHandlers[_dSpm]:=@BtClbckSpam;
0 commit comments