project-mirai / mirai-api-http

Mirai HTTP API (console) plugin
GNU Affero General Public License v3.0
1.64k stars 346 forks source link

data.json配置后报错 #760

Closed DaFeimian closed 6 months ago

DaFeimian commented 6 months ago

版本

配置文件:

setting.yml:

## 配置文件中的值,全为默认值

## 启用的 adapter, 内置有 http, ws, reverse-ws, webhook
adapters:
  - http
  - ws

## 是否开启认证流程, 若为 true 则建立连接时需要验证 verifyKey
## 建议公网连接时开启
enableVerify: true
verifyKey: 1234567890

## 开启一些调试信息
debug: false

## 是否开启单 session 模式, 若为 true,则自动创建 session 绑定 console 中登录的 bot
## 开启后,接口中任何 sessionKey 不需要传递参数
## 若 console 中有多个 bot 登录,则行为未定义
## 确保 console 中只有一个 bot 登录时启用
singleMode: false

## 历史消息的缓存大小
## 同时,也是 http adapter 的消息队列容量
cacheSize: 4096

## adapter 的单独配置,键名与 adapters 项配置相同
adapterSettings:
  ## 详情看 http adapter 使用说明 配置
  http:
    host: localhost
    port: 23750
    cors: ["*"]
    unreadQueueMaxSize: 100

  ## 详情看 websocket adapter 使用说明 配置
  ws:
    host: localhost
    port: 23750
    reservedSyncId: -1

data.json

{
    "Key": "",
    "host": "127.0.0.1",
    "port": "23750",
    "qq": "***",  // 隐匿
    "session": ""
}

报错日志

Traceback (most recent call last):
  File "ChatClass.py", line 393, in run
  File "Chatmain.py", line 1965, in getcommand_chat
  File "simuse.py", line 89, in Fetch_Message
KeyError: 'data'

修改host之后就会弹出api-http未连接,所以猜测这里的"host": "127.0.0.1","port": "23750",是没有问题的。

报错对应源码处:

#接收消息 (若传入deal=0,则表示返回不经过简化的原消息信息和事件)
def Fetch_Message(data, deal=1):
    if type(data) == type(0):
        raise ConnectionError('未与api-http取得连接,或mirai未登录')
    host = data['host']
    session = data['session']
    url = 'http://' + host + '/fetchMessage?' + 'count=10'+ '&sessionKey=' + session 
    res = r.request('get', url)
    res = json.loads(res.text)
    Message = res['data']
    if deal == 1:
        Message = Fetch_Message_info(Message)
        return Message
    elif deal == 0:
        return Message
    else:
        return 0

猜测原因

没有仔细了解项目和相关api,因此猜测是'count=10''&sessionKey=' + session写反了,我看mirai-api-http-2.10.0中获取头部队列消息是:

[GET] /fetchMessage?sessionKey=YourSessionKey&count=10