app/liteyuki/message/on.py

63 lines
1.8 KiB
Python
Raw Normal View History

2024-08-19 23:47:39 +08:00
# -*- coding: utf-8 -*-
"""
Copyright (C) 2020-2024 LiteyukiStudio. All Rights Reserved
@Time : 2024/8/19 下午10:52
@Author : snowykami
@Email : snowykami@outlook.com
@File : on.py
@Software: PyCharm
"""
from queue import Queue
from liteyuki.comm.storage import shared_memory
from liteyuki.log import logger
2024-08-20 20:30:50 +08:00
from liteyuki.message.event import MessageEvent
2024-08-19 23:47:39 +08:00
from liteyuki.message.matcher import Matcher
2024-08-22 09:35:02 +08:00
from liteyuki.message.rule import Rule, empty_rule
2024-08-19 23:47:39 +08:00
_matcher_list: list[Matcher] = []
_queue: Queue = Queue()
@shared_memory.on_subscriber_receive("event_to_liteyuki")
2024-08-20 20:30:50 +08:00
async def _(event: MessageEvent):
2024-08-29 13:50:12 +08:00
print("AA")
current_priority = -1
for i, matcher in enumerate(_matcher_list):
logger.info(f"Running matcher {matcher} for event: {event}")
await matcher.run(event)
# 同优先级不阻断,不同优先级阻断
if current_priority != matcher.priority:
current_priority = matcher.priority
if matcher.block:
break
2024-08-29 13:50:12 +08:00
else:
logger.info(f"No matcher matched for event: {event}")
print("BB")
2024-08-19 23:47:39 +08:00
2024-08-29 13:50:12 +08:00
def add_matcher(matcher: Matcher):
for i, m in enumerate(_matcher_list):
if m.priority < matcher.priority:
_matcher_list.insert(i, matcher)
break
else:
_matcher_list.append(matcher)
2024-08-29 13:50:12 +08:00
def on_message(rule: Rule = empty_rule, priority: int = 0, block: bool = False) -> Matcher:
matcher = Matcher(rule, priority, block)
# 按照优先级插入
add_matcher(matcher)
return matcher
2024-08-22 09:35:02 +08:00
def on_keywords(keywords: list[str], rule=empty_rule, priority: int = 0, block: bool = False) -> Matcher:
@Rule
async def on_keywords_rule(event: MessageEvent):
return any(keyword in event.raw_message for keyword in keywords)
2024-08-29 13:50:12 +08:00
2024-08-22 09:35:02 +08:00
return on_message(on_keywords_rule & rule, priority, block)