Skip to main content

StarBotCore

PyPI Python License STARS

一个优雅的异步 bilibili 直播间监听库

特性

  • 极简代码调用,可快速实现高级功能
  • 细化原始事件,自动区分文字弹幕与表情弹幕,免费礼物、付费礼物与盲盒礼物等
  • 基于分级消息主题的订阅发布模式,可灵活监听单个直播间或多个直播间
  • 自动解析原始数据并包装为事件发布,无需手动使用代码处理原始数据

快速开始

安装

pip install starbot-bilibili-core

代码框架

在开始编写代码前,需要引入异步任务执行器 executor,并执行初始化操作

from starbot_executor import executor

async def main():
    # 业务逻辑
    pass

loop = executor.init()
loop.run_until_complete(main())
loop.run_forever()

监听直播间

引入直播间事件监听器 listener 后,仅须一行代码即可添加监听直播间,并自动持续发布该直播间的相关事件

await listener.add(room_id=22889484)

已支持的事件列表

  • 连接成功事件(ConnectedEvent)
  • 断开连接事件(DisconnectedEvent)
  • 心跳响应超时事件(TimeoutEvent)
  • 开播事件(LiveOnEvent)
  • 下播事件(LiveOffEvent)
  • 文字弹幕事件(DanmuEvent)
  • 大表情弹幕事件(EmojiEvent)
  • 免费礼物事件(SilverGiftEvent)
  • 付费礼物事件(GoldGiftEvent)
  • 盲盒礼物事件(BlindGiftEvent)
  • 醒目留言事件(SuperChatEvent)
  • 开通舰长事件(CaptainEvent)
  • 开通提督事件(CommanderEvent)
  • 开通总督事件(GovernorEvent)
  • 进房事件(EnterRoomEvent)
  • 关注事件(FollowEvent)
  • 观看过人数更新事件(WatchedUpdateEvent)
  • 点赞事件(LikeClickEvent)
  • 点赞数更新事件(LikeUpdateEvent)

订阅-发布机制

消息主题为层级结构,较高层级的消息主题可同时监听到较低层级的事件,举例如下:

弹幕事件对应消息主题为三层,一级主题为:EventType.LiveEvent,二级主题为:LiveEvent.DanmuEvent,三级主题为:房间号
使用 @executor.on(EventType.LiveEvent, LiveEvent.DanmuEvent, 房间号) 装饰的方法,仅可监听到相应房间号的弹幕事件
使用 @executor.on(EventType.LiveEvent, LiveEvent.DanmuEvent) 装饰的方法,可监听到所有房间的弹幕事件
使用 @executor.on(EventType.LiveEvent) 或 @executor.on() 装饰的方法,可监听到所有房间的所有事件

完整示例

from loguru import logger
from starbot_executor import executor

from starbot_core import listener, EventType, LiveEvent, ConnectedEvent, DisconnectedEvent, DanmuEvent, BlindGiftEvent
from starbot_core.exception.LoginException import LoginException
from starbot_core.utils.network import credential


async def main():
    # 登录 B 站账号,不登录账号无法抓取完整数据,Cookie 获取方式:https://bot.starlwr.com/depoly/document
    try:
        await credential.login(
            sessdata="在此填入 SESSDATA 字段",
            bili_jct="在此填入 bili_jct 字段",
            buvid3="在此填入 buvid3 字段"
        )
    except LoginException as e:
        logger.error(e.msg, e)
        return

    # 例 1: 监听所有直播间的所有事件
    @executor.on()
    async def on_all(subjects, event):
        logger.info(f"{subjects}: {event}")

    # 例 2: 监听所有直播间的连接成功事件
    @executor.on(EventType.LiveEvent, LiveEvent.ConnectedEvent)
    async def on_connected(event: ConnectedEvent):
        logger.success(f"已成功连接到 {event.source.uname} 的直播间 {event.source.room_id}")

    # 例 3: 监听所有直播间的断开连接事件
    @executor.on(EventType.LiveEvent, LiveEvent.DisconnectedEvent)
    async def on_disconnected(event: DisconnectedEvent):
        logger.opt(colors=True).info(f"已断开连接 <cyan>{event.source.uname}</> 的直播间 <cyan>{event.source.room_id}</>")

    # 例 4: 监听 22889484 直播间的弹幕事件
    @executor.on(EventType.LiveEvent, LiveEvent.DanmuEvent, 22889484)
    async def on_danmu(event: DanmuEvent):
        if event.fans_medal is None:
            logger.info(f"{event.sender.uname} (无粉丝勋章): {event.content}")
        else:
            logger.info(
                f"{event.sender.uname} (Lv {event.fans_medal.level} - {event.fans_medal.name}): {event.content}")

    # 例 5: 监听所有直播间的盲盒礼物事件
    @executor.on(EventType.LiveEvent, LiveEvent.BlindGiftEvent)
    async def on_blind_gift(event: BlindGiftEvent):
        if event.profit >= 0:
            logger.info(f"{event.sender.uname} 通过 {event.blind_name} 开出了 {event.count} 个 {event.gift_name}, 赚了 {abs(event.profit)} 元")
        else:
            logger.info(f"{event.sender.uname} 通过 {event.blind_name} 开出了 {event.count} 个 {event.gift_name}, 亏了 {abs(event.profit)} 元")

    # 循环添加监听直播间
    room_ids = (22889484, 55634, 21013446)
    for room_id in room_ids:
        await listener.add(room_id=room_id)


listener.auto_complete = True  # 设置为 True 可以获得更完整的信息(部分事件中的头像、昵称等),但会因网络请求导致一定的延迟,请酌情使用
loop = executor.init()
loop.run_until_complete(main())
loop.run_forever()

相关项目

鸣谢

Metadata

Release files for starbot-bilibili-core 1.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for starbot-bilibili-core 1.3.0
File Size Uploaded
starbot_bilibili_core-1.3.0.tar.gz 47.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for starbot-bilibili-core 1.3.0
File Interpreter ABI Platform
starbot_bilibili_core-1.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 79.0 kB

Release files / starbot_bilibili_core-1.3.0.tar.gz

Download URL starbot_bilibili_core-1.3.0.tar.gz
Size 47.5 kB
Tags Source
SHA-256 checksum
How to use checksums
a83e1b3ec4c423b2081a30324da30b35c2e2866e84b6996f36948e3c7e6867fe
BLAKE2b-256 checksum
How to use checksums
b662c81224281236b69c36a01d8c44ac0a8812ef5b0cae5e14862f1f74d993c0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.6.1 CPython/3.11.6 Windows/10

Release files / starbot_bilibili_core-1.3.0-py3-none-any.whl

Download URL starbot_bilibili_core-1.3.0-py3-none-any.whl
Size 31.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a2cf9074e267081b30c6579af5ba751e52dc46a03e948cd0313632593f4b797c
BLAKE2b-256 checksum
How to use checksums
43e7da51601ce76061976a85a8de6b4df26eb2d87f89267810aa12058b5303aa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.6.1 CPython/3.11.6 Windows/10

Release history Release notifications | RSS feed

This release

1.3.0 This release

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page