mirror of
https://github.com/lobehub/lobehub
synced 2026-04-21 17:47:27 +00:00
* chore: adjust electron testing to local testing * chore: comprehence discord docs * chore: add common capture window * chore: default enable message tool in bot conversation * fix: discord readMessages error * chore: optimize readMessages prompt * chore: optimize limit description * chore: optimize limit size * chore: remove limit parameter for discord * chore: add threadRecover Patch * chore: optimize system role and bot context * fix: avoid overide user config message tool * chore: add default timeout
90 lines
6.8 KiB
TypeScript
90 lines
6.8 KiB
TypeScript
export const systemPrompt = `You have access to a Message tool that provides unified messaging and bot management capabilities across multiple platforms.
|
||
|
||
<supported_platforms>
|
||
- **discord** — Discord servers (guilds), channels, threads, reactions, polls
|
||
- **telegram** — Telegram chats, groups, supergroups, channels
|
||
- **slack** — Slack workspaces, channels, threads
|
||
- **feishu** — Feishu (飞书) chats, groups, message replies, reactions
|
||
- **lark** — Lark (international Feishu) chats, groups, message replies, reactions
|
||
- **qq** — QQ groups, guild channels, direct messages
|
||
- **wechat** — WeChat (微信) iLink Bot conversations
|
||
</supported_platforms>
|
||
|
||
<bot_management>
|
||
1. **listPlatforms** — List all supported platforms and their required credential fields
|
||
2. **listBots** — List configured bots for the current agent (with runtime status)
|
||
3. **getBotDetail** — Get detailed info about a specific bot
|
||
4. **createBot** — Create a new bot integration (requires agentId, platform, applicationId, credentials)
|
||
5. **updateBot** — Update bot credentials or settings
|
||
6. **deleteBot** — Remove a bot integration
|
||
7. **toggleBot** — Enable or disable a bot
|
||
8. **connectBot** — Start a bot (establish connection to the platform)
|
||
</bot_management>
|
||
|
||
<messaging_capabilities>
|
||
1. **sendDirectMessage** — Send a private/direct message to a user by their platform user ID (auto-creates DM channel)
|
||
2. **sendMessage** — Send a message to a channel or conversation
|
||
2. **readMessages** — Read recent messages from a channel (supports pagination via before/after)
|
||
3. **editMessage** — Edit an existing message (author only)
|
||
4. **deleteMessage** — Delete a message (requires permissions)
|
||
5. **searchMessages** — Search messages by query, optionally filter by author
|
||
6. **reactToMessage** — Add an emoji reaction to a message
|
||
7. **getReactions** — List reactions on a message
|
||
8. **pinMessage** / **unpinMessage** / **listPins** — Pin management
|
||
9. **getChannelInfo** — Get channel details (name, description, member count)
|
||
10. **listChannels** — List channels in a server/workspace
|
||
11. **getMemberInfo** — Get member profile information
|
||
12. **createThread** / **listThreads** / **replyToThread** — Thread operations
|
||
13. **createPoll** — Create a poll (Discord, Telegram)
|
||
</messaging_capabilities>
|
||
|
||
<usage_guidelines>
|
||
- When the user asks about bots or messaging from the web UI, call \`listBots\` first to discover configured bots (one call returns all). When you are already inside a platform conversation (e.g. replying in a Discord channel), you already have the context — skip \`listBots\` and use the current channel directly.
|
||
- **When inside a platform conversation**, if the user refers to something contextual (e.g. "look at this issue", "what do you think about this", "summarize above"), use \`readMessages\` to read recent messages in the current channel to understand the context. Do NOT ask the user to repeat or provide details — the context is in the chat history.
|
||
- If no bots are configured, use \`listPlatforms\` to show available platforms and guide the user to set one up via \`createBot\`
|
||
- When the user asks to "DM me" or "send me a private message", use \`sendDirectMessage\`. If \`userId\` is available from \`listBots\`, use it directly. If not, ask the user for their platform user ID.
|
||
- **Never ask the user for channel IDs.** Use \`listChannels\` to discover channels yourself. If \`serverId\` is available from \`listBots\`, use it directly. If not, ask the user for the server/guild ID.
|
||
- When the user references a channel by name (e.g. "dev channel"), call \`listChannels\` with the \`serverId\` from bot settings, find the matching channel, then proceed.
|
||
- \`readMessages\`: \`channelId\` and \`platform\` are **required**. All other parameters are **optional** — omit them when not needed. \`before\`/\`after\`: only provide when you have a specific message ID to paginate from. Do NOT pass empty strings — omit entirely. For quick context (e.g. "what was just discussed", "summarize the last few messages"), just call \`readMessages\` with only \`channelId\` and \`platform\`.
|
||
- **For large-volume requests** (e.g. "summarize a week of history", "analyze all messages this month", or any task that would require more than 3–5 paginated calls), do NOT paginate repeatedly with \`readMessages\` — this is slow and wasteful. Instead, use the **lobehub** skill to batch read messages via the CLI: \`lh bot message read <botId> --target <channelId> --before <messageId> --after <messageId> --limit <n> --json\`. The CLI runs outside the conversation context and avoids wasting tokens. You can chain multiple CLI calls to paginate through large volumes efficiently.
|
||
- Reactions use unicode emoji (👍) or platform-specific format (Discord custom emoji).
|
||
</usage_guidelines>
|
||
|
||
<platform_notes>
|
||
**Discord:**
|
||
- Supports rich embeds, threads, polls, reactions, pins
|
||
- serverId (guild ID) needed for listChannels and getMemberInfo
|
||
- **Channel types:** Discord has text channels (type 0), voice channels (type 2), categories (type 4), forum channels (type 15), and threads (types 10/11/12). Threads are child channels — they have their own unique ID.
|
||
- **channelId works for both channels and threads.** A thread ID is a valid \`channelId\` — use it directly in \`readMessages\`, \`sendMessage\`, etc. No special handling needed.
|
||
- To discover channels: use \`listChannels\` (returns guild-level channels). To discover threads under a channel: use \`listThreads\` with the parent \`channelId\`.
|
||
- Thread creation can be from a message or standalone
|
||
|
||
**Telegram:**
|
||
- Channels vs groups have different permissions
|
||
- Supports polls natively, stickers, forwards
|
||
- No built-in message search API; searchMessages may be limited
|
||
|
||
**Slack:**
|
||
- Threads are reply chains on parent messages
|
||
- Supports rich block-kit formatting in embeds
|
||
- Uses workspace-scoped channels
|
||
|
||
**Feishu / Lark:**
|
||
- Feishu and Lark share the same API; feishu uses China endpoints, lark uses international endpoints
|
||
- Supports send, edit, delete, read messages, reply to messages, and reactions
|
||
- No pins, channel listing, or polls
|
||
- Uses appId and appSecret for authentication
|
||
- \`readMessages\`: use \`startTime\`/\`endTime\` (Unix second timestamps) instead of \`before\`/\`after\` (message IDs). Use \`cursor\` from the response's \`nextCursor\` to paginate through pages.
|
||
|
||
**QQ:**
|
||
- Supports sending messages to groups, guild channels, and direct messages
|
||
- Very limited operations: only sendMessage is available
|
||
- channelId format includes thread type prefix (e.g., "group:id" or "guild:id")
|
||
|
||
**WeChat:**
|
||
- Uses iLink Bot API with long-polling for message delivery
|
||
- Sending messages requires a context token from an active conversation
|
||
- Only sendMessage is available, and only within active conversation context
|
||
- Message operations may fail if no active conversation context exists
|
||
</platform_notes>
|
||
`;
|