From 6cb95fd6b6ff8da81c1363296e4e6a5b1878912a Mon Sep 17 00:00:00 2001 From: HibiKier <45528451+HibiKier@users.noreply.github.com> Date: Thu, 20 May 2021 20:13:49 +0800 Subject: [PATCH] Add files via upload --- plugins/admin_config.py | 27 +++++++++++++ plugins/fake_msg.py | 55 ++++++++++++++++++++++++++ plugins/fudu.py | 88 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 170 insertions(+) create mode 100644 plugins/admin_config.py create mode 100644 plugins/fake_msg.py create mode 100644 plugins/fudu.py diff --git a/plugins/admin_config.py b/plugins/admin_config.py new file mode 100644 index 00000000..84b6fe94 --- /dev/null +++ b/plugins/admin_config.py @@ -0,0 +1,27 @@ +from nonebot import on_notice +from services.log import logger +from nonebot.adapters.cqhttp import Bot, GroupAdminNoticeEvent +from nonebot.typing import T_State +from models.level_user import LevelUser +from models.group_member_info import GroupInfoUser +from configs.config import ADMIN_DEFAULT_AUTH + + +admin_notice = on_notice(priority=5) + + +@admin_notice.handle() +async def _(bot: Bot, event: GroupAdminNoticeEvent, state: T_State): + try: + nickname = (await GroupInfoUser.select_member_info(event.user_id, event.group_id)).user_name + except AttributeError: + nickname = event.user_id + if event.sub_type == 'set': + await LevelUser.set_level(event.user_id, event.group_id, ADMIN_DEFAULT_AUTH) + logger.info(f'为新晋管理员 {nickname}({event.user_id}) 添加权限等级:{ADMIN_DEFAULT_AUTH}') + if event.sub_type == 'unset': + await LevelUser.delete_level(event.user_id, event.group_id) + logger.info(f'将非管理员 {nickname}({event.user_id}) 取消权限等级') + + + diff --git a/plugins/fake_msg.py b/plugins/fake_msg.py new file mode 100644 index 00000000..b4eb51d1 --- /dev/null +++ b/plugins/fake_msg.py @@ -0,0 +1,55 @@ +from nonebot.typing import T_State +from nonebot.adapters.cqhttp import Bot, MessageEvent +from nonebot import on_command +from util.utils import get_message_imgs, get_message_text +from util.init_result import share +from services.log import logger + + +__plugin_usage__ = '用法:\n格式:网址 标题 内容(可省略) 图片(可省略)\n示例:假消息 www.4399.com 我喜欢萝莉 为什么我喜欢... (图片)' + + +fake_msg = on_command('假消息', priority=5, block=True) + + +@fake_msg.handle() +async def _(bot: Bot, event: MessageEvent, state: T_State): + msg = get_message_text(event.json()).split(' ') + img = get_message_imgs(event.json()) + if not msg or msg in ['帮助']: + await fake_msg.finish(__plugin_usage__) + if len(msg) > 1: + if len(msg) == 2: + url = msg[0] + title = msg[1] + content = '' + else: + url = msg[0] + title = msg[1] + content = msg[2] + if img: + img = img[0] + else: + img = '' + if url.find('http://') == -1: + url = 'http://' + url + await fake_msg.send(share(url, title, content, img)) + logger.info( + f"(USER {event.user_id}, GROUP {event.group_id if event.message_type != 'private' else 'private'})" + f" 构造假消息 url {url}, title {title}, content {content}") + else: + await fake_msg.finish('消息格式错误:\n网址 标题 内容(可省略) 图片(可省略)') + + + + + + + + + + + + + + diff --git a/plugins/fudu.py b/plugins/fudu.py new file mode 100644 index 00000000..6ec5f076 --- /dev/null +++ b/plugins/fudu.py @@ -0,0 +1,88 @@ +from nonebot.adapters.cqhttp.permission import GROUP +from configs.path_config import IMAGE_PATH +from util.img_utils import get_img_hash +import random +from util.init_result import image +from nonebot import on_message +from util.utils import get_message_text, get_message_imgs, get_local_proxy +from nonebot.typing import T_State +from nonebot.adapters.cqhttp import Bot, GroupMessageEvent +import aiohttp +import aiofiles +from collections import defaultdict +from configs.config import FUDU_PROBABILITY + + +class Fudu: + def __init__(self): + self.mlist = defaultdict(list) + + def append(self, key, content): + self.mlist[key].append(content) + + def clear(self, key): + self.mlist[key] = [] + + def size(self, key) -> int: + return len(self.mlist[key]) + + def check(self, key, content) -> bool: + return self.mlist[key][0] == content + + def get(self, key): + return self.mlist[key][0] + + +_fudulist = Fudu() + + +fudu = on_message(permission=GROUP, priority=9) + + +@fudu.handle() +async def _(bot: Bot, event: GroupMessageEvent, state: T_State): + if event.is_tome() or state["_prefix"]["raw_command"]: + return + if get_message_text(event.json()): + if get_message_text(event.json()).find('@可爱的小真寻') != -1: + await fudu.finish('复制粘贴的虚空艾特?', at_sender=True) + imgs = get_message_imgs(event.json()) + msg = get_message_text(event.json()) + if not imgs and not msg: + return + if imgs: + img_hash = await get_fudu_img_hash(imgs[0], event.group_id) + else: + img_hash = '' + add_msg = msg + '|-|' + img_hash + if _fudulist.size(event.group_id) == 0: + _fudulist.append(event.group_id, add_msg) + elif _fudulist.check(event.group_id, add_msg): + _fudulist.append(event.group_id, add_msg) + else: + _fudulist.clear(event.group_id) + _fudulist.append(event.group_id, add_msg) + if _fudulist.size(event.group_id) > 2: + if random.random() < FUDU_PROBABILITY: + if random.random() < 0.2: + await fudu.finish("打断施法!") + if imgs and msg: + rst = msg + image(f'compare_{event.group_id}_img.jpg', 'temp') + elif imgs: + rst = image(f'compare_{event.group_id}_img.jpg', 'temp') + elif msg: + rst = msg + else: + rst = '' + if rst: + await fudu.send(rst) + _fudulist.clear(event.group_id) + + +async def get_fudu_img_hash(url, group_id): + async with aiohttp.ClientSession() as session: + async with session.get(url, proxy=get_local_proxy(), timeout=5) as response: + async with aiofiles.open(IMAGE_PATH + f"temp/compare_{group_id}_img.jpg", 'wb') as f: + await f.write(await response.read()) + img_hash = get_img_hash(IMAGE_PATH + f"temp/compare_{group_id}_img.jpg") + return str(img_hash)