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

如何在单个Discord机器人命令中接收多个值实现多张卡牌搜索

实现多卡牌批量搜索的方案

你可以按照分隔符拆分用户输入的搜索关键词,批量调用接口逐个返回结果即可,以下是可直接复用的实现代码:

from asyncio import sleep

@bot.command(brief = "批量获取卡牌", description = "使用该命令搜索多张卡牌,多个搜索词用英文逗号分隔")
async def cards(ctx, *, search):
    # 按英文逗号拆分搜索词,同时去掉每个关键词前后的空白字符
    search_list = [kw.strip() for kw in search.split(',')]
    # 限制单次最多搜索10张,避免触发接口限流或者频道刷屏
    if len(search_list) > 10:
        await ctx.send("单次搜索最多支持10张卡牌,请调整搜索词后重试")
        return
    for index, kw in enumerate(search_list):
        # 跳过空关键词
        if not kw:
            continue
        try:
            result = scrython.cards.Named(fuzzy=kw)
        except scrython.ScryfallError as e:
            error = str(e.error_details['details'])
            await ctx.send(f"第{index+1}张卡牌「{kw}」搜索失败:{error}")
        else:
            img_url = result.image_uris(image_type = 'large')
            await ctx.send(f"第{index+1}张卡牌「{kw}」搜索结果:{img_url}")
        # 每次请求间隔0.1秒,避免触发Scryfall接口的请求频率限制
        await sleep(0.1)

# 原有单张搜索的card命令可以保留,两个命令互不影响可以共存

核心修改点说明

  • 首先对用户输入的内容用英文逗号做拆分,得到多个独立的搜索关键词
  • 增加了单次搜索数量上限,避免刷屏和接口限流
  • 对每个搜索结果增加了序号标识,方便用户对应自己输入的搜索词
  • 增加了请求间隔,避免短时间大量请求被Scryfall接口封禁
  • 你也可以根据自己的需求调整分隔符,比如改成用竖线、空格分隔,只需要修改split方法里的参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:54:03