ddiu8081 / blive-message-listener

Bilibili live danmu listener with type. 类型友好的 Bilibili 直播间弹幕监听库。
https://npmjs.com/blive-message-listener
MIT License
143 stars 13 forks source link

开始监听后立刻就关闭了 #30

Open Nauxscript opened 5 months ago

Nauxscript commented 5 months ago

Describe the bug

const bilive = require('blive-message-listener');

bilive.startListen(5050, {
  onOpen() {
    console.log('open');
  },
  onClose() {
    console.log('close');
    process.exit()
  },
  onIncomeDanmu: (msg) => {
    console.log(msg.id, msg.body);
  },
});

运行后立刻就关闭了。

Reproduction

https://stackblitz.com/edit/stackblitz-starters-d4vbxi?file=index.js

System Info

System:
    OS: macOS 14.1.2
    CPU: (10) arm64 Apple M1 Pro
    Memory: 280.48 MB / 32.00 GB
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 20.10.0 - ~/.nvm/versions/node/v20.10.0/bin/node
    npm: 10.2.3 - ~/.nvm/versions/node/v20.10.0/bin/npm
    pnpm: 8.7.6 - /opt/homebrew/bin/pnpm
    bun: 1.0.0 - /opt/homebrew/bin/bun
  Browsers:
    Chrome: 123.0.6312.87

Used Package Manager

pnpm

Validations

ddiu8081 commented 5 months ago

看起来现在连接auth参数是必传了,可以传入 ws.key 试试

https://github.com/ddiu8081/blive-message-listener?tab=readme-ov-file#options

blacktunes commented 5 months ago

前一段时间还行,然后这两天又不行了,然后发现getDanmuInfo这个API的key字段变成了token image

ddiu8081 commented 4 months ago

目前看getDanmuInfo抓到的token似乎确实连不上,可以抓直播间ws请求里第一个数据包里的 key 是能用的,不知道有没有其他获取key的方式

CleanShot 2024-04-10 at 13 13 03

blacktunes commented 4 months ago

目前看getDanmuInfo抓到的token似乎确实连不上,可以抓直播间ws请求里第一个数据包里的 key 是能用的,不知道有没有其他获取key的方式

CleanShot 2024-04-10 at 13 13 03

稍微测试了一下,getDanmuInfo现在要带上id参数,获取到的token跟直播间是绑定的

msinwolc commented 3 months ago

同样的问题,现在F12查看控制台的ws消息是乱码,是加密了吗

ddiu8081 commented 3 months ago

同样的问题,现在F12查看控制台的ws消息是乱码,是加密了吗

@msinwolc 看起来没有变化,依然可以从ws消息中拿到key

ScreenShot 2024-06-05 at 23 31 58@2x

msinwolc commented 3 months ago

同样的问题,现在F12查看控制台的ws消息是乱码,是加密了吗

@msinwolc 看起来没有变化,依然可以从ws消息中拿到key

ScreenShot 2024-06-05 at 23 31 58@2x

重新看了下,确实可以拿到了

msinwolc commented 3 months ago

我这边试了下 getDanmuInfo 拿到的 token 当作ws option的key的话是连不上的,另外一个 https://api.live.bilibili.com/room/v1/Danmu/getConf?room_id=? 返回的 token 也是连不上,不知道前面的大佬是怎么成功的,或者说还有其他获取key的地方吗

blacktunes commented 3 months ago

我这边试了下 getDanmuInfo 拿到的 token 当作ws option的key的话是连不上的,另外一个 https://api.live.bilibili.com/room/v1/Danmu/getConf?room_id=? 返回的 token 也是连不上,不知道前面的大佬是怎么成功的,或者说还有其他获取key的地方吗

https://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuInfo?id=<roomID>获取到的token字段就是key

key跟登录账号的uid房间号对应,每个直播间的key都不一样,对不上的话链接就会直接关闭

{
    ws: {
      // 必须
      uid: 登录的账号UID,
      key: getDanmuInfo的token字段,
      // 不填也能用,暂时不知道有没有影响
      buvid: getDanmuInfo的cookie里的buvid3
    }
  }

不登录也能用,uid填0就行,但是会丢弹幕

msinwolc commented 3 months ago

我这边试了下 getDanmuInfo 拿到的 token 当作ws option的key的话是连不上的,另外一个 https://api.live.bilibili.com/room/v1/Danmu/getConf?room_id=? 返回的 token 也是连不上,不知道前面的大佬是怎么成功的,或者说还有其他获取key的地方吗

https://api.live.bilibili.com/xlive/web-room/v1/index/getDanmuInfo?id=<roomID>获取到的token字段就是key

key跟登录账号的uid房间号对应,每个直播间的key都不一样,对不上的话链接就会直接关闭

{
    ws: {
      // 必须
      uid: 登录的账号UID,
      key: getDanmuInfo的token字段,
      // 不填也能用,暂时不知道有没有影响
      buvid: getDanmuInfo的cookie里的buvid3
    }
  }

不登录也能用,uid填0就行,但是会丢弹幕

原来如此,我是未登录直接请求的 getDanmuInfo 但是uid填了我自己的uid,所以才会失败,把uid设置为0后就连接上了,感谢大佬指正