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

使用discord.py调用API查询Steam游戏价格无响应问题求助

解决Discord机器人触发价格查询无响应的问题

从你遇到的情况和给出的代码片段来看,机器人触发!pricecheck后没反应但控制台无报错,大概率是逻辑不完整或Discord权限配置缺失导致的,下面是几个核心排查和修复方向:

1. 补全API响应处理与消息发送逻辑

你给出的代码只完成了API请求的第一步,但没有处理返回数据,也没有调用Discord的消息发送方法——机器人拿到API结果后,得明确告诉它要把内容发到频道里才行。

给你补全后的示例代码:

import requests
from discord import Client, Intents

# 关键:现在Discord机器人必须启用消息内容意图才能读取用户消息
intents = Intents.default()
intents.message_content = True

client = Client(intents=intents)

@client.event
async def on_message(message):
    # 避免机器人自己响应自己的消息
    if message.author == client.user:
        return
    
    if message.content.startswith('!pricecheck'):
        game = message.content[11:].strip()  # 去掉前后空格,防止空查询
        if not game:
            await message.channel.send("请输入要查询的游戏名称哦!")
            return
        
        # 注意:ISteamApps主要是拿应用列表,查价格需要先转用价格接口(示例用App列表接口演示)
        try:
            # 补全你的完整API URL
            api_url = f"https://api.steampowered.com/ISteamApps/GetAppList/v2/"
            gres = requests.get(api_url)
            gres.raise_for_status()  # 主动抛出HTTP错误(比如404/500),避免静默失败
            data = gres.json()
            
            # 这里替换成你解析价格的逻辑,比如先找AppID再查价格
            # 示例:假设已经拿到了对应游戏的价格
            price_result = f"查询到《{game}》的当前价格:¥99"
            await message.channel.send(price_result)
        except requests.exceptions.RequestException as e:
            await message.channel.send(f"查询失败啦:{str(e)}")
            print(f"API请求错误日志:{e}")  # 控制台打印错误,方便排查
        except Exception as e:
            await message.channel.send("查询时出现未知错误")
            print(f"未知错误日志:{e}")

client.run("你的机器人Token")

2. 启用Discord机器人的「消息内容意图」

从Discord.py v2.0开始,机器人必须明确启用消息内容意图才能读取用户发送的消息内容。如果没开,message.content会是空值,自然触发不了startswith('!pricecheck')的判断:

  • 登录Discord开发者平台,找到你的机器人应用
  • 进入「Bot」页面,在「Privileged Gateway Intents」下开启「Message Content Intent」
  • 代码里必须像示例那样初始化Intents并设置message_content = True

3. 检查代码缩进与事件监听范围

确保if message.content.startswith(...)这段代码完全缩进在on_message函数内部——如果缩进错误,这段逻辑根本不会被触发。另外,不要忘记排除机器人自身的消息(也就是示例里的if message.author == client.user: return),否则可能出现循环触发的问题。

4. 补充异常捕获,定位静默错误

很多“无响应”都是因为代码里有未捕获的异常(比如API返回的JSON格式不对、网络超时),但因为没加异常处理,错误被静默吞掉了。添加try-except块可以把错误打印到控制台,帮你快速定位问题。

额外提示:Steam价格查询的小细节

Steam的ISteamApps接口主要用来获取应用列表,查实际价格需要先通过游戏名称找到对应的AppID,再调用https://store.steampowered.com/api/appdetails?appids={appid}&cc=cn这类价格接口(cc参数指定地区),你可能需要调整API请求的逻辑来实现完整的价格查询功能。

内容的提问来源于stack exchange,提问作者Jarl2.0

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:17:18