Skip to content

Commit

Permalink
雀魂插件更新,文档更新,新增插件教程
Browse files Browse the repository at this point in the history
- qhinfo支持查询金玉王的数据
- 雀魂查询能够自动选择牌谱屋链路
- 插件教程更新, 更多更详细, 有文有代码
- 可配置参数以减少 自动查询牌谱 时的输出
  • Loading branch information
NekoRabi committed Sep 22, 2022
1 parent ae2cc47 commit 61f3689
Show file tree
Hide file tree
Showing 17 changed files with 720 additions and 393 deletions.
99 changes: 13 additions & 86 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@

# [自定义指令帮助](./docs/reg-command_help.md)


# [简单的插件编写教程](./docs/HowToCreateYourFirstPlugin.md)

# 效果展示

## 十连模拟抽卡
Expand Down Expand Up @@ -36,11 +39,11 @@

# 如何实现

雀魂数据来自[雀魂牌谱屋](https://amae-koromo.sapk.ch/)通过定时爬取来获取牌谱。
雀魂数据来自[雀魂牌谱屋](https://amae-koromo.sapk.ch/), 通过定时爬取来获取牌谱。

以后可能会改成从雀魂直接获取数据 ( 等我会使用 websocket )

天凤数据来自角田提供的数据接口,自行存储数据
天凤数据来自角田提供的 [数据接口](https://tenhou.net/sc/raw/), 自行存储数据


# 常见错误
Expand Down Expand Up @@ -87,6 +90,8 @@ exe不包含资源文件,需要另外下载,下载好后需要放到对应

有python基础的人可以尝试参考 [模板](./plugin/Template/helloworld.py) 自己编写插件

## [这是一个简单的教程](./docs/HowToCreateYourFirstPlugin.md)

也可以联系我帮忙做一些插件(看心情做)

编写好后记得要 <font color='red'>import</font>
Expand All @@ -101,7 +106,7 @@ exe不包含资源文件,需要另外下载,下载好后需要放到对应

### config.yml
``` 注意, '冒号' (:) 后必须有空格 ```
```
```yaml
### 请注意 , 冒号(:)和横线(-) 后面必须要有 '空格'

adapter: # Mirai-Api-Http
Expand Down Expand Up @@ -129,8 +134,6 @@ commandpre: '' # 指令前缀

master: 0 # 机器人主人,必填

searchfrequency: 6 # 查询频率,建议为 6
replyimgpath : fox # 表情包路径

loglevel: INFO # 日志等级
Expand Down Expand Up @@ -165,7 +168,6 @@ settings: # 功能开关
silence: false # 全局沉默,降低发言频率
norepeat: false # 全局自动回复
help: true # 是否显示帮助
voice: false # 语音功能
saveflashimg: false # 保存闪照

repeatconfig: # 回复、打断相关,要求值从上到下排序为从大到小,值为 百分数
Expand All @@ -178,30 +180,13 @@ repeatconfig: # 回复、打断相关,要求值从上到下排序为
kwreply: true # 是否开启关键词回复


#语音设置
voicesetting:
# 腾讯云文本转语音系统,请在使用前仔细看使用手册
# https://cloud.tencent.com/document/product/1073/37995
# 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
volume: 1 # 音量或是音高
speed: 0.9 # 语速
voicetype: 1002 # 音色或是音质
private: true # 因为该功能可能需要机器人主人承担一定的费用,因此你可以设置该功能是否为私人使用
# 即 设置private 为 true,则只有你可以让机器人说话
secretId: ''
secretKey: ''
codec: 'mp3'

```
## 回复文本相关
### 以 commonreply.json 为例
```
#### 都是最简单的 key:[value0,value1...] ,触发时随机抽取一条消息进行回复。前面是与机器人互动的关键词 string ,后面是回复消息的 list
```json
{
<!-- 都是最简单的 key:[value0,value1...] ,触发时随机抽取一条消息进行回复
前面是与机器人互动的关键词 string ,后面是回复消息的 list -->
"贴": [
"贴什么贴.....只......只能......一下哦!",
"贴...贴贴(靠近)",
Expand All @@ -213,72 +198,14 @@ voicesetting:
}
```

### 雀魂十连的配置 drawcards.yml
#### 我会不定期更新配置和图片资源

```
lottery: # 奖池
decoration: # 装饰品类
item: # 物品
- index: 0 # 编号
name: 24K金棒 # 物品名称
rare: 3 #稀有度
type: decoration # 物品类型
url: ./Images/decoration/24K金棒.jpg # 物品图片链接
- index: 1
name: 一触即发
rare: 3
type: decoration
url: ./Images/decoration/一触即发.jpg
- index: 2
gift: # 礼物类
item:
- index: 0
name: 手工曲奇
rare: 0
type: gift
url: ./Images/gift/00-手工曲奇.jpg
- index: 1
name: 蓝罐曲奇
rare: 1
type: gift
url: ./Images/gift/01-蓝罐曲奇.jpg
- index: 2
name: 香喷喷曲奇
rare: 2
type: gift
url: ./Images/gift/02-香喷喷曲奇.jpg
person:
item:
- index: 0
name: 七海礼奈
rare: 4
type: person
url: ./Images/person/七海礼奈.png
- index: 1
name: 三上千织
rare: 4
type: person
url: ./Images/person/三上千织.png
up: # up的物品池,如果十连参数为 限时,up列表的装扮和人物出率将提高(与雀魂一致)
# 直接填名字
decoration:
- 和牌-安可
- 立直-开场曲
- 立直棒-应援棒
person:
- 八木唯
- 北见纱和子
```


# 功能

- 雀魂相关功能,如模拟抽卡,查询玩家信息,定时播报玩家最近战绩
- 雀魂相关功能,如模拟抽卡,查询玩家信息,定时播报玩家最近战绩 &nbsp; [雀魂帮助](./plugin/MajSoulInfo/doc.md)
- 天凤对局播报,段位查询
- 入群欢迎
- 摸头、互亲、举牌、色图、占卜等图片相关功能
- [摸头](./plugin/Petpet)[互亲](./plugin/KissKiss)[举牌](./plugin/jupai)[色图](./plugin/Setu)、占卜等图片相关功能
- 强交互性,提供自定义回复、图片回复和语音回复
- 支持自定义指令,可以自定义自己喜欢的触发方式
- 支持插件
Expand All @@ -299,7 +226,7 @@ up: # up的物品池,如果十连参数为 限时,up列表的装扮和人物

[x] 打包成exe,或者一键启动与更新

[ ] 做一份完整的说明书
[x] 做一份完整的说明书

# 其他
语音模块是使用的腾讯云的api,是收费的,默认关闭,有想法可以打开玩玩,约 0.02 或 0.03 元
Expand Down
23 changes: 14 additions & 9 deletions config/MajSoulInfo/config.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
qhpt: true # 是否启用查询雀魂PT功能
qhinfo: true # 是否启用查询雀魂信息功能
qhsl: true # 是否启用模拟雀魂抽卡
qhyb: true # 是否启用查询雀魂月报功能
qhpaipu: true # 是否启用查询雀魂牌谱功能
autoquery: true # 是否启用自动查询
searchfrequency: 6 # 牌谱查询频率
dailydrawcount: 3 # 每个用户每天抽卡次数上限
broadcast: "image" # 广播类型,发送图片还是文本
qhpt: true # 是否启用查询雀魂PT功能
qhinfo: true # 是否启用查询雀魂信息功能
qhsl: true # 是否启用模拟雀魂抽卡
qhyb: true # 是否启用查询雀魂月报功能
qhpaipu: true # 是否启用查询雀魂牌谱功能
autoquery: true # 是否启用自动查询
searchfrequency: 6 # 牌谱查询频率
dailydrawcount: 3 # 每个用户每天抽卡次数上限
query_limit: 10 # 同时查询的最大请求数量
linknum: -1 # 选择的结点, 有效值为1-5, 填其他值会自动获取结点
link_update: true # 链路是否自动更新
link_updatetime: "2:33" # 节点更新时间,可以用 *:20表示 在每小时20分自动更新, 用 0/2:00表示每2小时自动更新
silence_CLI: false # 减少控制台的信息输出
broadcast: "image" # 广播类型,发送图片还是文本
# 分别在在某群禁用 相关功能
disptgroup:
- 0
Expand Down
9 changes: 5 additions & 4 deletions config/TenHouPlugin/config.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
autoquery: true
broadcast: image
searchfrequency: 6
thpt: true
autoquery: true # 是否开启自动查询
broadcast: "image" # 广播类型
searchfrequency: 6 # 自动查询频率
thpt: true # 是否开启天凤查分
silence_CLI: false # 减少控制台的信息输出
2 changes: 0 additions & 2 deletions config/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@ commandpre: '' # 指令前缀

master: 0 # 机器人主人,必填

searchfrequency: 6 # 查询频率,建议为 6

replyimgpath : fox # 表情包路径

loglevel: INFO # 日志等级
Expand Down
139 changes: 139 additions & 0 deletions docs/HowToCreateYourFirstPlugin.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
***代码都在 [plugin/Template 包](../plugin/Template)***

# 一、先引入需要用的包和模块
```python


import re
from core import bot, config, bot_cfg
from mirai import GroupMessage, Plain, FriendMessage

# 用正则来匹配指令,正则表达式模块( re )当然是必须需导入的
# 一般来说,Plain 是必选 , GroupMessage 和 FriendMessage 依据你的插件触发情况是群聊还是私聊再选择导入
# bot 是必须导入的, config 和 bot_cfg 是可选
# config 是系统配置文件,有 指令前缀、黑白名单 等等
# bot_cfg 是机器人的配置,比如 QQ号、昵称 等等数据

# 还可以import其他的模块,比如 工具类,sqlite3,asyncio,time,math 等等
```

# 二、创建一个方法
```python
async def asy_hello():
"""
这是一个异步方法,当你进行异步请求时,定义方法需要加上 async , 在使用时需要加上 await
Returns:
"""
# 网络请求都是异步的,大多数方法都不需要写成异步


return "执行了异步方法 HELLOWORLD!"


def common_hello():
"""
这是普通的方法
Returns:
"""
return "hello world"

def readfile(path):
"""
稍微复杂一些的方法
目的是读取文件
Args:
path: 文件路径
Returns: 文件读取结果
"""

# 引入我封装好的方法 - 读取文件
from utils.cfg_loader import read_file
data = read_file(path)
print(data)
return data

```
# 三、创建bot方法,执行事务

```python

import re
from core import bot, bot_cfg
from mirai import GroupMessage, Plain, FriendMessage

@bot.on(GroupMessage) # 当群聊事件发生时
async def helloworld(event: GroupMessage):
"""
定义一个群聊方法
@param event: 群聊事件
"""
msg = "".join(map(str, event.message_chain[Plain])) # 获取消息的文本内容
m = re.match(fr"^你好$", msg.strip()) # 用正则进行匹配指令
if m:
# 如果匹配指令,执行方法
# do()

# 调用异步方法
# msg = await asy_hello()
# 普通方法调用
# msg = common_hello()

# from utils.MessageChainBuilder import messagechain_builder
# 最后让机器人发信息,给出反馈,可以用utils.MessageChainBuilder包的 messagechain_builder() 方法来快速构造一个消息链

await bot.send(event, f'114514191810 ! This is {bot_cfg.get("nickname")}')


@bot.on(FriendMessage) # 当私聊事件发生时
async def helloworld(event: FriendMessage):
"""
定义一个私聊方法
@param event: 私聊事件
"""
msg = "".join(map(str, event.message_chain[Plain])) # 获取消息的文本内容
m = re.match(fr"^你好$", msg.strip()) # 用正则进行匹配指令
if m:
# 如果匹配指令,执行方法
# do()

# 调用异步方法
# msg = await asy_hello()
# 普通方法调用
# msg = common_hello()

from utils.MessageChainBuilder import messagechain_builder
# 最后让机器人发信息,给出反馈,可以用utils.MessageChainBuilder包的 messagechain_builder(text=msg) 方法来快速构造一个消息链

await bot.send(event, f'私聊成功! This is {bot_cfg.get("nickname")}')

```

# 四、编写__init__.py文件

在目录的文件下, 创建一个名为 `__init__.py`的文件
再用编辑器打开`__init__.py` (可用 记事本 / Notepad / *推荐*VScode)
```python
# 当你的插件都编写好后
# 把你写的插件文件,按照 plugin.包名.文件名 的形式引入
# 将下面的 'Template' 重命名为你文件夹的名字
# 将文件夹中除了 '__init__.py' 以外全部的python文件全部导入

# from plugin.Template.file_init import *
# from plugin.Template.helloworld import *
```

# 五、将你写好的 ___文件夹___ 移动到机器人的plugin文件中

# 六、运行机器人, 进行测试

# 其他
<font size=5>
<ul>
<li>可以编写一个`file_init.py`文件,用来初始化所有配置</li>
<li>确定没有问题了,可以上传至群文件共享</li>
</ul>
</font>
Loading

0 comments on commit 61f3689

Please sign in to comment.