> For the complete documentation index, see [llms.txt](https://docs.nighty.one/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.nighty.one/custom-features-tab/quickstart-guide.md).

# Quickstart Guide

We strongly recommend reading the full documentation, but if you’re short on time, here’s a quick-start guide to get you up and running.

A custom feature is one sentence: **when this happens, check a few things, then do something.**

## The five parts

Every feature is built in this order, and it runs in this order too:

<table><thead><tr><th width="89">N</th><th width="161">Part</th><th>What it's for</th></tr></thead><tbody><tr><td>1</td><td><a href="/custom-features-tab/understanding-events-and-parameters.md"><strong>Event</strong></a></td><td>What sets it off - a message, someone joining, a timer</td></tr><tr><td>2</td><td><a href="/custom-features-tab/execution-limits.md"><strong>Limits</strong></a></td><td>How often it's allowed to run</td></tr><tr><td>3</td><td><a href="/custom-features-tab/filters.md"><strong>Filters</strong></a></td><td>Broad "where and who" checks. Fast way to rule things out</td></tr><tr><td>4</td><td><a href="/custom-features-tab/conditions.md"><strong>Conditions</strong></a></td><td>The detailed checks. Only what you want gets past here</td></tr><tr><td>5</td><td><a href="/custom-features-tab/actions.md"><strong>Actions</strong></a></td><td>What actually happens</td></tr></tbody></table>

If any step says no, the feature stops there and nothing happens.

## Six things to know before you start

**1. Every** [**event**](/custom-features-tab/understanding-events-and-parameters.md) **brings information with it.** A new message gives you the message, who sent it (user or member), the channel, the server (guild). You build everything out of these [**parameters**](/custom-features-tab/understanding-events-and-parameters.md).&#x20;

**2. "Guild" means "server."** Same thing.

**3. Not everything is always there.** DMs have no server and no member. Features that work in servers can silently do nothing in DMs.

**4. Leave** [**safe mode**](/custom-features-tab/safe-mode.md) **ON.** New features have it on by default. Your feature runs for real but stops before doing anything, and tells you what it *would* have done. Turn it off only once you've watched it behave correctly.

**5. Add the "Ignore self" or "Only Self" filter.** Always. Without it, a feature that replies to messages will reply to its own reply, forever.

**6. Keep the default limit of 1 run per second.** It's your brake. Only remove it if you know exactly why.

## Your first feature, in 2 minutes

{% stepper %}
{% step %}

## Pick the event <mark style="color:$success;">**New Message**</mark>

<figure><img src="https://3836407116-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFce5BqRsGvQObqcfG7q%2Fuploads%2F4qZUxSzegWwxd5Vyadsp%2Fimage.png?alt=media&amp;token=91a4c0fa-ab32-4348-b8c1-41b073177c79" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

## Add the filter <mark style="color:$success;">**Ignore self**</mark>

<figure><img src="https://3836407116-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFce5BqRsGvQObqcfG7q%2Fuploads%2FxE4iY2JsvFz1wYKchXed%2Fimage.png?alt=media&amp;token=e7f226b1-d26f-411e-b78d-8545c815145c" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

## Add a condition

<mark style="color:$success;">Message contains</mark> `hello`.

<figure><img src="https://3836407116-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFce5BqRsGvQObqcfG7q%2Fuploads%2FKWC6ahXbn8xCXi7sLcfk%2Fimage.png?alt=media&amp;token=3edaa04d-12b5-4a98-9f21-e95636c48b11" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

## Add a condition

<mark style="color:$success;">Message mentions me</mark>

<figure><img src="https://3836407116-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFce5BqRsGvQObqcfG7q%2Fuploads%2FluqakDYZX3JDinJ1FV5c%2Fimage.png?alt=media&amp;token=0edf225f-e528-446d-88df-cebb7de0ea2b" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Keep "if met, just continue" and "otherwise, stop" as is

Do not change anything there, keep them collapsed.

<figure><img src="https://3836407116-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFce5BqRsGvQObqcfG7q%2Fuploads%2FQ3mXbNZlVVKDK4SF1TbU%2Fimage.png?alt=media&amp;token=f7cddc98-4dc7-4841-9eef-3c166986b9b9" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

## Add the <mark style="color:$success;">action</mark>

**Reply** → `Hi there!`

<figure><img src="https://3836407116-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFce5BqRsGvQObqcfG7q%2Fuploads%2F7My3MS9J7Sks45kq0YTs%2Fimage.png?alt=media&amp;token=f682add2-41b3-44f3-91c5-effe67ace785" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

## Test in safe mode

<figure><img src="https://3836407116-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFce5BqRsGvQObqcfG7q%2Fuploads%2F4nfY80iD4oCHUbLLkWZW%2Fimage.png?alt=media&amp;token=ca051751-153a-47b3-b28f-19372d5ef513" alt=""><figcaption></figcaption></figure>

Go to the Overview Tab.

Ask your friend to say "hello" and ping you (for example `hello @you` on Discord.

If a notification appears saying actions were about to run - it works.&#x20;

<figure><img src="https://3836407116-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFce5BqRsGvQObqcfG7q%2Fuploads%2FCCVCB8aGiB5pGr6VA3ec%2Fimage.png?alt=media&amp;token=1cdc3b2c-717d-4679-a15b-98d930f15ef9" alt=""><figcaption></figcaption></figure>

Turn safe mode off and try it for real, again.

<figure><img src="https://3836407116-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFce5BqRsGvQObqcfG7q%2Fuploads%2FDYmY5wbE2B6TcfPEiaFZ%2Fimage.png?alt=media&amp;token=764cebed-14d5-42b1-ac77-29107c468538" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3836407116-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFce5BqRsGvQObqcfG7q%2Fuploads%2FMVCfPWSMrHn5HEozWJGS%2Fimage.png?alt=media&amp;token=96217986-87cf-4820-ae32-ab99caac2721" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

## When something goes wrong

**Check the feature's log first.** Nearly every problem writes its reason there: which value was empty, which ID couldn't be found, which action failed.

The three most common causes:

| It's…                 | Look at                                                                                  |
| --------------------- | ---------------------------------------------------------------------------------------- |
| Doing nothing         | A filter or condition is blocking it - or it's a DM and you used a server-only parameter |
| Doing too much        | Conditions too loose, or a missing **Ignore self**                                       |
| Doing the wrong thing | A reference is pointed at the wrong parameter                                            |

## A rules that will save you

{% hint style="danger" %}
**Test in safe mode. Every time.**

**If safe mode is spamming notifications, your feature is broken.** Fix it before turning safe mode off - that spam would be going to Discord.
{% endhint %}
