Skip to content

Commit

Permalink
Merge pull request #9 from BigOrangeQWQ/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
BigOrangeQWQ committed Feb 21, 2023
2 parents 717ee56 + e9ce3cb commit befa655
Show file tree
Hide file tree
Showing 7 changed files with 368 additions and 47 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
dist/
build/
.venv/
.vscode/
.pdm.toml
pdm.lock
64 changes: 52 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
</div>


## 使用方法
## 如何下载
```
pip install nonebot_plugin_orangedice
nb plugin install nonebot_plugin_orangedice
Expand All @@ -37,17 +37,57 @@ CACHE_FILE=cache.txt # 缓存文件位置
SQLITE_FILE=DICE.db #数据库位置
```

## 插件指令
- .r [公式] 骰点(仅支持OneDice标准内COC骰子格式)
- .ra[属性][数值] 属性骰点[使用数值进行D100检定]
- .ra[属性] 属性骰点[从录卡数据中获取属性]
- .st[属性][数值] 人物卡录入
- .st clear 清除人物卡
- .log on 开启日志记录功能
- .log off 关闭日志记录功能
- .log upload 上传日志至群文件
- .log clear 清除此群日志
- .sc[公式A]/[公式B] ([san]) 进行sancheck检定,成功执行公式A,失败执行公式B (san值需要人物卡或自己提供)
## 指令集

普通的骰点,格式为[onedice标准](https://github.com/OlivOS-Team/onedice)内COC骰子格式

### RD 普通骰子
```
.r[expr]
.r1d100
.r5d100a10
```

### RA 属性掷点
骰出一个 1D100 的骰子进行属性/技能检定
不提供 value 则在人物卡中获取属性

```
.ra[attritube]([value])
.raStar50
.ra属性60
```

### ST 录人物卡
录入人物属性卡,仅当使用 clear 时重置人物卡
```
.st([attritube][value])/(clear)
.st测试10普通属性100san50..
.st clear
```

### SC 理智检定
进行 SanCheck 检定,自动扣除人物卡内的 san。
支持 **dice expr** 但不支持除法运算符。

```
.sc [success]/[failure] ([san])
.sc 1d8/1d3
```
### LOG 日志记录
记录跑团/群聊日志,此功能需群管理/群主才可开启
```
.log (on)/(off)/(upload)/(clear)
.log on #开启日志记录功能
.log off #暂停当前日志记录
.log upload #将日志记录上传至群文件
.log clear #清空之前的日志
```

## 参考项目(让我学习许多Owo)

Expand Down
94 changes: 68 additions & 26 deletions nonebot_plugin_orangedice/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@
from nonebot import get_driver
from nonebot.matcher import Matcher
from nonebot.plugin import on_startswith, on_message, PluginMetadata
from nonebot.adapters.onebot.v11 import GroupMessageEvent,GROUP_ADMIN, GROUP_OWNER, Bot, MessageEvent
from nonebot.adapters.onebot.v11 import GroupMessageEvent, GROUP_ADMIN, GROUP_OWNER, MessageEvent, Bot

from .model import DataContainer
from .utils import Attribute, get_msg, join_log_msg, get_name
from .message import fear_list, crazy_forever, crazy_list, crazy_temp
from .config import Config
from .roll import RA, RD, SC

Expand All @@ -22,16 +23,23 @@
MANAGER = GROUP_ADMIN | GROUP_OWNER

# -> 阻断响应器
roll = on_startswith(".r", priority=5) # roll点
log = on_startswith(".log", permission=MANAGER, priority=5) # 日志相关指令
roll = on_startswith(".r", priority=5) #roll点
log = on_startswith(".log", permission=MANAGER, priority=5) #日志相关指令
card = on_startswith(".st", priority=5) #人物卡录入
roll_card = on_startswith(".ra", priority=4) #人物技能roll点
sancheck = on_startswith(".sc", priority=5) #理智检定
roll_p = on_startswith(".rh", priority=5) #暗骰
roll_card = on_startswith(".ra", priority=4) #人物技能roll点
sancheck = on_startswith(".sc", priority=5) #理智检定
roll_p = on_startswith(".rh", priority=4) #暗骰
show = on_startswith(".show", priority=5) #展示人物卡
insane_list = on_startswith(".list",priority=5) #获取所有疯狂表
temp_insane = on_startswith(".ti", priority=5) # 临时疯狂表
forever_insane = on_startswith(".li", priority=5) # 永久疯狂表



# -> 非阻断响应器
log_msg = on_message(priority=1, block=False) # 记录日志
log_msg = on_message(priority=1, block=False) # 记录日志

# -> 数据相关
driver = get_driver()
plugin_config = Config.parse_obj(driver.config)
data = DataContainer()
Expand Down Expand Up @@ -61,9 +69,9 @@ async def roll_handle(matcher: Matcher, event: MessageEvent):
result = RD(name, msg)
else:
result = RD(name, msg.replace(matches.group(), ''), matches.group())
join_log_msg(data, event, result) # JOIN LOG MSG

join_log_msg(data, event, result) # JOIN LOG MSG

await matcher.finish(result)


Expand All @@ -80,7 +88,7 @@ async def roll_card_handle(matcher: Matcher, event: MessageEvent):
RA('name', 110, '测试', 100)
[out]name[100]进行了[测试]检定1D100=result [msg]
"""

user_id = event.user_id
card = Attribute(data.get_card(user_id).skills).attrs
msg = get_msg(event, 3)
Expand All @@ -90,16 +98,17 @@ async def roll_card_handle(matcher: Matcher, event: MessageEvent):

if match_item is None:
await matcher.finish('没有找到需要检定的属性')
else:
match_num = search(r"\d{1,3}", msg.replace(match_item.group(),"")) # 搜索 测试100
else:
match_num = search(r"\d{1,3}", msg.replace(
match_item.group(), "")) # 搜索 测试100
if match_num is not None:
result = RA(name, match_item.group(),
int(match_num.group()), card)
else:
result = RA(name, match_item.group(), None, card)
join_log_msg(data, event, result) # JOIN LOG MSG

join_log_msg(data, event, result) # JOIN LOG MSG

await matcher.finish(result)


Expand Down Expand Up @@ -157,31 +166,64 @@ async def sancheck_handle(matcher: Matcher, event: MessageEvent):
attr = Attribute(data.get_card(event.user_id).skills)
user_id = event.user_id
match = search(r"(\S{1,100})\/(\S{1,100})", msg)
sdice, fdice = "1" , "1d3"
sdice, fdice = "1", "1d3"
if match is not None:
sdice, fdice = match.group(1), match.group(2)
if attr.get("san") == 0:
await sancheck.finish("你没有理智属性")
result, drop_san = SC(get_name(event), attr.get("san"), fdice, sdice)
data.set_card(user_id, attr.set_attr("san", attr.get("san") - drop_san).to_str())

join_log_msg(data, event, result) # JOIN LOG MSG

data.set_card(user_id, attr.set_attr(
"san", attr.get("san") - drop_san).to_str())

join_log_msg(data, event, result) # JOIN LOG MSG

await matcher.finish(result)


@log_msg.handle()
async def log_msg_handle(event: GroupMessageEvent):
"""
记录群聊信息
"""
group_id = event.group_id
msg = event.message.extract_plain_text()
name = event.sender.card if event.sender.card else event.sender.nickname
name = get_name(event)
if data.is_logging(group_id):
data.log_add(group_id, f'[{name}] {msg}')


@roll_p.handle()
async def private_roll(matcher: Matcher, event: GroupMessageEvent, bot: Bot):
msg = event.message.extract_plain_text()[3:].strip().lower()
async def private_roll_handle(matcher: Matcher, event: GroupMessageEvent, bot: Bot):
"""
1D100暗骰指令
"""
msg = get_msg(event, 3)
name = get_name(event)
await bot.send_private_msg(user_id = event.user_id, message=RD(name, msg))
await matcher.finish(f"{name} 进行了一次暗骰~")
result = RD(name, msg)

await bot.send_private_msg(user_id=event.user_id, message=result)
join_log_msg(data, event, result)

await matcher.finish(f"{name} 进行了一次暗骰~")


@show.handle()
async def show_card_handle(event: MessageEvent):
user_id = event.user_id
card = Attribute(data.get_card(user_id).skills).to_str()
msg = f"你的车卡数据如下:\n{card}"
await show.finish(msg)


@insane_list.handle()
async def show_insane_list_handle(event: MessageEvent, matcher: Matcher):
need = get_msg(event, 4)
if need == 'temp':
await matcher.finish("\n".join(crazy_temp))
if need == 'forever':
await matcher.finish("\n".join(crazy_forever))


# @temp_insane.handle()
# async def get_temp_insane(event: MessageEvent, matcher: Matcher):

Loading

0 comments on commit befa655

Please sign in to comment.