A simple example that logs all chat messages:

uses SysUtils;

procedure ChatScanerThread();
begin
  while delay(100) do begin
    if (ChatMessage.Unread) and (ChatMessage.Time < 3333) then begin
      Print(ChatMessage.Sender+': '+IntToStr(Ord(ChatMessage.ChatType))+' :'+ChatMessage.text);
    end;
  end;
end;

begin
  Script.NewThread(@ChatScanerThread);
  Delay(-1);
end.

It can be slightly improved to find the ads we need:

uses SysUtils;

var phrases: array of string = ['sell draconic bow', 'wts drac bow', 'wts DB'];   // we set lines which need to be looked for
    
procedure ChatScanerThread();
var i: integer;
begin         
  while delay(100) do begin
    if (ChatMessage.Unread) and (ChatMessage.ChatType = mtShout) then begin
      for i:= Low(phrases) to High(phrases) do begin
        if (Pos(LowerCase(phrases[i]), LowerCase(ChatMessage.text)) > 0) then begin
          Print(ChatMessage.Sender+': '+ChatMessage.Text);
          PlaySound(ExePath+'\Sounds\msg.wav');
          Engine.SetGameWindow(true);
          break;
        end;
      end;        
    end;
  end;
end;

begin  
  Script.NewThread(@ChatScanerThread);
  Delay(-1);
end.