summaryrefslogtreecommitdiff
path: root/ATRI/plugins/chat/__init__.py
blob: 7436645e4f8f64cbcb9ba3696125e32841b51659 (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
121
122
123
124
125
from random import choice

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

from ATRI.utils import CoolqCodeChecker
from ATRI.utils.limit import FreqLimiter
from ATRI.utils.apscheduler import scheduler
from .data_source import Chat
from ATRI.plugins.atri_chat_bot import ATRIChatBot

_chat_flmt = FreqLimiter(3)
_chat_flmt_notice = choice(["慢...慢一..点❤", "冷静1下", "歇会歇会~~", "我开始为你以后的伴侣担心了..."])


chat = Chat().on_message("闲聊(文爱")


@chat.handle()
async def _chat(bot: Bot, event: MessageEvent):
    print(1)
    user_id = event.get_user_id()
    if not _chat_flmt.check(user_id):
        await chat.finish(_chat_flmt_notice)

    msg = str(event.message)
    repo = await Chat().deal(msg, user_id)
    _chat_flmt.start_cd(user_id)
    try:
        if repo:
            await chat.finish(repo)
        else:  # 实在没话说就尝试 chatterbot
            await chat.finish(await ATRIChatBot.get_response(msg))
    except Exception:
        return


my_name_is = Chat().on_command("叫我", "更改闲聊(划掉 文爱)时的称呼", aliases={"我是"}, priority=1)


@my_name_is.args_parser  # type: ignore
async def _get_name(bot: Bot, event: MessageEvent, state: T_State):
    msg = str(event.message).strip()
    quit_list = ["算了", "罢了", "取消"]
    if msg in quit_list:
        await my_name_is.finish("好吧...")
    if not msg:
        await my_name_is.reject("欧尼酱想让咱如何称呼呢!0w0")
    else:
        state["name"] = msg


@my_name_is.handle()
async def _name(bot: Bot, event: MessageEvent, state: T_State):
    user_id = event.get_user_id()
    if not _chat_flmt.check(user_id):
        await my_name_is.finish(_chat_flmt_notice)

    msg = str(event.message).strip()
    if msg:
        state["name"] = msg


@my_name_is.got("name", "欧尼酱想让咱如何称呼呢!0w0")
async def _deal_name(bot: Bot, event: MessageEvent, state: T_State):
    user_id = event.get_user_id()
    new_name = state["name"]
    repo = choice(
        [
            f"好~w 那咱以后就称呼你为{new_name}!",
            f"噢噢噢!原来你叫{new_name}阿~",
            f"好欸!{new_name}ちゃん~~~",
            "很不错的称呼呢w",
        ]
    )
    Chat().name_is(user_id, new_name)
    _chat_flmt.start_cd(user_id)
    await my_name_is.finish(repo)


say = Chat().on_command("说", "别人让我说啥就说啥(", priority=1)


@say.args_parser  # type: ignore
async def _get_say(bot: Bot, event: MessageEvent, state: T_State):
    msg = str(event.message).strip()
    quit_list = ["算了", "罢了"]
    if msg in quit_list:
        await say.finish("好吧...")
    if not msg:
        await say.reject("阿!要咱说啥呢...")
    else:
        state["say"] = msg


@say.handle()
async def _ready_say(bot: Bot, event: MessageEvent, state: T_State):
    user_id = event.get_user_id()
    if not _chat_flmt.check(user_id):
        await say.finish(_chat_flmt_notice)

    msg = str(event.message)
    if msg:
        state["say"] = msg


@say.got("say")
async def _deal_say(bot: Bot, event: MessageEvent, state: T_State):
    msg = state["say"]
    check = CoolqCodeChecker(msg).check
    if not check:
        repo = choice(["不要...", "这个咱不想复读!", "不可以", "不好!"])
        await say.finish(repo)

    user_id = event.get_user_id()
    _chat_flmt.start_cd(user_id)
    await say.finish(msg)


@scheduler.scheduled_job("interval", name="闲聊词库检查更新", hours=3, misfire_grace_time=60)
async def _check_kimo():
    try:
        await Chat().update_data()
    except BaseException:
        pass