Files
WPSBot/README.md
2025-10-29 12:36:20 +08:00

436 lines
10 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# WPS Bot Game 🎮
基于WPS协作开放平台的自定义机器人游戏系统支持多种互动小游戏。
## ✨ 功能特性
### 🎲 骰娘系统
- 支持基础掷骰(`.r 1d20`
- 支持带修正掷骰(`.r 3d6+5`
- 自动识别大成功/大失败
### ✊ 石头剪刀布
- 与机器人对战
- 战绩统计
- 胜率计算
### 🔮 运势占卜
- 每日运势(同一天结果相同)
- 塔罗牌占卜
- 幸运数字和幸运颜色
### 🔢 猜数字游戏
- 1-100范围
- 10次机会
- 智能提示系统
### 📝 问答游戏
- 多领域题库
- 3次答题机会
- 关键词智能匹配
### 🀄 成语接龙
- 支持多音字和谐音接龙
- 全局黑名单系统
- 实时状态显示
- 参与者统计排行
- 支持指定下一位接龙者
### ⚫ 五子棋
- 标准15×15棋盘
- 黑方禁手规则(三三、四四、长连)
- 多轮对战同时进行
- 完整的战绩统计
- 实时棋盘显示
### 💎 积分系统
- 每日签到获得固定积分10分
- 运势占卜随机获得积分1-20分30%概率)
- 个人积分查询和记录
- 积分排行榜
- 完整的积分变动记录
### ⚗️ 炼金系统
- 消耗积分进行抽奖10/20/50积分
- 奖品池数学期望略高于消耗积分,对玩家友好
- 包含大奖(巨额积分)和负面奖励(额外扣分)
- 完整的炼金记录和统计
- 支持多种消耗档位的抽奖
### 🎁 积分赠送系统
- 用户间积分赠送功能
- 支持附赠个性化消息
- 完整的赠送和接收记录
- 赠送统计和记录查询
- 单次最多赠送1000积分
## 🚀 快速开始
### 环境要求
- Python 3.10+
- 1GB内存 + 单核CPU推荐配置
- Ubuntu Server推荐
### 安装步骤
1. **克隆项目**
```bash
git clone <repository-url>
cd WPSBotGame
```
2. **安装依赖**
```bash
# 使用conda环境
conda activate liubai
pip install -r requirements.txt
# 注意成语接龙游戏需要pypinyin库进行拼音处理
```
3. **配置Webhook**
有三种方式配置Webhook URL
#### 方式1命令行参数推荐
```bash
# Linux/Mac
python app.py --webhook-url "https://xz.wps.cn/api/v1/webhook/send?key=your_key"
# Windows
python app.py --webhook-url "https://xz.wps.cn/api/v1/webhook/send?key=your_key"
```
#### 方式2使用启动脚本
```bash
# Linux/Mac
./start.sh -w "https://xz.wps.cn/api/v1/webhook/send?key=your_key"
# Windows
start.bat -w "https://xz.wps.cn/api/v1/webhook/send?key=your_key"
```
#### 方式3环境变量
```bash
# 复制配置文件模板
cp config.env.example config.env
# 编辑配置文件填入你的Webhook URL
nano config.env
```
4. **运行应用**
```bash
# 基本启动
python app.py
# 自定义参数启动
python app.py --webhook-url "your_webhook_url" --port 8080 --log-level debug
# 使用启动脚本
./start.sh -w "your_webhook_url" -p 8080 -l debug
# 生产模式使用uvicorn
uvicorn app:app --host 0.0.0.0 --port 8000 --workers 1
```
### 命令行参数说明
- `--webhook-url, -w`: WPS Webhook URL
- `--host, -H`: 服务器主机地址 (默认: 0.0.0.0)
- `--port, -p`: 服务器端口 (默认: 11000)
- `--workers`: 工作进程数 (默认: 1)
- `--log-level`: 日志级别 (默认: info)
## 📝 配置说明
### 环境变量
`.env` 文件中配置以下参数:
```env
# WPS Webhook配置
WEBHOOK_URL=https://xz.wps.cn/api/v1/webhook/send?key=YOUR_KEY_HERE
# 数据库配置
DATABASE_PATH=data/bot.db
# 系统配置
MAX_CONCURRENT_REQUESTS=5
SESSION_TIMEOUT=1800
MESSAGE_RATE_LIMIT=20
# 日志配置
LOG_LEVEL=INFO
# 游戏配置(可选,使用默认值)
# 成语接龙最大历史显示数量
IDIOM_MAX_HISTORY_DISPLAY=10
# 五子棋最大并发游戏数
GOMOKU_MAX_CONCURRENT_GAMES=5
```
### WPS机器人配置
1. 在WPS群聊中添加webhook机器人
2. 获取webhook URL包含key参数
3. 配置Callback URL为你的服务器地址`http://your-server:8000/api/callback`
4. 验证Callback可用性WPS会发送GET请求
## 🎮 使用指南
### 通用指令
- `.help` - 显示帮助信息
- `.帮助` - 显示帮助信息
- `.stats` - 查看个人统计
### 骰娘指令
```
.r 1d20 # 掷一个20面骰
.r 3d6 # 掷三个6面骰
.r 2d10+5 # 掷两个10面骰加5
.r 1d20-3 # 掷一个20面骰减3
```
### 石头剪刀布
```
.rps 石头 # 出石头
.rps 剪刀 # 出剪刀
.rps 布 # 出布
.rps stats # 查看战绩
```
### 运势占卜
```
.fortune # 今日运势
.运势 # 今日运势
.fortune tarot # 塔罗占卜
```
### 猜数字
```
.guess start # 开始游戏
.guess 50 # 猜数字
.guess stop # 结束游戏
```
### 问答游戏
```
.quiz # 获取题目
.quiz 答案 # 回答问题
```
### 成语接龙
```
.idiom start [成语] # 开始游戏(可指定起始成语)
.idiom [成语] # 接龙
.idiom [成语] @某人 # 接龙并指定下一位
.idiom stop # 结束游戏
.idiom status # 查看游戏状态
.idiom reject [词语] # 拒绝词语加入黑名单(仅发起人)
.idiom blacklist # 查看黑名单
.idiom next @某人 # 指定下一位(仅最后接龙者)
```
### 五子棋
```
.gomoku challenge # 发起挑战
.gomoku accept # 接受挑战
.gomoku A1 # 在A1位置落子
.gomoku show # 显示当前棋盘
.gomoku resign # 认输
.gomoku cancel # 取消自己的挑战
.gomoku list # 列出所有进行中的对战
.gomoku stats # 查看个人战绩
```
### 积分系统
```
.points # 查看个人积分
.积分 # 查看个人积分
.checkin # 每日签到
.签到 # 每日签到
.打卡 # 每日签到
.points leaderboard # 积分排行榜
```
### 炼金系统
```
.alchemy # 消耗10积分进行炼金
.炼金 # 消耗10积分进行炼金
.alchemy 20 # 消耗20积分进行炼金
.alchemy 50 # 消耗50积分进行炼金
.alchemy stats # 查看炼金统计
.alchemy records # 查看炼金记录
```
### 积分赠送系统
```
.gift 123 50 生日快乐 # 赠送50积分给用户123附赠消息
.赠送 456 100 感谢帮助 # 赠送100积分给用户456附赠消息
.送 789 200 # 赠送200积分给用户789
.gift stats # 查看赠送统计
.gift sent # 查看发送记录
.gift received # 查看接收记录
```
## 🏗️ 项目结构
```
WPSBotGame/
├── app.py # FastAPI主应用
├── config.py # 配置管理
├── requirements.txt # Python依赖
├── env.example # 环境变量模板
├── core/ # 核心模块
│ ├── database.py # SQLite数据库
│ ├── models.py # 数据模型
│ └── middleware.py # 中间件
├── routers/ # API路由
│ ├── callback.py # Callback处理
│ └── health.py # 健康检查
├── utils/ # 工具函数
│ ├── message.py # 消息发送
│ ├── parser.py # 指令解析
│ └── rate_limit.py # 限流控制
├── games/ # 游戏模块
│ ├── base.py # 游戏基类
│ ├── dice.py # 骰娘系统
│ ├── rps.py # 石头剪刀布
│ ├── fortune.py # 运势占卜
│ ├── guess.py # 猜数字
│ ├── quiz.py # 问答游戏
│ ├── idiom.py # 成语接龙
│ ├── gomoku.py # 五子棋
│ ├── gomoku_logic.py # 五子棋逻辑
│ ├── points.py # 积分系统
│ ├── alchemy.py # 炼金系统
│ └── gift.py # 积分赠送系统
├── data/ # 数据文件
│ ├── bot.db # SQLite数据库
│ ├── fortunes.json # 运势数据
│ ├── quiz.json # 问答题库
│ └── idiom_blacklist.json # 成语黑名单
├── deploy/ # 部署配置
│ ├── install.sh # 安装脚本
│ ├── manage.sh # 管理脚本
│ ├── nginx/ # Nginx配置
│ └── systemd/ # systemd服务配置
└── Convention/ # 通用工具库
├── Runtime/ # 运行时工具
└── Image/ # 图像处理工具
```
## 🔧 部署
### 使用systemd推荐
1. **复制服务配置文件**
```bash
sudo cp deploy/systemd/wps-bot.service /etc/systemd/system/
```
2. **修改配置文件**
```bash
sudo nano /etc/systemd/system/wps-bot.service
# 修改WorkingDirectory和ExecStart路径
```
3. **启动服务**
```bash
sudo systemctl daemon-reload
sudo systemctl start wps-bot
sudo systemctl enable wps-bot
sudo systemctl status wps-bot
```
### 查看日志
```bash
# 实时查看日志
sudo journalctl -u wps-bot -f
# 查看最近100行
sudo journalctl -u wps-bot -n 100
```
## 📊 监控
### 健康检查
```bash
curl http://localhost:8000/health
```
### 系统统计
```bash
curl http://localhost:8000/stats
```
返回内存使用、活跃用户数等信息。
## 🐛 常见问题
### 1. 内存不足
**问题**服务器内存只有1GB
**解决**
- 项目已优化为极低内存占用(~150-200MB
- 使用单worker模式
- 按需加载游戏模块
- 定期清理过期会话
### 2. 消息发送失败
**问题**:机器人不回复
**解决**
- 检查Webhook URL是否正确
- 检查网络连接
- 查看日志:`journalctl -u wps-bot -f`
- 确认触发了限流20条/分钟)
### 3. 数据库锁定
**问题**SQLite database is locked
**解决**
- 项目使用自动提交模式,不应出现锁定
- 如果出现,检查是否有多个进程访问数据库
## 📈 性能指标
- **内存占用**150-300MB包含拼音处理库
- **响应时间**<500ms
- **并发支持**5-10个同时请求
- **用户规模**50-100个活跃用户
- **消息限制**20条/分钟WPS限制
- **支持游戏**10种游戏类型骰子石头剪刀布运势猜数字问答成语接龙五子棋积分系统炼金系统积分赠送系统
## 🤝 贡献
欢迎提交Issue和Pull Request
## 📄 许可证
MIT License
## 📞 联系方式
如有问题请提交Issue
---
Made with for WPS Bot Game