summaryrefslogtreecommitdiff
path: root/ATRI/plugins/utils/__init__.py
blob: 608f1f5b32709a9404fb4dc79133c08725940c22 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import re
from random import random

from nonebot.typing import T_State
from nonebot.adapters.cqhttp import Bot, MessageEvent

from ATRI.service import Service as sv
from ATRI.rule import is_in_service
from .data_source import roll_dice, Encrypt, Yinglish


__doc__ = """
roll一下
权限组:所有人
用法:
  /roll (int)d(int)+...
补充:
  int: 阿拉伯数字
示例:
  /roll 1d10+10d9+4d5+2d3
"""

roll = sv.on_command(cmd="/roll", docs=__doc__, rule=is_in_service("roll"))


@roll.args_parser  # type: ignore
async def _load_roll(bot: Bot, event: MessageEvent, state: T_State) -> None:
    msg = str(event.message).strip()
    quit_list = ["算了", "罢了", "取消"]
    if msg in quit_list:
        await roll.finish("好吧...")
    if not msg:
        await roll.reject("点呢?(1d10+...)")
    else:
        state["resu"] = msg


@roll.handle()
async def _roll(bot: Bot, event: MessageEvent, state: T_State) -> None:
    args = str(event.message).strip()
    if args:
        state["resu"] = args


@roll.got("resu", prompt="roll 参数不能为空~!\ndemo:1d10 或 2d10+2d10")
async def _deal_roll(bot: Bot, event: MessageEvent, state: T_State) -> None:
    resu = state["resu"]
    match = re.match(r"^([\dd+\s]+?)$", resu)

    if not match:
        await roll.finish("请输入正确的参数!!\ndemo:1d10 或 2d10+2d10")

    await roll.finish(roll_dice(resu))


__doc__ = """
加密传输(bushi
权限组:所有人
用法:
  /enc e,d msg
补充:
  e,d:对应 编码/解码
  msg: 目标内容
示例:
  /enc e アトリは高性能ですから!
"""

encrypt = sv.on_command(cmd="/enc", docs=__doc__, rule=is_in_service("enc"))


@encrypt.handle()
async def _encrypt(bot: Bot, event: MessageEvent) -> None:
    msg = str(event.message).split(" ")
    _type = msg[0]
    s = msg[1]
    e = Encrypt()

    if _type == "e":
        await encrypt.finish(e.encode(s))
    elif _type == "d":
        await encrypt.finish(e.decode(s))
    else:
        await encrypt.finish("请检查输入~!")


__doc__ = """
涩批一下!
权限组:所有人
用法:
  涩批一下 (msg)
"""

sepi = sv.on_command(cmd="涩批一下", docs=__doc__, rule=is_in_service("涩批一下"))


@sepi.handle()
async def _load_sepi(bot: Bot, event: MessageEvent, state: T_State) -> None:
    msg = str(event.message).strip()
    quit_list = ["算了", "罢了", "取消"]
    if msg in quit_list:
        await sepi.finish("好吧...")
    if not msg:
        await sepi.reject("话呢?")
    else:
        state["sepi_msg"] = msg


@sepi.handle()
async def _sepi(bot: Bot, event: MessageEvent, state: T_State) -> None:
    msg = str(event.message).strip()
    if msg:
        state["sepi_msg"] = msg


@sepi.got("sepi_msg", prompt="话呢?")
async def _deal_sepi(bot: Bot, event: MessageEvent, state: T_State) -> None:
    msg = state["sepi_msg"]
    if len(msg) < 4:
        await sepi.finish("这么短?涩不起来!")
    await sepi.finish(Yinglish.deal(msg, random()))