In fact this event fires in an unexpected moment but due to “correct” logic… the response comes from a contact Roster Push, that is adding a contact without subscription request…
The big problem here is that the packet looks exactly the same as a subscription revocation one… so you have to manually check if that JID was already in the user Roster to discard the event or work-out things accordingly for both different cases. In common workflow a presence subscription request should come after this message so you can normally silently discard the event for the push unless you need it for something important