Besieging a city's tricky, you can put a conditional in for a monitor to fire if an enemy family member is within one tile of a certain location and if the two factions are at war.
Gets a bit cumbersome with large numbers of factions and cities, but it's possible.
LorDBulA does something similar with his Roma siege script, have a look at his code:
http://www.twcenter.net/forums/showthread.php?t=24968
You can use something like that to increment a counter and then have a separate monitor_event FactionTurnStart FactionIsLocal with an I_CompareCounter condition. Be sure to set the counter back to 0 though, otherwise it will keep triggering.
Bookmarks