} elsif(defined($msg->{'update-type'}) && $msg->{'update-type'} eq 'SwitchScenes') { my $scene = substr $msg->{'scene-name'}, 0, 1; print "Selected scene: ", $scene, "\n"; $clacks->set('OBS::SceneSelected', $scene); } elsif(defined($msg->{'update-type'}) && $msg->{'update-type'} eq 'StreamStatus') { if($msg->{'streaming'}) { $clacks->set('OBS::StreamStatus', 1); } else { $clacks->set('OBS::StreamStatus', 0); } } elsif(defined($msg->{'update-type'}) && ($msg->{'update-type'} eq 'RecordingStarted' || $msg->{'update-type'} eq 'RecordingResumed')) { $clacks->set('OBS::RecordingStatus', 1); } elsif(defined($msg->{'update-type'}) && ($msg->{'update-type'} eq 'RecordingStopped' || $msg->{'update-type'} eq 'RecordingPaused')) { $clacks->set('OBS::RecordingStatus', 0); } elsif(defined($msg->{'update-type'}) && $msg->{'update-type'} eq 'TransitionBegin') { print "Transitioning to new scene\n"; } elsif(defined($msg->{'update-type'}) && $msg->{'update-type'} eq 'SourceMuteStateChanged') { # # We get the info that mute has changed, but not it's new status. Let's request it my %request = ( 'request-type' => 'GetMute', 'message-id' => 'rand' . int(rand(1_000_000)), 'source' => 'Mike', ); $mutemessageid = $request{'message-id'}; my $outframe = $frame->new(buffer => encode_json(\%request), type => 'text', masked => 1)->to_bytes; syswrite($sock, $outframe); } elsif(defined($msg->{'message-id'}) && $msg->{'message-id'} eq $mutemessageid) { # Check if we got muted or not my $ismuted = $msg->{muted}; $mutemessageid = ''; $clacks->set('OBS::MutedVoice', $ismuted); print "Mike muted: ", $ismuted, "\n"; } else { print "Opcode: ", $frame->opcode, "\n"; print "iscont ", $frame->is_continuation, "\n"; print Dumper($msg); } }