如何在单个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
相关产品推荐
相关产品推荐

