I ended up deleting the place where the announcements are for those who want to get rid of this spam:
File: /wp-content/plugins/custom-login/classes/class.settings-api.php
Line: 90
add_action( 'admin_notices', array( $this, 'show_notifications' ) );
However, for the author. I see the error in your coding, it occurs where there is no stored announcement_message:
In show_notifications()
you have $old_message
set to get the option of announcement_message (which is nothing by default). You then get the message and store it into the announcement_message option. However on line 780 you check if the old is different from the new, and since old is blank, it’s different so you effectively delete the ignore option and the announcement_message. Deleting the ignore will make it show for this page view, but deleting the current announcement_message will make this whole thing repeat again, never actually ever storing an announcement_message option.
Change line 780 of class.settings-api.php to:
if ( trim( $old_message ) !== trim( $announcement->message ) && !empty($old_message) ) {
and the problem will be fixed.