From 840519baa1c0249a8c52488cb1946c1bee599ce6 Mon Sep 17 00:00:00 2001 From: Sichongzou <68594934+Sichongzou@users.noreply.github.com> Date: Wed, 18 May 2022 09:00:03 +0800 Subject: [PATCH] Update bilibili.py --- .../nonebot_bison/platform/bilibili.py | 61 ++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/src/plugins/nonebot_bison/platform/bilibili.py b/src/plugins/nonebot_bison/platform/bilibili.py index ad21a8a..3ccd7af 100644 --- a/src/plugins/nonebot_bison/platform/bilibili.py +++ b/src/plugins/nonebot_bison/platform/bilibili.py @@ -5,7 +5,7 @@ import httpx from ..post import Post from ..types import Category, RawPost, Tag, Target -from .platform import CategoryNotSupport, NewMessage +from .platform import CategoryNotSupport, NewMessage,StatusChange class Bilibili(NewMessage): @@ -144,3 +144,62 @@ class Bilibili(NewMessage): else: raise CategoryNotSupport(post_type) return Post("bilibili", text=text, url=url, pics=pic, target_name=target_name) + +class Bilibililive(StatusChange): +# Author : Sichongzou +# Date : 2022-5-18 8:54 +# Description : bilibili开播提醒 +# E-mail : 1557157806@qq.com + categories = {} + platform_name = "bilibililive" + enable_tag = True + enabled = True + is_common = True + schedule_type = "interval" + schedule_kw = {"seconds": 10} + name = "B站直播" + has_target = True + + async def get_target_name(self, target: Target) -> Optional[str]: + async with httpx.AsyncClient() as client: + res = await client.get( + "https://api.bilibili.com/x/space/acc/info", params={"mid": target} + ) + res_data = json.loads(res.text) + if res_data["code"]: + return None + return res_data["data"]["name"] + + async def get_status(self, target: Target): + async with httpx.AsyncClient() as client: + params = {"mid": target} + res = await client.get( + "https://api.bilibili.com/x/space/acc/info", + params=params, + timeout=4.0, + ) + res_dict = json.loads(res.text) + if res_dict["code"] == 0: + info={} + info["uid"]=res_dict["data"]["mid"] + info["uname"]=res_dict["data"]["name"] + info["live_state"]=res_dict["data"]["live_room"]["liveStatus"] + info["url"]=res_dict["data"]["live_room"]["url"] + info["title"]=res_dict["data"]["live_room"]["title"] + info["cover"]=res_dict["data"]["live_room"]["cover"] + return info + else: + return [] + + def compare_status(self, target: Target, old_status, new_status) -> list[RawPost]: + if(new_status["live_state"]!=old_status["live_state"] and new_status["live_state"]==1): + return [new_status] + else: + return[] + + async def parse(self, raw_post: RawPost) -> Post: + url=raw_post["url"] + pic=[raw_post["cover"]] + target_name=raw_post["uname"] + text=target_name+"老师的直播 开播啦!小伙伴们请务必速速来围观!" + return Post("bilibililive", text=text, url=url, pics=pic, target_name=target_name)