# llSay

*LSL function*

```lsl
void llSay(integer channel, string msg);
```

- `integer channel`: Chat channel (any 32-bit signed integer value) to chat the message on.
- `string msg`: Text message string to broadcast.

- Energy: 10

Broadcasts the message msg to all scripts or agents listening on channel within llGetEnv("chat_range"), which is 20m on most regions. Agents listen on PUBLIC_CHANNEL (0) and DEBUG_CHANNEL (2147483647). All other channels are for script-to-script communication.

Says the text supplied in string **msg** on channel supplied in integer **channel**. The message can be heard 20m away, usually (see caveats)

```lsl title="How to use" frame="terminal"
llSay(0, "");
```

## Caveats

- **msg** can only be heard within 20 meters of the speaking prim (rather than the root). This is contrary to how the event [listen](/events/listen/) works, where a **msg** can only be heard by any prim in the object if and only if the root prim is capable of hearing it.
- Some simulators (mostly event sims or linden-owned ones) have `llGetEnv("chat_range")` set to a value other than 20. On these sims:
- `llSay(0, msg)` can be heard in a radius of `llGetEnv("chat_range")`
- `llSay(any_other_channel, msg)` can be heard in a radius of 20m
- as of 2023-03-26, [Hippotropolis](http://maps.secondlife.com/secondlife/Hippotropolis/67/188/28) (a linden meeting sim) has a chat range of 40m
- **msg** can be a maximum of 1024 bytes. This can convey 1024 ASCII characters, or 256-512 multibyte UTF-8 characters such as `á` (2 bytes), `ℋ` (3 bytes) or `🧡` (4 bytes).
- If a multibyte character ends up on the 1024 byte boundary, it is discarded and not split into invalid bytes.
- A prim can **not** hear itself, this to prevent problems with recursion. It can however hear other prims within the same object. Use [llMessageLinked](/functions/llMessageLinked/) instead for intra-prim messaging.

## Examples

<details open>
<summary>Example 1</summary>

```lsl
default
{
    state_entry()
    {
        llSay(0, "Hello, Avatar!");
    }
}
```

</details>

To avoid making your object spam its neighborhood, use [llInstantMessage](/functions/llInstantMessage/), [llOwnerSay](/functions/llOwnerSay/) or [llRegionSayTo](/functions/llRegionSayTo/).

## Notes

- Channel `0` is the [PUBLIC_CHANNEL](/constants/PUBLIC_CHANNEL/). Everyone can hear chat transmitted on this channel. All other channels are private channels (not sent to users, with the exception of [DEBUG_CHANNEL](/constants/DEBUG_CHANNEL/)).
- Consider using [llInstantMessage](/functions/llInstantMessage/), [llOwnerSay](/functions/llOwnerSay/), or the [DEBUG_CHANNEL](/constants/DEBUG_CHANNEL/) for debugging purposes. If [DEBUG_CHANNEL](/constants/DEBUG_CHANNEL/) is used as **channel**, the script will say **msg** to the Script Warning/Error window.
- Note, however, that when using [DEBUG_CHANNEL](/constants/DEBUG_CHANNEL/), what *you* consider to be 'debugging messages' will still be seen by others as *scripting errors* indicated by the floating 'script error' icon.
- If one object 'says' something to another object (*e.g.*, a button that, when touched, turns on a lamp), it is a good idea to use a very negative channel, *e.g.*, `-5243212` but don't just use any number take a look at the [User-Defined Protocols & APIs](https://wiki.secondlife.com/wiki/User-Defined_Protocols_%26_APIs) and choose one that won't interfere with other protocols. If you are going to sell your script widely, please add it to the appropriate [known chat channels list](https://wiki.secondlife.com/wiki/LSL_Protocol#known-negative-chat-channels) so others won't interfere with your product (do keep in mind you should build your product so that it handles interference appropriately).

```lsl
    llSay(-5243212,"turn on");
```

:From at least September 2016 (see [Release Notes/Second Life Release/4.0.9.320038](https://wiki.secondlife.com/wiki/Release_Notes/Second_Life_Release/4.0.9.320038)), viewers have been able to chat on negative channels, although chat from viewers is [limited to 254 characters](https://jira.secondlife.com/browse/BUG-41541). (Chat from objects caps at 1024 bytes, whether the channel is negative or not). Negative channels were popular for script communications because the standard SL client was unable to chat directly on those channels (`/-xxxx message` would not chat `message` on channel `-xxxx`). The only way for a viewer to generate chat on negative channels prior to [llTextBox](/functions/llTextBox/) was to use [llDialog](/functions/llDialog/) which was limited to 24 bytes.

- Be aware that if you mistakenly use an integer bigger than the maximum or smaller than the minimum, SL will treat the literal number as a `float` and convert it implicitly to an out-of-range integer, resulting in `1`, *without* giving a script/syntax error (since this implicit conversion is legitimate). This means that all scripts listening to an out-of-range integer will be listening to channel 1 instead! (see also [llListen](/functions/llListen/)).
- Objects with all-whitespace names (e.g., a space or a series of spaces) will appear as "(Unnamed)" if they emit chat via `llSay`, although this behaviour may vary in third-party viewers.

## See also

### Functions

- [llListen](/functions/llListen/) — Ask for listen events
- [llInstantMessage](/functions/llInstantMessage/) — Sends chat to the owner only (or to some other user only) to avoid spamming the [PUBLIC_CHANNEL](/constants/PUBLIC_CHANNEL/)
- [llOwnerSay](/functions/llOwnerSay/) — Sends chat to the owner only to avoid spamming the [PUBLIC_CHANNEL](/constants/PUBLIC_CHANNEL/)
- [llRegionSay](/functions/llRegionSay/) — Sends chat region wide
- [llRegionSayTo](/functions/llRegionSayTo/) — Sends chat region wide to a specific avatar, or their attachments, or to a rezzed object of known UUID
- [llShout](/functions/llShout/) — Sends chat limited to 100 meters
- [llWhisper](/functions/llWhisper/) — Sends chat limited to 10 meters

### Events

- [listen](/events/listen/) — Receives chat

### Articles

- [Hello Avatar](https://wiki.secondlife.com/wiki/Hello_Avatar)

---

*Source: [LlSay](https://wiki.secondlife.com/wiki/LlSay) on the Second Life Wiki. Content from the Second Life Wiki articles LlSay (revision 1218534, 2025-12-01) and Template:LSL Function/chat (revision 1192932, 2014-08-23), CC BY-SA 3.0.*

---

From lsl.dev: https://lsl.dev/functions/llSay/
