You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用discord.py开发关键词搜索随机图片的Discord指令

带关键词检索能力的Discord随机图指令实现

核心改造思路

  • 把原硬编码猫猫主题的静态指令,改造为支持接收用户自定义关键词的动态指令,利用discord.py的参数捕获能力,完整获取用户在指令后输入的全部内容作为搜索关键词。
  • 替换原写死单接口取固定主题图的逻辑,改为「关键词传参→批量拉取匹配的图片结果→随机选取1张返回」的流程,避免同一关键词返回固定内容。
  • 保留原有Embed消息的渲染结构,仅将固定的标题、图片地址替换为动态获取的内容,无需重写整套消息发送逻辑。

可直接复用的代码实现

import random
import aiohttp
from discord.ext import commands

async def image(self, ctx, *, keyword: str):
    # 先发送等待提示,避免接口响应慢时用户无感知
    wait_tip = await ctx.send(f"正在搜索与「{keyword}」相关的随机图片...")
    
    # 构造搜索请求参数
    request_params = {
        "query": keyword,
        "result_count": 20
    }

    async with aiohttp.ClientSession() as session:
        # 调用支持关键词检索的图片接口
        async with session.get("可传入关键词参数的图片服务接口地址", params=request_params) as resp:
            if resp.status != 200:
                await wait_tip.edit(content="图片搜索服务暂时不可用,请稍后重试")
                return
            search_data = await resp.json()
    
    # 从结果列表中随机选一条图片地址
    try:
        random_img_url = random.choice(search_data["image_list"])["url"]
    except (IndexError, KeyError):
        await wait_tip.edit(content=f"未找到与「{keyword}」相关的图片,请更换关键词重试")
        return

    # 构造和原猫指令风格一致的Embed
    embed = discord.Embed(
        title=f"随机{keyword}图片",
        colour=discord.Colour.purple()
    )
    embed.set_image(url=random_img_url)
    await wait_tip.edit(content=None, embed=embed)

开发注意事项

  • 不要在指令逻辑中直接使用同步的requests库发网络请求,这类阻塞型操作会卡住整个bot的消息处理流程,统一使用异步HTTP客户端发起请求。
  • 指令参数必须使用*, keyword: str的写法,这种写法会跳过参数分隔规则,把用户在指令后输入的所有文本(无论包含多少个单词)拼接为完整关键词传入,避免仅识别第一个单词的问题。
  • 拉取搜索结果时建议一次获取10-30条匹配内容,再通过随机函数选一条返回,不要直接返回搜索结果的第一张,否则同一关键词的返回内容会完全固定,失去随机图的效果。
  • 必须覆盖所有错误场景的兜底提示,包括接口请求失败、返回结果为空、关键词无匹配内容的情况,避免bot直接抛出报错影响使用。

内容的提问来源于stack exchange,提问作者JonaPoka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 01:54:04