Pathstar

XDbot

纯图一乐bot,希望能将愉快的气氛带给大家 (≧▽≦)/


功能

一、指令系统

  • 命令可随意使用大小写。

  • 支持通过队伍内@xd,bot也会使用队内消息回复。也可将@xd置于话的末尾

  • 例如:今天也要开心嗷!@xd YaY

指令一览(按字母排序)

命令 说明
@xd AI (问题) 与AI交流(模型API使用Qwen 4B,支持上下文)
@xd help 返回可用指令摘要
@xd meow 喵喵妙妙妙妙妙妙妙妙
@xd meme 随机输出一个meme笑话(待补充)
@xd pinyin (拼音) 拼音转文字,保留不可转的内容
已被全局转文字替代,但该指令不会检测失败
(python库 Pinyin2Hanzi)
@xd pinyin add (拼音) (汉字) 拼音转文字添加转义
格式见:拼音转义添加/删除 [jump]
@xd roll 随机返回1~6
@xd time 返回当前实际时间
@xd wiki 返回bilibili专栏链接和github README.md网址
@xd yay 返回随机颜表情 (≧▽≦)/
@xd 查询等级 (模糊玩家名) 查询玩家等级,留空查自己
@xd 查询装备 (模糊玩家名) 查询玩家装备,留空查自己
@xd 查询武器 (模糊武器名) 查询带有该武器的玩家,可以交集检索多个武器
例如:@xd 查询武器 激素 car
@xd 井字棋 两人输入后开启井字棋
可用 @xd 3 1 落子到第三列第一行
@xd 打开连杀播报/关闭连杀播报 控制连杀播报开关
@xd 进入操控模式/退出操控模式 远程操控我自己,格式见:操控模式指令 [jump]
@xd 服务器 模式/名称 (关键词) 模糊查询服务器人数,格式见:查询服务器指令 [jump]
@xd 恶魔轮盘 进入文字版恶魔轮盘游戏,详情见:文字游戏-恶魔轮盘 [jump]

AI设置指令

因为易打错会误发给AI的原因,设置指令统一在AI前面加上了 set

指令 功能
@xd set ai 清除上下文 进入新聊天
@xd set ai new chat 进入新聊天
@xd set ai 上下文长度 (数字) 设置上下文长度

为什么不用更好更快的模型 因为没money

操控模式指令

格式:[命令 时间] 前/后/左/右/左转/右转/停/跳/蹲/开火/停火/重火力/技能/重生/走/跑/退出;cmd [任意控制台命令]...

  • 为了尽量简洁,进入后不需 @xd
动作示例 作用
前 10 前进10秒
右转 1.2 右转1.2秒
停止移动与转视角
重生 似了可以重生
cmd quit 真的要这么做吗TvT
撤退! 【XDbot】好的!撤退!!! (≧▽≦)/

上下调整视角没找到命令,所以实现不了
如果是我忘记退了还能远端控制让我退出去uwu

全局转文字系统

  • 通过@xd pinyin start/stop控制开关
  • 通过空格分割,大致规则为失败数量<成功数量,且第一/第二段长度<=12,同时首字母为字母时,才触发拼音转文字,具体规则见 squirrel -> XD.nut -> globalTransToChinese
    • 示例:
输入例 处理结果 预期结果 判断结果
wo-cao-wo-cao chao 失败 × (第一段长度 > 12) (× √)
me too 失败 × (第二段转文字失败) (√ ×)
dui me 成功 对么 (√ √)
!wo #neng zhuan wen zi ma 失败 × (前两段首字符非字母)
@ you yi shi mo fa @ 成功 @友谊是魔法@ (× √ √ √ √ √ ×)
wo yao !!! zhuan 0v0 wen zi XD 成功 我要!!!转0v0文字XD (√ √ × √ × √ √ ×)
biao dian.bu7ying xiang?fen ge! 成功 标点.不7影响?分割! (√ √ × √ × √ √ × √ √ ×)

无法辨别拼音之间粘连无空格,易误判,暂不考虑

拼音转义添加/删除
  • 添加转义时根据首个汉字区分拼音段和文字段,若想添加指定文字段,可以在文字段前使用-h参数
  • 因标点不影响拼音分割的特性存在,因此拼音段无法使用符号,使用后无法生效
    • 示例:
指令 添加结果
@xd pinyin add chong ci 冲刺 添加成功"chong ci": "冲刺"
@xd pinyin add mvp 我得了MVP! 添加成功"mvp": "我得了MVP!"
@xd pinyin add woc gua -h woc呱!!! 添加成功"woc gua": "woc呱!!!"
@xd pinyin add limbo -h FOCES 添加成功"limbo": "FOCES"
@xd pinyin del mvp 删除成功"mvp": "我得了MVP!"

查询服务器指令

按照模式或名称查询所有符合条件的,人数大于0的服务器当前人数。

  • 指令所有部分中英文可以交叉使用;

  • 返回多个服务器时,按人数降序排序;

  • 查询名字时,可用空格分割名称匹配任意关键词,被匹配的关键词会高亮显示。

  • 如果查询后只能查找到一个服务器且没有人,则忽略人数大于0条件,提示:

    • 现在没有任何人!-> [服务器名称]
  • 按官方要求,全局查询间隔不得低于15秒,若在15秒内则在缓存中查询

    • @xd 服务器 模式 (模糊模式)

    • @xd 服务器 名字 (模糊名称)

  • 示例:

指令 返回
@xd 服务器 模式 铁对铁 8人 -> [NSCN] 北极星CN官方原版铁对铁#1...等铁驭模式
@xd server mode pvp 8人 -> [NSCN] 北极星CN官方原版铁对铁#1...等铁驭模式
@xd 服务器 名称 小图 4人 -> [CN]坏逼们的服务器#小图铁对铁
@xd 服务器 名称 小图 nscn 8人 -> [NSCN] 北极星CN官方原版铁对铁#1
4人 -> [CN]坏逼们的服务器#小图铁对铁...等
@xd server name 明日香 16人 -> 仿生机器人会梦到电子明日香

​ 更多示例:

指令 对应英文指令
@xd 服务器 模式 泰坦争斗 @xd server mode ttdm
@xd 服务器 模式 边境防御 @xd server mode fd
@xd 服务器 模式 困难 @xd server mode fd_hard
@xd 服务器 模式 消耗战 @xd server mode aitdm

文字游戏-恶魔轮盘

对照Steam游戏《恶魔轮盘》制作的文字版游戏,代码位置:XDPY -> DevilRoulette.py,可直接运行该代码文件,将与电脑游玩。为了防止遮挡,将使用如调整文字为灰色、使用屏障符连接每句话等措施,尽可能区分游戏与正常聊天内容。

  • 使用 @xd 恶魔轮盘/emlp/dr 均可进入游戏

  • 在进入游戏后以下指令将生效:

  • 等待下一名玩家进入后将立刻开始游戏

  • 游戏均使用 @xd [数字] 进行选择,可选择的数字将会标黄

  • 等待期间可使用 @xd 1 进入设置页面进行选择

    • 设置提示语:请选择设置: 1. 保存 | 2. 生命值 | 3. 道具数 | 4. 实弹数 | 5. 空弹比
  • 使用 @xd add (自定义电脑名称) 与笨蛋电脑玩耍

  • 使用 @xd 回放/replay 对上一次内容进行回放,如进入下一局游戏还未结束,可使用此指令回顾上一次输出然后继续游玩。

下面是一局文字版恶魔轮盘的游玩:
[星] Double_Star: @xd 恶魔轮盘
【恶魔轮盘】欢迎进入游玩恶魔轮盘游戏!等待玩家中... 1/2
[星] Double_Star: @xd 1
【恶魔轮盘】[星] Double_Star 请选择设置: 1. 保存 | 2. 生命值 | 3. 道具数 | 4 实弹数 | 5. 空弹比
[星] Double_Star: @xd 2
【恶魔轮盘】请使用 [数字] 设置参数 生命值 | 现在为[3]
[星] Double_Star: @xd 3
【恶魔轮盘】生命值 成功设置为 3,与先前一致
[晞] The_Sun: @xd emlp
【恶魔轮盘】欢迎进入新一局的恶魔轮盘 - [星] Double_Star VS [晞] The_Sun
【恶魔轮盘】第 1 回合,装填子弹... ['实', '实', '空', '空']
【恶魔轮盘】[星] Double_Star 血量: 3/3 | 道具: 逆转器 | 手铐 | 啤酒
【恶魔轮盘】[晞] The_Sun 血量: 3/3 | 道具: 手锯 | 手铐 | 香烟
【恶魔轮盘】[星] Double_Star 请选择操作:1. 打自己 | 2. 打对方 | 3. 使用道具
[星] Double_Star @xd 2
【恶魔轮盘】[星] Double_Star 拿枪指向了[晞] The_Sun!
【恶魔轮盘】[星] Double_Star 开枪了,是空弹!
【恶魔轮盘】[星] Double_Star 血量: 3/3 | [晞] The_Sun 血量: 3/3
【恶魔轮盘】[晞] The_Sun 请选择操作:1. 打自己 | 2. 打对方 | 3. 使用道具
[晞] The_Sun: @xd 3
【恶魔轮盘】[晞] The_Sun 请选择道具: 1. 返回 | 2. 手锯 | 3. 手铐 | 4. 香烟
[晞] The_Sun: @Xd 3
【恶魔轮盘】[晞] The_Sun 使用了 手铐!
【恶魔轮盘】[晞] The_Sun 将 [星] Double_Star 的手铐住了,禁止 1 回合!
【恶魔轮盘】[晞] The_Sun 请选择操作:1. 打自己 | 2. 打对方 | 3. 使用具
[晞] The_Sun: @XD 3
【恶魔轮盘】[晞] The_Sun 请选择道具: 1. 返回 | 2. 手锯 | 3. 香烟
[晞] The_Sun: @xd 2
【恶魔轮盘】[晞] The_Sun 使用了 手锯!
【恶魔轮盘】[晞] The_Sun 的下一发子弹将造成双倍伤害!
【恶魔轮盘】[晞] The_Sun 请选择操作:1. 打自己 | 2. 打对方 | 3. 使用道具
[晞] The_Sun: @xd 2
【恶魔轮盘】[晞] The_Sun 拿枪指向了[星] Double_Star!
【恶魔轮盘】砰! [晞] The_Sun 开枪了,打中 [星] Double_Star!
【恶魔轮盘】[星] Double_Star 血量: 1/3 | [晞] The_Sun 血量: 3/3
【恶魔轮盘】[星] Double_Star 的手被铐住了!无法行动
【恶魔轮盘】[晞] The_Sun 请选择操作:1. 打自己 | 2. 打对方 | 3. 使用道具
[晞] The_Sun: @xd 1
【恶魔轮盘】[晞] The_Sun 拿枪指向了自己!
【恶魔轮盘】[晞] The_Sun 开枪了,是空弹!
【恶魔轮盘】[星] Double_Star 血量: 1/3 | [晞] The_Sun 血量: 3/3
【恶魔轮盘】[晞] The_Sun 请继续操作:1. 打自己 | 2. 打对方 | 3. 使用道具
[晞] The_Sun: @xd2
【恶魔轮盘】[晞] The_Sun 拿枪指向了[星] Double_Star!
【恶魔轮盘】砰! [晞] The_Sun 开枪了,打中 [星] Double_Star!
【恶魔轮盘】[星] Double_Star 血量: 0/3 | [晞] The_Sun 血量: 3/3
【恶魔轮盘】恭喜 [晞] The_Sun 获胜!

二、播报系统

通过读取游戏右下角RUI击杀信息,实现存储与个性化播报:

  1. 连杀数量播报
    在连杀达到一定数量时进行播报,比如:

    • xxx 达成了 10 连杀!无人可挡!

    • xxx 达成了 15 连杀!诸天灭地!我们没救了!

  2. 特殊连杀播报
    不同击杀方式有独特文案,例如:

    • xxx 拳脚精通!使用「肘击」达成了 3 连杀!

    • xxx 使用神器「A盾喷火」达成了 5 连杀!是火神!我们没救了!

    • 克莱博从入门到拳脚精通!xxx 放弃了克莱博,使用「肘击」达成了 3 连杀!

    • xxx 使用神器「自瞄小手枪」连续锁了 3 个人!

    • xxx 使用神器「炸弹无人机」连续炸死了 3 个人!并炸死了TA自己!

    • 以及更多……

    除了炸弹无人机连杀按6秒内不中断计算,其余均为似了清空连杀数。

  3. 中断连杀播报
    达成 10 连杀后死亡也会有特殊播报:

    • 我们有救了!yyy 使用「Weapon」中断了 xxx 的 10 连杀!

    • 一刻也没有为 xxx 哀悼!xxx 使用「Weapon」中断了TA自己的 19 连杀!

    • 最终,没有人能中断 xxx 的 20 连杀

  4. 踢出播报

    对于萌新/养老服调整播报门槛至 5 连杀

    判断玩家被踢并提示:

    • 大笨蛋 xxx 被踢出了游戏!

    被踢后再次加入未成功:

    • 超级大笨蛋 xxx 在被踢后尝试再次加入,未果
  5. 整点报时

    在整点和半点时进行播报,并添加随机颜色颜表情(=^・ω・^=)

    在凌晨0点后,颜表情将有99%概率替换成(。-ω-)zzz

    • 现在是 北京时间 20:00:00 整!(`・ω・´)

额外的

  • 为了防止我不小心在小图挂机,将实时自动切换到人多的队伍中,防止在人少的队伍中占位
  • 在长时间无人的情况下,将自动退出游戏,在凌晨时,将改成发送关机提示并在一定时间后自动关机
  • 废除命令:
    • @xd oldPinyin (拼音) —— 破损版/手搓转文字

技术实现简述

Squirrel & Python

Squirrel端

  • NSSaveJSONFile 保存 json 到 save.json
  • 循环使用 NSLoadJSONFile 读取 load.json
  • 读取到后清空 load.json,查看 state.txt 状态
  • 状态为完毕则退出读取循环

Python端

  • 使用 pywin32 监控 save.json
  • 有变更后立刻读取,并将 state.txt 设为处理中
  • 多线程处理数据,完成后输出到 load.json
  • 若所有处理线程全部完毕,将 state.txt 置为完毕

代码

squirrel 从零开始,一点点扒mod语法,所以存在以下要素:

AI高手、随意命名、随地大小注、重复造轮子、复用率奇低、难以维护、依托代码

代码详见本仓库

将作为文档不断更新

change log:

  • 📅2025.10.10

    • 🔯规范文档、添加 恶魔轮盘 的详细介绍
  • 📅2025.8.30

    • ✨恶魔轮盘添加设置选项,可以设置血量,道具数,子弹数,实弹占比等
  • 📅2025.8.28

    • ✨恶魔轮盘添加了七个原版道具
  • 📅2025.8.23

    • 🌠不敢相信两天时间我居然把一个易扩展,易配置的恶魔轮盘做出来了,还没做道具

    • ✨新增 恶魔轮盘 游戏!

      • @xd 恶魔轮盘 以进入游戏,可以等待第二个人进入自动开始
      • 或者使用 @xd add (任意电脑名称) 以添加电脑对手
      • 进入游戏后使用 @xd [数字] 按照提示进行选择操作
  • 📅2025.8.15

    • 🌠鸽了一万年的查询武器终于被我做出来辣
    • ✨新增 @xd 查询武器 (模糊武器英文名),可查询都有谁拿着此武器,支持多个武器查询,查询结果取交集,玩家名默认进行遮盖,此指令主要关注点在于使用该武器的玩家个数
  • 📅2025.8.09

    • ✨新增 @xd 钢管 等指令,将会自动开启麦克风并向麦克风推流音效,后续会慢慢增加meme音效,实在是太有趣辣!仅限休闲时使用否则我将👊没有什么办法但是我会立刻关闭使用

    • 🔯尝试重构squirrel命令中...会用table和functionref之后真的好多都需要重新写,但由于涉及的数据量都不大,改了之后也没有什么区别,也带来不了功能的增加,所以没有意义的重构是否还有必要进行下去
    • ☪️所有关节都需要活动

    • @xd congregation 🟨congregation jump scare !!! :fireinthehole:🙂🙂🙂
  • 📅2025.8.01

    • ✨拼音转文字可使用 white、red、green、yellow、blue、purple、cyan的 ANSI 转义码作为文本颜色

    • 🔯重构命令系统,使用了命令注册机制

  • 📅2025.7.14

    • 🐟又摸了一天鱼在脑袋里玩星露谷并写出来了↓

    • ✨添加新的转文字功能:

      • 添加例如 @xd pinyin add chong ci 冲刺! 以添加拼音转义中文
      • 效果:chong ci chong ci -> 冲刺!冲刺!
      • 添加例如 @xd pinyin del chong ci 以删除拼音转义
  • 📅2025.7.11

    • 🐟摸了一天鱼,实现了以下功能

    • ✨AI的返回现在可以动态换行

    • 🔯完全重构拼音转文字,基本消除bug且可以在任何阶段塞自定义词典,之后慢慢塞词语

  • 📅2025.6.17

    • 👆 😦((( 这几周腱鞘炎在努力康复,规范了一下文档🥀🥀🥀
  • 📅2025.5.23 周五

    • ✨为了增强时间观念,缩短时间流逝,添加了整点报时系统🕒🚲!
  • 📅2025.5.22 周四

    • ✨摸一天鱼并更新了查询服务器指令。使用 @xd 服务器 名称/模式 (模糊查询)。泰拉🌳,启动!

posted on 2025-08-09 22:50  Pathstar  阅读(18)  评论(0)    收藏  举报