diff --git a/app.py b/app.py index b86ff1e..07ae543 100644 --- a/app.py +++ b/app.py @@ -37,7 +37,7 @@ async def listen_sc(ctx: BLiverCtx): msg = SuperChatMsg(ctx.body) print("sc 来了") print( - f"""\n感谢 {msg.sender['name']}({msg.sender['medal']['medal_name']}:{msg.sender['medal']['medal_level']})的价值{msg.price}的sc\n\n\t{msg.content}\n""" + f"\n感谢 {msg.sender['name']}({msg.sender['medal']['medal_name']}:{msg.sender['medal']['medal_level']})的价值 {msg.price} 的sc\n\n\t{msg.content}\n" ) diff --git a/blive/core.py b/blive/core.py index 4373351..d85d7dd 100644 --- a/blive/core.py +++ b/blive/core.py @@ -1,8 +1,7 @@ import asyncio from collections import namedtuple -from multiprocessing import RawValue, Lock import json -from random import randint, random +from random import randint import requests import struct import enum diff --git a/blive/framework.py b/blive/framework.py index 491d8c8..908d1ec 100644 --- a/blive/framework.py +++ b/blive/framework.py @@ -11,8 +11,8 @@ from apscheduler.util import _Undefined from requests.exceptions import ConnectionError from .core import ( + BWS_MsgPackage, PackageHeader, - packman, Events, Operation, get_blive_room_info, @@ -84,6 +84,7 @@ class BLiver: else: self.logger = logger self._ws: ClientWebSocketResponse = None + self.packman = BWS_MsgPackage() self.scheduler = AsyncIOScheduler(timezone="Asia/ShangHai") self.processor = Processor(logger=self.logger) self.aio_session = aiohttp.ClientSession() @@ -149,7 +150,7 @@ class BLiver: try: if self._ws is not None and not self._ws.closed: await self._ws.send_bytes( - packman.pack(heartbeat(), Operation.HEARTBEAT) + self.packman.pack(heartbeat(), Operation.HEARTBEAT) ) self.logger.debug("heartbeat sended") return @@ -173,7 +174,9 @@ class BLiver: self._ws = ws # 发送认证 await ws.send_bytes( - packman.pack(certification(self.real_roomid, token), Operation.AUTH) + self.packman.pack( + certification(self.real_roomid, token), Operation.AUTH + ) ) return except ( @@ -209,7 +212,7 @@ class BLiver: continue if msg.type != aiohttp.WSMsgType.BINARY: continue - mq = packman.unpack(msg.data) + mq = self.packman.unpack(msg.data) self.logger.debug("received msg:\n{}", mq) tasks = [self.processor.process(BLiverCtx(self, m)) for m in mq] await asyncio.gather(*tasks) diff --git a/blive/msg.py b/blive/msg.py index c4741d8..4112c02 100644 --- a/blive/msg.py +++ b/blive/msg.py @@ -1,6 +1,5 @@ from abc import ABC import json -from re import L from typing import List """ diff --git a/multi_room.py b/multi_room.py new file mode 100644 index 0000000..d936e39 --- /dev/null +++ b/multi_room.py @@ -0,0 +1,35 @@ +"""监听多个直播间的例子""" + +import asyncio +from blive import BLiver, Events, BLiverCtx +from blive.msg import DanMuMsg + + +# 定义弹幕事件handler +async def listen(ctx: BLiverCtx): + danmu = DanMuMsg(ctx.body) + print( + f'\n{danmu.sender.name} ({danmu.sender.medal.medal_name}:{danmu.sender.medal.medal_level}): "{danmu.content}"\n' + ) + + +async def main(): + # 两个直播间 + ke = BLiver(605) + azi = BLiver(510) + + # 注册handler + ke.register_handler(Events.DANMU_MSG, listen) + azi.register_handler(Events.DANMU_MSG, listen) + + # 以异步task的形式运行 + task1 = ke.run_as_task() + task2 = azi.run_as_task() + + # await 两个任务 + await asyncio.gather(*[task1, task2]) + + +if __name__ == "__main__": + loop = asyncio.get_event_loop() + loop.run_until_complete(main()) diff --git a/setup.py b/setup.py index c14dd15..5c334e4 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ with open("./README.md", "r") as f: setuptools.setup( name="blive", - version="0.0.3", + version="0.0.4", author="cam", author_email="yulinfeng000@gmail.com", long_description=description,