agent-messenger 2.37.2 → 2.38.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +6 -0
- package/dist/package.json +1 -1
- package/dist/src/platforms/discord/cli.d.ts.map +1 -1
- package/dist/src/platforms/discord/cli.js +3 -1
- package/dist/src/platforms/discord/cli.js.map +1 -1
- package/dist/src/platforms/discord/client.d.ts +17 -1
- package/dist/src/platforms/discord/client.d.ts.map +1 -1
- package/dist/src/platforms/discord/client.js +46 -0
- package/dist/src/platforms/discord/client.js.map +1 -1
- package/dist/src/platforms/discord/commands/emoji.d.ts +13 -0
- package/dist/src/platforms/discord/commands/emoji.d.ts.map +1 -0
- package/dist/src/platforms/discord/commands/emoji.js +93 -0
- package/dist/src/platforms/discord/commands/emoji.js.map +1 -0
- package/dist/src/platforms/discord/commands/index.d.ts +2 -0
- package/dist/src/platforms/discord/commands/index.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/index.js +2 -0
- package/dist/src/platforms/discord/commands/index.js.map +1 -1
- package/dist/src/platforms/discord/commands/server.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/server.js +16 -1
- package/dist/src/platforms/discord/commands/server.js.map +1 -1
- package/dist/src/platforms/discord/commands/sticker.d.ts +15 -0
- package/dist/src/platforms/discord/commands/sticker.d.ts.map +1 -0
- package/dist/src/platforms/discord/commands/sticker.js +97 -0
- package/dist/src/platforms/discord/commands/sticker.js.map +1 -0
- package/dist/src/platforms/discord/expression-format.d.ts +41 -0
- package/dist/src/platforms/discord/expression-format.d.ts.map +1 -0
- package/dist/src/platforms/discord/expression-format.js +107 -0
- package/dist/src/platforms/discord/expression-format.js.map +1 -0
- package/dist/src/platforms/discord/expression-names.d.ts +9 -0
- package/dist/src/platforms/discord/expression-names.d.ts.map +1 -0
- package/dist/src/platforms/discord/expression-names.js +33 -0
- package/dist/src/platforms/discord/expression-names.js.map +1 -0
- package/dist/src/platforms/discord/index.d.ts +1 -1
- package/dist/src/platforms/discord/index.d.ts.map +1 -1
- package/dist/src/platforms/discord/index.js.map +1 -1
- package/dist/src/platforms/discord/types.d.ts +29 -0
- package/dist/src/platforms/discord/types.d.ts.map +1 -1
- package/dist/src/platforms/discord/types.js.map +1 -1
- package/dist/src/platforms/slack/cli.d.ts.map +1 -1
- package/dist/src/platforms/slack/cli.js +5 -0
- package/dist/src/platforms/slack/cli.js.map +1 -1
- package/dist/src/platforms/slack/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/auth.js +9 -3
- package/dist/src/platforms/slack/commands/auth.js.map +1 -1
- package/dist/src/platforms/slack/credential-manager.d.ts +2 -0
- package/dist/src/platforms/slack/credential-manager.d.ts.map +1 -1
- package/dist/src/platforms/slack/credential-manager.js +17 -3
- package/dist/src/platforms/slack/credential-manager.js.map +1 -1
- package/docs/content/docs/cli/discord.mdx +73 -0
- package/docs/content/docs/cli/slack.mdx +8 -1
- package/docs/content/docs/sdk/discord.mdx +50 -0
- package/package.json +1 -1
- package/skills/agent-channeltalk/SKILL.md +1 -1
- package/skills/agent-channeltalkbot/SKILL.md +1 -1
- package/skills/agent-discord/SKILL.md +69 -1
- package/skills/agent-discord/references/common-patterns.md +77 -0
- package/skills/agent-discordbot/SKILL.md +1 -1
- package/skills/agent-imessage/SKILL.md +1 -1
- package/skills/agent-instagram/SKILL.md +1 -1
- package/skills/agent-kakaotalk/SKILL.md +1 -1
- package/skills/agent-line/SKILL.md +1 -1
- package/skills/agent-slack/SKILL.md +9 -2
- package/skills/agent-slack/references/authentication.md +12 -0
- package/skills/agent-slack/references/common-patterns.md +18 -0
- package/skills/agent-slackbot/SKILL.md +1 -1
- package/skills/agent-teams/SKILL.md +1 -1
- package/skills/agent-telegram/SKILL.md +1 -1
- package/skills/agent-telegrambot/SKILL.md +1 -1
- package/skills/agent-webex/SKILL.md +1 -1
- package/skills/agent-webexbot/SKILL.md +1 -1
- package/skills/agent-wechatbot/SKILL.md +1 -1
- package/skills/agent-whatsapp/SKILL.md +1 -1
- package/skills/agent-whatsappbot/SKILL.md +1 -1
- package/src/platforms/discord/cli.ts +4 -0
- package/src/platforms/discord/client.test.ts +133 -0
- package/src/platforms/discord/client.ts +72 -0
- package/src/platforms/discord/commands/emoji.test.ts +122 -0
- package/src/platforms/discord/commands/emoji.ts +124 -0
- package/src/platforms/discord/commands/index.ts +2 -0
- package/src/platforms/discord/commands/server.test.ts +45 -1
- package/src/platforms/discord/commands/server.ts +21 -1
- package/src/platforms/discord/commands/sticker.test.ts +118 -0
- package/src/platforms/discord/commands/sticker.ts +135 -0
- package/src/platforms/discord/expression-format.test.ts +107 -0
- package/src/platforms/discord/expression-format.ts +117 -0
- package/src/platforms/discord/expression-names.test.ts +41 -0
- package/src/platforms/discord/expression-names.ts +36 -0
- package/src/platforms/discord/index.ts +2 -0
- package/src/platforms/discord/types.ts +31 -0
- package/src/platforms/slack/cli.test.ts +111 -1
- package/src/platforms/slack/cli.ts +5 -0
- package/src/platforms/slack/commands/auth.ts +14 -3
- package/src/platforms/slack/credential-manager.ts +21 -3
- package/src/platforms/slack/credential-manager.workspace-select.test.ts +70 -0
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { Config, WorkspaceCredentials } from './types.js';
|
|
2
|
+
export declare function setSelectedWorkspaceId(id: string | null): void;
|
|
3
|
+
export declare function getSelectedWorkspaceId(): string | null;
|
|
2
4
|
export declare class SlackCredentialManager {
|
|
3
5
|
private configDir;
|
|
4
6
|
private credentialsPath;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-manager.d.ts","sourceRoot":"","sources":["../../../../src/platforms/slack/credential-manager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"credential-manager.d.ts","sourceRoot":"","sources":["../../../../src/platforms/slack/credential-manager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAQ3D,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAE9D;AAED,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAEtD;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,eAAe,CAAQ;IAE/B,YAAY,SAAS,CAAC,EAAE,MAAM,EAG7B;IAEK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAU5B;IAEK,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKxC;IAEK,YAAY,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAkCpE;IAEK,YAAY,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAI7D;IAEK,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS/C;IAEK,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAInD;CACF;AAED,OAAO,EAAE,sBAAsB,IAAI,iBAAiB,EAAE,CAAA"}
|
|
@@ -2,6 +2,17 @@ import { existsSync } from 'node:fs';
|
|
|
2
2
|
import { chmod, mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
4
|
import { getConfigDir } from '../../shared/utils/config-dir.js';
|
|
5
|
+
// Process-wide workspace selection set from the CLI `--workspace <id>` global flag (see
|
|
6
|
+
// the preAction hook in cli.ts). When present it makes commands target that workspace for
|
|
7
|
+
// this single CLI invocation WITHOUT mutating the persisted current_workspace, so the
|
|
8
|
+
// default (no-flag) path and any long-lived watcher keep resolving to current_workspace.
|
|
9
|
+
let selectedWorkspaceId = null;
|
|
10
|
+
export function setSelectedWorkspaceId(id) {
|
|
11
|
+
selectedWorkspaceId = id;
|
|
12
|
+
}
|
|
13
|
+
export function getSelectedWorkspaceId() {
|
|
14
|
+
return selectedWorkspaceId;
|
|
15
|
+
}
|
|
5
16
|
export class SlackCredentialManager {
|
|
6
17
|
configDir;
|
|
7
18
|
credentialsPath;
|
|
@@ -25,6 +36,9 @@ export class SlackCredentialManager {
|
|
|
25
36
|
await chmod(this.credentialsPath, 0o600);
|
|
26
37
|
}
|
|
27
38
|
async getWorkspace(id) {
|
|
39
|
+
// An explicit id wins; otherwise fall back to the process-wide `--workspace` selection.
|
|
40
|
+
// When neither is set, behaviour is unchanged (resolves to current_workspace below).
|
|
41
|
+
const resolvedId = id ?? selectedWorkspaceId ?? undefined;
|
|
28
42
|
// Check env vars first (take precedence over file-based credentials)
|
|
29
43
|
// Only use env credentials if no specific id requested, or id matches env workspace
|
|
30
44
|
const envToken = process.env.E2E_SLACK_TOKEN;
|
|
@@ -32,7 +46,7 @@ export class SlackCredentialManager {
|
|
|
32
46
|
const envWorkspaceId = process.env.E2E_SLACK_WORKSPACE_ID;
|
|
33
47
|
const envWorkspaceName = process.env.E2E_SLACK_WORKSPACE_NAME;
|
|
34
48
|
if (envToken && envCookie && envWorkspaceId && envWorkspaceName) {
|
|
35
|
-
if (!
|
|
49
|
+
if (!resolvedId || resolvedId === envWorkspaceId) {
|
|
36
50
|
return {
|
|
37
51
|
token: envToken,
|
|
38
52
|
cookie: envCookie,
|
|
@@ -42,8 +56,8 @@ export class SlackCredentialManager {
|
|
|
42
56
|
}
|
|
43
57
|
}
|
|
44
58
|
const config = await this.load();
|
|
45
|
-
if (
|
|
46
|
-
return config.workspaces[
|
|
59
|
+
if (resolvedId) {
|
|
60
|
+
return config.workspaces[resolvedId] ?? null;
|
|
47
61
|
}
|
|
48
62
|
if (!config.current_workspace) {
|
|
49
63
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-manager.js","sourceRoot":"","sources":["../../../../src/platforms/slack/credential-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAG5D,MAAM,OAAO,sBAAsB;IACzB,SAAS,CAAQ;IACjB,eAAe,CAAQ;IAE/B,YAAY,SAAkB;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,YAAY,EAAE,CAAA;QAC5C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAA;IACvE,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YACtC,OAAO;gBACL,iBAAiB,EAAE,IAAI;gBACvB,UAAU,EAAE,EAAE;aACf,CAAA;QACH,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;QAC7D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAW,CAAA;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc;QACvB,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAEhD,MAAM,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QACtE,MAAM,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAA;IAC1C,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAW;QAC5B,qEAAqE;QACrE,oFAAoF;QACpF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAA;QAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAA;QAC9C,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAA;QACzD,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAA;QAE7D,IAAI,QAAQ,IAAI,SAAS,IAAI,cAAc,IAAI,gBAAgB,EAAE,CAAC;YAChE,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"credential-manager.js","sourceRoot":"","sources":["../../../../src/platforms/slack/credential-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -72,6 +72,9 @@ agent-discord server current
|
|
|
72
72
|
agent-discord server info <server-id>
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
+
`server info` reports the server's boost tier alongside its custom emoji and
|
|
76
|
+
sticker counts and the slots still free at that tier.
|
|
77
|
+
|
|
75
78
|
## Commands
|
|
76
79
|
|
|
77
80
|
### Whoami Command
|
|
@@ -182,6 +185,76 @@ agent-discord file list <channel-id>
|
|
|
182
185
|
agent-discord file info <channel-id> <file-id>
|
|
183
186
|
```
|
|
184
187
|
|
|
188
|
+
### Emoji Commands
|
|
189
|
+
|
|
190
|
+
Manage a server's custom emoji.
|
|
191
|
+
|
|
192
|
+
Listing needs no special permission. Creating needs `CREATE_GUILD_EXPRESSIONS`.
|
|
193
|
+
Deleting an expression you created needs either `CREATE_GUILD_EXPRESSIONS` or
|
|
194
|
+
`MANAGE_GUILD_EXPRESSIONS`; deleting someone else's needs `MANAGE_GUILD_EXPRESSIONS`.
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
# List custom emoji, with static and animated counts
|
|
198
|
+
agent-discord emoji list <server-id>
|
|
199
|
+
|
|
200
|
+
# Upload a custom emoji (name defaults to the filename without extension)
|
|
201
|
+
agent-discord emoji create <server-id> <path>
|
|
202
|
+
agent-discord emoji create 123456789 ./potato.png --name potato
|
|
203
|
+
|
|
204
|
+
# Delete a custom emoji
|
|
205
|
+
agent-discord emoji delete <server-id> <emoji-id>
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
An emoji name may only contain letters, digits and underscores, and must be
|
|
209
|
+
2–32 characters. The image must be at most 256KB.
|
|
210
|
+
|
|
211
|
+
The media type is read from the file's own bytes, not its extension, and each
|
|
212
|
+
command accepts only what its endpoint takes — emoji accepts PNG, GIF, JPEG and
|
|
213
|
+
WebP. Anything else is refused before the request, because Discord answers a
|
|
214
|
+
mismatched part with a bare `Invalid Asset`.
|
|
215
|
+
|
|
216
|
+
### Sticker Commands
|
|
217
|
+
|
|
218
|
+
Manage a server's custom stickers.
|
|
219
|
+
|
|
220
|
+
Listing needs no special permission. Creating needs `CREATE_GUILD_EXPRESSIONS`.
|
|
221
|
+
Deleting an expression you created needs either `CREATE_GUILD_EXPRESSIONS` or
|
|
222
|
+
`MANAGE_GUILD_EXPRESSIONS`; deleting someone else's needs `MANAGE_GUILD_EXPRESSIONS`.
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
# List custom stickers
|
|
226
|
+
agent-discord sticker list <server-id>
|
|
227
|
+
|
|
228
|
+
# Upload a custom sticker
|
|
229
|
+
agent-discord sticker create <server-id> <path> --tags <emoji>
|
|
230
|
+
agent-discord sticker create 123456789 ./potato.png --tags 🥔 --name potato --description "A potato"
|
|
231
|
+
|
|
232
|
+
# Delete a custom sticker
|
|
233
|
+
agent-discord sticker delete <server-id> <sticker-id>
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
**Sticker Options:**
|
|
237
|
+
|
|
238
|
+
- `--tags <emoji>` - Unicode emoji this sticker relates to (required)
|
|
239
|
+
- `--name <name>` - Sticker name, 2–30 characters (defaults to the filename)
|
|
240
|
+
- `--description <text>` - Sticker description
|
|
241
|
+
|
|
242
|
+
A sticker image must be a PNG, APNG, GIF or a Lottie JSON document, at most
|
|
243
|
+
512KB — a JPEG or WebP is refused locally, since the sticker endpoint does not
|
|
244
|
+
take them. A JSON sticker must carry a `layers` array, which every Lottie animation has;
|
|
245
|
+
whether it actually renders is Discord's call.
|
|
246
|
+
Animated stickers are capped at 5 seconds. Lottie stickers upload only on
|
|
247
|
+
guilds with the `VERIFIED` or `PARTNERED` feature.
|
|
248
|
+
|
|
249
|
+
Discord documents 320x320 for stickers, but does not appear to enforce it — a
|
|
250
|
+
408x408 PNG uploaded and registered unchanged. The CLI therefore checks the
|
|
251
|
+
file's format, not its dimensions. Keep to 320x320 to be safe.
|
|
252
|
+
|
|
253
|
+
> **Note:** Discord raises both allowances with the server's boost level —
|
|
254
|
+
> static emoji 50/100/150/250 and stickers 5/15/30/60 for boost tiers 0–3.
|
|
255
|
+
> `agent-discord server info <server-id>` reports the tier and the remaining
|
|
256
|
+
> slots.
|
|
257
|
+
|
|
185
258
|
### Snapshot Command
|
|
186
259
|
|
|
187
260
|
Get server overview for AI agents (brief by default):
|
|
@@ -85,11 +85,18 @@ agent-slack workspace remove <workspace-id>
|
|
|
85
85
|
# Check auth status
|
|
86
86
|
agent-slack auth status
|
|
87
87
|
|
|
88
|
-
# Logout from a workspace (defaults to current)
|
|
88
|
+
# Logout from a workspace (defaults to the --workspace selection, then current)
|
|
89
89
|
agent-slack auth logout
|
|
90
90
|
agent-slack auth logout <workspace-id>
|
|
91
|
+
|
|
92
|
+
# Run one command against another workspace without switching
|
|
93
|
+
agent-slack --workspace <workspace-id> channel list
|
|
94
|
+
agent-slack --workspace <workspace-id> auth status
|
|
95
|
+
agent-slack --workspace <workspace-id> auth logout
|
|
91
96
|
```
|
|
92
97
|
|
|
98
|
+
The global `--workspace <id>` flag goes before the command and applies to every command that uses a stored workspace, including `auth status` and `auth logout`. It targets that workspace for this one invocation only and does not change the current workspace. If the id is not stored, `auth status` fails with `Workspace not found: <id>`. `auth extract` and `auth qr` discover workspaces instead of targeting one, so the flag does not affect them; they set the current workspace only when none is set yet.
|
|
99
|
+
|
|
93
100
|
## Commands
|
|
94
101
|
|
|
95
102
|
### Whoami Command
|
|
@@ -125,6 +125,54 @@ const files = await client.listFiles(channelId)
|
|
|
125
125
|
// → DiscordFile[]
|
|
126
126
|
```
|
|
127
127
|
|
|
128
|
+
### Expressions (Emoji and Stickers)
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
// List a guild's custom emoji
|
|
132
|
+
const emojis = await client.listEmojis(guildId)
|
|
133
|
+
// → DiscordEmoji[] { id, name, animated?, managed?, available?, roles?, user? }
|
|
134
|
+
|
|
135
|
+
// Upload a custom emoji. The media type is read from the bytes, not the filename.
|
|
136
|
+
const bytes = new Uint8Array(await readFile('./potato.png'))
|
|
137
|
+
const emoji = await client.createEmoji(guildId, 'potato', bytes, 'potato.png')
|
|
138
|
+
|
|
139
|
+
await client.deleteEmoji(guildId, emoji.id)
|
|
140
|
+
|
|
141
|
+
// List a guild's custom stickers
|
|
142
|
+
const stickers = await client.listStickers(guildId)
|
|
143
|
+
// → DiscordSticker[] { id, name, tags, type, format_type, description?, ... }
|
|
144
|
+
// type: STANDARD = 1, GUILD = 2. format_type: PNG = 1, APNG = 2, LOTTIE = 3, GIF = 4.
|
|
145
|
+
|
|
146
|
+
// Upload a custom sticker. `tags` is the unicode emoji it relates to.
|
|
147
|
+
const sticker = await client.createSticker(
|
|
148
|
+
guildId,
|
|
149
|
+
{ name: 'potato', description: 'A potato', tags: '🥔' },
|
|
150
|
+
bytes,
|
|
151
|
+
'potato.png',
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
await client.deleteSticker(guildId, sticker.id)
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
These methods take image bytes rather than a path, so the caller decides how the
|
|
158
|
+
image is read. The media type the upload declares is read from the bytes
|
|
159
|
+
themselves — a filename is unverified input, and Discord refuses a part whose
|
|
160
|
+
declared type does not match its content with a bare `Invalid Asset`.
|
|
161
|
+
|
|
162
|
+
Each endpoint takes its own formats: emoji accepts PNG, GIF, JPEG and WebP;
|
|
163
|
+
stickers accept PNG (including APNG), GIF and a JSON document for Lottie.
|
|
164
|
+
Bytes that are not one of the target endpoint's formats throw a `DiscordError`
|
|
165
|
+
with code `unsupported_asset` before any request is made. A sticker's JSON must
|
|
166
|
+
carry the `layers` array every Lottie animation has — `{}` is otherwise sent and
|
|
167
|
+
refused as `Invalid Asset`. Whether the animation renders is Discord's call, and
|
|
168
|
+
Lottie uploads need a `VERIFIED` or `PARTNERED` guild.
|
|
169
|
+
|
|
170
|
+
Listing needs no special permission. Creating needs `CREATE_GUILD_EXPRESSIONS`.
|
|
171
|
+
Deleting an expression you created needs either `CREATE_GUILD_EXPRESSIONS` or
|
|
172
|
+
`MANAGE_GUILD_EXPRESSIONS`; deleting someone else's needs `MANAGE_GUILD_EXPRESSIONS`. `getServer(guildId)`
|
|
173
|
+
returns `premium_tier` with the guild's `emojis` and `stickers`, which is how
|
|
174
|
+
you find out how many slots remain.
|
|
175
|
+
|
|
128
176
|
### Direct Messages
|
|
129
177
|
|
|
130
178
|
```typescript
|
|
@@ -369,6 +417,8 @@ const credentials = await manager.getCredentials()
|
|
|
369
417
|
import type {
|
|
370
418
|
DiscordGuild,
|
|
371
419
|
DiscordChannel,
|
|
420
|
+
DiscordEmoji,
|
|
421
|
+
DiscordSticker,
|
|
372
422
|
DiscordMessage,
|
|
373
423
|
DiscordUser,
|
|
374
424
|
DiscordDMChannel,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-messenger",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.38.1",
|
|
4
4
|
"description": "Multi-platform messaging CLI for AI agents (Slack, Discord, Teams, Webex, Telegram, Telegram Bot, WhatsApp, LINE, iMessage, Instagram, KakaoTalk, Channel Talk)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agent-channeltalk
|
|
3
3
|
description: Interact with Channel Talk using extracted desktop app or browser credentials - read chats, send messages, search messages, manage groups
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.38.1
|
|
5
5
|
allowed-tools: Bash(agent-channeltalk:*)
|
|
6
6
|
metadata:
|
|
7
7
|
openclaw:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agent-discord
|
|
3
3
|
description: Interact with Discord servers - send messages, read channels, manage reactions
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.38.1
|
|
5
5
|
allowed-tools: Bash(agent-discord:*)
|
|
6
6
|
metadata:
|
|
7
7
|
openclaw:
|
|
@@ -241,6 +241,9 @@ agent-discord server switch <server-id>
|
|
|
241
241
|
agent-discord server current
|
|
242
242
|
```
|
|
243
243
|
|
|
244
|
+
`server info` also reports the boost tier with the custom emoji and sticker
|
|
245
|
+
counts and the slots still free at that tier.
|
|
246
|
+
|
|
244
247
|
### User Commands
|
|
245
248
|
|
|
246
249
|
```bash
|
|
@@ -383,6 +386,54 @@ agent-discord file list <channel-id>
|
|
|
383
386
|
agent-discord file info <channel-id> <file-id>
|
|
384
387
|
```
|
|
385
388
|
|
|
389
|
+
### Emoji Commands
|
|
390
|
+
|
|
391
|
+
Creating needs `CREATE_GUILD_EXPRESSIONS`; deleting someone else's expression
|
|
392
|
+
needs `MANAGE_GUILD_EXPRESSIONS`; listing needs neither. Name: letters, digits
|
|
393
|
+
and underscores only, 2–32 characters. Image at most 256KB.
|
|
394
|
+
|
|
395
|
+
```bash
|
|
396
|
+
# List custom emoji
|
|
397
|
+
agent-discord emoji list <server-id>
|
|
398
|
+
|
|
399
|
+
# Upload (name defaults to the filename without extension)
|
|
400
|
+
agent-discord emoji create <server-id> <path>
|
|
401
|
+
agent-discord emoji create 1234567890123456789 ./potato.png --name potato
|
|
402
|
+
|
|
403
|
+
# Delete
|
|
404
|
+
agent-discord emoji delete <server-id> <emoji-id>
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
### Sticker Commands
|
|
408
|
+
|
|
409
|
+
Same permissions as emoji. PNG, APNG, GIF or Lottie JSON, at most 512KB. Name
|
|
410
|
+
2–30 characters. Lottie needs a `VERIFIED` or `PARTNERED` guild. Discord
|
|
411
|
+
documents 320x320 but accepted a 408x408 PNG, so the CLI does not enforce a
|
|
412
|
+
size — it checks the format from the file's bytes instead of its extension.
|
|
413
|
+
|
|
414
|
+
```bash
|
|
415
|
+
# List custom stickers
|
|
416
|
+
agent-discord sticker list <server-id>
|
|
417
|
+
|
|
418
|
+
# Upload — --tags is the unicode emoji the sticker relates to
|
|
419
|
+
agent-discord sticker create <server-id> <path> --tags <emoji>
|
|
420
|
+
agent-discord sticker create 1234567890123456789 ./potato.png --tags 🥔 --name potato
|
|
421
|
+
|
|
422
|
+
# Delete
|
|
423
|
+
agent-discord sticker delete <server-id> <sticker-id>
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
The media type is read from the file's bytes, not its extension, and each
|
|
427
|
+
command takes only its endpoint's formats — emoji accepts PNG, GIF, JPEG and
|
|
428
|
+
WebP; stickers accept PNG, APNG, GIF and a JSON document for Lottie. Anything
|
|
429
|
+
else fails locally with a named error before a request is sent, so a batch says
|
|
430
|
+
which file was wrong instead of returning a bare `Invalid Asset`.
|
|
431
|
+
|
|
432
|
+
Check the remaining slots before a batch upload — `agent-discord server info
|
|
433
|
+
<server-id>` reports the boost tier with the counts and free slots. Discord
|
|
434
|
+
raises both allowances with the boost level: static emoji 50/100/150/250 and
|
|
435
|
+
stickers 5/15/30/60 for tiers 0–3.
|
|
436
|
+
|
|
386
437
|
### Snapshot Command
|
|
387
438
|
|
|
388
439
|
Get server overview for AI agents (brief by default):
|
|
@@ -480,6 +531,23 @@ Common errors:
|
|
|
480
531
|
- `No current server set`: Run `server switch <id>` first
|
|
481
532
|
- `Message not found`: Invalid message ID
|
|
482
533
|
- `Unknown Channel`: Invalid channel ID
|
|
534
|
+
- `File is not one of ...`: The file's bytes match no format this endpoint
|
|
535
|
+
takes. Refused locally — the request was never sent, so retrying is pointless.
|
|
536
|
+
- `File is a <format>; this endpoint takes ...`: The file is a real image, but
|
|
537
|
+
not one this endpoint accepts — a JPEG or WebP sticker, or a JSON emoji.
|
|
538
|
+
Convert it; also refused locally.
|
|
539
|
+
- `Emoji name may only contain ...` / `... name must be at least 2 characters`:
|
|
540
|
+
The name broke Discord's rules and was refused locally. Names come from the
|
|
541
|
+
filename unless `--name` is given, so `potato-13.png` fails on the hyphen.
|
|
542
|
+
- `JSON file is not a Lottie animation (no layers array)` / `... is not valid
|
|
543
|
+
JSON` / `... is not valid UTF-8`: A JSON sticker that cannot be an animation.
|
|
544
|
+
Each names its own fault, because a file can carry a `layers` array and still
|
|
545
|
+
be broken. All three are refused locally; Discord answers such a file with a
|
|
546
|
+
bare `Invalid Asset`.
|
|
547
|
+
- `Invalid Asset` (from Discord): The format was accepted locally but Discord
|
|
548
|
+
refused the content itself — a truncated or corrupt image.
|
|
549
|
+
- `Maximum number of stickers reached (N)` (from Discord): No slots left. Check
|
|
550
|
+
`server info` for the tier's allowance before a batch.
|
|
483
551
|
|
|
484
552
|
## Configuration
|
|
485
553
|
|
|
@@ -333,6 +333,83 @@ agent-discord channel list
|
|
|
333
333
|
|
|
334
334
|
**When to use**: Managing multiple servers, cross-server operations.
|
|
335
335
|
|
|
336
|
+
## Pattern 11: Bulk Upload Custom Emoji
|
|
337
|
+
|
|
338
|
+
**Use case**: Register a folder of images as server emoji without running out of slots halfway through
|
|
339
|
+
|
|
340
|
+
```bash
|
|
341
|
+
#!/bin/bash
|
|
342
|
+
|
|
343
|
+
SERVER_ID="123456789012345678"
|
|
344
|
+
|
|
345
|
+
# Check the allowance first — Discord raises it with the boost level,
|
|
346
|
+
# so the free slots depend on premium_tier, not a fixed number.
|
|
347
|
+
INFO=$(agent-discord server info "$SERVER_ID")
|
|
348
|
+
FREE=$(echo "$INFO" | jq -r '.static_emoji_slots_remaining')
|
|
349
|
+
echo "Free emoji slots: $FREE"
|
|
350
|
+
|
|
351
|
+
UPLOADED=0
|
|
352
|
+
for FILE in ./emoji/*.png; do
|
|
353
|
+
if [ "$UPLOADED" -ge "$FREE" ]; then
|
|
354
|
+
echo "Out of slots — stopping. Remaining files were not uploaded."
|
|
355
|
+
break
|
|
356
|
+
fi
|
|
357
|
+
|
|
358
|
+
# The name defaults to the filename without its extension, and Discord only
|
|
359
|
+
# accepts letters, digits and underscores. Rename potato-01.png beforehand,
|
|
360
|
+
# or pass --name.
|
|
361
|
+
RESULT=$(agent-discord emoji create "$SERVER_ID" "$FILE")
|
|
362
|
+
|
|
363
|
+
if echo "$RESULT" | jq -e '.success' > /dev/null 2>&1; then
|
|
364
|
+
UPLOADED=$((UPLOADED + 1))
|
|
365
|
+
else
|
|
366
|
+
echo "Failed on $FILE: $(echo "$RESULT" | jq -r '.error')"
|
|
367
|
+
fi
|
|
368
|
+
done
|
|
369
|
+
|
|
370
|
+
echo "Uploaded $UPLOADED emoji"
|
|
371
|
+
agent-discord emoji list "$SERVER_ID" | jq '{count, static_count}'
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
**Notes**:
|
|
375
|
+
|
|
376
|
+
- `emoji create` rejects a name outside Discord's rules before the request, so a
|
|
377
|
+
bad filename names itself instead of returning `Invalid Form Body`.
|
|
378
|
+
- Roll back a mistake with `agent-discord emoji delete <server-id> <emoji-id>`.
|
|
379
|
+
|
|
380
|
+
## Pattern 12: Upload a Server Sticker
|
|
381
|
+
|
|
382
|
+
**Use case**: Add a sticker, which has a stricter format than emoji
|
|
383
|
+
|
|
384
|
+
```bash
|
|
385
|
+
#!/bin/bash
|
|
386
|
+
|
|
387
|
+
SERVER_ID="123456789012345678"
|
|
388
|
+
|
|
389
|
+
# Discord documents 320x320 for stickers (it accepted a larger PNG in
|
|
390
|
+
# practice, but stay on spec). Max 512KB.
|
|
391
|
+
sips -z 320 320 ./art/potato.png --out /tmp/potato_320.png
|
|
392
|
+
|
|
393
|
+
# --tags is the unicode emoji the sticker relates to, and is required.
|
|
394
|
+
RESULT=$(agent-discord sticker create "$SERVER_ID" /tmp/potato_320.png \
|
|
395
|
+
--tags 🥔 --name potato --description "A potato")
|
|
396
|
+
|
|
397
|
+
if echo "$RESULT" | jq -e '.success' > /dev/null 2>&1; then
|
|
398
|
+
echo "Sticker id: $(echo "$RESULT" | jq -r '.id')"
|
|
399
|
+
else
|
|
400
|
+
echo "Failed: $(echo "$RESULT" | jq -r '.error')"
|
|
401
|
+
fi
|
|
402
|
+
|
|
403
|
+
agent-discord sticker list "$SERVER_ID"
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
**Notes**:
|
|
407
|
+
|
|
408
|
+
- Base sticker slots are 5, rising to 15/30/60 with boost tiers 1/2/3.
|
|
409
|
+
`agent-discord server info` reports `sticker_slots_remaining`.
|
|
410
|
+
- Sticker names are 2–30 characters. A one-character name is refused locally.
|
|
411
|
+
- Lottie JSON uploads only on `VERIFIED` or `PARTNERED` guilds.
|
|
412
|
+
|
|
336
413
|
## Best Practices
|
|
337
414
|
|
|
338
415
|
### 1. Always Get Channel IDs First
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agent-slack
|
|
3
3
|
description: Interact with Slack workspaces - send messages, read channels, manage reactions
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.38.1
|
|
5
5
|
allowed-tools: Bash(agent-slack:*)
|
|
6
6
|
metadata:
|
|
7
7
|
openclaw:
|
|
@@ -74,8 +74,14 @@ agent-slack workspace remove <workspace-id>
|
|
|
74
74
|
|
|
75
75
|
# Check auth status
|
|
76
76
|
agent-slack auth status
|
|
77
|
+
|
|
78
|
+
# Run one command against another workspace without switching
|
|
79
|
+
agent-slack --workspace <workspace-id> channel list
|
|
80
|
+
agent-slack --workspace <workspace-id> auth status
|
|
77
81
|
```
|
|
78
82
|
|
|
83
|
+
The global `--workspace <id>` flag goes before the command and applies to every command that uses a stored workspace, including `auth status` and `auth logout`. It targets that workspace for this one invocation only and does not change the current workspace. If the id is not stored, `auth status` fails with `Workspace not found: <id>`. `auth extract` and `auth qr` discover workspaces instead of targeting one, so the flag does not affect them; they set the current workspace only when none is set yet.
|
|
84
|
+
|
|
79
85
|
## Memory
|
|
80
86
|
|
|
81
87
|
The agent maintains a `~/.config/agent-messenger/MEMORY.md` file as persistent memory across sessions. This is agent-managed — the CLI does not read or write this file. Use the `Read` and `Write` tools to manage your memory file.
|
|
@@ -171,9 +177,10 @@ agent-slack auth qr --debug # show each redirect hop for troubleshooting
|
|
|
171
177
|
# Check auth status
|
|
172
178
|
agent-slack auth status
|
|
173
179
|
|
|
174
|
-
# Logout from a workspace (defaults to current)
|
|
180
|
+
# Logout from a workspace (defaults to the --workspace selection, then current)
|
|
175
181
|
agent-slack auth logout
|
|
176
182
|
agent-slack auth logout <workspace-id>
|
|
183
|
+
agent-slack --workspace <workspace-id> auth logout
|
|
177
184
|
```
|
|
178
185
|
|
|
179
186
|
### Whoami Command
|
|
@@ -152,6 +152,18 @@ agent-slack workspace switch T789012
|
|
|
152
152
|
|
|
153
153
|
All subsequent commands will use the selected workspace until you switch again.
|
|
154
154
|
|
|
155
|
+
### Use a Workspace for One Command
|
|
156
|
+
|
|
157
|
+
Pass the global `--workspace <id>` flag before the command to target another workspace for a single invocation without switching:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
agent-slack --workspace T789012 channel list
|
|
161
|
+
agent-slack --workspace T789012 auth status
|
|
162
|
+
agent-slack --workspace T789012 auth logout
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
The flag applies to every command that uses a stored workspace, including `auth status` and `auth logout`, and does not change `current_workspace`. `auth extract` and `auth qr` discover workspaces instead of targeting one, so the flag does not affect them; they set `current_workspace` only when none is set yet. `auth logout` removes the selected workspace when no positional id is given (a positional id still wins), and `auth status` fails with `Workspace not found: <id>` if the selected id is not stored.
|
|
166
|
+
|
|
155
167
|
### Current Workspace
|
|
156
168
|
|
|
157
169
|
Check which workspace is active:
|
|
@@ -612,6 +612,24 @@ agent-slack reminder complete Rm001
|
|
|
612
612
|
agent-slack reminder delete Rm002
|
|
613
613
|
```
|
|
614
614
|
|
|
615
|
+
## Pattern: Work Across Workspaces
|
|
616
|
+
|
|
617
|
+
**Use case**: Read or act in a second workspace without changing the current one
|
|
618
|
+
|
|
619
|
+
```bash
|
|
620
|
+
#!/bin/bash
|
|
621
|
+
|
|
622
|
+
# The global --workspace flag targets one workspace for a single command
|
|
623
|
+
agent-slack --workspace T789012 auth status
|
|
624
|
+
agent-slack --workspace T789012 channel list
|
|
625
|
+
agent-slack --workspace T789012 message send general "Cross-workspace update"
|
|
626
|
+
|
|
627
|
+
# The current workspace is unchanged afterwards
|
|
628
|
+
agent-slack workspace current
|
|
629
|
+
```
|
|
630
|
+
|
|
631
|
+
**When to use**: Occasional commands in another workspace. Use `workspace switch` only when the default should change for every later command.
|
|
632
|
+
|
|
615
633
|
## See Also
|
|
616
634
|
|
|
617
635
|
- [Authentication Guide](authentication.md) - Setting up credentials
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agent-webexbot
|
|
3
3
|
description: Interact with Cisco Webex using bot tokens - send messages, reply in threads, upload and download files, look up people, read spaces, manage memberships, stream real-time events
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.38.1
|
|
5
5
|
allowed-tools: Bash(agent-webexbot:*)
|
|
6
6
|
metadata:
|
|
7
7
|
openclaw:
|