from re import findall from random import choice from nonebot.typing import T_State from nonebot.adapters.cqhttp import Bot, MessageEvent from nonebot.adapters.cqhttp.message import Message, MessageSegment from ATRI.config import SauceNAO from ATRI.utils.limit import FreqLimiter from .data_source import SaouceNao _search_flmt = FreqLimiter(5) _search_flmt_notice = choice(["慢...慢一..点❤", "冷静1下", "歇会歇会~~"]) saucenao = SaouceNao().on_command("以图搜图", "透过一张图搜索可能的来源") @saucenao.args_parser # type: ignore async def _get_img(bot: Bot, event: MessageEvent, state: T_State): msg = str(event.message).strip() quit_list = ["算了", "罢了", "不搜了"] if msg in quit_list: await saucenao.finish("好吧...") if not msg: await saucenao.reject("图呢?") else: state["img"] = msg @saucenao.handle() async def _ready_search(bot: Bot, event: MessageEvent, state: T_State):
import re from aiohttp import FormData from random import choice from nonebot.typing import T_State from nonebot.adapters.cqhttp import Bot, MessageEvent from nonebot.adapters.cqhttp.message import Message, MessageSegment from ATRI.service import Service from ATRI.rule import is_in_service from ATRI.utils import request, UbuntuPaste, Translate from ATRI.utils.limit import FreqLimiter from ATRI.exceptions import RequestError URL = "https://trace.moe/api/search?url=" _anime_flmt = FreqLimiter(10) _anime_flmt_notice = choice(["慢...慢一..点❤", "冷静1下", "歇会歇会~~"]) __doc__ = """ 通过一张图片搜索你需要的番!据说里*也可以 """ class Anime(Service): def __init__(self): Service.__init__(self, "以图搜番", __doc__, rule=is_in_service("以图搜番")) @staticmethod async def _request(url: str) -> dict: aim = URL + url try:
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 _chat_flmt = FreqLimiter(3) _chat_flmt_notice = choice( ["慢...慢一..点❤", "冷静1下", "歇会歇会~~", "我开始为你以后的伴侣担心了..."]) chat = Chat().on_message("闲聊(文爱") @chat.handle() async def _chat(bot: Bot, event: MessageEvent): 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) await chat.finish(repo) my_name_is = Chat().on_command("叫我", "更改闲聊(划掉 文爱)时的称呼",
from random import choice from nonebot.typing import T_State from nonebot.adapters.cqhttp import Bot, MessageEvent from ATRI.service import Service from ATRI.config import BotSelfConfig from ATRI.utils.limit import FreqLimiter, DailyLimiter _repo_flmt = FreqLimiter(20) _repo_flmt_notice = choice(["慢...慢一..点❤", "冷静1下", "歇会歇会~~"]) _repo_dlmt = DailyLimiter(5) _repo_dlmt_notice = "阿!不能再喝了,再喝就晕过去了!" REPO_FORMAT = """ 来自用户{user}反馈: {msg} """ class Repo(Service): def __init__(self): Service.__init__(self, "反馈", "向维护者发送消息") repo = Repo().on_command("来杯红茶", "向维护者发送消息", aliases={"反馈", "报告"}) @repo.args_parser # type: ignore async def _get_repo(bot: Bot, event: MessageEvent, state: T_State): msg = str(event.message).strip()
from random import choice from nonebot.adapters.cqhttp import Bot, MessageEvent from ATRI.rule import is_in_service, to_bot from ATRI.service import Service from ATRI.utils import request from ATRI.utils.limit import FreqLimiter URL = "https://zuanbot.com/api.php?level=min&lang=zh_cn" _curse_flmt = FreqLimiter(3) _curse_flmt_notice = choice( ["我看你是找🔨是吧", "给我适可而止阿!?", "扎布多得了😅", "z?是m吗?我凑那也太恐怖了", "?"]) __doc__ = """ 口臭!你急了你急了! """ class Curse(Service): def __init__(self): Service.__init__(self, "口臭", __doc__, rule=is_in_service("口臭")) @staticmethod async def now() -> str: res = await request.get(URL) result = await res.text # type: ignore return result
@me_re_you.handle() async def _me_re_you(bot: Bot, event: MessageEvent): if randint(0, 15) == 5: msg = str(event.get_message()) content, is_ok = Funny().me_re_you(msg) if is_ok: await me_re_you.finish(content) fake_msg = Funny().on_command("/fakemsg", "伪造假转发内容,格式:qq-name-content\n可构造多条,使用空格隔开,仅限群聊") _fake_daliy_max = DailyLimiter(3) _fake_max_notice = "不能继续下去了!明早再来" _fake_flmt = FreqLimiter(60) _fake_flmt_notice = choice(["慢...慢一..点❤", "冷静1下", "歇会歇会~~"]) @fake_msg.args_parser # type: ignore async def _perp_fake(bot: Bot, event: GroupMessageEvent, state: T_State): msg = str(event.message).strip() quit_list = ["算了", "罢了"] if msg in quit_list: await fake_msg.finish("好吧...") if not msg: await fake_msg.reject("内容呢?格式:qq-name-content\n可构造多条,以上仅为一条,使用空格隔开") else: state["content"] = msg
from nonebot.adapters.cqhttp import Bot, MessageEvent from ATRI.utils.limit import FreqLimiter from .data_source import Rich _rich_flmt = FreqLimiter(2) bili_rich = Rich().on_message("小程序爪巴", block=False) @bili_rich.handle() async def _fk_bili(bot: Bot, event: MessageEvent): user_id = event.get_user_id() if not _rich_flmt.check(user_id): return msg = str(event.message) try: result, is_ok = await Rich().fk_bili(msg) except BaseException: return if not is_ok: return _rich_flmt.start_cd(user_id) await bili_rich.finish(result)
import re import asyncio from random import choice from nonebot.adapters.cqhttp import Bot, MessageEvent, Message from ATRI.utils.limit import FreqLimiter, DailyLimiter from ATRI.utils.apscheduler import scheduler from .data_source import Setu _setu_flmt = FreqLimiter(120) _setu_dlmt = DailyLimiter(5) random_setu = Setu().on_command("来张涩图", "来张随机涩图,冷却2分钟,每天限5张", aliases={"涩图来", "来点涩图", "来份涩图"}) @random_setu.handle() async def _random_setu(bot: Bot, event: MessageEvent): user_id = event.get_user_id() if not _setu_flmt.check(user_id): await random_setu.finish() if not _setu_dlmt.check(user_id): await random_setu.finish() setu, title, p_id = await Setu().random_setu() repo = f"Title: {title}\n" f"Pid: {p_id}" await bot.send(event, repo) msg_1 = await bot.send(event, Message(setu)) event_id = msg_1["message_id"] _setu_flmt.start_cd(user_id)
msg = str(event.message).strip() if msg: state["encr_de_text"] = msg @encrypt_de.got("encr_de_text", "内容呢?!") async def _deal_de(bot: Bot, event: MessageEvent, state: T_State): text = state["encr_de_text"] en = Encrypt() result = en.decode(text) await encrypt_de.finish(result) sepi = Utils().on_command("涩批一下", "将正常的句子涩一涩~") _sepi_flmt = FreqLimiter(3) _sepi_flmt_notice = ["涩批爬", "✌🥵✌"] @sepi.args_parser # type: ignore async def _get_sepi(bot: Bot, event: MessageEvent, state: T_State): msg = str(event.message).strip() quit_list = ["算了", "罢了", "取消"] if msg in quit_list: await sepi.finish("好吧...") if not msg: await sepi.reject("内容呢?!") else: state["sepi_text"] = msg
from random import choice from nonebot.adapters.cqhttp import Bot, MessageEvent from nonebot.adapters.cqhttp.message import Message, MessageSegment from ATRI.utils.limit import FreqLimiter from .data_source import CodeRunner _flmt = FreqLimiter(5) _flmt_notice = choice(["慢...慢一..点❤", "冷静1下", "歇会歇会~~"]) code_runner = CodeRunner().on_command("/code", "在线运行一段代码,帮助:/code help") @code_runner.handle() async def _code_runner(bot: Bot, event: MessageEvent): user_id = event.get_user_id() if not _flmt.check(user_id): await code_runner.finish(_flmt_notice) msg = str(event.get_message()) args = msg.split("\n") if not args: content = f"> {MessageSegment.at(user_id)}\n" + "请键入 /code help 以获取帮助~!" elif args[0] == "help": content = f"> {MessageSegment.at(user_id)}\n" + CodeRunner().help() elif args[0] == "list": content = f"> {MessageSegment.at(user_id)}\n" + CodeRunner( ).list_supp_lang() else: