> 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="/pages/7e1aa0a7cbd858b908a8136e49ff9609eb779a77"><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="/pages/f3f61ae1b2431a2124f84714c07d56b2a2b9287f"><strong>Limits</strong></a></td><td>How often it's allowed to run</td></tr><tr><td>3</td><td><a href="/pages/b9e5f8e9f46ea99b7bf2ff606f02898a6f286de1"><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="/pages/975c276dd1ff9fe4937256fbb47507455fe15aec"><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="/pages/74c18a41cd587c57ad809dfb93d49380a674aac7"><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="/files/GFnhA4wNC09E4uqgfPTP" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

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

<figure><img src="/files/tqyhLVylMsVzGk3pd3Vq" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

## Add a condition

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

<figure><img src="/files/zf4pCuUDbmklW7T5VlFO" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

## Add a condition

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

<figure><img src="/files/jeP1DF4kWhm4WKM0vRNl" 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="/files/U2Uasp70v9OboutjW5xz" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

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

**Reply** → `Hi there!`

<figure><img src="/files/MCYLF6VAPQWR83CN2v6x" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

## Test in safe mode

<figure><img src="/files/oYJqatL75080gftm6Juw" 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="/files/jSAI9ubdQzgHc6Jt9PmZ" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/23gaM5qwBcrph94wT2YE" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/56pEiy0kgBksWHafw9zV" 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 %}
