mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-04-08 03:00:28 -04:00
feat(backend): add more discord blocks support (#10586)
# Enhanced Discord Integration Blocks Introduces new blocks for sending DMs, embeds, files, and replies in Discord, as well as blocks for retrieving user and channel information. Enhances existing message blocks with additional metadata fields and server/channel identification. Improves test coverage and input/output schemas for all Discord-related blocks. Co-Authored-By: Claude <claude@users.noreply.github.com> ## Why These Changes Are Needed 🎯 The existing Discord integration was limited to basic message sending and reading. Users needed more sophisticated Discord functionality to build comprehensive automation workflows: 1. **Limited messaging options** - Could only send plain text to channels, no DMs, embeds, or file attachments 2. **Poor graph connectivity** - Blocks didn't output IDs needed for chaining operations (e.g., couldn't reply to a message after sending it) 3. **No user management** - Couldn't get user information or send direct messages 4. **Type safety issues** - Discord.py's incomplete type hints caused linting errors 5. **No channel resolution** - Had to manually find channel IDs instead of using names ### Changes 🏗️ #### New Blocks Added - **SendDiscordDMBlock** - Send direct messages to users via their Discord ID - **SendDiscordEmbedBlock** - Create rich embedded messages with images, fields, and formatting - **SendDiscordFileBlock** - Upload any file type (images, PDFs, videos, etc.) using MediaFileType - **ReplyToDiscordMessageBlock** - Reply to specific messages in threads - **DiscordUserInfoBlock** - Retrieve user profile information (username, avatar, creation date, etc.) - **DiscordChannelInfoBlock** - Resolve channel names to IDs and get channel metadata #### Enhanced Existing Blocks - **ReadDiscordMessagesBlock**: - Now outputs: `message_id`, `channel_id`, `user_id` (previously missing all IDs) - Enables workflows like: read message → reply to it, or read message → DM the author - **SendDiscordMessageBlock**: - Now outputs: `message_id`, `channel_id` (previously had no outputs except status) - Enables tracking sent messages and replying to them later #### Technical Improvements - **MediaFileType Support**: SendDiscordFileBlock accepts data URIs, URLs, or local paths - **Defensive Programming**: Added runtime type checks for Discord.py's incomplete typing - **ID Passthrough**: DiscordUserInfoBlock passes through user_id for chaining - **Better Error Messages**: Clear feedback when operations fail (e.g., "Channel cannot receive messages") - **Channel Flexibility**: Blocks accept both channel names and IDs ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: #### Test Plan 🧪 - [x] **Import and initialization**: All 8 Discord blocks import and initialize without errors - [x] **Type checking**: `poetry run format` passes with no type errors - [x] **Interface connectivity**: Verified blocks can chain together: - [x] ReadDiscordMessages → ReplyToDiscordMessage (via message_id, channel_id) - [x] ReadDiscordMessages → SendDiscordDM (via user_id) - [x] SendDiscordMessage → ReplyToDiscordMessage (via message_id, channel_id) - [x] DiscordUserInfo → SendDiscordDM (via user_id passthrough) - [x] DiscordChannelInfo → SendDiscordEmbed/File (via channel_id) - [x] **MediaFileType handling**: SendDiscordFileBlock correctly processes: - [x] Data URIs (base64 encoded files) - [x] URLs (downloads from web) - [x] Local paths (from other blocks) - [x] **Defensive checks**: Verified error handling for: - [x] Non-text channels (forums, categories) - [x] Private/DM channels without guilds - [x] Missing attributes on channel objects - [x] **Mock test data**: All blocks have appropriate test inputs/outputs defined ## Example Workflows Now Possible 🚀 1. **Auto-reply to mentions**: Read messages → Check if bot mentioned → Reply in thread 2. **File distribution**: Generate report → Send as PDF to Discord channel 3. **User notifications**: Get user info → Check if online → Send DM with alert 4. **Cross-platform sync**: Receive email attachment → Forward to Discord channel 5. **Rich notifications**: Create embed with thumbnail → Add fields → Send to announcement channel ## Breaking Changes ⚠️ None - all changes are backward compatible. Existing workflows using SendDiscordMessageBlock and ReadDiscordMessagesBlock will continue to work, they just now have additional outputs available. ## Dependencies 📦 No new dependencies added. Uses existing: - `discord.py` (already in project) - `aiohttp` (already in project) - Backend utilities: `MediaFileType`, `store_media_file` (already in project) --------- Co-authored-by: Claude <claude@users.noreply.github.com>
This commit is contained in:
@@ -128,6 +128,9 @@ Key models (defined in `/backend/schema.prisma`):
|
||||
5. Register in block registry
|
||||
6. Generate the block uuid using `uuid.uuid4()`
|
||||
|
||||
Note: when making many new blocks analyze the interfaces for each of these blcoks and picture if they would go well together in a graph based editor or would they struggle to connect productively?
|
||||
ex: do the inputs and outputs tie well together?
|
||||
|
||||
**Modifying the API:**
|
||||
1. Update route in `/backend/backend/server/routers/`
|
||||
2. Add/update Pydantic models in same directory
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user