diff --git a/app/server/libs/twitch/pushActions.js b/app/server/libs/twitch/pushActions.js
index ecfe87a..91d080e 100644
--- a/app/server/libs/twitch/pushActions.js
+++ b/app/server/libs/twitch/pushActions.js
@@ -49,6 +49,8 @@ function getValidEvents(widget, eventName) {
module.exports = function pushActions(eventName, eventProps) {
logger.debug("pushActions", { eventName, eventProps });
+ const randomActions = [];
+
stores.panels.get("panels").forEach(({ widgets }) => {
widgets.forEach((widget) => {
if (!widget.component) return;
@@ -63,8 +65,17 @@ module.exports = function pushActions(eventName, eventProps) {
if (isInvalidShortcut(event, eventProps)) return;
if (isInvalidRules(event, eventProps)) return;
- push({ type, widget, event, eventProps });
+ if (widget.random) {
+ randomActions.push({ type, widget, event, eventProps });
+ } else {
+ push({ type, widget, event, eventProps });
+ }
});
});
});
+
+ if (randomActions.length) {
+ const random = Math.floor(Math.random() * randomActions.length);
+ push(randomActions[random]);
+ }
};
diff --git a/app/static/locales/en/app.json b/app/static/locales/en/app.json
index 51aeaa2..ef09247 100644
--- a/app/static/locales/en/app.json
+++ b/app/static/locales/en/app.json
@@ -166,7 +166,8 @@
"source": "source",
"test": "test",
"port": "port",
- "password": "password"
+ "password": "password",
+ "random": "random"
},
"obs": {
"scene-list": "OBS | Scene list",
diff --git a/app/static/locales/es/app.json b/app/static/locales/es/app.json
index fd70185..19d83f0 100644
--- a/app/static/locales/es/app.json
+++ b/app/static/locales/es/app.json
@@ -165,7 +165,8 @@
"source": "fuente",
"test": "test",
"port": "puerto",
- "password": "contraseña"
+ "password": "contraseña",
+ "random": "al azar"
},
"obs": {
"scene-list": "OBS | Lista de escenas",
diff --git a/app/static/locales/fr/app.json b/app/static/locales/fr/app.json
index 88bcdec..31cc2ef 100644
--- a/app/static/locales/fr/app.json
+++ b/app/static/locales/fr/app.json
@@ -166,7 +166,8 @@
"source": "source",
"test": "test",
"port": "port",
- "password": "mot de passe"
+ "password": "mot de passe",
+ "random": "aléatoire"
},
"obs": {
"scene-list": "OBS | Liste des scènes",
diff --git a/front-src/client/components/Panels/Panel/Widget/Edit/Action.svelte b/front-src/client/components/Panels/Panel/Widget/Edit/Action.svelte
index 39bc3f3..2b92fdb 100644
--- a/front-src/client/components/Panels/Panel/Widget/Edit/Action.svelte
+++ b/front-src/client/components/Panels/Panel/Widget/Edit/Action.svelte
@@ -14,6 +14,7 @@
import Button from "@/components/UI/Button.svelte";
import Select from "@/components/UI/Select.svelte";
import { findSpaceForWidget } from "@/stores/panels";
+ import Checkbox from "@/components/UI/Checkbox.svelte";
import MdDelete from "svelte-icons/md/MdDeleteForever.svelte";
import ConfirmModal from "@/components/UI/ConfirmModal.svelte";
@@ -97,6 +98,10 @@
function onRemoveAction() {
removeActionModal = true;
}
+
+ function onCheckboxChange({ target }) {
+ change("random", target.checked);
+ }
{#if component}
@@ -113,6 +118,11 @@
label="{_('words.trigger')}"
on:change="{onTriggerChange}"
/>
+
{/if}
{#if config.hasEvent}