forked from xfgryujk/blivedm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ludeng.py
79 lines (59 loc) · 2.75 KB
/
ludeng.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
from Config import Config
from liveStatusUtil import updateLiveStatus, updateLiveStatus_loop
myConfig = Config("ludengConfig.json")
import asyncio
import blivedm
import aiofiles
async def write_to_file(text, filename):
async with aiofiles.open(filename, mode='a', encoding="utf-8") as f:
await f.write(text + "\n")
def cleanMessage(message):
return f"{message.timestamp};{message.uname};{message.uid};{message.dm_type};{message.medal_room_id};{message.medal_level};{message.msg}"
async def run_multi_clients():
clients = [blivedm.BLiveClient(room_id) for room_id in myConfig.userConfigs.keys()]
handler = MyHandler()
for client in clients:
client.add_handler(handler)
client.start()
try:
await asyncio.gather(*(
client.join() for client in clients
))
finally:
await asyncio.gather(*(
client.stop_and_close() for client in clients
))
class MyHandler(blivedm.BaseHandler):
# # 演示如何添加自定义回调
# _CMD_CALLBACK_DICT = blivedm.BaseHandler._CMD_CALLBACK_DICT.copy()
#
# # 入场消息回调
# async def __interact_word_callback(self, client: blivedm.BLiveClient, command: dict):
# print(f"[{client.room_id}] INTERACT_WORD: self_type={type(self).__name__}, room_id={client.room_id},"
# f" uname={command['data']['uname']}")
# _CMD_CALLBACK_DICT['INTERACT_WORD'] = __interact_word_callback # noqa
async def _on_heartbeat(self, client: blivedm.BLiveClient, message: blivedm.HeartbeatMessage):
pass
# print(f'[{client.room_id}] 当前人气值:{message}')
async def _on_danmaku(self, client: blivedm.BLiveClient, message: blivedm.DanmakuMessage):
global myConfig
if myConfig.streamInfos[f'{client.room_id}']["live_status"] == 1:
cleaned_message = cleanMessage(message)
await write_to_file(f'{cleaned_message}', myConfig.streamInfos[f'{client.room_id}']["danmu_file_name"])
async def _on_gift(self, client: blivedm.BLiveClient, message: blivedm.GiftMessage):
pass
# print(f'[{client.room_id}] 礼物:{message}')
async def _on_buy_guard(self, client: blivedm.BLiveClient, message: blivedm.GuardBuyMessage):
pass
# print(f'[{client.room_id}] 上舰:{message}')
async def _on_super_chat(self, client: blivedm.BLiveClient, message: blivedm.SuperChatMessage):
pass
# print(f'[{client.room_id}] 醒目留言 {message}')
async def main(myConfig):
await updateLiveStatus(*myConfig.getConfigs())
task_1 = asyncio.create_task(run_multi_clients())
task_2 = asyncio.create_task(updateLiveStatus_loop(myConfig))
await task_1
await task_2
if __name__ == '__main__':
asyncio.run(main(myConfig))