# -*- coding: utf-8 -*- from typing import * from . import client as cli from . import models __all__ = ( 'HandlerInterface', 'BaseHandler', ) class HandlerInterface: """blivechat插件消息处理器接口""" def handle(self, client: cli.BlcPluginClient, command: dict): raise NotImplementedError def on_client_stopped(self, client: cli.BlcPluginClient, exception: Optional[Exception]): """ 当客户端停止时调用 这种情况说明blivechat已经退出了,或者插件被禁用了,因此重连基本会失败。这里唯一建议的操作是退出当前程序 """ def _make_msg_callback(method_name, message_cls): def callback(self: 'BaseHandler', client: cli.BlcPluginClient, command: dict): method = getattr(self, method_name) msg = message_cls.from_command(command['data']) extra = models.ExtraData.from_dict(command.get('extra', {})) return method(client, msg, extra) return callback class BaseHandler(HandlerInterface): """一个简单的消息处理器实现,带消息分发和消息类型转换。继承并重写_on_xxx方法即可实现自己的处理器""" _CMD_CALLBACK_DICT: Dict[ int, Optional[Callable[ ['BaseHandler', cli.BlcPluginClient, dict], Any ]] ] = { models.Command.ADD_ROOM: _make_msg_callback('_on_add_room', models.AddRoomMsg), models.Command.ROOM_INIT: _make_msg_callback('_on_room_init', models.RoomInitMsg), models.Command.DEL_ROOM: _make_msg_callback('_on_del_room', models.DelRoomMsg), models.Command.OPEN_PLUGIN_ADMIN_UI: _make_msg_callback( '_on_open_plugin_admin_ui', models.OpenPluginAdminUiMsg ), models.Command.ADD_TEXT: _make_msg_callback('_on_add_text', models.AddTextMsg), models.Command.ADD_GIFT: _make_msg_callback('_on_add_gift', models.AddGiftMsg), models.Command.ADD_MEMBER: _make_msg_callback('_on_add_member', models.AddMemberMsg), models.Command.ADD_SUPER_CHAT: _make_msg_callback('_on_add_super_chat', models.AddSuperChatMsg), models.Command.DEL_SUPER_CHAT: _make_msg_callback('_on_del_super_chat', models.DelSuperChatMsg), models.Command.UPDATE_TRANSLATION: _make_msg_callback('_on_update_translation', models.UpdateTranslationMsg), } """cmd -> 处理回调""" def handle(self, client: cli.BlcPluginClient, command: dict): cmd = command['cmd'] callback = self._CMD_CALLBACK_DICT.get(cmd, None) if callback is not None: callback(self, client, command) def _on_add_room(self, client: cli.BlcPluginClient, message: models.AddRoomMsg, extra: models.ExtraData): """添加房间""" def _on_room_init(self, client: cli.BlcPluginClient, message: models.RoomInitMsg, extra: models.ExtraData): """房间初始化""" def _on_del_room(self, client: cli.BlcPluginClient, message: models.DelRoomMsg, extra: models.ExtraData): """删除房间""" def _on_open_plugin_admin_ui( self, client: cli.BlcPluginClient, message: models.OpenPluginAdminUiMsg, extra: models.ExtraData ): """用户请求打开当前插件的管理界面""" def _on_add_text(self, client: cli.BlcPluginClient, message: models.AddTextMsg, extra: models.ExtraData): """收到弹幕""" def _on_add_gift(self, client: cli.BlcPluginClient, message: models.AddGiftMsg, extra: models.ExtraData): """有人送礼""" def _on_add_member(self, client: cli.BlcPluginClient, message: models.AddMemberMsg, extra: models.ExtraData): """有人上舰""" def _on_add_super_chat(self, client: cli.BlcPluginClient, message: models.AddSuperChatMsg, extra: models.ExtraData): """醒目留言""" def _on_del_super_chat(self, client: cli.BlcPluginClient, message: models.DelSuperChatMsg, extra: models.ExtraData): """删除醒目留言""" def _on_update_translation( self, client: cli.BlcPluginClient, message: models.UpdateTranslationMsg, extra: models.ExtraData ): """更新翻译"""