douyin-danma-listener 0.2.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/lib/index.js +37 -4
- package/lib/proto.js +537 -0
- package/package.json +1 -1
- package/types/index.d.ts +4 -0
- package/types/types.d.ts +18 -1
package/README.md
CHANGED
|
@@ -28,10 +28,12 @@ client.connect();
|
|
|
28
28
|
配置项如下:
|
|
29
29
|
|
|
30
30
|
- `autoStart` (boolean): 是否自动开始连接,默认为 `false`
|
|
31
|
-
- `autoReconnect` (number): 自动重连次数,默认为 `
|
|
31
|
+
- `autoReconnect` (number): 自动重连次数,默认为 `10`
|
|
32
32
|
- `heartbeatInterval` (number): 心跳包发送间隔,单位为毫秒,默认为 `10000`
|
|
33
33
|
- `cookie` (string): 可选的 Cookie 字符串,某些直播间可能需要?
|
|
34
34
|
- `timeoutInterval` (number): 没有数据返回但`ws`未被主动关闭时超时后重新连接,单位为秒,默认`100`
|
|
35
|
+
- `reconnectInterval`: 重连等待时间
|
|
36
|
+
- `host`:弹幕连接域名
|
|
35
37
|
|
|
36
38
|
## 事件
|
|
37
39
|
|
package/lib/index.js
CHANGED
|
@@ -26,11 +26,14 @@ class DouYinDanmaClient extends TypedEmitter {
|
|
|
26
26
|
autoStart;
|
|
27
27
|
autoReconnect;
|
|
28
28
|
reconnectAttempts;
|
|
29
|
+
reconnectInterval;
|
|
29
30
|
cookie;
|
|
30
31
|
timeoutInterval;
|
|
31
32
|
lastMessageTime;
|
|
32
33
|
timeoutTimer;
|
|
33
34
|
isTimeoutCheckRunning = false;
|
|
35
|
+
isReconnecting = false;
|
|
36
|
+
host;
|
|
34
37
|
constructor(roomId, options = {}) {
|
|
35
38
|
super();
|
|
36
39
|
this.roomId = roomId;
|
|
@@ -38,9 +41,11 @@ class DouYinDanmaClient extends TypedEmitter {
|
|
|
38
41
|
this.autoStart = options.autoStart ?? false;
|
|
39
42
|
this.autoReconnect = options.autoReconnect ?? 10;
|
|
40
43
|
this.reconnectAttempts = 0;
|
|
44
|
+
this.reconnectInterval = options.reconnectInterval ?? 10000;
|
|
41
45
|
this.cookie = options.cookie;
|
|
42
46
|
this.timeoutInterval = options.timeoutInterval ?? 100000; // 默认100秒
|
|
43
47
|
this.lastMessageTime = Date.now();
|
|
48
|
+
this.host = options.host ?? "webcast100-ws-web-hl.douyin.com";
|
|
44
49
|
if (this.autoStart) {
|
|
45
50
|
this.connect();
|
|
46
51
|
}
|
|
@@ -59,6 +64,7 @@ class DouYinDanmaClient extends TypedEmitter {
|
|
|
59
64
|
},
|
|
60
65
|
});
|
|
61
66
|
this.ws.on("open", () => {
|
|
67
|
+
this.reconnectAttempts = 0;
|
|
62
68
|
this.emit("open");
|
|
63
69
|
this.startHeartbeat();
|
|
64
70
|
this.startTimeoutCheck();
|
|
@@ -140,12 +146,19 @@ class DouYinDanmaClient extends TypedEmitter {
|
|
|
140
146
|
}
|
|
141
147
|
}
|
|
142
148
|
reconnect() {
|
|
149
|
+
if (this.isReconnecting) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
143
152
|
this.stopHeartbeat();
|
|
144
153
|
this.stopTimeoutCheck();
|
|
145
154
|
if (this.reconnectAttempts < this.autoReconnect) {
|
|
155
|
+
this.isReconnecting = true;
|
|
146
156
|
this.reconnectAttempts++;
|
|
147
|
-
|
|
148
|
-
|
|
157
|
+
setTimeout(() => {
|
|
158
|
+
this.connect();
|
|
159
|
+
this.isReconnecting = false;
|
|
160
|
+
this.emit("reconnect", this.reconnectAttempts);
|
|
161
|
+
}, this.reconnectInterval);
|
|
149
162
|
}
|
|
150
163
|
}
|
|
151
164
|
async handleMessage() { }
|
|
@@ -205,6 +218,14 @@ class DouYinDanmaClient extends TypedEmitter {
|
|
|
205
218
|
this.emit("roomRank", message);
|
|
206
219
|
this.emit("message", message);
|
|
207
220
|
}
|
|
221
|
+
async handlePrivilegeScreenChatMessage(message) {
|
|
222
|
+
this.emit("privilegeScreenChat", message);
|
|
223
|
+
this.emit("message", message);
|
|
224
|
+
}
|
|
225
|
+
async handleScreenChatMessage(message) {
|
|
226
|
+
this.emit("screenChat", message);
|
|
227
|
+
this.emit("message", message);
|
|
228
|
+
}
|
|
208
229
|
/**
|
|
209
230
|
* 处理其他消息
|
|
210
231
|
*/
|
|
@@ -232,6 +253,10 @@ class DouYinDanmaClient extends TypedEmitter {
|
|
|
232
253
|
const RoomStatsMessage = protobuf.douyin.RoomStatsMessage;
|
|
233
254
|
// @ts-ignore
|
|
234
255
|
const RoomRankMessage = protobuf.douyin.RoomRankMessage;
|
|
256
|
+
// @ts-ignore
|
|
257
|
+
const PrivilegeScreenChatMessage = protobuf.douyin.PrivilegeScreenChatMessage;
|
|
258
|
+
// @ts-ignore
|
|
259
|
+
const ScreenChatMessage = protobuf.douyin.ScreenChatMessage;
|
|
235
260
|
const wssPackage = PushFrame.decode(data);
|
|
236
261
|
// @ts-ignore
|
|
237
262
|
const logId = wssPackage.logId;
|
|
@@ -298,6 +323,14 @@ class DouYinDanmaClient extends TypedEmitter {
|
|
|
298
323
|
const message = RoomRankMessage.decode(msg.payload);
|
|
299
324
|
this.handleRoomRankMessage(message.toJSON());
|
|
300
325
|
}
|
|
326
|
+
else if (msg.method === "WebcastPrivilegeScreenChatMessage") {
|
|
327
|
+
const message = PrivilegeScreenChatMessage.decode(msg.payload);
|
|
328
|
+
this.handlePrivilegeScreenChatMessage(message.toJSON());
|
|
329
|
+
}
|
|
330
|
+
else if (msg.method === "WebcastScreenChatMessage") {
|
|
331
|
+
const message = ScreenChatMessage.decode(msg.payload);
|
|
332
|
+
this.handleScreenChatMessage(message.toJSON());
|
|
333
|
+
}
|
|
301
334
|
else {
|
|
302
335
|
// WebcastRanklistHourEntranceMessage,WebcastInRoomBannerMessage,WebcastRoomStreamAdaptationMessage
|
|
303
336
|
}
|
|
@@ -315,7 +348,7 @@ class DouYinDanmaClient extends TypedEmitter {
|
|
|
315
348
|
const userUniqueId = getUserUniqueId();
|
|
316
349
|
// const userUniqueId = "7877922945687137703";
|
|
317
350
|
const versionCode = 180800;
|
|
318
|
-
const webcastSdkVersion = "1.0.
|
|
351
|
+
const webcastSdkVersion = "1.0.15";
|
|
319
352
|
const sigParams = {
|
|
320
353
|
live_id: "1",
|
|
321
354
|
aid: "6383",
|
|
@@ -350,7 +383,7 @@ class DouYinDanmaClient extends TypedEmitter {
|
|
|
350
383
|
identity: "audience",
|
|
351
384
|
signature: signature.toString(),
|
|
352
385
|
};
|
|
353
|
-
const wssUrl = `wss
|
|
386
|
+
const wssUrl = `wss://${this.host}/webcast/im/push/v2/?${new URLSearchParams(webcast5Params).toString()}`;
|
|
354
387
|
return buildRequestUrl(wssUrl);
|
|
355
388
|
}
|
|
356
389
|
}
|
package/lib/proto.js
CHANGED
|
@@ -1332,6 +1332,543 @@ export const douyin = ($root.douyin = (() => {
|
|
|
1332
1332
|
};
|
|
1333
1333
|
return ChatMessage;
|
|
1334
1334
|
})();
|
|
1335
|
+
douyin.PrivilegeScreenChatMessage = (function () {
|
|
1336
|
+
/**
|
|
1337
|
+
* Properties of a PrivilegeScreenChatMessage.
|
|
1338
|
+
* @memberof douyin
|
|
1339
|
+
* @interface IPrivilegeScreenChatMessage
|
|
1340
|
+
* @property {douyin.ICommon|null} [common] PrivilegeScreenChatMessage common
|
|
1341
|
+
* @property {douyin.IUser|null} [user] PrivilegeScreenChatMessage user
|
|
1342
|
+
* @property {string|null} [content] PrivilegeScreenChatMessage content
|
|
1343
|
+
*/
|
|
1344
|
+
/**
|
|
1345
|
+
* Constructs a new PrivilegeScreenChatMessage.
|
|
1346
|
+
* @memberof douyin
|
|
1347
|
+
* @classdesc Represents a PrivilegeScreenChatMessage.
|
|
1348
|
+
* @implements IPrivilegeScreenChatMessage
|
|
1349
|
+
* @constructor
|
|
1350
|
+
* @param {douyin.IPrivilegeScreenChatMessage=} [properties] Properties to set
|
|
1351
|
+
*/
|
|
1352
|
+
function PrivilegeScreenChatMessage(properties) {
|
|
1353
|
+
if (properties)
|
|
1354
|
+
for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
|
|
1355
|
+
if (properties[keys[i]] != null)
|
|
1356
|
+
this[keys[i]] = properties[keys[i]];
|
|
1357
|
+
}
|
|
1358
|
+
/**
|
|
1359
|
+
* PrivilegeScreenChatMessage common.
|
|
1360
|
+
* @member {douyin.ICommon|null|undefined} common
|
|
1361
|
+
* @memberof douyin.PrivilegeScreenChatMessage
|
|
1362
|
+
* @instance
|
|
1363
|
+
*/
|
|
1364
|
+
PrivilegeScreenChatMessage.prototype.common = null;
|
|
1365
|
+
/**
|
|
1366
|
+
* PrivilegeScreenChatMessage user.
|
|
1367
|
+
* @member {douyin.IUser|null|undefined} user
|
|
1368
|
+
* @memberof douyin.PrivilegeScreenChatMessage
|
|
1369
|
+
* @instance
|
|
1370
|
+
*/
|
|
1371
|
+
PrivilegeScreenChatMessage.prototype.user = null;
|
|
1372
|
+
/**
|
|
1373
|
+
* PrivilegeScreenChatMessage content.
|
|
1374
|
+
* @member {string} content
|
|
1375
|
+
* @memberof douyin.PrivilegeScreenChatMessage
|
|
1376
|
+
* @instance
|
|
1377
|
+
*/
|
|
1378
|
+
PrivilegeScreenChatMessage.prototype.content = "";
|
|
1379
|
+
/**
|
|
1380
|
+
* Creates a new PrivilegeScreenChatMessage instance using the specified properties.
|
|
1381
|
+
* @function create
|
|
1382
|
+
* @memberof douyin.PrivilegeScreenChatMessage
|
|
1383
|
+
* @static
|
|
1384
|
+
* @param {douyin.IPrivilegeScreenChatMessage=} [properties] Properties to set
|
|
1385
|
+
* @returns {douyin.PrivilegeScreenChatMessage} PrivilegeScreenChatMessage instance
|
|
1386
|
+
*/
|
|
1387
|
+
PrivilegeScreenChatMessage.create = function create(properties) {
|
|
1388
|
+
return new PrivilegeScreenChatMessage(properties);
|
|
1389
|
+
};
|
|
1390
|
+
/**
|
|
1391
|
+
* Encodes the specified PrivilegeScreenChatMessage message. Does not implicitly {@link douyin.PrivilegeScreenChatMessage.verify|verify} messages.
|
|
1392
|
+
* @function encode
|
|
1393
|
+
* @memberof douyin.PrivilegeScreenChatMessage
|
|
1394
|
+
* @static
|
|
1395
|
+
* @param {douyin.IPrivilegeScreenChatMessage} message PrivilegeScreenChatMessage message or plain object to encode
|
|
1396
|
+
* @param {$protobuf.Writer} [writer] Writer to encode to
|
|
1397
|
+
* @returns {$protobuf.Writer} Writer
|
|
1398
|
+
*/
|
|
1399
|
+
PrivilegeScreenChatMessage.encode = function encode(message, writer) {
|
|
1400
|
+
if (!writer)
|
|
1401
|
+
writer = $Writer.create();
|
|
1402
|
+
if (message.common != null && Object.hasOwnProperty.call(message, "common"))
|
|
1403
|
+
$root.douyin.Common.encode(message.common, writer.uint32(/* id 1, wireType 2 =*/ 10).fork()).ldelim();
|
|
1404
|
+
if (message.user != null && Object.hasOwnProperty.call(message, "user"))
|
|
1405
|
+
$root.douyin.User.encode(message.user, writer.uint32(/* id 2, wireType 2 =*/ 18).fork()).ldelim();
|
|
1406
|
+
if (message.content != null && Object.hasOwnProperty.call(message, "content"))
|
|
1407
|
+
writer.uint32(/* id 3, wireType 2 =*/ 26).string(message.content);
|
|
1408
|
+
return writer;
|
|
1409
|
+
};
|
|
1410
|
+
/**
|
|
1411
|
+
* Encodes the specified PrivilegeScreenChatMessage message, length delimited. Does not implicitly {@link douyin.PrivilegeScreenChatMessage.verify|verify} messages.
|
|
1412
|
+
* @function encodeDelimited
|
|
1413
|
+
* @memberof douyin.PrivilegeScreenChatMessage
|
|
1414
|
+
* @static
|
|
1415
|
+
* @param {douyin.IPrivilegeScreenChatMessage} message PrivilegeScreenChatMessage message or plain object to encode
|
|
1416
|
+
* @param {$protobuf.Writer} [writer] Writer to encode to
|
|
1417
|
+
* @returns {$protobuf.Writer} Writer
|
|
1418
|
+
*/
|
|
1419
|
+
PrivilegeScreenChatMessage.encodeDelimited = function encodeDelimited(message, writer) {
|
|
1420
|
+
return this.encode(message, writer).ldelim();
|
|
1421
|
+
};
|
|
1422
|
+
/**
|
|
1423
|
+
* Decodes a PrivilegeScreenChatMessage message from the specified reader or buffer.
|
|
1424
|
+
* @function decode
|
|
1425
|
+
* @memberof douyin.PrivilegeScreenChatMessage
|
|
1426
|
+
* @static
|
|
1427
|
+
* @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
|
|
1428
|
+
* @param {number} [length] Message length if known beforehand
|
|
1429
|
+
* @returns {douyin.PrivilegeScreenChatMessage} PrivilegeScreenChatMessage
|
|
1430
|
+
* @throws {Error} If the payload is not a reader or valid buffer
|
|
1431
|
+
* @throws {$protobuf.util.ProtocolError} If required fields are missing
|
|
1432
|
+
*/
|
|
1433
|
+
PrivilegeScreenChatMessage.decode = function decode(reader, length) {
|
|
1434
|
+
if (!(reader instanceof $Reader))
|
|
1435
|
+
reader = $Reader.create(reader);
|
|
1436
|
+
let end = length === undefined ? reader.len : reader.pos + length, message = new $root.douyin.PrivilegeScreenChatMessage();
|
|
1437
|
+
while (reader.pos < end) {
|
|
1438
|
+
let tag = reader.uint32();
|
|
1439
|
+
switch (tag >>> 3) {
|
|
1440
|
+
case 1: {
|
|
1441
|
+
message.common = $root.douyin.Common.decode(reader, reader.uint32());
|
|
1442
|
+
break;
|
|
1443
|
+
}
|
|
1444
|
+
case 2: {
|
|
1445
|
+
message.user = $root.douyin.User.decode(reader, reader.uint32());
|
|
1446
|
+
break;
|
|
1447
|
+
}
|
|
1448
|
+
case 3: {
|
|
1449
|
+
message.content = reader.string();
|
|
1450
|
+
break;
|
|
1451
|
+
}
|
|
1452
|
+
default:
|
|
1453
|
+
reader.skipType(tag & 7);
|
|
1454
|
+
break;
|
|
1455
|
+
}
|
|
1456
|
+
}
|
|
1457
|
+
return message;
|
|
1458
|
+
};
|
|
1459
|
+
/**
|
|
1460
|
+
* Decodes a PrivilegeScreenChatMessage message from the specified reader or buffer, length delimited.
|
|
1461
|
+
* @function decodeDelimited
|
|
1462
|
+
* @memberof douyin.PrivilegeScreenChatMessage
|
|
1463
|
+
* @static
|
|
1464
|
+
* @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
|
|
1465
|
+
* @returns {douyin.PrivilegeScreenChatMessage} PrivilegeScreenChatMessage
|
|
1466
|
+
* @throws {Error} If the payload is not a reader or valid buffer
|
|
1467
|
+
* @throws {$protobuf.util.ProtocolError} If required fields are missing
|
|
1468
|
+
*/
|
|
1469
|
+
PrivilegeScreenChatMessage.decodeDelimited = function decodeDelimited(reader) {
|
|
1470
|
+
if (!(reader instanceof $Reader))
|
|
1471
|
+
reader = new $Reader(reader);
|
|
1472
|
+
return this.decode(reader, reader.uint32());
|
|
1473
|
+
};
|
|
1474
|
+
/**
|
|
1475
|
+
* Verifies a PrivilegeScreenChatMessage message.
|
|
1476
|
+
* @function verify
|
|
1477
|
+
* @memberof douyin.PrivilegeScreenChatMessage
|
|
1478
|
+
* @static
|
|
1479
|
+
* @param {Object.<string,*>} message Plain object to verify
|
|
1480
|
+
* @returns {string|null} `null` if valid, otherwise the reason why it is not
|
|
1481
|
+
*/
|
|
1482
|
+
PrivilegeScreenChatMessage.verify = function verify(message) {
|
|
1483
|
+
if (typeof message !== "object" || message === null)
|
|
1484
|
+
return "object expected";
|
|
1485
|
+
if (message.common != null && message.hasOwnProperty("common")) {
|
|
1486
|
+
let error = $root.douyin.Common.verify(message.common);
|
|
1487
|
+
if (error)
|
|
1488
|
+
return "common." + error;
|
|
1489
|
+
}
|
|
1490
|
+
if (message.user != null && message.hasOwnProperty("user")) {
|
|
1491
|
+
let error = $root.douyin.User.verify(message.user);
|
|
1492
|
+
if (error)
|
|
1493
|
+
return "user." + error;
|
|
1494
|
+
}
|
|
1495
|
+
if (message.content != null && message.hasOwnProperty("content"))
|
|
1496
|
+
if (!$util.isString(message.content))
|
|
1497
|
+
return "content: string expected";
|
|
1498
|
+
return null;
|
|
1499
|
+
};
|
|
1500
|
+
/**
|
|
1501
|
+
* Creates a PrivilegeScreenChatMessage message from a plain object. Also converts values to their respective internal types.
|
|
1502
|
+
* @function fromObject
|
|
1503
|
+
* @memberof douyin.PrivilegeScreenChatMessage
|
|
1504
|
+
* @static
|
|
1505
|
+
* @param {Object.<string,*>} object Plain object
|
|
1506
|
+
* @returns {douyin.PrivilegeScreenChatMessage} PrivilegeScreenChatMessage
|
|
1507
|
+
*/
|
|
1508
|
+
PrivilegeScreenChatMessage.fromObject = function fromObject(object) {
|
|
1509
|
+
if (object instanceof $root.douyin.PrivilegeScreenChatMessage)
|
|
1510
|
+
return object;
|
|
1511
|
+
let message = new $root.douyin.PrivilegeScreenChatMessage();
|
|
1512
|
+
if (object.common != null) {
|
|
1513
|
+
if (typeof object.common !== "object")
|
|
1514
|
+
throw TypeError(".douyin.PrivilegeScreenChatMessage.common: object expected");
|
|
1515
|
+
message.common = $root.douyin.Common.fromObject(object.common);
|
|
1516
|
+
}
|
|
1517
|
+
if (object.user != null) {
|
|
1518
|
+
if (typeof object.user !== "object")
|
|
1519
|
+
throw TypeError(".douyin.PrivilegeScreenChatMessage.user: object expected");
|
|
1520
|
+
message.user = $root.douyin.User.fromObject(object.user);
|
|
1521
|
+
}
|
|
1522
|
+
if (object.content != null)
|
|
1523
|
+
message.content = String(object.content);
|
|
1524
|
+
return message;
|
|
1525
|
+
};
|
|
1526
|
+
/**
|
|
1527
|
+
* Creates a plain object from a PrivilegeScreenChatMessage message. Also converts values to other types if specified.
|
|
1528
|
+
* @function toObject
|
|
1529
|
+
* @memberof douyin.PrivilegeScreenChatMessage
|
|
1530
|
+
* @static
|
|
1531
|
+
* @param {douyin.PrivilegeScreenChatMessage} message PrivilegeScreenChatMessage
|
|
1532
|
+
* @param {$protobuf.IConversionOptions} [options] Conversion options
|
|
1533
|
+
* @returns {Object.<string,*>} Plain object
|
|
1534
|
+
*/
|
|
1535
|
+
PrivilegeScreenChatMessage.toObject = function toObject(message, options) {
|
|
1536
|
+
if (!options)
|
|
1537
|
+
options = {};
|
|
1538
|
+
let object = {};
|
|
1539
|
+
if (options.defaults) {
|
|
1540
|
+
object.common = null;
|
|
1541
|
+
object.user = null;
|
|
1542
|
+
object.content = "";
|
|
1543
|
+
}
|
|
1544
|
+
if (message.common != null && message.hasOwnProperty("common"))
|
|
1545
|
+
object.common = $root.douyin.Common.toObject(message.common, options);
|
|
1546
|
+
if (message.user != null && message.hasOwnProperty("user"))
|
|
1547
|
+
object.user = $root.douyin.User.toObject(message.user, options);
|
|
1548
|
+
if (message.content != null && message.hasOwnProperty("content"))
|
|
1549
|
+
object.content = message.content;
|
|
1550
|
+
return object;
|
|
1551
|
+
};
|
|
1552
|
+
/**
|
|
1553
|
+
* Converts this PrivilegeScreenChatMessage to JSON.
|
|
1554
|
+
* @function toJSON
|
|
1555
|
+
* @memberof douyin.PrivilegeScreenChatMessage
|
|
1556
|
+
* @instance
|
|
1557
|
+
* @returns {Object.<string,*>} JSON object
|
|
1558
|
+
*/
|
|
1559
|
+
PrivilegeScreenChatMessage.prototype.toJSON = function toJSON() {
|
|
1560
|
+
return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
|
|
1561
|
+
};
|
|
1562
|
+
/**
|
|
1563
|
+
* Gets the default type url for PrivilegeScreenChatMessage
|
|
1564
|
+
* @function getTypeUrl
|
|
1565
|
+
* @memberof douyin.PrivilegeScreenChatMessage
|
|
1566
|
+
* @static
|
|
1567
|
+
* @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
|
|
1568
|
+
* @returns {string} The default type url
|
|
1569
|
+
*/
|
|
1570
|
+
PrivilegeScreenChatMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
|
|
1571
|
+
if (typeUrlPrefix === undefined) {
|
|
1572
|
+
typeUrlPrefix = "type.googleapis.com";
|
|
1573
|
+
}
|
|
1574
|
+
return typeUrlPrefix + "/douyin.PrivilegeScreenChatMessage";
|
|
1575
|
+
};
|
|
1576
|
+
return PrivilegeScreenChatMessage;
|
|
1577
|
+
})();
|
|
1578
|
+
douyin.ScreenChatMessage = (function () {
|
|
1579
|
+
/**
|
|
1580
|
+
* Properties of a ScreenChatMessage.
|
|
1581
|
+
* @memberof douyin
|
|
1582
|
+
* @interface IScreenChatMessage
|
|
1583
|
+
* @property {douyin.ICommon|null} [common] ScreenChatMessage common
|
|
1584
|
+
* @property {douyin.IUser|null} [user] ScreenChatMessage user
|
|
1585
|
+
* @property {string|null} [content] ScreenChatMessage content
|
|
1586
|
+
* @property {number|Long|null} [eventTime] ScreenChatMessage eventTime
|
|
1587
|
+
*/
|
|
1588
|
+
/**
|
|
1589
|
+
* Constructs a new ScreenChatMessage.
|
|
1590
|
+
* @memberof douyin
|
|
1591
|
+
* @classdesc Represents a ScreenChatMessage.
|
|
1592
|
+
* @implements IScreenChatMessage
|
|
1593
|
+
* @constructor
|
|
1594
|
+
* @param {douyin.IScreenChatMessage=} [properties] Properties to set
|
|
1595
|
+
*/
|
|
1596
|
+
function ScreenChatMessage(properties) {
|
|
1597
|
+
if (properties)
|
|
1598
|
+
for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)
|
|
1599
|
+
if (properties[keys[i]] != null)
|
|
1600
|
+
this[keys[i]] = properties[keys[i]];
|
|
1601
|
+
}
|
|
1602
|
+
/**
|
|
1603
|
+
* ScreenChatMessage common.
|
|
1604
|
+
* @member {douyin.ICommon|null|undefined} common
|
|
1605
|
+
* @memberof douyin.ScreenChatMessage
|
|
1606
|
+
* @instance
|
|
1607
|
+
*/
|
|
1608
|
+
ScreenChatMessage.prototype.common = null;
|
|
1609
|
+
/**
|
|
1610
|
+
* ScreenChatMessage user.
|
|
1611
|
+
* @member {douyin.IUser|null|undefined} user
|
|
1612
|
+
* @memberof douyin.ScreenChatMessage
|
|
1613
|
+
* @instance
|
|
1614
|
+
*/
|
|
1615
|
+
ScreenChatMessage.prototype.user = null;
|
|
1616
|
+
/**
|
|
1617
|
+
* ScreenChatMessage content.
|
|
1618
|
+
* @member {string} content
|
|
1619
|
+
* @memberof douyin.ScreenChatMessage
|
|
1620
|
+
* @instance
|
|
1621
|
+
*/
|
|
1622
|
+
ScreenChatMessage.prototype.content = "";
|
|
1623
|
+
/**
|
|
1624
|
+
* ScreenChatMessage eventTime.
|
|
1625
|
+
* @member {number|Long} eventTime
|
|
1626
|
+
* @memberof douyin.ScreenChatMessage
|
|
1627
|
+
* @instance
|
|
1628
|
+
*/
|
|
1629
|
+
ScreenChatMessage.prototype.eventTime = $util.Long ? $util.Long.fromBits(0, 0, true) : 0;
|
|
1630
|
+
/**
|
|
1631
|
+
* Creates a new ScreenChatMessage instance using the specified properties.
|
|
1632
|
+
* @function create
|
|
1633
|
+
* @memberof douyin.ScreenChatMessage
|
|
1634
|
+
* @static
|
|
1635
|
+
* @param {douyin.IScreenChatMessage=} [properties] Properties to set
|
|
1636
|
+
* @returns {douyin.ScreenChatMessage} ScreenChatMessage instance
|
|
1637
|
+
*/
|
|
1638
|
+
ScreenChatMessage.create = function create(properties) {
|
|
1639
|
+
return new ScreenChatMessage(properties);
|
|
1640
|
+
};
|
|
1641
|
+
/**
|
|
1642
|
+
* Encodes the specified ScreenChatMessage message. Does not implicitly {@link douyin.ScreenChatMessage.verify|verify} messages.
|
|
1643
|
+
* @function encode
|
|
1644
|
+
* @memberof douyin.ScreenChatMessage
|
|
1645
|
+
* @static
|
|
1646
|
+
* @param {douyin.IScreenChatMessage} message ScreenChatMessage message or plain object to encode
|
|
1647
|
+
* @param {$protobuf.Writer} [writer] Writer to encode to
|
|
1648
|
+
* @returns {$protobuf.Writer} Writer
|
|
1649
|
+
*/
|
|
1650
|
+
ScreenChatMessage.encode = function encode(message, writer) {
|
|
1651
|
+
if (!writer)
|
|
1652
|
+
writer = $Writer.create();
|
|
1653
|
+
if (message.common != null && Object.hasOwnProperty.call(message, "common"))
|
|
1654
|
+
$root.douyin.Common.encode(message.common, writer.uint32(/* id 1, wireType 2 =*/ 10).fork()).ldelim();
|
|
1655
|
+
if (message.user != null && Object.hasOwnProperty.call(message, "user"))
|
|
1656
|
+
$root.douyin.User.encode(message.user, writer.uint32(/* id 2, wireType 2 =*/ 18).fork()).ldelim();
|
|
1657
|
+
if (message.content != null && Object.hasOwnProperty.call(message, "content"))
|
|
1658
|
+
writer.uint32(/* id 4, wireType 2 =*/ 34).string(message.content);
|
|
1659
|
+
if (message.eventTime != null && Object.hasOwnProperty.call(message, "eventTime"))
|
|
1660
|
+
writer.uint32(/* id 12, wireType 0 =*/ 96).uint64(message.eventTime);
|
|
1661
|
+
return writer;
|
|
1662
|
+
};
|
|
1663
|
+
/**
|
|
1664
|
+
* Encodes the specified ScreenChatMessage message, length delimited. Does not implicitly {@link douyin.ScreenChatMessage.verify|verify} messages.
|
|
1665
|
+
* @function encodeDelimited
|
|
1666
|
+
* @memberof douyin.ScreenChatMessage
|
|
1667
|
+
* @static
|
|
1668
|
+
* @param {douyin.IScreenChatMessage} message ScreenChatMessage message or plain object to encode
|
|
1669
|
+
* @param {$protobuf.Writer} [writer] Writer to encode to
|
|
1670
|
+
* @returns {$protobuf.Writer} Writer
|
|
1671
|
+
*/
|
|
1672
|
+
ScreenChatMessage.encodeDelimited = function encodeDelimited(message, writer) {
|
|
1673
|
+
return this.encode(message, writer).ldelim();
|
|
1674
|
+
};
|
|
1675
|
+
/**
|
|
1676
|
+
* Decodes a ScreenChatMessage message from the specified reader or buffer.
|
|
1677
|
+
* @function decode
|
|
1678
|
+
* @memberof douyin.ScreenChatMessage
|
|
1679
|
+
* @static
|
|
1680
|
+
* @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
|
|
1681
|
+
* @param {number} [length] Message length if known beforehand
|
|
1682
|
+
* @returns {douyin.ScreenChatMessage} ScreenChatMessage
|
|
1683
|
+
* @throws {Error} If the payload is not a reader or valid buffer
|
|
1684
|
+
* @throws {$protobuf.util.ProtocolError} If required fields are missing
|
|
1685
|
+
*/
|
|
1686
|
+
ScreenChatMessage.decode = function decode(reader, length) {
|
|
1687
|
+
if (!(reader instanceof $Reader))
|
|
1688
|
+
reader = $Reader.create(reader);
|
|
1689
|
+
let end = length === undefined ? reader.len : reader.pos + length, message = new $root.douyin.ScreenChatMessage();
|
|
1690
|
+
while (reader.pos < end) {
|
|
1691
|
+
let tag = reader.uint32();
|
|
1692
|
+
switch (tag >>> 3) {
|
|
1693
|
+
case 1: {
|
|
1694
|
+
message.common = $root.douyin.Common.decode(reader, reader.uint32());
|
|
1695
|
+
break;
|
|
1696
|
+
}
|
|
1697
|
+
case 2: {
|
|
1698
|
+
message.user = $root.douyin.User.decode(reader, reader.uint32());
|
|
1699
|
+
break;
|
|
1700
|
+
}
|
|
1701
|
+
case 4: {
|
|
1702
|
+
message.content = reader.string();
|
|
1703
|
+
break;
|
|
1704
|
+
}
|
|
1705
|
+
case 12: {
|
|
1706
|
+
message.eventTime = reader.uint64();
|
|
1707
|
+
break;
|
|
1708
|
+
}
|
|
1709
|
+
default:
|
|
1710
|
+
reader.skipType(tag & 7);
|
|
1711
|
+
break;
|
|
1712
|
+
}
|
|
1713
|
+
}
|
|
1714
|
+
return message;
|
|
1715
|
+
};
|
|
1716
|
+
/**
|
|
1717
|
+
* Decodes a ScreenChatMessage message from the specified reader or buffer, length delimited.
|
|
1718
|
+
* @function decodeDelimited
|
|
1719
|
+
* @memberof douyin.ScreenChatMessage
|
|
1720
|
+
* @static
|
|
1721
|
+
* @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
|
|
1722
|
+
* @returns {douyin.ScreenChatMessage} ScreenChatMessage
|
|
1723
|
+
* @throws {Error} If the payload is not a reader or valid buffer
|
|
1724
|
+
* @throws {$protobuf.util.ProtocolError} If required fields are missing
|
|
1725
|
+
*/
|
|
1726
|
+
ScreenChatMessage.decodeDelimited = function decodeDelimited(reader) {
|
|
1727
|
+
if (!(reader instanceof $Reader))
|
|
1728
|
+
reader = new $Reader(reader);
|
|
1729
|
+
return this.decode(reader, reader.uint32());
|
|
1730
|
+
};
|
|
1731
|
+
/**
|
|
1732
|
+
* Verifies a ScreenChatMessage message.
|
|
1733
|
+
* @function verify
|
|
1734
|
+
* @memberof douyin.ScreenChatMessage
|
|
1735
|
+
* @static
|
|
1736
|
+
* @param {Object.<string,*>} message Plain object to verify
|
|
1737
|
+
* @returns {string|null} `null` if valid, otherwise the reason why it is not
|
|
1738
|
+
*/
|
|
1739
|
+
ScreenChatMessage.verify = function verify(message) {
|
|
1740
|
+
if (typeof message !== "object" || message === null)
|
|
1741
|
+
return "object expected";
|
|
1742
|
+
if (message.common != null && message.hasOwnProperty("common")) {
|
|
1743
|
+
let error = $root.douyin.Common.verify(message.common);
|
|
1744
|
+
if (error)
|
|
1745
|
+
return "common." + error;
|
|
1746
|
+
}
|
|
1747
|
+
if (message.user != null && message.hasOwnProperty("user")) {
|
|
1748
|
+
let error = $root.douyin.User.verify(message.user);
|
|
1749
|
+
if (error)
|
|
1750
|
+
return "user." + error;
|
|
1751
|
+
}
|
|
1752
|
+
if (message.content != null && message.hasOwnProperty("content"))
|
|
1753
|
+
if (!$util.isString(message.content))
|
|
1754
|
+
return "content: string expected";
|
|
1755
|
+
if (message.eventTime != null && message.hasOwnProperty("eventTime"))
|
|
1756
|
+
if (!$util.isInteger(message.eventTime) &&
|
|
1757
|
+
!(message.eventTime &&
|
|
1758
|
+
$util.isInteger(message.eventTime.low) &&
|
|
1759
|
+
$util.isInteger(message.eventTime.high)))
|
|
1760
|
+
return "eventTime: integer|Long expected";
|
|
1761
|
+
return null;
|
|
1762
|
+
};
|
|
1763
|
+
/**
|
|
1764
|
+
* Creates a ScreenChatMessage message from a plain object. Also converts values to their respective internal types.
|
|
1765
|
+
* @function fromObject
|
|
1766
|
+
* @memberof douyin.ScreenChatMessage
|
|
1767
|
+
* @static
|
|
1768
|
+
* @param {Object.<string,*>} object Plain object
|
|
1769
|
+
* @returns {douyin.ScreenChatMessage} ScreenChatMessage
|
|
1770
|
+
*/
|
|
1771
|
+
ScreenChatMessage.fromObject = function fromObject(object) {
|
|
1772
|
+
if (object instanceof $root.douyin.ScreenChatMessage)
|
|
1773
|
+
return object;
|
|
1774
|
+
let message = new $root.douyin.ScreenChatMessage();
|
|
1775
|
+
if (object.common != null) {
|
|
1776
|
+
if (typeof object.common !== "object")
|
|
1777
|
+
throw TypeError(".douyin.ScreenChatMessage.common: object expected");
|
|
1778
|
+
message.common = $root.douyin.Common.fromObject(object.common);
|
|
1779
|
+
}
|
|
1780
|
+
if (object.user != null) {
|
|
1781
|
+
if (typeof object.user !== "object")
|
|
1782
|
+
throw TypeError(".douyin.ScreenChatMessage.user: object expected");
|
|
1783
|
+
message.user = $root.douyin.User.fromObject(object.user);
|
|
1784
|
+
}
|
|
1785
|
+
if (object.content != null)
|
|
1786
|
+
message.content = String(object.content);
|
|
1787
|
+
if (object.eventTime != null)
|
|
1788
|
+
if ($util.Long)
|
|
1789
|
+
(message.eventTime = $util.Long.fromValue(object.eventTime)).unsigned = true;
|
|
1790
|
+
else if (typeof object.eventTime === "string")
|
|
1791
|
+
message.eventTime = parseInt(object.eventTime, 10);
|
|
1792
|
+
else if (typeof object.eventTime === "number")
|
|
1793
|
+
message.eventTime = object.eventTime;
|
|
1794
|
+
else if (typeof object.eventTime === "object")
|
|
1795
|
+
message.eventTime = new $util.LongBits(object.eventTime.low >>> 0, object.eventTime.high >>> 0).toNumber(true);
|
|
1796
|
+
return message;
|
|
1797
|
+
};
|
|
1798
|
+
/**
|
|
1799
|
+
* Creates a plain object from a ScreenChatMessage message. Also converts values to other types if specified.
|
|
1800
|
+
* @function toObject
|
|
1801
|
+
* @memberof douyin.ScreenChatMessage
|
|
1802
|
+
* @static
|
|
1803
|
+
* @param {douyin.ScreenChatMessage} message ScreenChatMessage
|
|
1804
|
+
* @param {$protobuf.IConversionOptions} [options] Conversion options
|
|
1805
|
+
* @returns {Object.<string,*>} Plain object
|
|
1806
|
+
*/
|
|
1807
|
+
ScreenChatMessage.toObject = function toObject(message, options) {
|
|
1808
|
+
if (!options)
|
|
1809
|
+
options = {};
|
|
1810
|
+
let object = {};
|
|
1811
|
+
if (options.defaults) {
|
|
1812
|
+
object.common = null;
|
|
1813
|
+
object.user = null;
|
|
1814
|
+
object.content = "";
|
|
1815
|
+
if ($util.Long) {
|
|
1816
|
+
let long = new $util.Long(0, 0, true);
|
|
1817
|
+
object.eventTime =
|
|
1818
|
+
options.longs === String
|
|
1819
|
+
? long.toString()
|
|
1820
|
+
: options.longs === Number
|
|
1821
|
+
? long.toNumber()
|
|
1822
|
+
: long;
|
|
1823
|
+
}
|
|
1824
|
+
else
|
|
1825
|
+
object.eventTime = options.longs === String ? "0" : 0;
|
|
1826
|
+
}
|
|
1827
|
+
if (message.common != null && message.hasOwnProperty("common"))
|
|
1828
|
+
object.common = $root.douyin.Common.toObject(message.common, options);
|
|
1829
|
+
if (message.user != null && message.hasOwnProperty("user"))
|
|
1830
|
+
object.user = $root.douyin.User.toObject(message.user, options);
|
|
1831
|
+
if (message.content != null && message.hasOwnProperty("content"))
|
|
1832
|
+
object.content = message.content;
|
|
1833
|
+
if (message.eventTime != null && message.hasOwnProperty("eventTime"))
|
|
1834
|
+
if (typeof message.eventTime === "number")
|
|
1835
|
+
object.eventTime =
|
|
1836
|
+
options.longs === String ? String(message.eventTime) : message.eventTime;
|
|
1837
|
+
else
|
|
1838
|
+
object.eventTime =
|
|
1839
|
+
options.longs === String
|
|
1840
|
+
? $util.Long.prototype.toString.call(message.eventTime)
|
|
1841
|
+
: options.longs === Number
|
|
1842
|
+
? new $util.LongBits(message.eventTime.low >>> 0, message.eventTime.high >>> 0).toNumber(true)
|
|
1843
|
+
: message.eventTime;
|
|
1844
|
+
return object;
|
|
1845
|
+
};
|
|
1846
|
+
/**
|
|
1847
|
+
* Converts this ScreenChatMessage to JSON.
|
|
1848
|
+
* @function toJSON
|
|
1849
|
+
* @memberof douyin.ScreenChatMessage
|
|
1850
|
+
* @instance
|
|
1851
|
+
* @returns {Object.<string,*>} JSON object
|
|
1852
|
+
*/
|
|
1853
|
+
ScreenChatMessage.prototype.toJSON = function toJSON() {
|
|
1854
|
+
return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
|
|
1855
|
+
};
|
|
1856
|
+
/**
|
|
1857
|
+
* Gets the default type url for ScreenChatMessage
|
|
1858
|
+
* @function getTypeUrl
|
|
1859
|
+
* @memberof douyin.ScreenChatMessage
|
|
1860
|
+
* @static
|
|
1861
|
+
* @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
|
|
1862
|
+
* @returns {string} The default type url
|
|
1863
|
+
*/
|
|
1864
|
+
ScreenChatMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
|
|
1865
|
+
if (typeUrlPrefix === undefined) {
|
|
1866
|
+
typeUrlPrefix = "type.googleapis.com";
|
|
1867
|
+
}
|
|
1868
|
+
return typeUrlPrefix + "/douyin.ScreenChatMessage";
|
|
1869
|
+
};
|
|
1870
|
+
return ScreenChatMessage;
|
|
1871
|
+
})();
|
|
1335
1872
|
douyin.LandscapeAreaCommon = (function () {
|
|
1336
1873
|
/**
|
|
1337
1874
|
* Properties of a LandscapeAreaCommon.
|
package/package.json
CHANGED
package/types/index.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ import type {
|
|
|
9
9
|
RoomStatsMessage,
|
|
10
10
|
RoomRankMessage,
|
|
11
11
|
Message,
|
|
12
|
+
PrivilegeScreenChatMessage,
|
|
13
|
+
ScreenChatMessage,
|
|
12
14
|
} from "../types/types.js";
|
|
13
15
|
import WebSocket from "ws";
|
|
14
16
|
|
|
@@ -27,6 +29,8 @@ interface Events {
|
|
|
27
29
|
roomStats: (message: RoomStatsMessage) => void;
|
|
28
30
|
roomRank: (message: RoomRankMessage) => void;
|
|
29
31
|
message: (message: Message) => void;
|
|
32
|
+
privilegeScreenChat: (message: PrivilegeScreenChatMessage) => void;
|
|
33
|
+
screenChat: (message: ScreenChatMessage) => void;
|
|
30
34
|
}
|
|
31
35
|
declare class DouYinDanmaClient extends TypedEmitter<Events> {
|
|
32
36
|
private ws: WebSocket;
|
package/types/types.d.ts
CHANGED
|
@@ -150,7 +150,9 @@ export interface SocialMessage {
|
|
|
150
150
|
export interface GiftMessage {
|
|
151
151
|
common: Common & { method: "WebcastGiftMessage" };
|
|
152
152
|
user: User;
|
|
153
|
+
// 这个参数其实差不多是秒级时间戳,并不可靠
|
|
153
154
|
groupId: string;
|
|
155
|
+
giftId: number;
|
|
154
156
|
gift: Gift;
|
|
155
157
|
publicAreaCommon: PublicAreaCommon;
|
|
156
158
|
trayDisplayText: TrayDisplayText;
|
|
@@ -190,6 +192,19 @@ export interface RoomRankMessage {
|
|
|
190
192
|
}[];
|
|
191
193
|
}
|
|
192
194
|
|
|
195
|
+
export interface PrivilegeScreenChatMessage {
|
|
196
|
+
common: Common & { method: "WebcastPrivilegeScreenChatMessage" };
|
|
197
|
+
user: User;
|
|
198
|
+
content: string;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export interface ScreenChatMessage {
|
|
202
|
+
common: Common & { method: "WebcastScreenChatMessage" };
|
|
203
|
+
user: User;
|
|
204
|
+
content: string;
|
|
205
|
+
eventTime: string;
|
|
206
|
+
}
|
|
207
|
+
|
|
193
208
|
export type Message =
|
|
194
209
|
| ChatMessage
|
|
195
210
|
| MemberMessage
|
|
@@ -198,4 +213,6 @@ export type Message =
|
|
|
198
213
|
| GiftMessage
|
|
199
214
|
| RoomUserSeqMessage
|
|
200
215
|
| RoomStatsMessage
|
|
201
|
-
| RoomRankMessage
|
|
216
|
+
| RoomRankMessage
|
|
217
|
+
| PrivilegeScreenChatMessage
|
|
218
|
+
| ScreenChatMessage;
|