From: Debayan Sutradhar Date: Wed, 03 Mar 2021 21:43:22 +0530 Subject: Merge pull request #16 from j4ckofalltrades/clear-twitch-chat-creds --- Merge pull request #16 from j4ckofalltrades/clear-twitch-chat-creds Clear twitch chat config --- --- /dev/null +++ b/Makefile @@ -0,0 +1,29 @@ +build-all: + ./build.sh + +build-hotkey-action: + ./build.sh hotkey + +build-media-key-action: + ./build.sh mediakey + +build-obs-suite-action: + ./build.sh obssuite + +build-play-audio-clip-action: + ./build.sh playaudioclip + +build-run-command-action: + ./build.sh runcommand + +build-text-block-action: + ./build.sh textblock + +build-twitch-chat-action: + ./build.sh twitchchat + +build-twitter-action: + ./build.sh twitter + +build-website-action: + ./build.sh website Binary files 'a/PreBuiltPlugins/twitch-chat-connect.jar' and b/PreBuiltPlugins/twitch-chat-connect.jar differ Binary files 'a/PreBuiltPlugins/twitch-send-channel-msg.jar' and b/PreBuiltPlugins/twitch-send-channel-msg.jar differ --- 'a/README.md' +++ b/README.md @@ -39,7 +39,7 @@ Copy the `twitch-chat-connect`, `twitch- ## Quick Start -Build actions by executing `./build.sh` from the command line. +Build all actions by executing `make build-all` from the command line or specific actions i.e. `make build-twitch-chat-action`, see [Makefile](Makefile) for complete list. To test these actions out in your local environment you'll need to run the [Stream-Pi Server](https://github.com/stream-pi/server) and copy the contents of `PreBuiltPlugins/` to the server's Plugins directory (`data/Plugins` by default), especially if you're writing your own custom action / integration. --- 'a/build.sh' +++ b/build.sh @@ -1,72 +1,144 @@ -FOLD=../PreBuiltPlugins - -pushd . || exit -cd hotkeyaction && mvn clean package -mv target/hotkeyaction-1.0.0.jar $FOLD/hotkeyaction.jar - -cd ../mediakeyaction && mvn clean package -mv target/mediakeyaction-1.0.0.jar $FOLD/mediakeyaction.jar - -cd ../playaudioclipaction && mvn clean package -mv target/playaudioclipaction-1.0.0.jar $FOLD/playaudioclipaction.jar - -cd ../runcommandaction && mvn clean package -mv target/runcommandaction-1.0.0.jar $FOLD/runcommandaction.jar - -cd ../textblockaction && mvn clean package -mv target/textblockaction-1.0.0.jar $FOLD/textblockaction.jar - -cd ../twitteraction && mvn clean package -mv target/twitteraction-1.0.0.jar $FOLD/twitteraction.jar - -cd ../websiteaction && mvn clean package -mv target/websiteaction-1.0.0.jar $FOLD/websiteaction.jar -popd || exit - -## OBS Suite -pushd . || exit -cd obssuite/mother && mvn clean install package -mv target/obssuite_motheraction-1.0.0.jar ../$FOLD/obssuite_motheraction.jar - -cd ../setcurrentprofile && mvn clean package -mv target/obssuite_setcurrentprofileaction-1.0.0.jar ../$FOLD/obssuite_setcurrentprofileaction.jar - -cd ../setcurrentscene && mvn clean package -mv target/obssuite_setcurrentsceneaction-1.0.0.jar ../$FOLD/obssuite_setcurrentsceneaction.jar +#!/bin/bash -cd ../setcurrenttransition && mvn clean package -mv target/obssuite_setcurrenttransitionaction-1.0.0.jar ../$FOLD/obssuite_setcurrenttransitionaction.jar - -cd ../setmute && mvn clean package -mv target/obssuite_setmuteaction-1.0.0.jar ../$FOLD/obssuite_setmuteaction.jar - -cd ../setcurrentprofile && mvn clean package -mv target/obssuite_setcurrentprofileaction-1.0.0.jar ../$FOLD/obssuite_setcurrentprofileaction.jar - -cd ../setpreviewscene && mvn clean package -mv target/obssuite_setpreviewsceneaction-1.0.0.jar ../$FOLD/obssuite_setpreviewsceneaction.jar - -cd ../setrecording && mvn clean package -mv target/obssuite_setrecordingaction-1.0.0.jar ../$FOLD/obssuite_setrecordingaction.jar - -cd ../setreplaybuffer && mvn clean package -mv target/obssuite_setreplaybufferaction-1.0.0.jar ../$FOLD/obssuite_setreplaybufferaction.jar - -cd ../setstreaming && mvn clean package -mv target/obssuite_setstreamingaction-1.0.0.jar ../$FOLD/obssuite_setstreamingaction.jar - -cd ../setstudiomode && mvn clean package -mv target/obssuite_setstudiomodeaction-1.0.0.jar ../$FOLD/obssuite_setstudiomodeaction.jar - -cd ../setvolume && mvn clean package -mv target/obssuite_setvolumeaction-1.0.0.jar ../$FOLD/obssuite_setvolumeaction.jar -popd || exit - -# Twitch Chat -pushd . || exit -cd twitch/twitch-chat-connect && mvn clean install package -mv target/twitch-chat-connect-1.0.0.jar ../$FOLD/twitch-chat-connect.jar +FOLD=../PreBuiltPlugins -cd ../send-channel-msg && mvn clean package -mv target/twitch-send-channel-msg-1.0.0.jar ../$FOLD/twitch-send-channel-msg.jar -popd || exit +hotkey() { + pushd . || exit + cd hotkeyaction && mvn clean package + mv target/hotkeyaction-1.0.0.jar $FOLD/hotkeyaction.jar + popd || exit +} + +mediakey() { + pushd . || exit + cd mediakeyaction && mvn clean package + mv target/mediakeyaction-1.0.0.jar $FOLD/mediakeyaction.jar + popd || exit +} + +obssuite() { + pushd . || exit + cd obssuite/mother && mvn clean install package + mv target/obssuite_motheraction-1.0.0.jar ../$FOLD/obssuite_motheraction.jar + + cd ../setcurrentprofile && mvn clean package + mv target/obssuite_setcurrentprofileaction-1.0.0.jar ../$FOLD/obssuite_setcurrentprofileaction.jar + + cd ../setcurrentscene && mvn clean package + mv target/obssuite_setcurrentsceneaction-1.0.0.jar ../$FOLD/obssuite_setcurrentsceneaction.jar + + cd ../setcurrenttransition && mvn clean package + mv target/obssuite_setcurrenttransitionaction-1.0.0.jar ../$FOLD/obssuite_setcurrenttransitionaction.jar + + cd ../setmute && mvn clean package + mv target/obssuite_setmuteaction-1.0.0.jar ../$FOLD/obssuite_setmuteaction.jar + + cd ../setcurrentprofile && mvn clean package + mv target/obssuite_setcurrentprofileaction-1.0.0.jar ../$FOLD/obssuite_setcurrentprofileaction.jar + + cd ../setpreviewscene && mvn clean package + mv target/obssuite_setpreviewsceneaction-1.0.0.jar ../$FOLD/obssuite_setpreviewsceneaction.jar + + cd ../setrecording && mvn clean package + mv target/obssuite_setrecordingaction-1.0.0.jar ../$FOLD/obssuite_setrecordingaction.jar + + cd ../setreplaybuffer && mvn clean package + mv target/obssuite_setreplaybufferaction-1.0.0.jar ../$FOLD/obssuite_setreplaybufferaction.jar + + cd ../setstreaming && mvn clean package + mv target/obssuite_setstreamingaction-1.0.0.jar ../$FOLD/obssuite_setstreamingaction.jar + + cd ../setstudiomode && mvn clean package + mv target/obssuite_setstudiomodeaction-1.0.0.jar ../$FOLD/obssuite_setstudiomodeaction.jar + + cd ../setvolume && mvn clean package + mv target/obssuite_setvolumeaction-1.0.0.jar ../$FOLD/obssuite_setvolumeaction.jar + popd || exit +} + +playaudioclip() { + pushd . || exit + cd playaudioclipaction && mvn clean package + mv target/playaudioclipaction-1.0.0.jar $FOLD/playaudioclipaction.jar + popd || exit +} + +runcommand() { + pushd . || exit + cd runcommandaction && mvn clean package + mv target/runcommandaction-1.0.0.jar $FOLD/runcommandaction.jar + popd || exit +} + +textblock() { + pushd . || exit + cd textblockaction && mvn clean package + mv target/textblockaction-1.0.0.jar $FOLD/textblockaction.jar + popd || exit +} + +twitter() { + pushd . || exit + cd twitteraction && mvn clean package + mv target/twitteraction-1.0.0.jar $FOLD/twitteraction.jar + popd || exit +} + +twitchchat() { + pushd . || exit + cd twitch/twitch-chat-connect && mvn clean install package + mv target/twitch-chat-connect-1.0.0.jar ../$FOLD/twitch-chat-connect.jar + + cd ../send-channel-msg && mvn clean package + mv target/twitch-send-channel-msg-1.0.0.jar ../$FOLD/twitch-send-channel-msg.jar + popd || exit +} + +websiteaction() { + pushd . || exit + cd websiteaction && mvn clean package + mv target/websiteaction-1.0.0.jar $FOLD/websiteaction.jar + popd || exit +} + +case "$1" in +hotkey) + hotkey + ;; +mediakey) + mediakey + ;; +playaudioclip) + playaudioclip + ;; +runcommand) + runcommand + ;; +textblock) + textblock + ;; +twitter) + twitter + ;; +website) + website + ;; +obssuite) + obssuite + ;; +twitchchat) + twitchchat + ;; +*) + # build all actions as default + hotkey + mediakey + obssuite + playaudioclip + runcommand + textblock + twitter + twitchchat + website + ;; +esac --- 'a/twitch/send-channel-msg/src/main/java/module-info.java' +++ b/twitch/send-channel-msg/src/main/java/module-info.java @@ -2,7 +2,7 @@ module com.stream_pi.twitch.sendchannelm requires com.stream_pi.util; requires com.stream_pi.action_api; - requires com.stream_pi.twitchconnectaction; + requires com.stream_pi.twitchchatconnectaction; requires Java.Twirk; provides com.stream_pi.action_api.normalaction.NormalAction with sendchannelmsg.SendChannelMessageAction; --- 'a/twitch/send-channel-msg/src/main/java/sendchannelmsg/SendChannelMessageAction.java' +++ b/twitch/send-channel-msg/src/main/java/sendchannelmsg/SendChannelMessageAction.java @@ -5,12 +5,13 @@ import com.gikk.twirk.TwirkBuilder; import com.stream_pi.action_api.actionproperty.property.Property; import com.stream_pi.action_api.actionproperty.property.Type; import com.stream_pi.action_api.normalaction.NormalAction; -import com.stream_pi.util.alert.StreamPiAlert; -import com.stream_pi.util.alert.StreamPiAlertType; import com.stream_pi.util.exception.StreamPiException; import com.stream_pi.util.version.Version; import connect.chat.TwitchChatCredentials; +import static connect.chat.TwitchChatCredentials.DEFAULT_TWITCH_NICKNAME; +import static connect.chat.TwitchChatCredentials.DEFAULT_TWITCH_TOKEN; + public class SendChannelMessageAction extends NormalAction { @@ -92,12 +93,12 @@ public class SendChannelMessageAction ex final String twitchNickname = credentials.getNickname(); boolean isNicknameInitialized = twitchNickname != null && !twitchNickname.isEmpty() && - !twitchNickname.equalsIgnoreCase("twitch_nickname"); + !twitchNickname.equalsIgnoreCase(DEFAULT_TWITCH_NICKNAME); final String twitchChatOauthToken = credentials.getOauthToken(); boolean isTokenInitialized = twitchChatOauthToken != null && !twitchChatOauthToken.isEmpty() && - !twitchChatOauthToken.equalsIgnoreCase("twitch_oauth_token"); + !twitchChatOauthToken.equalsIgnoreCase(DEFAULT_TWITCH_TOKEN); return isNicknameInitialized && isTokenInitialized; } --- 'a/twitch/twitch-chat-connect/src/main/java/connect/TwitchChatConnectAction.java' +++ b/twitch/twitch-chat-connect/src/main/java/connect/TwitchChatConnectAction.java @@ -16,7 +16,7 @@ public class TwitchChatConnectAction ext private static final String TWITCH_ACCESS_TOKEN_KEY = "twitch_access_token"; private static final String TWITCH_NICKNAME_KEY = "twitch_nickname"; - private final Button saveCredentialsBtn; + private final Button clearCredentialsBtn; public TwitchChatConnectAction() { @@ -27,61 +27,64 @@ public class TwitchChatConnectAction ext setVersion(new Version(1, 0, 0)); setHelpLink("https://github.com/Stream-Pi/essentialactions"); - saveCredentialsBtn = new Button("Save Twitch chat credentials"); - setButtonBar(saveCredentialsBtn); + clearCredentialsBtn = new Button("Clear Twitch chat credentials"); + onClearCredentials(); + setButtonBar(clearCredentialsBtn); } @Override - public void initProperties() throws Exception + public void initProperties() { Property twitchNicknameProp = new Property(TWITCH_NICKNAME_KEY, Type.STRING); twitchNicknameProp.setDisplayName("Twitch Username"); - twitchNicknameProp.setDefaultValueStr("twitch_nickname"); - twitchNicknameProp.setCanBeBlank(false); Property twitchAccessTokenProp = new Property(TWITCH_ACCESS_TOKEN_KEY, Type.STRING); twitchAccessTokenProp.setDisplayName("Access Token"); - twitchAccessTokenProp.setDefaultValueStr("twitch_oauth_token"); - twitchAccessTokenProp.setCanBeBlank(false); addServerProperties(twitchNicknameProp, twitchAccessTokenProp); } @Override - public void initAction() throws Exception + public void initAction() throws MinorException { - saveCredentialsBtn.setOnAction(action -> + clearCredentialsBtn.setDisable(isEmptyCredentials()); + + TwitchChatCredentials.setCredentials( + new TwitchChatCredentials.ChatCredentials() + .setOauthToken(getServerProperties().getSingleProperty(TWITCH_ACCESS_TOKEN_KEY).getStringValue()) + .setNickname(getServerProperties().getSingleProperty(TWITCH_NICKNAME_KEY).getStringValue())); + } + + private boolean isEmptyCredentials() throws MinorException { + final String twitchNickname = getServerProperties().getSingleProperty(TWITCH_NICKNAME_KEY).getStringValue(); + final String twitchChatOauthToken = getServerProperties().getSingleProperty(TWITCH_ACCESS_TOKEN_KEY).getStringValue(); + return (twitchNickname == null || twitchNickname.isEmpty()) && + (twitchChatOauthToken == null || twitchChatOauthToken.isEmpty()); + } + + private void onClearCredentials() + { + clearCredentialsBtn.setOnAction(action -> { try { - persistCredentials(); - + getServerProperties().getSingleProperty(TWITCH_ACCESS_TOKEN_KEY).setStringValue(""); + getServerProperties().getSingleProperty(TWITCH_NICKNAME_KEY).setStringValue(""); + saveServerProperties(); new StreamPiAlert( - "Twitch chat credentials saved", - "Chat credentials been saved, you can now start using Twitch chat integration actions.", + "Twitch chat credentials cleared", + "To revoke token access, disconnect \"Twitch Chat OAuth Token Generator\" from your Twitch settings (https://www.twitch.tv/settings/connections).", StreamPiAlertType.INFORMATION) .show(); } catch (Exception e) { new StreamPiAlert( "Failed to save chat credentials", - "An error has occurred while saving chat credentials, please try again.", + "An error has occurred while clearing chat credentials, please try again.", StreamPiAlertType.WARNING) .show(); } }); - - persistCredentials(); - } - - private void persistCredentials() throws MinorException - { - final String token = getServerProperties().getSingleProperty(TWITCH_ACCESS_TOKEN_KEY).getStringValue(); - final String nickname = getServerProperties().getSingleProperty(TWITCH_NICKNAME_KEY).getStringValue(); - TwitchChatCredentials.setCredentials( - new TwitchChatCredentials.ChatCredentials() - .setOauthToken(token) - .setNickname(nickname)); } @Override --- 'a/twitch/twitch-chat-connect/src/main/java/connect/chat/TwitchChatCredentials.java' +++ b/twitch/twitch-chat-connect/src/main/java/connect/chat/TwitchChatCredentials.java @@ -2,6 +2,8 @@ package connect.chat; public final class TwitchChatCredentials { + public static final String DEFAULT_TWITCH_NICKNAME = "twitch_username"; + public static final String DEFAULT_TWITCH_TOKEN = "twitch_token"; private static ChatCredentials credentials; --- 'a/twitch/twitch-chat-connect/src/main/java/module-info.java' +++ b/twitch/twitch-chat-connect/src/main/java/module-info.java @@ -1,6 +1,4 @@ -import connect.TwitchChatConnectAction; - -module com.stream_pi.twitchconnectaction { +module com.stream_pi.twitchchatconnectaction { requires com.stream_pi.action_api; requires com.stream_pi.util; @@ -9,5 +7,5 @@ module com.stream_pi.twitchconnectaction exports connect.chat; - provides com.stream_pi.action_api.normalaction.NormalAction with TwitchChatConnectAction; + provides com.stream_pi.action_api.normalaction.NormalAction with connect.TwitchChatConnectAction; } \ No newline at end of file