summaryrefslogtreecommitdiff
path: root/ATRI/rule.py
blob: abc90f8d0f237e34119f76675745b74abe63adc4 (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
import datetime
from random import choice

from nonebot.rule import Rule
from nonebot.adapters.cqhttp.event import Event
from nonebot.adapters.cqhttp import GroupMessageEvent, PokeNotifyEvent

from .config import config
from .service.limit import Limit
from .service.banlist import BanSystem
from .service import Service
from .utils.list import count_list, del_list_aim
from .utils.apscheduler import scheduler, DateTrigger


def is_in_service(service: str) -> Rule:
    async def _is_in_service(bot, event, state) -> bool:
        if isinstance(event, GroupMessageEvent):
            return await Limit.auth_service(service, event.group_id)
        return await Limit.auth_service(service)
    
    return Rule(_is_in_service)


def is_in_banlist() -> Rule:
    async def _is_in_banlist(bot, event, state) -> bool:
        return BanSystem.is_in_list(str(event.get_user_id()))
    
    return Rule(_is_in_banlist)


def is_in_dormant() -> Rule:
    async def _is_in_dormant(bot, event, state) -> bool:
        return Service.is_dormant()
    
    return Rule(_is_in_dormant)


exciting_user = []
exciting_repo = [
    "歇歇8,。咱8能再快了",
    "太快惹,太快惹嗯",
    "你吼辣么快干什么!",
    "其实吧我觉得你这速度去d个vup挺适合",
    "我不接受!你太快了",
    "我有点担心,因为你太快了",
    "请稍等!您冲得太快了!"
]

def is_too_exciting(times: int, repo: bool) -> Rule:
    def del_list(user: str) -> None:
        global exciting_user
        exciting_user = del_list_aim(exciting_user, user)

    async def _is_too_exciting(bot, event, state) -> bool:
        global exciting_user
        user = event.get_user_id()
        
        if user in exciting_user:
            if repo:
                await bot.send(
                    event,
                    choice(exciting_repo)
                )
            return False
        else:
            if count_list(exciting_user, user) == times:
                delta = datetime.timedelta(
                    seconds=config["BotSelfConfig"]["session_exciting_time"])
                trigger = DateTrigger(
                    run_date=datetime.datetime.now() + delta)
                
                scheduler.add_job(
                    func=del_list,
                    trigger=trigger,
                    args=(user,),
                    misfire_grace_time=1,
                )
                
                if repo:
                    await bot.send(
                        event,
                        choice(exciting_repo)
                    )
                return False
            else:
                exciting_user.append(user)
                return True
    
    return Rule(_is_too_exciting)


def to_bot() -> Rule:
    async def _to_bot(bot, event, state) -> bool:
        return event.is_tome()
    
    return Rule(_to_bot)


def poke(bot, event: PokeNotifyEvent, state):
    if event.is_tome():
        return True
    else:
        return False