slick react¶
Add, remove, or list emoji reactions on a known message. Requires
reactions:write for mutating commands and reactions:read for list.
slick react add add a Slack reaction
slick react remove remove a Slack reaction
slick react list List Slack reactions
react add / react remove¶
slick react add --channel C1234567890 --timestamp 1746284582.123456 --emoji :thumbsup:
slick react remove --channel C1234567890 --timestamp 1746284582.123456 --emoji :thumbsup:
# Multiple emoji in order (applied or removed left-to-right)
slick react add --channel C1234567890 --timestamp 1746284582.123456 \
--emoji thumbsup,white_check_mark,rocket
# Preview without mutating
slick react add --channel C1234567890 --timestamp 1746284582.123456 \
--emoji :thumbsup: --dry-run
Flags¶
-c, --channel <CHANNEL> Channel ID, name, or alias
-t, --timestamp <TS> Message timestamp
-e, --emoji <NAME>… Emoji name; repeat or comma-separate to apply multiple in order
-n, --dry-run Preview without mutating
Emoji names accept both thumbsup and :thumbsup: forms. Ordered
multi-emoji halts on the first failure; data.mutations[] is absent on the
error envelope, so retry the remaining emojis from a known-good state rather
than assuming partial success.
Output¶
Human (real, single emoji — no dry_run field):
Human (--dry-run, single emoji):
Human (real, multiple emoji — one event line per emoji, in argument order):
Reaction added channel=C7N2Q8L4P ts=1746284582.123456 emoji=rocket
Reaction added channel=C7N2Q8L4P ts=1746284582.123456 emoji=white_check_mark
Human (react remove):
JSON envelope:
{
"data": {
"mutations": [
{"channel": "C7N2Q8L4P", "ts": "1746284582.123456", "emoji": "thumbsup", "dry_run": true}
],
"target": {"channel": "C7N2Q8L4P", "ts": "1746284582.123456"}
}
}
meta.command (react.add vs react.remove) distinguishes the two paths.
The removed action-result bool was dropped in v0.4.0; the action label and
errors[] carry the same signal.
react list¶
Flags¶
Output¶
Human mode renders a primer table:
JSON envelope. Slack normalises some emoji aliases to their canonical
names in the response (e.g. thumbsup → +1, thumbsdown → -1); the
name field reflects Slack's canonical form, not necessarily the alias
you passed to react add:
{
"data": {
"reactions": [
{"name": "+1", "count": 3, "users": ["U123", "U456", "U789"]},
{"name": "white_check_mark", "count": 1, "users": ["U123"]}
],
"target": {"channel": "C1234567890", "ts": "1746284582.123456"}
}
}
Common errors¶
| Error | Cause | Fix |
|---|---|---|
invalid_name: Slack does not recognize that emoji name (validation, exit 4) |
The emoji name is not a custom workspace emoji and not a recognised Slack default. | Check spelling; try with/without colons; verify in the Slack composer. |
already_reacted (validation, exit 4) |
This emoji is already on the message from the same user. | Skip; treat as idempotent success at the caller. |
no_reaction (not_found, exit 2) |
react remove cannot find that emoji on the message. |
Confirm with react list before removing. |
too_many_reactions (validation, exit 4) |
Slack message reaction limit reached. | Cannot work around; surface to user. |
not_in_channel (not_found, exit 2) |
App/user is not a member of the target channel. | Add the bot, or use a user-token profile. |
See also¶
message— send the message before reacting to it.history— look up the timestamp.- Slack API methods:
reactions.add,reactions.remove,reactions.get.