Agent with Media

Run a Discord bot that analyzes images, audio, and video using Gemini.

Code

Only the first attachment is inspected; send one supported image, audio, or video per message. The current adapter cannot safely handle attachments without a content type. See media limitations.

import discord

from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.integrations.discord import DiscordClient
from agno.models.google import Gemini

media_agent = Agent(
    name="Media Agent",
    model=Gemini(id="gemini-3.5-flash"),
    description="A Media processing agent",
    instructions="Analyze images, audios and videos sent by the user",
    db=SqliteDb(db_file="discord.db"),
    add_history_to_context=True,
    num_history_runs=3,
    add_datetime_to_context=True,
    markdown=True,
)

intents = discord.Intents.default()
intents.message_content = True
discord_agent = DiscordClient(media_agent, client=discord.Client(intents=intents))
if __name__ == "__main__":
    discord_agent.serve()

Usage

First complete the Discord application, Message Content intent, and thread permission setup. This example uses a custom client that requests only the privileged Message Content intent.

Set up your virtual environment

uv venv --python 3.12
source .venv/bin/activate

Set your API keys

export GOOGLE_API_KEY=xxx
export DISCORD_BOT_TOKEN=xxx

Install dependencies

uv pip install -U agno google-genai discord.py sqlalchemy

Run Agent

Save the code above as agent_with_media.py, then run:

python agent_with_media.py