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 '' })
@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 ("狂爱", "狂粉"):
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"})
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:
@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)