From f59fb1ed48583297b4616daabd053f50c8a7c7b9 Mon Sep 17 00:00:00 2001 From: Jeremiah Ticket Date: Fri, 6 Oct 2023 08:25:21 -0600 Subject: [PATCH] Added speak_all_private_messages and the script now uses spd-say, not espeak-ng to prevent speaking over itself! --- README.md | 16 +++++++++------- autospeak.pl | 22 ++++++++++++++++++---- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 7cb3b98..ec67cb6 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Adds speech to some events. -This script requires you have espeak-ng installed and in your path. +This script requires you have speech-dispatcher installed and spd-say in your path. ## Usage Place autospeak.pl in .irssi/scripts/ @@ -23,22 +23,24 @@ This install script creates the folder ~/.irssi/scripts/autorun if it doesn't ex ## Configuration This script has some settings. Use the /set command to set them. -- speech_voice - espeak-ng voice to use (default is en-us) -- speech_rate - speech rate in words per minute (default is 175) -- speak_public_messages - Speak public messages; This does not speak all messages. This only speaks when you are directly spoken to. (Default is on) +- speech_voice - espd-say voice to use (default is en-us) +- speech_rate - speech rate(-100 to 100) (default is 50) +- speech_module - Speech dispatcher output module to use (Default is espeak-ng) +- speak_public_messages - Speak public messages; This does not speak all messages by default. [See the next setting.] This only speaks when you are directly spoken to. (Default is on) +- speak_all_public_message - Speak every single message reguardless of if you are mensioned or not. (Default is off) - speak_indirect_messages - Speaks indirect messages in public channels, reguardless of where your nick sits in the message; If this if off, public messages will only pseak if directly addressed to you. (Default is off) - speak_private_messages - Speaks incoming private messages. (Default is on) - speak_active_window - Speaks the currently focused window (Default is off) - speak_dcc_messages - Speaks DCC messages; Notifys if a file transfer or dcc chat request. ### Explanation of Public Message Speaking -This script is designed not to be very spammy. Public messages only speak when you are directly addressed, unless you have the speak_indirect_message setting on, then it speaks no matter where in the message you are mensioned. +This script is designed not to be very spammy. Public messages only speak when you are directly addressed, unless you have the speak_indirect_message setting on, then it speaks no matter where in the message you are mensioned. If you want all messages spoken, enable speak_all_public_messages #### Examples When only speak_public_messages is on, " jticket: Hi there!" Will be spoken. " Hi there jticket!" will not automatically be spoken. - " This is a test" Will never be spoken automatically. + " This is a test" Will never be spoken automatically unless speak_all_public_messages is on. -When speak_public_messages and speak_indirect_messages is on, both will be spoken, but the last will still not be spoken. +When speak_public_messages and speak_indirect_messages is on, both will be spoken, but the last will still not be spoken unless you set speak_all_public_messages to on. diff --git a/autospeak.pl b/autospeak.pl index fba3c6e..ba89eb2 100644 --- a/autospeak.pl +++ b/autospeak.pl @@ -44,8 +44,9 @@ sub speak_message { $body = decode(ENCODING, $body); my $SpeechRate = Irssi::settings_get_int("speech_rate"); my $SpeechVoice = Irssi::settings_get_str("speech_voice"); + my $SpeechModule = Irssi::settings_get_str("speech_module"); # Speak The Message - system("espeak-ng -v $SpeechVoice -s $SpeechRate \"$summary $body\"&"); + system("spd-say -P important -y $SpeechVoice -r $SpeechRate -o $SpeechModule \"$summary $body\"&"); } # Handle incoming public messages: @@ -67,12 +68,23 @@ sub message_public { # Get the user's nick name: my $user = $server->{nick}; +#check to notify about all messages: +if ((Irssi::settings_get_bool('speak_all_public_messages')) == 1) { + # Get the server's tag: + my $tag = $server->{tag}; + + # Prepare the message body: + (my $body = $message) =~ s/^$user[\s:,]\s*//; + + # Notify the user about the incoming public message: + speak_message("Message from $nick/$tag on $target:", $body); +} # Check whether to notify the user about indirect messages: - unless (Irssi::settings_get_bool('speak_indirect_messages')) { + elsif ((Irssi::settings_get_bool('speak_indirect_messages')) == 0) { # Ignore messages that are not explicitly addressed to the user: return if ($message !~ /^$user[\s:,]/); } - else { + else { # Ignore messages that do not mention the user: return if ($message !~ /\b$user\b/); } @@ -177,10 +189,12 @@ sub dcc_chat_message { } # Register configuration options: -Irssi::settings_add_int("autospeak", "speech_rate", 175); +Irssi::settings_add_int("autospeak", "speech_rate", 50); Irssi::settings_add_str("autospeak", "speech_voice", "en-us"); +Irssi::settings_add_str("autospeak", "speech_module", "espeak-ng"); Irssi::settings_add_bool('autospeak', 'speak_private_messages', 1); Irssi::settings_add_bool('autospeak', 'speak_public_messages', 1); +Irssi::settings_add_bool('autospeak', 'speak_all_public_messages', 0); Irssi::settings_add_bool('autospeak', 'speak_indirect_messages',0); Irssi::settings_add_bool('autospeak', 'speak_active_window', 0); Irssi::settings_add_bool('autospeak', 'speak_dcc_messages', 1);