Skip to content

Commit 20084ec

Browse files
authored
Merge pull request #12 from Al-Muhandis/Reactions
add reactions support
2 parents 6649a67 + bad5693 commit 20084ec

7 files changed

Lines changed: 467 additions & 197 deletions

File tree

src/actionadminhelper.pas

Lines changed: 59 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

105107
procedure TAdminHelper.BtClbckSpam(ASender: TObject; ACallback: TCallbackQueryObj);
106108
var
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

122128
begin
@@ -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);
245254
end;
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+
247282
function TAdminHelper.GetBotORM: TBotORM;
248283
begin
249284
if FBotORM=nil then
@@ -341,6 +376,21 @@ procedure TAdminHelper.AdminSpamVerdict(const aIsSpamStr, aCallbackID: String; a
341376
end;
342377
end;
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+
344394
procedure TAdminHelper.BtClbckMessage(ASender: TObject; ACallback: TCallbackQueryObj);
345395
var
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

Comments
 (0)