diff --git a/client/app.js b/client/app.js index fd2fa59..4927160 100644 --- a/client/app.js +++ b/client/app.js @@ -56,10 +56,6 @@ async function checkEvent(e) { case "a73247ee-e33e-4e9b-9105-bd9d11e111fc": await russianRoulette(data); break; - // highlight message - case "a26c0d9e-fd2c-4943-bc94-c5c2f2c974e4": - await highlightMessage(data); - break; // robar el vip case "ac750bd6-fb4c-4259-b06d-56953601243b": await createCard(data.rewardName, data.message, data.backgroundColor, data.rewardImage); @@ -175,26 +171,6 @@ function russianRoulette({ userDisplayName, message }) { }); } -async function highlightMessage(data) { - const urlRegex = /(https?:\/\/)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/; - - if (urlRegex.test(data.message)) { - sendWsActions({ - type: "timeout", - userId: data.userId, - channelId: data.channelId, - data: { - username: data.userDisplayName, - time: "10", - reason: "No esta permitido enviar enlaces en mensajes destacados." - } - }); - return; - } - - await createCard(data.rewardName, data.message, data.backgroundColor, data.rewardImage); -} - // send actions to be performed by the server function sendWsActions(actions) { if (!Array.isArray(actions)) { diff --git a/src/backend/pubSubClient/actions/highlightMessage.ts b/src/backend/pubSubClient/actions/highlightMessage.ts new file mode 100644 index 0000000..58dfab7 --- /dev/null +++ b/src/backend/pubSubClient/actions/highlightMessage.ts @@ -0,0 +1,41 @@ +import { LOG_PREFIX } from ".."; +import { RedemptionMessage } from "../../../interfaces/RedemptionMessage"; +import { broadcast } from "../../helpers/webServer"; +import { getUsernameFromId } from "../../helpers/twitch"; +import { timeout } from "../../chatClient/clientActions"; + +async function highlightMessage(msg: RedemptionMessage): Promise { + if (!msg.message) { + console.log(`${LOG_PREFIX}Redemption has no message`); + + return; + } + + const urlRegex = + /(https?:\/\/)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&/=]*)/; + + if (urlRegex.test(msg.message)) { + console.log(`${LOG_PREFIX}Message contains a url`); + const channel = await getUsernameFromId(parseInt(msg.channelId)); + + if (!channel) { + console.log(`${LOG_PREFIX}No channel found`); + + return; + } + + try { + const reason = "No se permite enviar enlaces en mensajes destacados"; + + await timeout(channel, msg.userDisplayName, 10, reason); + } catch (e) { + // user probably cannot be timed out + } + + return; + } + + broadcast(JSON.stringify(msg)); +} + +export { highlightMessage }; diff --git a/src/backend/pubSubClient/index.ts b/src/backend/pubSubClient/index.ts index c6c7a9f..b093ca3 100644 --- a/src/backend/pubSubClient/index.ts +++ b/src/backend/pubSubClient/index.ts @@ -7,6 +7,7 @@ import { broadcast } from "../helpers/webServer"; import { getApiClient } from "../helpers/twitch"; import { getVip } from "./actions/getVip"; import { hidrate } from "./actions/hidrate"; +import { highlightMessage } from "./actions/highlightMessage"; import { russianRoulette } from "./actions/russianRoulette"; import { stealVip } from "./actions/stealVip"; import { timeoutFriend } from "./actions/timeoutFriend"; @@ -52,6 +53,9 @@ async function onRedemption(message: PubSubRedemptionMessage) { case RedemptionIds.TimeoutFriend: await timeoutFriend(msg); break; + case RedemptionIds.HighlightMessage: + await highlightMessage(msg); + break; case RedemptionIds.GetVip: msg.message = `@${msg.userDisplayName} ha encontrado diamantes!`;