{"id":13431614,"url":"https://github.com/FishZe/go-bili-chat","last_synced_at":"2025-03-16T12:30:44.499Z","repository":{"id":64998139,"uuid":"580116038","full_name":"FishZe/go-bili-chat","owner":"FishZe","description":"Bilibili直播间弹幕处理库 支持事件绑定 高性能 低占用","archived":false,"fork":false,"pushed_at":"2024-07-31T09:06:56.000Z","size":227,"stargazers_count":39,"open_issues_count":1,"forks_count":10,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-08-01T02:28:46.424Z","etag":null,"topics":["api","bilibili","live"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FishZe.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-12-19T19:00:05.000Z","updated_at":"2024-07-31T09:07:00.000Z","dependencies_parsed_at":"2024-04-19T13:37:15.970Z","dependency_job_id":"7b20185b-6bb9-4414-bd7a-7ab20f0b9f09","html_url":"https://github.com/FishZe/go-bili-chat","commit_stats":{"total_commits":53,"total_committers":3,"mean_commits":"17.666666666666668","dds":"0.16981132075471694","last_synced_commit":"9df45c48ca999ac923e05153b882afd09377bbd5"},"previous_names":["fishze/go-bilichat","fishze/go_bilichat_core","fishze/go_bili_chat"],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FishZe%2Fgo-bili-chat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FishZe%2Fgo-bili-chat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FishZe%2Fgo-bili-chat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FishZe%2Fgo-bili-chat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FishZe","download_url":"https://codeload.github.com/FishZe/go-bili-chat/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221663622,"owners_count":16859867,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","bilibili","live"],"created_at":"2024-07-31T02:01:04.524Z","updated_at":"2024-10-27T10:31:49.896Z","avatar_url":"https://github.com/FishZe.png","language":"Go","funding_links":[],"categories":["开发"],"sub_categories":["直播脚本"],"readme":"## `Bilibili` 直播间弹幕处理库\n\n`golang`的b站信息流处理 支持近百种消息命令类型 高性能 低占用的信息流处理库，包含弹幕/礼物/大航海/SC等一切你想要的数据\n\n### 介绍\n\n`go-bili-chat` 是一个用于处理 Bilibili 直播间信息流库，可以用于开发自己的 Bilibili 直播间信息流处理程序。\n\nb站直播间信息流以Websocket传输并加密, 含有几十个不同的命令, 本项目对其进行了解析, 并提供了一些简单的处理方法, 以便于开发者快速开发自己的程序。\n\n### 快速使用\n\n信息流处理流程为: 客户端收到信息 -\u003e 解析后由处理器进行分发\n\n因此, 你需要先将命令处理函数绑定到处理器, 再开启直播间进行处理,\n\n#### 1. 一个简单的使用示例:\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\tbili \"github.com/FishZe/go-bili-chat\"\n\thandle \"github.com/FishZe/go-bili-chat/handler\"\n\tclient \"github.com/FishZe/go-bili-chat/client\"\n)\n\nfunc main() {\n\t// 新建一个命令处理器\n\th := bili.GetNewHandler()\n\t// 注册一个处理，将该直播间的弹幕消息绑定到这个函数\n\th.AddOption(handle.CmdDanmuMsg, 26097368, func(event handle.MsgEvent) {\n\t\t// 打印出弹幕消息\n\t\tfmt.Printf(\"[%v] %v: %v\\n\", event.RoomId, event.DanMuMsg.Data.Sender.Name, event.DanMuMsg.Data.Content)\n\t})\n\t// 连接到直播间\n\t_ = h.AddRoom(26097368)\n\t//\n\t// 自定义AuthBody连接到直播间\n\t//\n\t//_ = h.AddRawRoom(client.WsAuthBody{\n\t//\tUID:      0,\n\t//\tRoomid:   26097368,\n\t//\tProtover: 3,\n\t//\tPlatform: \"web\",\n\t//\tType:     2,\n\t//\tKey:      \"\",\n\t//})\n\t//\n\t// 启动处理器\n\th.Run()\n}\n\n```\n\u003e 特殊地, 绑定函数的直播间号为0时，绑定所有房间\n\n\n#### 2. 也可以先运行命令处理器，再添加房间：\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\tbili \"github.com/FishZe/go-bili-chat\"\n\thandle \"github.com/FishZe/go-bili-chat/handler\"\n\t\"time\"\n)\n\nfunc main() {\n\th := bili.GetNewHandler()\n\t// 运行处理器\n\tgo h.Run()\n\th.AddOption(handle.CmdDanmuMsg, 26097368, func(event handle.MsgEvent) {\n\t\tfmt.Printf(\"[%v] %v: %v\\n\", event.RoomId, event.DanMuMsg.Data.Sender.Name, event.DanMuMsg.Data.Content)\n\t})\n\t_ = h.AddRoom(26097368)\n\tfor {\n\t\ttime.Sleep(time.Second)\n\t}\n}\n```\n#### 3. 当然了，也可以删除房间：\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\tbili \"github.com/FishZe/go-bili-chat\"\n\thandle \"github.com/FishZe/go-bili-chat/handler\"\n)\n\nfunc main() {\n\th := bili.GetNewHandler()\n\th.AddOption(handle.CmdDanmuMsg, 26097368, func(event handle.MsgEvent) {\n\t\tfmt.Printf(\"[%v] %v: %v\\n\", event.RoomId, event.DanMuMsg.Data.Sender.Name, event.DanMuMsg.Data.Content)\n\t})\n\t_ = h.AddRoom(26097368)\n\t_ = h.DelRoom(26097368)\n\th.Run()\n}\n```\n\n#### 4. 还可以删除处理函数\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\tbili \"github.com/FishZe/go-bili-chat\"\n\thandle \"github.com/FishZe/go-bili-chat/handler\"\n)\n\nfunc main() {\n\th := bili.GetNewHandler()\n\tdanmu := h.AddOption(handle.CmdDanmuMsg, 26097368, func(event handle.MsgEvent) {\n\t\tfmt.Printf(\"[%v] %v: %v\\n\", event.RoomId, event.DanMuMsg.Data.Sender.Name, event.DanMuMsg.Data.Content)\n\t})\n\t_ = h.AddRoom(26097368)\n\th.DelOption(danmu)\n\th.Run()\n}\n```\n\n#### 5. 对于连接房间过多的情况, 建议先`go h.Run()`再添加房间, 否则会阻塞通道造成内存大量占用\n\n```go\ngo h.Run()\n_ = h.AddRoom(26097368)\n_ = h.AddRoom(26097369)\n_ = h.AddRoom(26097370)\n// sth...\n```\n\n**关于为什么在处理绑定函数时, 多一个直播间号的参数, 因为考虑到可能会有根据不同的直播间分发处理消息的需求**\n\n#### 6. 也可以获得当前的连接房间个数\n```go\nsum := h.CountRoom()\nfmt.Println(\"当前连接房间数: \", sum)\n```\n\n#### 7. 对于接入的服务器: 程序提供了3个模式:\n\n```text\nDefaultPriority: 默认模式, 按照b站提供的顺序进行连接\nDelayPriority: 低延迟模式, 将会在连接前计算到所有提供的服务器的延迟, 并选择最低的(连接会慢一些)\nNoCDNPriority: 不使用CDN模式, 适合大量连接的情况\n```\n\n默认使用的模式为`DefaultPriority`, 有需要的可以使用这种方式修改:\n\n```go\nbili.SetClientPriorityMode(bili.DelayPriority)\n```\n\n#### 8. 默认使用的Json解析器为`sonic`, 有需要自定义`json`解析器的可以使用这种方式:\n\n```go\ntype Json struct{}\n\nfunc (j *Json) Unmarshal(data []byte, v interface{}) error {\n\treturn json.Unmarshal(data, v)\n}\n\nfunc (j *Json) Marshal(v interface{}) ([]byte, error) {\n    return json.Marshal(v)\n}\n\nbili.SetJsonCoder(\u0026Json{})\n```\n\n具体的示例代码可以查看`example/main.gp`\n\n#### 9. 对于需要查看`DEBUG`日志的情况, 可以修改日志等级\n```go\nbili.ChangeLogLevel(log.DebugLevel)\n```\n\n开启`DEBUG`日志后, 可以看到所有的数据包和分发过程, 如果想要直观的看到分发到的函数名称, 可以在`AddOption`中写明该函数的备注名\n```go\nh.AddOption(handle.CmdDanmuMsg, 21545805, func(event handle.MsgEvent) {\n    fmt.Printf(\"[%v][弹幕] %v (%v): %v\\n\", event.RoomId, event.DanMuMsg.Data.Sender.Name, event.DanMuMsg.Data.Medal.MedalName, event.DanMuMsg.Data.Content)\n}, \"弹幕处理\")\n````\n\n控制台会显示类似如下的日志\n\n```text\n[bili-live][02-21 16:42:55][DEBUG]: distribute DANMU_MSG cmd to 弹幕处理\n```\n\n#### 所有支持的消息类型:\n这些常量请填入`go-bili-chat.GetNewHandler().AddOption()`的第一个参数\n\n| 变量名                              | 命令类型                                | 含义                    |\n|:---------------------------------|:------------------------------------|:----------------------|\n| CmdDanmuMsg                      | \"DANMU_MSG\"                         | 弹幕消息                  |\n| CmdLikeInfoV3Click               | \"LIKE_INFO_V3_CLICK\"                | 直播间点赞信息               |\n| CmdSuperChatEntrance             | \"SUPER_CHAT_ENTRANCE\"               | 超级留言入口样式              |\n| CmdSuperChatMessage              | \"SUPER_CHAT_MESSAGE\"                | 醒目留言消息                |\n| CmdSuperChatMessageDelete        | \"SUPER_CHAT_MESSAGE_DELETE\"         | 醒目留言被删除               |\n| CmdWatchedChange                 | \"WATCHED_CHANGE\"                    | 直播间看过人数改变             |\n| CmdSendGift                      | \"SEND_GIFT\"                         | 赠送礼物                  |\n| CmdComboSend                     | \"COMBO_SEND\"                        | 礼物连击                  |\n| CmdSpecialGift                   | \"SPECIAL_GIFT\"                      | 特殊礼物                  |\n| CmdOnlineRankCount               | \"ONLINE_RANK_COUNT\"                 | 高能榜观众数量               |\n| CmdOnlineRankV2                  | \"ONLINE_RANK_V2\"                    | 高能榜刷新                 |\n| CmdOnlineRankTop3                | \"ONLINE_RANK_TOP3\"                  | 高能用户前三名               |\n| CmdInteractWord                  | \"INTERACT_WORD\"                     | 进场或关注消息               |\n| CmdStopLiveRoomList              | \"STOP_LIVE_ROOM_LIST\"               | 停止直播的房间列表             |\n| CmdLikeInfoV3Update              | \"LIKE_INFO_V3_UPDATE\"               | 直播间点赞数更新              |\n| CmdHotRankChange                 | \"HOT_RANK_CHANGED\"                  | 分区排名变化                |\n| CmdHotRankChangedV2              | \"HOT_RANK_CHANGED_V2\"               | 二级分区排名变化              |\n| CmdAreaRankChanged               | \"AREA_RANK_CHANGED\"                 | 直播间所在分区的排名改变          |\n| CmdNoticeMsg                     | \"NOTICE_MSG\"                        | 通知消息                  |\n| CmdRoomRealTimeMessageUpdate     | \"ROOM_REAL_TIME_MESSAGE_UPDATE\"     | 直播间相关信息更新             |\n| CmdWidgetBanner                  | \"WIDGET_BANNER\"                     | 网页端直播间标题下的横幅内容        |\n| CmdGuardHonorThousand            | \"GUARD_HONOR_THOUSAND\"              | 千舰推送                  |\n| CmdGuardAchievementRoom          | \"GUARD_ACHIEVEMENT_ROOM\"            | 舰队规模达成成就              |\n| CmdPreparing                     | \"PREPARING\"                         | 直播准备                  |\n| CmdLive                          | \"LIVE\"                              | 开始直播                  |\n| CmdRoomChange                    | \"ROOM_CHANGE\"                       | 直播间信息更改               |\n| CmdRoomBlockMsg                  | \"ROOM_BLOCK_MSG\"                    | 禁言消息                  |\n| CmdSysMsg                        | \"SYS_MSG\"                           | 系统消息                  |\n| CmdFullScreenSpecialEffect       | \"FULL_SCREEN_SPECIAL_EFFECT\"        | 全屏特效                  |\n| CmdCommonNoticeDanmaku           | \"COMMON_NOTICE_DANMAKU\"             | 直播间所在分区排名提升祝福         |\n| CmdTradingScore                  | \"TRADING_SCORE\"                     | 每日任务                  |\n| CmdGuardBuy                      | \"GUARD_BUY\"                         | 购买大航海                 |\n| CmdGiftStarProcess               | \"GIFT_STAR_PROCESS\"                 | 礼物星球点亮                |\n| CmdWarning                       | \"WARNING\"                           | 超管警告                  |\n| CmdCutOff                        | \"CUT_OFF\"                           | 被切断直播                 |\n| CmdRoomAdminRevoke               | \"ROOM_ADMIN_REVOKE\"                 | 房管撤销                  |\n| CmdRoomSilentOff                 | \"ROOM_SILENT_OFF\"                   | 关闭直播间全部禁言             |\n| CmdRoomSilentOn                  | \"ROOM_SILENT_ON\"                    | 开启直播间全部禁言             |\n| CmdRoomAdminEntrance             | \"room_admin_entrance\"               | 修改房管的提示语 (只有涉及的用户会提示) |\n| CmdRoomAdmins                    | \"ROOM_ADMINS\"                       | 房管列表更新                |\n| CmdRoomSkinMsg                   | \"ROOM_SKIN_MSG\"                     | [存疑] 房间皮肤             |\n| CmdChangeRoomInfo                | \"CHANGE_ROOM_INFO\"                  | [存疑] 直播间背景更换          |\n| CmdEntryEffect                   | \"ENTRY_EFFECT\"                      | 进场特效                  |\n| CmdUserToastMsg                  | \"USER_TOAST_MSG\"                    | 上舰提示消息                |\n| CmdOfficialRoomEvent             | \"OFFICIAL_ROOM_EVENT\"               | 官方房间事件                |\n| CmdHeartBeatReply                | \"HEARTBEAT_REPLY\"                   | [自定义] 心跳包回复           |\n| CmdPopularityRedPocketStart      | \"POPULARITY_RED_POCKET_START\"       | 直播间发红包                |\n| CmdPopularityRedPocketNew        | \"POPULARITY_RED_POCKET_NEW\"         | [存疑] 发出红包             |\n| CmdPopularityRedPocketWinnerList | \"POPULARITY_RED_POCKET_WINNER_LIST\" | 抢到红包的人的信息             |\n| CmdPkBattleProcess               | \"PK_BATTLE_PROCESS\"                 | [存疑] PK相关             |\n| CmdPkBattleProcessNew            | \"PK_BATTLE_PROCESS_NEW\"             | [存疑] PK相关             |\n| CmdPkBattlePreNew                | \"PK_BATTLE_PRE_NEW\"                 | [存疑] PK相关             |\n| CmdPkBattlePre                   | \"PK_BATTLE_PRE\"                     | [存疑] PK相关             |\n| CmdPkBattleFinalProcess          | \"PK_BATTLE_FINAL_PROCESS\"           | [存疑] PK相关             |\n| CmdPkBattleStart                 | \"PK_BATTLE_START\"                   | [存疑] PK相关             |\n| CmdPkBattleStartNew              | \"PK_BATTLE_START_NEW\"               | [存疑] PK相关             |\n| CmdPkBattlePunishEnd             | \"PK_BATTLE_PUNISH_END\"              | [存疑] PK相关             |\n| CmdPkBattleSettleV2              | \"PK_BATTLE_SETTLE_V2\"               | [存疑] PK相关             |\n| CmdPkBattleSettle                | \"PK_BATTLE_SETTLE\"                  | [存疑] PK相关             |\n| CmdPkBattleEnd                   | \"PK_BATTLE_END\"                     | [存疑] PK相关             |\n| CmdPkBattleSettleUser            | \"PK_BATTLE_SETTLE_USER\"             | [存疑] PK相关             |\n| CmdPkBattleRankChange            | \"PK_BATTLE_RANK_CHANGE\"             | [存疑] PK相关             |\n| CmdPkBattleSettleNew             | \"PK_BATTLE_SETTLE_NEW\"              | [存疑] PK相关             |\n| CmdPkBattleMatchTimeout          | \"PK_BATTLE_MATCH_TIMEOUT\"           | [存疑] PK相关             |\n| CmdPkBattleAbnormal              | \"PK_BATTLE_ABNORMAL\"                | [存疑] PK相关             | \n| CmdPkBattleEntrance              | \"PK_BATTLE_ENTRANCE\"                | [存疑] PK相关             | \n| CmdPkBattleVideoPunishBegin      | \"PK_BATTLE_VIDEO_PUNISH_BEGIN\"      | [存疑] PK相关             | \n| CmdPkBattleVideoPunishEnd        | \"PK_BATTLE_VIDEO_PUNISH_END\"        | [存疑] PK相关             | \n| CmdGotoBuyFlow                   | \"GOTO_BUY_FLOW\"                     | [存疑] 购物车提示消息          |\n| CmdShoppingExplainCard           | \"SHOPPING_EXPLAIN_CARD\"             | [存疑] 购物车相关            |\n| CmdShoppingCartShow              | \"SHOPPING_CART_SHOW\"                | [存疑] 购物车显示状态          |\n| CmdShoppingBubblesStyle          | \"SHOPPING_BUBBLES_STYLE\"            | [存疑] 购物车相关            |\n| CmdSelectedGoodsInfo             | \"SELECTED_GOODS_INFO\"               | [存疑] 购物车相关            |\n| CmdHotBuyNum                     | \"HOT_BUY_NUM\"                       | [存疑] 购物车相关            |\n| CmdVoiceJoinRoomCountInfo        | \"VOICE_JOIN_ROOM_COUNT_INFO\"        | [存疑] 语音连线相关           |\n| CmdVoiceJoinList                 | \"VOICE_JOIN_LIST\"                   | [存疑] 语音连线相关           |\n| CmdVoiceJoinStatus               | \"VOICE_JOIN_STATUS\"                 | [存疑] 语音连线相关           |\n| CmdVoiceJoinSwitch               | \"VOICE_JOIN_SWITCH\"                 | [存疑] 语音连线相关           |\n| CmdVideoConnectionJoinStart      | \"VIDEO_CONNECTION_JOIN_START\"       | [存疑] 视频连线相关           |\n| CmdVideoConnectionMsg            | \"VIDEO_CONNECTION_MSG\"              | 视频连线提示语               |\n| CmdVideoConnectionJoinEnd        | \"VIDEO_CONNECTION_JOIN_END\"         | 视频连线结束                |\n| CmdMultiVoiceOperating           | \"MULTI_VOICE_OPERATING\"             | [存疑] 视频连线相关           |\n| CmdMultiVoiceApplicationUser     | \"MULTI_VOICE_APPLICATION_USER\"      | 申请视频连线                |\n| CmdAnchorLotCheckStatus          | \"ANCHOR_LOT_CHECK_STATUS\"           | [存疑] 天选相关             |\n| CmdAnchorLotEnd                  | \"ANCHOR_LOT_END\"                    | 天选结束                  |\n| CmdAnchorLotAward                | \"ANCHOR_LOT_AWARD\"                  | 天选结果                  |\n| CmdInteractiveUser               | \"INTERACTIVE_USER\"                  | [存疑] 预言玩法相关           |\n| CmdUserVirtualMvp                | \"USER_VIRTUAL_MVP\"                  | [存疑] 守护圣法师相关          |\n| CmdWidgetWishList                | \"WIDGET_WISH_LIST\"                  | [存疑] 许愿玩法相关           |\n| CmdPlayTogether                  | \"PLAY_TOGETHER\"                     |                       |\n| CmdPopularRankChanged            | \"POPULAR_RANK_CHANGED\"              |                       |\n| CmdDanMuAggregation              | \"DANMU_AGGREGATION\"                 |                       |\n| CmdLiveInteractiveGame           | \"LIVE_INTERACTIVE_GAME\"             |                       |\n| CmdRecommendCard                 | \"RECOMMEND_CARD\"                    |                       |\n| CmdWidgetGiftStarProcess         | \"WIDGET_GIFT_STAR_PROCESS\"          |                       |\n| CmdAnchorLotStart                | \"ANCHOR_LOT_START\"                  |                       |\n| CmdHotRoomNotify                 | \"HOT_ROOM_NOTIFY\"                   |                       |\n| CmdLiveOpenPlatformGame          | \"LIVE_OPEN_PLATFORM_GAME\"           |                       |\n| CmdLivePanelChangeContent        | \"LIVE_PANEL_CHANGE_CONTENT\"         |                       |\n| CmdGiftPanelPlan                 | \"GIFT_PANEL_PLAN\"                   |                       |\n| CmdRingStatusChange              | \"RING_STATUS_CHANGE\"                |                       |\n| CmdRingStatusChangeV2            | \"RING_STATUS_CHANGE_V2\"             |                       |\n| CmdRoomLock                      | \"ROOM_LOCK\"                         |                       |\n| CmdLiveMultiViewChange           | \"LIVE_MULTI_VIEW_CHANGE\"            |                       |\n| CmdMvRoleChange                  | \"MV_ROLE_CHANGE\"                    |                       |\n| CmdMultiVoiceOperatin            | \"MULTI_VOICE_OPERATING\"             |                       |\n| CmdPanelInteractiveNotifyChange  | \"PANEL_INTERACTIVE_NOTIFY_CHANGE\"   |                       |\n| CmdCheckSingStatus               | \"CHECK_SING_STATUS\"                 |                       |\n| CmdRoomModuleDisplay             | \"ROOM_MODULE_DISPLAY\"               |                       |\n| CmdVoiceChatUpdate               | \"VOICE_CHAT_UPDATE\"                 |                       |\n| CmdReenterLiveRoom               | \"REENTER_LIVE_ROOM\"                 |                       |\n| CmdActivityBannerChangeV2        | \"ACTIVITY_BANNER_CHANGE_V2\"         |                       |\n| CmdActivityBannerChange          | \"ACTIVITY_BANNER_CHANGE\"            |                       |\n| CmdVideoConnectionStart          | \"VIDEO_CONNECTION_START\"            |                       |\n| CmdGuideInfoStatus               | \"GUIDE_INFO_STATUS\"                 |                       |\n| CmdObsShieldStatusUpdate         | \"OBS_SHIELD_STATUS_UPDATE\"          |                       |\n| CmdAnchorNormalNotify            | \"ANCHOR_NORMAL_NOTIFY\"              |                       | \n| CmdBlinkStickerTitleRejected     | \"BLINK_STICKER_TITLE_REJECTED\"      |                       | \n| CmdDanmuTagChanged               | \"DANMU_TAG_CHANGED\"                 |                       | \n| CmdHourRankAwards                | \"HOUR_RANK_AWARDS\"                  |                       | \n| CmdLivePanelChange               | \"LIVE_PANEL_CHANGE\"                 |                       | \n| CmdLiveRoomToastMessage          | \"LIVE_ROOM_TOAST_MESSAGE\"           |                       | \n| CmdLogInNotice                   | \"LOG_IN_NOTICE\"                     |                       |\n| CmdStudioRoomClose               | \"STUDIO_ROOM_CLOSE\"                 |                       | \n| CmdWinActivity                   | \"WIN_ACTIVITY\"                      |                       | \n\n由于我也不是很明白b站的命令, 所以这里只是列出了我知道的命令, 如果有人知道更多的命令, 请在issue中提出, 我会及时更新。\n\n相信可以通过直译看懂这些命令...\n\n\n### 消息处理函数\n\n消息处理函数的原型为:\n\n```go\nfunc someFunc(event MsgEvent)\n```\n\n其中`MsgEvent`的定义为:\n\n```go\ntype MsgEvent struct {\n\t//原始命令 \n\tCmd    string\n\t//直播间号 \n\tRoomId int\n    // 以下为不同的消息类型 \n\tDanMuMsg *DanMuMsg\n\tSuperChatMessage *SuperChatMessage\n    // 下同, 可参考上方的消息类型, 取消Cmd即为结构体名称...\n\t...\n}\n```\n\n### 消息结构体\n这是弹幕消息的例子\n```go\ntype DanMuMsg struct {\n\tCmd  string `json:\"cmd\"`\n\tData struct {\n\t\tSender struct {\n\t\t\tUid    int64\n\t\t\tName   string\n\t\t\tRoomId int64\n\t\t}\n\t\tMedal                    FansMedal\n\t\tContent                  string\n\t\tSendTimeStamp            int\n\t\tSendMillionTimeStamp     int64\n\t\tSenderEnterRoomTimeStamp int\n\t}\n}\n```\n结构体内容, 请参考`go-bili-chat/Handler/template.go`中的定义\n因为30个实在是太多了, 所以我就不一一列出来了...\n\n## **在弹幕消息中, 我还没有完全明白每个参数的含义, 强烈欢迎各位PR完善**\n\n### 性能\n\n具体可以参考[Issue #24](https://github.com/FishZe/go-bili-chat/issues/24)\n\n感谢[@XiaoMiku01](https://github.com/XiaoMiku01)提供的压测：\n\n上海腾讯云 4C8G 10M Linux\n\n同时连接5.8w个直播中的房间，内存占用 4.5G 左右, CPU 213% (平均 42%)\n\n\n### 抽象画\n\n```text\n+============================+   +=================+\n|        LiveRoom 1          |   |                 |\n| goroutine heart beat       |   |                 → → goroutine your function\n| goroutine receive msg → → ↓|   |                 |\n| goroutine msg handler ← ← ←|   |                 → → goroutine your function\n+================|↓|=========+   _                 |\n                  → → → → → → → →    goroutine     → → goroutine your function\n+============================+   _                 |\n|        LiveRoom 1          |   |  msg distribute → → goroutine your function\n| goroutine heart beat       |   |                 |\n| goroutine receive msg → → ↓|   |                 → → goroutine your function\n| goroutine msg handler ← ← ←|   |                 |\n+================|↓|=========+   _                 → → goroutine your function\n                  → → → → → → → →                  |\n                                 _                 → → goroutine your function\n                                 +======|↑|========+\n                                         ↑\n                                         ↑\n                                +=======|↑|========+\n                                |                  | \n                                |  main goroutine  |\n                                |                  |\n                                +==================+\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FFishZe%2Fgo-bili-chat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FFishZe%2Fgo-bili-chat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FFishZe%2Fgo-bili-chat/lists"}