From 6dfbd847eaa3c147a3eb5039f81bcd84bbd9e0a6 Mon Sep 17 00:00:00 2001 From: CKY- Date: Mon, 5 Aug 2024 07:01:49 -0600 Subject: [PATCH 1/5] feat (effect): add activity feed effect --- package-lock.json | 7 ++ package.json | 1 + src/backend/effects/builtin-effect-loader.js | 1 + .../effects/builtin/activity-feed-alert.ts | 64 +++++++++++++++++++ src/gui/app/services/activity-feed.service.js | 2 +- .../app/templates/chat/_chat-messages.html | 1 + 6 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 src/backend/effects/builtin/activity-feed-alert.ts diff --git a/package-lock.json b/package-lock.json index 1f751b2e0..7b57e3fdf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -97,6 +97,7 @@ "@types/fs-extra": "^11.0.4", "@types/luxon": "^3.1.0", "@types/node": "^18.18.2", + "@types/uuid": "^10.0.0", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", "electron": "^28.2.3", @@ -2545,6 +2546,12 @@ "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.8.tgz", "integrity": "sha512-7axfYN8SW9pWg78NgenHasSproWQee5rzyPVLC9HpaQSDgNArsnKJD88EaMfi4Pl48AyciO3agYCFqpHS1gLpg==" }, + "node_modules/@types/uuid": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "dev": true + }, "node_modules/@types/ws": { "version": "8.5.10", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", diff --git a/package.json b/package.json index 363b43eee..0c3e2b043 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "@types/fs-extra": "^11.0.4", "@types/luxon": "^3.1.0", "@types/node": "^18.18.2", + "@types/uuid": "^10.0.0", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", "electron": "^28.2.3", diff --git a/src/backend/effects/builtin-effect-loader.js b/src/backend/effects/builtin-effect-loader.js index 2a430d70f..8e75c39ae 100644 --- a/src/backend/effects/builtin-effect-loader.js +++ b/src/backend/effects/builtin-effect-loader.js @@ -5,6 +5,7 @@ const effectManager = require("./effectManager"); exports.loadEffects = () => { [ 'active-user-lists', + 'activity-feed-alert', 'add-quote', 'api', 'block-unblock', diff --git a/src/backend/effects/builtin/activity-feed-alert.ts b/src/backend/effects/builtin/activity-feed-alert.ts new file mode 100644 index 000000000..778de712b --- /dev/null +++ b/src/backend/effects/builtin/activity-feed-alert.ts @@ -0,0 +1,64 @@ +import { EffectType } from "../../../types/effects"; +import { EffectCategory, EffectDependency } from "../../../shared/effect-constants"; +import logger from "../../logwrapper"; +import moment from "moment"; +import { v4 as uuid } from "uuid"; +import frontendCommunicator from "./../../common/frontend-communicator"; + + +const effect: EffectType<{ + message: string; + icon: string; +}> = { + definition: { + id: "firebot:activity-feed-alert", + name: "Activity Feed Alert", + description: "Display an alert in Firebot's activity feed", + icon: "fad fa-comment-exclamation", + categories: [EffectCategory.FUN], + dependencies: [] + }, + optionsTemplate: ` + +

Use this effect to send yourself alerts in Firebot's activity feed. This alert is are only visible to you if the activity feed is visible.

+
+ +

Icon

+

A custom icon which allows you to identify your Activity alert.

+ +
+ + + + `, + optionsController: () => { }, + optionsValidator: effect => { + const errors = []; + if (effect.message == null || effect.message === "") { + errors.push("Alert message can't be blank."); + } + return errors; + }, + onTriggerEvent: async ({ effect }) => { + + frontendCommunicator.send('event-activity', { + message: effect.message, + icon: effect.icon ?? "fad fa-tv-alt", + acknowledged: false, + event: { + id: "activity-feed-alert", + name: "Activity Feed Alert", + }, + id: uuid(), + source:{ + id: "firebot", + name: "Firebot", + }, + timestamp: moment().format("H:mm"), + }); + + return true; + } +}; + +module.exports = effect; diff --git a/src/gui/app/services/activity-feed.service.js b/src/gui/app/services/activity-feed.service.js index dff2bdbbf..6fcf090f1 100644 --- a/src/gui/app/services/activity-feed.service.js +++ b/src/gui/app/services/activity-feed.service.js @@ -24,7 +24,7 @@ } const allowedEvents = settingsService.getAllowedActivityEvents(); - if (!allowedEvents.includes(`${activity.source.id}:${activity.event.id}`)) { + if (!allowedEvents.includes(`${activity.source.id}:${activity.event.id}`) && `${activity.source.id}:${activity.event.id}` !== "firebot:activity-feed-alert") { return; } diff --git a/src/gui/app/templates/chat/_chat-messages.html b/src/gui/app/templates/chat/_chat-messages.html index db5bd928a..508a70958 100644 --- a/src/gui/app/templates/chat/_chat-messages.html +++ b/src/gui/app/templates/chat/_chat-messages.html @@ -270,6 +270,7 @@

Date: Mon, 5 Aug 2024 09:42:18 -0600 Subject: [PATCH 2/5] verbage change and linting --- .../effects/builtin/activity-feed-alert.ts | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/backend/effects/builtin/activity-feed-alert.ts b/src/backend/effects/builtin/activity-feed-alert.ts index 778de712b..51ee4bac1 100644 --- a/src/backend/effects/builtin/activity-feed-alert.ts +++ b/src/backend/effects/builtin/activity-feed-alert.ts @@ -1,6 +1,5 @@ import { EffectType } from "../../../types/effects"; -import { EffectCategory, EffectDependency } from "../../../shared/effect-constants"; -import logger from "../../logwrapper"; +import { EffectCategory } from "../../../shared/effect-constants"; import moment from "moment"; import { v4 as uuid } from "uuid"; import frontendCommunicator from "./../../common/frontend-communicator"; @@ -20,7 +19,7 @@ const effect: EffectType<{ }, optionsTemplate: ` -

Use this effect to send yourself alerts in Firebot's activity feed. This alert is are only visible to you if the activity feed is visible.

+

Use this effect to send yourself alerts in Firebot's activity feed. This alert is only visible to you if the activity feed is visible.

Icon

@@ -32,7 +31,7 @@ const effect: EffectType<{
`, optionsController: () => { }, - optionsValidator: effect => { + optionsValidator: (effect) => { const errors = []; if (effect.message == null || effect.message === "") { errors.push("Alert message can't be blank."); @@ -42,19 +41,19 @@ const effect: EffectType<{ onTriggerEvent: async ({ effect }) => { frontendCommunicator.send('event-activity', { - message: effect.message, + message: effect.message, icon: effect.icon ?? "fad fa-tv-alt", - acknowledged: false, - event: { - id: "activity-feed-alert", - name: "Activity Feed Alert", - }, - id: uuid(), - source:{ - id: "firebot", - name: "Firebot", - }, - timestamp: moment().format("H:mm"), + acknowledged: false, + event: { + id: "activity-feed-alert", + name: "Activity Feed Alert" + }, + id: uuid(), + source: { + id: "firebot", + name: "Firebot" + }, + timestamp: moment().format("H:mm") }); return true; From c24f0606bce91526a8e02481132b12a1051bebcc Mon Sep 17 00:00:00 2001 From: CKY- Date: Mon, 5 Aug 2024 09:58:57 -0600 Subject: [PATCH 3/5] change icon --- src/backend/effects/builtin/activity-feed-alert.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/effects/builtin/activity-feed-alert.ts b/src/backend/effects/builtin/activity-feed-alert.ts index 51ee4bac1..f37672348 100644 --- a/src/backend/effects/builtin/activity-feed-alert.ts +++ b/src/backend/effects/builtin/activity-feed-alert.ts @@ -42,7 +42,7 @@ const effect: EffectType<{ frontendCommunicator.send('event-activity', { message: effect.message, - icon: effect.icon ?? "fad fa-tv-alt", + icon: effect.icon || "fad fa-comment-exclamation", acknowledged: false, event: { id: "activity-feed-alert", From 1dbd6bf39324cb8e98f8db85ebdc2b7e1774d4e8 Mon Sep 17 00:00:00 2001 From: CKY- Date: Mon, 5 Aug 2024 11:20:16 -0600 Subject: [PATCH 4/5] lets use handleTrigger so we can have the limits in place --- .../effects/builtin/activity-feed-alert.ts | 33 +++++++++---------- src/backend/events/activity-feed-manager.js | 2 +- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/backend/effects/builtin/activity-feed-alert.ts b/src/backend/effects/builtin/activity-feed-alert.ts index f37672348..2b35e1ddf 100644 --- a/src/backend/effects/builtin/activity-feed-alert.ts +++ b/src/backend/effects/builtin/activity-feed-alert.ts @@ -1,9 +1,6 @@ import { EffectType } from "../../../types/effects"; import { EffectCategory } from "../../../shared/effect-constants"; -import moment from "moment"; -import { v4 as uuid } from "uuid"; -import frontendCommunicator from "./../../common/frontend-communicator"; - +import { handleTriggeredEvent } from "../../events/activity-feed-manager"; const effect: EffectType<{ message: string; @@ -39,22 +36,24 @@ const effect: EffectType<{ return errors; }, onTriggerEvent: async ({ effect }) => { - - frontendCommunicator.send('event-activity', { - message: effect.message, - icon: effect.icon || "fad fa-comment-exclamation", - acknowledged: false, - event: { - id: "activity-feed-alert", - name: "Activity Feed Alert" - }, - id: uuid(), - source: { + handleTriggeredEvent( + { id: "firebot", name: "Firebot" }, - timestamp: moment().format("H:mm") - }); + { + id: "activity-feed-alert", + name: "Activity Feed Alert", + activityFeed: { + icon: effect.icon || "fad fa-comment-exclamation", + getMessage: () => { + return effect.message; + } + } + }, + { + username: "firebot" + }); return true; } diff --git a/src/backend/events/activity-feed-manager.js b/src/backend/events/activity-feed-manager.js index 1de6dd738..3e94b87c3 100644 --- a/src/backend/events/activity-feed-manager.js +++ b/src/backend/events/activity-feed-manager.js @@ -12,7 +12,7 @@ const timeFormat = isUSLocale ? "h:mm" : "H:mm"; const previousActivity = []; -function handleTriggeredEvent(source, event, metadata) { +export function handleTriggeredEvent(source, event, metadata) { if (source == null || event == null || metadata == null) { return; } From 216201432db10bd3edc8d275bfa7be7ef2c84992 Mon Sep 17 00:00:00 2001 From: CKY- Date: Tue, 6 Aug 2024 06:34:07 -0600 Subject: [PATCH 5/5] requested changes --- .../effects/builtin/activity-feed-alert.ts | 30 ++++++++++++++----- src/backend/events/activity-feed-manager.js | 5 ++-- src/gui/app/services/activity-feed.service.js | 6 ++-- .../app/templates/chat/_chat-messages.html | 2 +- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/src/backend/effects/builtin/activity-feed-alert.ts b/src/backend/effects/builtin/activity-feed-alert.ts index 2b35e1ddf..142105c27 100644 --- a/src/backend/effects/builtin/activity-feed-alert.ts +++ b/src/backend/effects/builtin/activity-feed-alert.ts @@ -16,15 +16,25 @@ const effect: EffectType<{ }, optionsTemplate: ` -

Use this effect to send yourself alerts in Firebot's activity feed. This alert is only visible to you if the activity feed is visible.

+

Use this effect to send yourself alerts in Firebot's activity feed.

- -

Icon

-

A custom icon which allows you to identify your Activity alert.

- -
- - + + + + + `, optionsController: () => { }, @@ -53,6 +63,10 @@ const effect: EffectType<{ }, { username: "firebot" + }, + { + forceAllow: true, + canRetrigger: false }); return true; diff --git a/src/backend/events/activity-feed-manager.js b/src/backend/events/activity-feed-manager.js index 3e94b87c3..c69196e0f 100644 --- a/src/backend/events/activity-feed-manager.js +++ b/src/backend/events/activity-feed-manager.js @@ -12,7 +12,7 @@ const timeFormat = isUSLocale ? "h:mm" : "H:mm"; const previousActivity = []; -export function handleTriggeredEvent(source, event, metadata) { +export function handleTriggeredEvent(source, event, metadata, eventSettings = { forceAllow: false, canRetrigger: true }) { if (source == null || event == null || metadata == null) { return; } @@ -44,7 +44,8 @@ export function handleTriggeredEvent(source, event, metadata) { }, event: { id: event.id, - name: event.name + name: event.name, + ...eventSettings }, message: event.activityFeed.getMessage(metadata), icon: event.activityFeed.icon, diff --git a/src/gui/app/services/activity-feed.service.js b/src/gui/app/services/activity-feed.service.js index 6fcf090f1..97cc0ccda 100644 --- a/src/gui/app/services/activity-feed.service.js +++ b/src/gui/app/services/activity-feed.service.js @@ -24,7 +24,7 @@ } const allowedEvents = settingsService.getAllowedActivityEvents(); - if (!allowedEvents.includes(`${activity.source.id}:${activity.event.id}`) && `${activity.source.id}:${activity.event.id}` !== "firebot:activity-feed-alert") { + if (!activity.event.forceAllow && !allowedEvents.includes(`${activity.source.id}:${activity.event.id}`)) { return; } @@ -42,13 +42,13 @@ }; service.markAllAcknowledged = () => { - service.allActivities.forEach(a => { + service.allActivities.forEach((a) => { a.acknowledged = true; }); }; service.markAllNotAcknowledged = () => { - service.allActivities.forEach(a => { + service.allActivities.forEach((a) => { a.acknowledged = false; }); }; diff --git a/src/gui/app/templates/chat/_chat-messages.html b/src/gui/app/templates/chat/_chat-messages.html index 508a70958..4c92a4bfd 100644 --- a/src/gui/app/templates/chat/_chat-messages.html +++ b/src/gui/app/templates/chat/_chat-messages.html @@ -270,7 +270,7 @@