Skip to content

Discord Platform Integration

NekoBot supports Discord platform through Discord Bot API.

Discord Bot Token

1. Create Discord Application

  1. Visit Discord Developer Portal
  2. Click "New Application" to create a new application
  3. Go to "Bot" page and click "Add Bot"
  4. Copy Bot Token

2. Configure NekoBot

Edit data/platforms_sources.json:

json
{
  "discord": {
    "type": "discord",
    "enable": true,
    "id": "discord",
    "token": "your-bot-token-here",
    "command_prefix": "/"
  }
}

3. Configure Bot Permissions

Set up Bot permissions in Discord Developer Portal:

  • Send Messages - Send messages
  • Embed Links - Embed links
  • Attach Files - Attach files
  • Read Message History - Read message history
  • Add Reactions - Add reactions
  • Use Slash Commands - Use slash commands

4. Invite Bot

Generate invite link:

https://discord.com/api/oauth2/authorize?client_id=YOUR_CLIENT_ID&permissions=8&scope=bot

Or use Discord Developer Portal's "OAuth2" page to generate invite link.

Message Events

Supported Events

Event TypeDescription
Message CreateNew message
Message UpdateMessage edited
Message DeleteMessage deleted
Reaction AddReaction added
Reaction RemoveReaction removed
Member JoinMember joins server
Member LeaveMember leaves server

Message Format

Discord messages use Markdown format:

python
# Plain text
message = "Hello World!"

# Bold
message = "**Bold Text**"

# Italic
message = "*Italic Text*"

# Code
message = "`Code`"

# Code block
message = "```python\nprint('Hello')\n```"

# Link
message = "[Text](https://example.com)"

# Mention user
message = f"<@{user_id}>"

# Mention role
message = f"<@&{role_id}>"

Embed Messages

Discord supports embed messages:

python
async def send_embed(self, channel_id, title, description):
    embed = {
        "title": title,
        "description": description,
        "color": 0x00ff00,
        "fields": [
            {"name": "Field1", "value": "Value1", "inline": True},
            {"name": "Field2", "value": "Value2", "inline": True}
        ],
        "footer": {"text": "NekoBot"},
        "timestamp": "2025-01-01T00:00:00Z"
    }
    await self.platform_server.call_platform_api(
        platform_id="discord",
        action="send_embed",
        params={"channel_id": channel_id, "embed": embed}
    )

Slash Commands

Discord supports slash commands:

Register Slash Command

python
async def register_slash_command(self, name, description):
    await self.platform_server.call_platform_api(
        platform_id="discord",
        action="register_command",
        params={
            "name": name,
            "description": description,
            "options": [
                {
                    "name": "option1",
                    "description": "Option1",
                    "type": 3,  # STRING
                    "required": True
                }
            ]
        }
    )

Handle Slash Command

python
async def on_message(self, message):
    if message.get("type") == "interaction":
        interaction = message
        command_name = interaction.get("data", {}).get("name")
        
        if command_name == "hello":
            await self.respond_to_interaction(
                interaction_id=interaction["id"],
                interaction_token=interaction["token"],
                content="Hello!"
            )

Advanced Features

Send File

python
async def send_file(self, channel_id, file_path):
    with open(file_path, "rb") as f:
        await self.platform_server.call_platform_api(
            platform_id="discord",
            action="send_file",
            params={"channel_id": channel_id, "file": f}
        )

Get Server Information

python
async def get_guild_info(self, guild_id):
    result = await self.platform_server.call_platform_api(
        platform_id="discord",
        action="get_guild",
        params={"guild_id": guild_id}
    )
    return result.get("data")

Get Member List

python
async def get_members(self, guild_id):
    result = await self.platform_server.call_platform_api(
        platform_id="discord",
        action="get_members",
        params={"guild_id": guild_id}
    )
    return result.get("data", [])

Discord API Rate Limits

Discord API has rate limits:

Operation TypeLimit
Global50 requests/second
Per channel5 requests/5 seconds
Per member1 request/second

Implement a request queue to avoid triggering limits.

Common Issues

Bot Not Receiving Messages

  1. Check if bot has been added to server
  2. Confirm bot has "Read Messages" permission
  3. Check if INTENTS configuration is correct

Message Send Failed

  1. Confirm bot has "Send Messages" permission
  2. Check if channel allows bot to send messages
  3. Verify if Token is correct

Rate Limits

If you encounter rate limit errors:

  1. Implement exponential backoff retry
  2. Reduce request frequency
  3. Use batch operations

基于 MIT 许可发布