Steam机器人Redis接口说明

该文档为成都海盗海科技有限公司所有,任何人未经允许不得转发。

 

Steam机器人与对接系统之间通过redis进行报价请求的交互.

机器人使用的报价数据格式如下显示

{
    status: 0, 
    trade_no: null, 
    steamer: {
        steamid: "765611xxxxxxxxx", 
        tradeurl: "https: //steamcommunity.com/tradeoffer/new/?partner=xxxxx&token=xxxxxx"
    }, 
    uid: "123456789", 
    message: "GRKHM0HK", 
    myItems: [
        {
            name: "九头蛇大行动”武器箱钥匙", 
            classid: "2303508264", 
            appid: "730", 
            contextid: "2", 
            assetid: "11684150890"
        }
    ], 
    theirItems: [
        {
            name: "格洛克 18 型 | 地下水", 
            classid: "310779514", 
            appid: "730", 
            contextid: "2", 
            assetid: "11368533135",
            new_assetid: ""
        }
    ], 
    steamid: "765611xxxxxxxxx", 
    exchanged: false,
    cancelTime: 1000 * 60 * 2,
    bot_msg: "",
    offer_state: null,
    ex_state: null
}

各字段的具体含义如下表

  1. status:报价单状态; 0:初始化,1:报价交易成功;2:报价交易失败, 需要发送的报价单初始化为0,机器人处理完成后,如果报价交易成功则会写入1,报价失败则会写入2;所以对接系统只需要一直检查该字段是否为1或者2即可
  2. trade_no:steam生成的报价单编号,初始化为null即可。机器人向steam提交报价单成功后,会将steam返回的此次报价单号写回此字段
  3. steamer:报价目标, steamid为报价目标的steamid, tradeurl为报价目标的报价链接,机器人将通过此报价链接向目标发送报价
  4. uid:报价单唯一编号,对接系统对此处报价的唯一编号
  5. message:报价单的附言,此字段内容会填入该次报价附带的消息框中
  6. myItems:此次报价的要发送的道具;代表此次报价我方要发送的道具;比如需要将机器人的某个库存道具发送给目标,则需要将该道具的appid、contextid、assetid填入这里,name、classid为可选字段;没有要发送的道具则填空数组: []
  7. theirItems:此次报价要请求的目标玩家的道具;比如这次报价是玩家要存入他的某些道具,则需要将他的道具的appid、contextid、assetid填入这里,name、classid同理为可选字段;没有要请求的道具,则填空数组:[]
  8. steamid:指定此次报价用的机器人steamid,即此次报价会通过这里指定的机器人发送;也可以填空字符串,则机器人会随机选择当前启动的一个机器人去发送报价,并在报价发送后,将此次使用的机器人的steamid回写到这个字段
  9. exchanged:报价道具id更新标志;如果机器人报价了对方的饰品道具,当报价交易成功后,机器人人就会收到对应的报价道具,而收到的报价道具的assetid一般来说产生变更;比如请求了玩家的道具assetid是 2111111,当交易成功后,道具进入机器人的库存后,道具的assetid可能就变成了3111111,即每次道具交易,理论上assetid都会产生变化,而机器人在交易成功后,读取到新的assetid后,会写入此字段exchanged为true,同时将新assetid写入theirItems中,每个item的新assetid写入一个新字段new_assetid,标志已经读取到了新的assetid,新assetid的值即为new_assetid的值。所以如果需要追踪assetid的变化,则需要对接时,在读到交易成功status状态为1时,再继续读取exchanged的状态,读到为true后即可从每个item的new_assetid,读取到新的assetid值。如果不需要追踪新的assetid,则可以忽略此字段。
  10. cancelTime: 指定报价的超时时间,单位毫秒,即超过此时间玩家都没接受报价,则机器人会取消该报价;可选字段,如果没有传入该字段,则为默认的10分钟超时;实际机器人的取消时间可能与此时间会存在一点误差,可能比此设定的时间会晚几秒钟;
  11. bot_msg: 报价错误信息,如果机器人发送报价失败,会将steam返回的错误描述写入此字段;可选字段,机器人发送报价失败后回写此字段
  12. offer_state:steam报价单状态,可选字段,机器人报价发送成功后会回写此字段,字段值的含义参考下面的报价单状态表;当报价失败,status为2时,可以根据这个字段的值,得到失败原因;比如offer_state为6,表示是因为报价取消而失败,offer_state为7的话,表示是因为报价被拒绝而失败,其他状态同理;
  13. ex_state:扩展字段,可选字段;目前机器人对于暂挂交易会直接取消报价;取消报价后,status会写2,表示报价失败,offer_state会写入6,表示报价是因为取消报价而失败,同时ex_state写入值11,表示取消前的状态是暂挂

交易编号

trade_no 为steam的交易编号,通过 https://steamcommunity.com/tradeoffer/ + 交易编号 即可得到此次报价的报价页面;比如报价编号为 2308582253, 则用户可以通过这个链接 https://steamcommunity.com/tradeoffer/2308582253 打开改报价页面

items交易道具说明

一般可以通过 http://steamcommunity.com/inventory/{steamid}/{appid}/{contextid}?l=schinese&count=5000 即可查看某人开放的库存信息;其中steamid为要查看的玩家steamid,appid为游戏id,contextid为库存id; CSGO的appid为730,contextid为2 Dota2的appid为570,contextid为2 其他游戏的都能在网络上查到

报价单状态表

报价单状态 状态详情
2 报价激活
3 报价被接受
4 报价被还价
5 报价过期
6 报价被取消
7 报价被拒绝
8 报价中部分道具已不可用

机器人对接说明

对接系统,将上面的报价结构以格式化为字符串后,以uid的值为key,格式的json字符串为值的键值对写入redis,

set "123456789" "
{
    status: 0, 
    trade_no: "null", 
    steamer: {
        steamid: "765611xxxxxxxxx", 
        tradeurl: "https://steamcommunity.com/tradeoffer/new/?partner=xxxxx&token=xxxxx"
    }, 
    uid: "", 
    message: "GRKHM0HK", 
    myItems: [
        {
            name: "九头蛇大行动”武器箱钥匙", 
            classid: "2303508264", 
            appid: "730", 
            contextid: "2", 
            assetid: "11684150890"
        }
    ], 
    theirItems: [
        {
            name: "格洛克18型|地下水", 
            classid: "310779514", 
            appid: "730", 
            contextid: "2", 
            assetid: "11368533135"
        }
    ], 
    steamid: "765611xxxxxxxxx", 
    offer_state: "null"
}
"

然后将该key写入固定的redis列表 trade_list

lpush trade_list "123456789"

机器人会从 trade_list列表中读取所有待处理的报价单key,然后根据key去读取报价请求的json数据包;然后完成报价交易; 
根据交易结果机器人会去更新上面提到的status字段;

为了避免数据冗余,建议对接系统在读取到交易结果后,比如读到status为2或者1之后,就将该报价单的键值对删除,并从trade_list移除

其他说明

目前机器人报价固定超时为10分钟,即对所有报价发送出去后,超过10分钟玩家都没确认该报价,则会取消该报价,并更新报价结果status为失败

 

引用地址:作业部落 Cmd Markdown 编辑阅读器

Pingbacks已打开。

引用地址

暂无评论

发表评论