一套前后端配合的插件组合,实现 CS2 服务器事件(玩家连接/断开、地图切换等)通过 Webhook 实时推送到 NoneBot,再由 NoneBot 转发到 QQ 群,并支持群内查询在线玩家列表(T/CT 分组 + SteamID + 时长)。
服务器端:CS2-Bridge(CounterStrikeSharp 插件)
核心技术点:
事件捕获:使用 CSS 的 ClientConnect 、ClientDisconnect 、GameEvent 钩子,监听玩家连接/断开/踢出、地图切换(round_start / round_end 等相关事件可扩展)
异步网络请求:采用 System.Net.Http.HttpClient 的 PostAsync ,完全异步发送,避免阻塞游戏主线程
主线程安全:所有涉及 CSS Native API 的操作(如 Server.PrintToConsole 、Utilities.GetPlayers() )均通过 Server.NextFrame 调度回主线程,彻底消除 "Native was invoked on a non-main thread" 警告
JSON 序列化:使用 System.Text.Json ,性能高、轻量、无额外依赖
异常处理:全 try-catch 覆盖,网络失败/JSON 序列化异常仅记录日志,不崩溃服务器
Payload 结构(与接收端完全兼容): 示例 player_connect:
JSON
{
"event" : "player_connect" ,
"data" : {
"player_name" : "玩家名字" ,
"steamid" : "7656119xxxxxxxxxx" ,
"player_count" : 12 ,
"max_players" : 64
}
}
其他事件如 player_disconnect、map_change 类似,data 字段根据事件类型扩展
扩展性设计:后续可轻松添加失败重试队列、多个目标 URL、踢出事件携带管理员信息、队伍切换事件等
Nonebot端:nonebot-plugin-cs2bridge(NoneBot2 插件)
核心技术点:
Webhook 接收:使用 FastAPI 或内置路由接收 POST 请求,校验 secret 防伪造
事件解析:Pydantic 模型严格校验 incoming JSON,结构化解析 event 和 data 字段
防刷机制:玩家进出事件使用短时缓存 + 去重逻辑,避免高频进出导致刷屏
在线玩家查询:结合 A2S 查询(python-a2s 库) + Webhook 事件缓存,实时获取玩家列表
支持 T/CT 分组(基于 CSS 队伍信息或 A2S extra data)
显示字段:玩家名、SteamID64、连接时长(秒/分钟格式化)
查询命令:群内 @bot !players(必须 @bot 触发,防止滥用)
服务器状态监控:当前通过定时 A2S 查询判断服务器是否在线(轮询间隔可调),未来计划支持纯 Webhook 心跳/离线通知
多群支持:配置多个 QQ 群 ID,事件可选择性推送(例如只推特定事件到管理群)
异常捕获:网络超时、A2S 查询失败、JSON 解析错误均有日志 + 优雅降级,不影响 bot 运行
双端整体配合技术流程
CS2 服务器事件触发 → CS2-Bridge 捕获 → 构建标准 JSON payload
异步 POST 到配置的 webhook_url(带 secret header 校验)
NoneBot 接收 → Pydantic 解析 → 事件类型判断
根据事件类型格式化消息(进服:欢迎 + 当前人数;离服:告别 + 剩余人数;换图:新地图通知)
推送至指定 QQ 群(onebot 适配器)
群内查询时:!players → 触发 A2S 查询 + 事件缓存合并 → 返回结构化玩家列表
开源协议:MIT
双端源码已开,欢迎 fork、PR、issue 讨论技术细节或新功能。
CSGO插件分享-申明
1、本网站名称:CSGO插件分享-中文站 网址:https://bbs.csgocn.net
2、本站的宗旨在于为CSGO玩家提供一个插件分享的中文资源平台,多数插件来源于SourceMod论坛,并配以中文介绍和安装教程。
3、欢迎有能力的朋友共享有趣的CSGO插件资源。
4、本站资源大多为百度网盘 ,如发现链接失效,可以点: 这里 进行反馈,我们会第一时间更新。