[CS2] Nonebot & CS2 互联 服务器管理 开发者相关

24 一级用户组 3小时前 7

一套前后端配合的插件组合,实现 CS2 服务器事件(玩家连接/断开、地图切换等)通过 Webhook 实时推送到 NoneBot,再由 NoneBot 转发到 QQ 群,并支持群内查询在线玩家列表(T/CT 分组 + SteamID + 时长)。

服务器端:CS2-Bridge(CounterStrikeSharp 插件)

GitHub: https://github.com/Akiyy-hub/CS2-Bridge

核心技术点:

  • 事件捕获:使用 CSS 的 ClientConnectClientDisconnectGameEvent 钩子,监听玩家连接/断开/踢出、地图切换(round_start / round_end 等相关事件可扩展)
  • 异步网络请求:采用 System.Net.Http.HttpClientPostAsync,完全异步发送,避免阻塞游戏主线程
  • 主线程安全:所有涉及 CSS Native API 的操作(如 Server.PrintToConsoleUtilities.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 插件)

GitHub: https://github.com/Akiyy-hub/nonebot-plugin-cs2bridge

核心技术点:

  • 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 运行

双端整体配合技术流程

  1. CS2 服务器事件触发 → CS2-Bridge 捕获 → 构建标准 JSON payload
  2. 异步 POST 到配置的 webhook_url(带 secret header 校验)
  3. NoneBot 接收 → Pydantic 解析 → 事件类型判断
  4. 根据事件类型格式化消息(进服:欢迎 + 当前人数;离服:告别 + 剩余人数;换图:新地图通知)
  5. 推送至指定 QQ 群(onebot 适配器)
  6. 群内查询时:!players → 触发 A2S 查询 + 事件缓存合并 → 返回结构化玩家列表

 

开源协议:MIT

双端源码已开,欢迎 fork、PR、issue 讨论技术细节或新功能。


CSGO插件分享-申明 1、本网站名称:CSGO插件分享-中文站  网址:https://bbs.csgocn.net
2、本站的宗旨在于为CSGO玩家提供一个插件分享的中文资源平台,多数插件来源于SourceMod论坛,并配以中文介绍和安装教程。
3、欢迎有能力的朋友共享有趣的CSGO插件资源。
4、本站资源大多为百度网盘,如发现链接失效,可以点: 这里进行反馈,我们会第一时间更新。
最新回复 (0)
返回