You can listen to afterUpdate hook and check publishedAt field.
If it is not null it means the content is published.
You can get the current data in database as well and see if new data is published and previous publisehdAt is null you know that the content is published in this very update!
(it might be publish->unpulish-publish again etc) every time you have publish from unpublish will notify
PS: This is the workaround that I use and works great. It could be nice if strapi supports out of the box just a afterPublish event as well