Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Dependencies
/node_modules
/.yarn/cache
/.yarn/install-state.gz

# IDE / tooling
/.idea
/.claude

# Production
/build
Expand Down
124 changes: 124 additions & 0 deletions docs/custom-bot/commands.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
# Commands

Turn your enabled modules' built-in commands on or off, and rename the context-menu (right-click) commands your members see - all from the SCNX Dashboard.

## Overview {#overview}

The **Commands** page lists every command provided by the modules you currently have enabled and lets you decide which of them are registered with Discord. Commands are grouped into three tabs by type:

- **Slash** - the `/command` entries members type into the chat box.
- **User** - context-menu commands shown when you right-click a member (Apps submenu).
- **Message** - context-menu commands shown when you right-click a message (Apps submenu).

For each command you can enable or disable it. For **User** and **Message** commands you can additionally set a custom label - the text Discord shows in the Apps menu. A live preview reproduces Discord's Apps flyout so you can see how the user and message menus will look before you save.

Only commands from **enabled** modules appear here. Enable a module first if the command you are looking for is missing.

:::info
This page manages the commands that ship with the bot's modules. It is different from the two neighboring pages:

- [Permissions & Slash Commands](/docs/custom-bot/slash-commands) - Discord's own per-command permission controls (which roles, users and channels may run a command). Configured in your Discord server settings, not here.
- [Custom Commands](/docs/custom-bot/custom-commands) - building your own commands from scratch with the visual flow editor.

Use the Commands page to switch built-in module commands on or off and to rename context-menu items; use the other two pages for permissions and for authoring your own commands.
:::

## Slash, User and Message commands {#types}

Discord supports three command types, and the page keeps them on separate tabs because each has its own rules and budget.

| Type | Where members find it | Can be renamed here | Enabled by default |
| ----------- | -------------------------------------- | ------------------- | ------------------ |
| **Slash** | Typed as `/command` in the message box | No | Yes |
| **User** | Right-click a member → **Apps** | Yes (custom label) | No |
| **Message** | Right-click a message → **Apps** | Yes (custom label) | No |

Each tab shows a budget counter (used / limit) so you can see at a glance how much of Discord's per-type allowance you have spent.

## Enabling and disabling {#enable-disable}

Use the toggle on each command row to enable or disable it.

Defaults differ by type:

- **Slash commands are enabled by default.** A slash command you have never touched is registered with Discord. Disable it here to remove it.
- **User and Message commands are disabled by default.** Context-menu commands are opt-in - they only appear in Discord once you enable them here.

Every command belongs to a module and is grouped under that module's section. Disabling a whole module (on the module's own page) removes all of its commands from this page.

## Renaming context-menu commands {#renaming}

User and Message commands can be given a **custom label** - the text members see in Discord's Apps menu. Slash commands cannot be renamed here (their names follow Discord's own rules and are managed with the module).

- Type your preferred label into the command's rename field. Leave it blank to fall back to the command's default name.
- Labels are limited to **32 characters** (a Discord limit). The page flags any label that is too long and blocks saving until you shorten it.
- The live Apps preview updates as you type, so you can confirm the wording before saving.

## Limits {#limits}

Discord enforces a fixed budget per command type. The page enforces the same limits and will not let you save a selection that exceeds them:

| Type | Maximum enabled commands |
| ------- | ------------------------ |
| Slash | 100 |
| User | 15 |
| Message | 15 |

Additional rules:

- **Context-menu label length:** custom User/Message labels may be at most **32 characters**.
- **Name collisions:** two enabled commands of the **same type** whose resolved labels (custom label, or the default name if no custom label is set) are identical when compared case-insensitively will collide. The page flags the collision and blocks saving until you rename or disable one of them. `Report` and `report` count as the same name.

If any of these rules is broken, the page shows the reason and disables saving until it is resolved.

## Saving and syncing to Discord {#saving}

Your command selection is stored like any other module configuration and is written through the normal config save path - use the **Save** action the same way you would on any configuration page. There is no separate submit step.

After saving, the bot updates the commands registered with Discord to match your selection.

:::info Command synchronization
As with all command changes, updates can take time to appear in Discord - newly enabled commands may take a while to show up, and removed ones a while to disappear. This is a Discord-side propagation delay, the same behavior described in the [Permissions & Slash Commands](/docs/custom-bot/slash-commands#command-synchronization) guide. Give it some time before assuming something is wrong.
:::

## Troubleshooting {#troubleshooting}

<details>
<summary>A command I expected isn't listed</summary>
<ul>
<li>The page only lists commands from <b>enabled</b> modules. Enable the owning module first.</li>
<li>Make sure your bot is online and has synced its command catalog.</li>
</ul>
</details>

<details>
<summary>I can't save my changes</summary>
<ul>
<li>Check the warning shown at the top of the list - it names what to fix.</li>
<li>You may have exceeded a per-type budget (Slash 100, User 15, Message 15). Disable some commands of that type.</li>
<li>Two enabled commands of the same type may share a name (case-insensitive). Rename or disable one of them.</li>
<li>A custom context-menu label may be longer than 32 characters. Shorten it.</li>
</ul>
</details>

<details>
<summary>A right-click (User / Message) command doesn't appear in Discord</summary>
<ul>
<li>Context-menu commands are <b>disabled by default</b> - enable them on this page first.</li>
<li>Command changes can take time to propagate to Discord. Wait a while and try again.</li>
<li>Confirm you saved your changes.</li>
</ul>
</details>

<details>
<summary>My renamed command still shows the old name</summary>
<ul>
<li>Save your changes, then allow time for Discord to sync the new label.</li>
<li>Verify the label isn't colliding with another enabled command of the same type.</li>
</ul>
</details>

## Related pages {#related}

- [Permissions & Slash Commands](/docs/custom-bot/slash-commands) - control who can run commands with Discord's native permission system.
- [Custom Commands](/docs/custom-bot/custom-commands) - build your own commands with the visual flow editor.
63 changes: 63 additions & 0 deletions docs/custom-bot/login-as-bot.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,69 @@ members, the following channel permissions are required:
Use the [preview in the message editor](/docs/scnx/guilds/message-editor#preview) to see how your message will look before sending it.
:::

## Scheduling messages {#scheduling}

Instead of sending a message right away, you can schedule it to be posted in a channel at a future time - and
optionally have it repeat on a fixed cadence until you cancel it. Scheduled messages are handled by your bot, so
you do not need to keep the dashboard open, and pending messages survive bot restarts.

### Scheduling a message {#schedule-message}

1. Open the [Bot Log-In page](https://scnx.app/glink?page=bot/login).
2. Select the channel you want the message to be posted in.
3. Compose your message using the [message editor](/docs/scnx/guilds/message-editor), just like a normal message.
4. Choose a send time in the future and, optionally, a recurrence.
5. Save the scheduled message.

The send time is interpreted in your bot's configured timezone - the same timezone used everywhere else. The time
must be in the future.

### Recurring messages {#recurring}

A scheduled message can repeat on a **daily**, **weekly**, or **monthly** cadence:

- **Daily** - every day at the same time.
- **Weekly** - every 7 days, on the same weekday and time.
- **Monthly** - on the same day of the month.

Recurring messages run until you cancel them - there is no end date or maximum count. After each send, the bot
re-arms the next occurrence, and it also re-arms on startup, so a bot restart never breaks the series.

For monthly messages, the send day is anchored to the day of the month of the first occurrence. In shorter months
that day is clamped to the last day of the month, then re-expands afterwards - for example, a message anchored to
the 31st fires on Jan 31, Feb 28, Mar 31, Apr 30, and so on.

### Editing, cancelling, and listing {#manage-scheduled}

- **List** - the dashboard shows your pending scheduled messages, each with its next send time and, for recurring
messages, its cadence.
- **Edit** - you can change the content, send time, or recurrence of a pending scheduled message. Turning a
recurring message back into a one-shot, or vice versa, is supported.
- **Cancel** - cancelling a scheduled message removes it. Cancelling a recurring message stops the whole series.

### Missed and failed occurrences {#reliability}

- **Skip missed runs** - if your bot is offline when an occurrence is due, that occurrence is skipped rather than
sent late. The series resumes at the next future slot.
- **Self-healing failures** - if an occurrence fails to send (for example because the channel was deleted or the
bot lost access), the series keeps trying on its normal cadence but stops itself after **5 consecutive failed
occurrences**. A single successful send resets that counter.

### Pending message limits {#scheduling-limits}

The number of **pending** scheduled messages you can have at once is capped per plan. A recurring series counts as
a single pending message, and sent, cancelled, or stopped messages do not count toward the limit.

| Plan | Max pending scheduled messages |
| ------------------------- | ------------------------------ |
| STARTER | 2 |
| ACTIVE_GUILD | 10 |
| UNLIMITED / PRO | 25 |
| PROFESSIONAL / ENTERPRISE | 50 |

When you are at your plan's limit, scheduling a new message is rejected and nothing is created - cancel or wait
for a pending message to be sent to free up a slot.

## Editing a message {#edit-message}

You can edit messages that were previously sent by your bot (including messages sent via Bot Log-In).
Expand Down
20 changes: 10 additions & 10 deletions docs/custom-bot/modules/administration/welcomer.md
Original file line number Diff line number Diff line change
Expand Up @@ -159,16 +159,16 @@ In this configuration file allows you to [set up welcome- and boost roles](#setu
features of this module. Open it in
your [dashboard](https://scnx.app/glink?page=bot/configuration?file=welcomer%7Cconfigs%2Fconfig).

| Field | Description |
| ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Give roles on join | These roles will be given to members who joined your server. This won't get applied retroactively, use the [massrole module](/docs/custom-bot/modules/tools/massrole) to do this. |
| Ignore bots? | If enabled (this is highly recommended), welcome and leave messages won't get sent if the user joining or leaving is a bot. |
| Give additional roles on boost | These roles will be given to members who boosted your server in addition to their boost-role assigned by Discord. The roles will get removed if the member removes all their boosts. |
| Immediately give roles | If enabled, join roles are assigned immediately when a user joins. If disabled, roles are assigned after the user completes Discord's onboarding (rules acceptance). |
| Treat join roles as base roles | When enabled, the bot guarantees every regular member holds all configured join roles via reactive re-adds and a daily sweep. See [Treat join roles as base roles](#base-roles) for the full list of exclusions and race-protection details. |
| Send DM on join | If enabled, the bot sends a direct message to new users when they join the server. |
| Join DM Message | _Only visible if "Send DM on join" is enabled._<br/>The message sent via DM to new users when they join your server. |
| Delete welcome message | If enabled, sent welcome messages will get deleted automatically if the user leaves your server within seven days after join. |
| Field | Description |
| --------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Give roles on join | These roles will be given to members who joined your server. This won't get applied retroactively, use the [massrole module](/docs/custom-bot/modules/tools/massrole) to do this. |
| Ignore bots? | If enabled (this is highly recommended), welcome and leave messages won't get sent if the user joining or leaving is a bot. |
| Give additional roles on boost | These roles will be given to members who boosted your server in addition to their boost-role assigned by Discord. The roles will get removed if the member removes all their boosts. |
| Immediately give roles | If enabled, join roles are assigned immediately when a user joins. If disabled, roles are assigned after the user completes Discord's onboarding (rules acceptance). |
| Treat join roles as base roles (auto-restore) | When enabled, the bot guarantees every regular member holds all configured join roles via reactive re-adds and a daily sweep. See [Treat join roles as base roles](#base-roles) for the full list of exclusions and race-protection details. |
| Send DM on join | If enabled, the bot sends a direct message to new users when they join the server. |
| Join DM Message | _Only visible if "Send DM on join" is enabled._<br/>The message sent via DM to new users when they join your server. |
| Delete welcome message | If enabled, sent welcome messages will get deleted automatically if the user leaves your server within seven days after join. |

### Random messages {#configuration-random-messages}

Expand Down
Loading
Loading