diff --git a/app/dashboard/[guildId]/moderation/page.tsx b/app/dashboard/[guildId]/moderation/page.tsx index b4e9c92..cc141f4 100644 --- a/app/dashboard/[guildId]/moderation/page.tsx +++ b/app/dashboard/[guildId]/moderation/page.tsx @@ -23,7 +23,7 @@ export default function Home() { const url = `/guilds/${params.guildId}/modules/automod` as const; const { data, isLoading, error, edit } = useApi(url); - const enabled = data && !("message" in data) && Object.values(data.status).some(Boolean); + const enabled = data && !("message" in data) && (Object.values(data.status).some(Boolean) || data.keywordFilter.length); if (isLoading) return <>; @@ -90,7 +90,7 @@ export default function Home() { defaultState={data.keywordFilter.join(", ")} max={Infinity} onSave={(value) => { - edit("keywordFilter", (value as string | null)?.split(",").map((word) => word.trim()) || []); + edit("keywordFilter", (value as string | null)?.split(/,|\n/).map((word) => word.trim()) || []); }} /> ); diff --git a/components/markdown/emoji.tsx b/components/markdown/emoji.tsx index 0c6159a..92718e1 100644 --- a/components/markdown/emoji.tsx +++ b/components/markdown/emoji.tsx @@ -8,7 +8,7 @@ export default function Emoji({ return ( emoji ); diff --git a/components/markdown/index.tsx b/components/markdown/index.tsx index d21e26f..2eeb445 100644 --- a/components/markdown/index.tsx +++ b/components/markdown/index.tsx @@ -25,6 +25,8 @@ const ALLOWED_IFRAMES = [ getBaseUrl() ] as const; +const EMOJI_REGEX = /([\u{1F600}-\u{1F64F}]|[\u{1F300}-\u{1F5FF}]|[\u{1F680}-\u{1F6FF}]|[\u{1F1E0}-\u{1F1FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]|[\u{1F900}-\u{1F9FF}]|[\u{1FA70}-\u{1FAFF}]|[\u{200D}]|[\u{23CF}]|[\u{23E9}-\u{23FA}]|[\u{24C2}]|[\u{25AA}-\u{25AB}]|[\u{25FB}-\u{25FE}]|[\u{00A9}]|[\u{00AE}]|[\u{203C}]|[\u{2049}]|[\u{2122}]|[\u{2139}]|[\u{2194}-\u{2199}]|[\u{21A9}-\u{21AA}]|[\u{231A}-\u{231B}]|[\u{2328}]|[\u{2388}]|[\u{23E9}-\u{23EC}]|[\u{23F0}]|[\u{23F3}]|[\u{25FD}-\u{25FE}]|[\u{2614}-\u{2615}]|[\u{2648}-\u{2653}]|[\u{267F}]|[\u{2692}-\u{269C}]|[\u{26F5}]|[\u{26FA}]|[\u{26FD}]|[\u{2705}]|[\u{270A}-\u{270B}]|[\u{2728}]|[\u{274C}]|[\u{274E}]|[\u{2753}-\u{2755}]|[\u{2757}]|[\u{2795}-\u{2797}]|[\u{27B0}]|[\u{27BF}]|[\u{2B1B}-\u{2B1C}]|[\u{2B50}]|[\u{2B55}]|[\u{2934}-\u{2935}]|[\u{3030}]|[\u{303D}]|[\u{3297}]|[\u{3299}])/gu; + export default async function BeautifyMarkdown({ markdown }: { @@ -75,6 +77,9 @@ export default async function BeautifyMarkdown({ return text ?.toString() .toLowerCase() + .replace("[object object],[object object],", "") + .replace(EMOJI_REGEX, "") + .trim() .replace(/ +/g, "-"); } diff --git a/public/docs-assets/tts-volume.webp b/public/docs-assets/tts-volume.webp index 0513ac7e866f85b73c60e448f8c251f02c66b296..8547c36aeeb69e5202bd454e8cd9a24a3ea4ef54 100644 GIT binary patch literal 10798 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 F00620nxX&z diff --git a/public/docs/text-to-speech.md b/public/docs/text-to-speech.md index 1e4a779..0247358 100644 --- a/public/docs/text-to-speech.md +++ b/public/docs/text-to-speech.md @@ -21,12 +21,6 @@ It's absolutely crucial for people with speech impairments like aphonia or dysph To get a quick **.mp3 file** of your message, use `/tts file` in any text channel. -### 🌎 Auto Translate -Automatically translate messages from any language to match your [current voice's language](/docs/text-to-speech#voices) for free. - -* **For Commands**: Set the `translate` option to `yes` (i.e.: `/tts voice text:Hello World translate:yes`) -* **For Chat to Speech**: Append `-tr` to the end of your message (i.e.: `Hello World -tr`) - ### πŸ“‘ Usage logs Pick a channel where any Text to Speech events from your server should be logged, mainly for moderation purposes.
@@ -56,19 +50,22 @@ Discord Nitro members can send messages with up to 4,000 characters, while non-N

-While this feature is free, we would be grateful if you could consider [shooting us a donation](https://ko-fi.com/mwlica) or [voting on top.gg](/vote). Please note that messages longer than 300 characters are vote locked. Unfortunately, money and growth (sadly) don't grow on trees (money isn't exactly normal paper). +While this feature is free, we would be grateful if you could consider [shooting us a donation](/premium) or [voting on top.gg](/vote). Please note that messages longer than 300 characters are vote locked. Unfortunately, money and growth (sadly) don't grow on trees (money isn't exactly normal paper). ### 🀚 Blacklist users & roles If you want to prevent certain users from using text or chat to speech, you can either use Discord's channel or integration permission system. ([watch a tutorial](/disable-commands)) -## Server nodes & regions -For optimal latency and performance when using Text to Speech in voice channels, Wamellow has multiple server nodes in different regions. -A list of available nodes and regions can be found [on the status page](/status). +## Moderation +You can use Wamellow's native **<:badge_automod:1307719909618225263> AutoMod** to block certain words or phrases for Text-to-Speech by [setting up rules on your server's Moderation tab](/profile?to=moderation). +Separate words or phrases with a comma (e.g., `dog, cat, tiger`) or a new line. For each word, use an asterisk (`*`) at the beginning, end, or both for partial matching.

-If the voice channel's *Region Override* is set to `Automatic`, it will default to Frankfurt, Germany. -If an override is set, it will use the selected region, if available. +Members with `Manage Server` or `Administrator` permissions will bypass AutoMod. Separate whitelisted roles and channels can also be added to bypass AutoMod in the moderation settings. +
+
+ +**Note:** For `/tts` commands, only Wamellow's native AutoMod can block messages. Chat-to-Speech messages can also be blocked by Discord's native AutoMod β€” and all other bots that rely on it β€” in addition to Wamellow's own. If you're using a third-party moderation system, such as other bots, that only delete messages after they were sent, rather than blocking them directly, will not be able to block messages for Text-to-Speech. ## Avoiding Chat-to-Speech To prevent Wamellow from speaking your messages inside of Chat to Speech channels, simply take the following actions: @@ -79,7 +76,7 @@ To prevent Wamellow from speaking your messages inside of Chat to Speech channel
**Note:** Any of those methods only apply to you and your own messages, and not to anyone else using chat to speech. -If you want to disable it for everyone, read the [setup section of these docs](#setup). +If you want to disable it for everyone, [read the setup section of these docs](#setup). ## Voice filters Filters are a way to tamper with the voices when using Wamellow in VCs, they can be toggled using `/tts set filter` by VC moderators. @@ -99,24 +96,25 @@ All currently available filters:
To change the volume of the TTS or mute it entirely for yourself, -- (desktop) Right-click Wamellow, and set the "User Volume" slider. -- (mobile) Open Wamellows' profile, and set the "Volume" slider. +- **(desktop)** Right-click Wamellow, and set the "User Volume" slider. +- **(mobile)** Open Wamellows' profile, and set the "Volume" slider. ![how to change the volume of Wamellow TTS](/docs-assets/tts-volume.webp) -## Troubleshooting -If Wamellow joins the voice channel but doesn't speak, check that it has the `Connect` and `Speak` permissions in the channel settings. If it does, [please report the issue to us](/support). -
-
- -If Wamellow says that someone else's message is still being spoken, but it's not talking, use `/tts voice-stop`. -You can also use this to stop any message that is currently being spoken (i.e.: because of spam). - ## Voices You can change your default language and voice either by running `/tts set speaker` or by [setting it on the dashboard](/profile/text-to-speech).

-You can also change the voice on a per-message basis by setting the `voice` option when using `/tts file` or `/tts voice`, i.e.: `/tts voice text:Hello World voice:en_female_samc`. This can also be combined with the [auto translate](/docs/text-to-speech) flag. + +You can also change the voice on a per-message basis by setting the `voice` option when using `/tts file` or `/tts voice`, i.e.: `/tts voice text:Hello World voice:en_female_samc`. This can also be combined with the auto translate flag. + +### 🌎 Auto Translate +Automatically translate messages from any language to match your current voice's language for free. + +* **For Commands**: Set the `translate` option to `yes` (i.e.: `/tts voice text:Hallo Welt translate:yes`) +* **For Chat to Speech**: Append `-tr` to the end of your message (i.e.: `Hallo Welt -tr`) + +### <:YA_PepeStare:832631300132438046> List of Available Voices @@ -225,4 +223,21 @@ You can also change the voice on a per-message basis by setting the `voice` opti -
πŸ‡ΊπŸ‡Έ English (singing)Thanksgiving (Male)
πŸ‡ΊπŸ‡Έ English (singing)Pop Lullaby (Female)
\ No newline at end of file + + +## Server nodes & regions +For optimal latency and performance when using Text to Speech in voice channels, Wamellow has multiple server nodes in different regions. +A list of available nodes and regions can be found [on the status page](/status). +
+
+ +If the voice channel's *Region Override* is set to `Automatic`, it will default to Frankfurt, Germany. +If an override is set, it will use the selected region, if available. + +## Troubleshooting +If Wamellow joins the voice channel but doesn't speak, check that it has the `Connect` and `Speak` permissions in the channel settings. If it does, [please report the issue to us](/support). +
+
+ +If Wamellow says that someone else's message is still being spoken, but it's not talking, use `/tts voice-stop`. +You can also use this to stop any message that is currently being spoken (i.e.: because of spam). \ No newline at end of file