Browse API 1 documentation
grove.reply()
Reply using a message's peer, channel, and optional IRC message ID.
Signature
grove.reply(message: { kind: 'channel' | 'dm'; from: string; channel?: string; id?: string }, text: string, options?: { receipt?: string }): void
Availability
IRC-bound runtimes; same restrictions as grove.send(). A DM reply requires query.send and an existing query. A channel reply uses an explicit channel and requires server scope plus network.send in the current implementation.
Parameters
| Parameter | Required | Description |
|---|---|---|
message |
Yes | The original message event payload. Use its original kind, from, channel, and id. |
message.kind |
Yes | dm routes to from; channel routes to channel. |
message.from |
Yes | Peer nickname for a DM. |
message.channel |
For channel | Confirmed joined channel name. |
message.id |
No | IRC message ID used as reply context when supported by the native send path. |
text |
Yes | Ordinary message text; the send validation and trimming rules apply. |
options.receipt |
No | UUID for messageEcho correlation. |
Options do not support to, channel, or open overrides. The facade derives the target solely from message.
Return value
Returns undefined; no acknowledgement Promise.
Behavior and errors
The facade always forwards message.channel as an explicit target. Consequently, a conversation-bound channel instance cannot currently use this helper even for its own channel; use grove.send(text) there, which sends without reply metadata. This is a current API 1 implementation limitation.
Invalid destinations, missing permissions, malformed receipts, and CTCP-framed text are refused as for send. A supplied message object is not permission to access its destination.
Example
// Server-scoped runtime with channel.read and network.send.
grove.on('message', message => {
if (!message.own && message.kind === 'channel' && message.text === '!hello') {
grove.reply(message, 'Hello!')
}
})