예제 #1
0
from sagiri_bot.orm.async_orm import orm
from sagiri_bot.orm.async_orm import ChatRecord
from sagiri_bot.control import UserCalledCountControl

saya = Saya.current()
channel = Channel.current()

channel.name("ChatRecorder")
channel.author("SAGIRI-kawaii")
channel.description("一个记录聊天记录的插件,可配合词云等插件使用")


@channel.use(
    ListenerSchema(
        listening_events=[GroupMessage],
        decorators=[UserCalledCountControl.add(UserCalledCountControl.CHAT)]))
async def chat_record(message: MessageChain, group: Group, member: Member):
    content = "".join([plain.text for plain in message.get(Plain)]).strip()
    filter_words = re.findall(r"\[mirai:(.*?)\]", content, re.S)
    for i in filter_words:
        content = content.replace(f"[mirai:{i}]", "")
    seg_result = jieba.lcut(content) if content else ''
    await orm.add(
        ChatRecord, {
            "time": datetime.datetime.now(),
            "group_id": group.id,
            "member_id": member.id,
            "persistent_string": message.asPersistentString(),
            "seg": "|".join(seg_result) if seg_result else ''
        })
예제 #2
0
@channel.use(
    ListenerSchema(
        listening_events=[GroupMessage],
        inline_dispatchers=[
            Twilight([
                UnionMatch("nokia", "鲁迅说", "王境泽", "喜报", "记仇", "狂爱", "狂粉", "低语",
                           "别说了", "一巴掌", "为所欲为", "馋身子", "切格瓦拉", "谁反对", "连连看",
                           "压力大爷", "你好骚啊", "食屎啦你", "五年", "滚屏") @ "prefix",
                RegexMatch(r"[\s\S]+") @ "content"
            ])
        ],
        decorators=[
            FrequencyLimit.require("memes", 2),
            Function.require(channel.module),
            BlackListControl.enable(),
            UserCalledCountControl.add(UserCalledCountControl.FUNCTIONS)
        ]))
async def memes(app: Ariadne, message: MessageChain, group: Group,
                prefix: RegexResult, content: RegexResult):
    prefix = prefix.result.asDisplay().strip()
    content = [content.result.asDisplay()]
    result = None
    if prefix == "nokia":
        result = await Memes.make_nokia(content)
    elif prefix == "鲁迅说":
        result = await Memes.make_luxunsay(content)
    elif prefix == "喜报":
        result = await Memes.make_goodnews(content)
    elif prefix == "记仇":
        result = await Memes.make_jichou(content)
    elif prefix in ("狂爱", "狂粉"):
예제 #3
0
proxy = config.proxy if config.proxy != "proxy" else ''


@channel.use(
    ListenerSchema(listening_events=[GroupMessage],
                   inline_dispatchers=[
                       Twilight([
                           FullMatch("pdf").space(SpacePolicy.FORCE),
                           RegexMatch(r".+") @ "keyword"
                       ])
                   ],
                   decorators=[
                       FrequencyLimit.require("pdf_searcher", 4),
                       Function.require(channel.module),
                       BlackListControl.enable(),
                       UserCalledCountControl.add(
                           UserCalledCountControl.SEARCH)
                   ]))
async def pdf_searcher(app: Ariadne, message: MessageChain, group: Group,
                       keyword: RegexResult):
    base_url = "https://zh.sg1lib.org"
    keyword = keyword.result.asDisplay().strip()
    url = f"{base_url}/s/?q={keyword}"
    async with aiohttp.ClientSession(connector=TCPConnector(
            verify_ssl=False)) as session:
        async with session.get(url=url, proxy=proxy) as resp:
            html = await resp.read()
    soup = BeautifulSoup(html, "html.parser")
    try:
        divs = soup.find("div", {
            "id": "searchResultBox"
        }).find_all("div", {"class": "resItemBox resItemBoxBooks exactMatch"})
예제 #4
0
    ListenerSchema(
        listening_events=[GroupMessage],
        inline_dispatchers=[
            Twilight(
                [
                    FullMatch("来点"),
                    RegexMatch(r"[^\s]+") @ "keyword",
                    RegexMatch(r"[色涩瑟]图$"),
                ]
            )
        ],
        decorators=[
            FrequencyLimit.require("lolicon_keyword_searcher", 2),
            Function.require(channel.module),
            BlackListControl.enable(),
            UserCalledCountControl.add(UserCalledCountControl.SETU),
        ],
    )
)
async def lolicon_keyword_searcher(
    app: Ariadne, message: MessageChain, group: Group, keyword: RegexResult
):
    keyword = keyword.result.asDisplay()
    msg_chain = await get_image(group, keyword)
    if msg_chain.onlyContains(Plain):
        return await app.sendGroupMessage(
            group, msg_chain, quote=message.getFirst(Source)
        )
    mode = await group_setting.get_setting(group, Setting.r18_process)
    r18 = await group_setting.get_setting(group, Setting.r18)
    if mode == "revoke" and r18:
예제 #5
0
@channel.use(
    ListenerSchema(
        listening_events=[GroupMessage],
        inline_dispatchers=[
            Twilight(
                [
                    ElementMatch(At) @ "at",
                    WildcardMatch()
                ]
            )
        ],
        decorators=[
            FrequencyLimit.require("chat_reply", 2),
            Function.require(channel.module),
            BlackListControl.enable(),
            UserCalledCountControl.add(UserCalledCountControl.AT)
        ]
    )
)
async def chat_reply(
        app: Ariadne,
        message: MessageChain,
        group: Group,
        member: Member,
        at: ElementResult
):
    assert isinstance(at.result, At)
    if at.result.target == config.bot_qq:
        content = "".join(plain.text for plain in message.get(Plain)).strip().replace(" ", ",")
        mode_now = await group_setting.get_setting(group, Setting.speak_mode)