async def rm_banner(app: Mirai, group: Group, member: Member, cp: CommandParser): if member.id in conf.get("permission", "operator"): pa = cp.parse_with_valid(["String", ("Int", "At")]) if isinstance(pa, str): return await app.sendGroupMessage( group, [At(member.id), Plain(pa)]) elif not pa: return await app.sendGroupMessage( group, [At(member.id), Plain("参数不能为空")]) if pa[0][1] == "group": target = "group_id" elif pa[0][1] == "member": target = "qq_id" else: return await app.sendGroupMessage( group, [At(member.id), Plain("类型错误")]) if pa[1][1] not in conf.get("banner", target): return await app.sendGroupMessage( group, [At(member.id), Plain("还不在清单里")]) conf.get("banner", target).remove(pa[1][1]) await app.sendGroupMessage( group, [At(member.id), Plain(f"移除{pa[1][1]}成功")]) else: await app.sendGroupMessage(group, [At(member.id), Plain("权限不足")])
async def edit_config(app: Mirai, group: Group, member: Member, message: MessageChain): if member.id in conf.get("permission", "operator"): try: _, segment, block, method, value = message.toString().split(" ") except ValueError: await app.sendGroupMessage(group, [At(member.id), Plain("参数不足")]) return try: data = json.loads(value) except json.decoder.JSONDecodeError: data = value try: if method == "replace": conf.set(segment, block, data) elif method == "update": c = conf.get(segment, block) if isinstance(c, (list, tuple)): c.append(data) elif isinstance(c, dict): c.update(data) else: await app.sendGroupMessage( group, [At(member.id), Plain(f"未知方法:{method}")]) return await app.sendGroupMessage(group, [At(member.id), Plain("修改成功")]) except ValueError as e: await app.sendGroupMessage( group, [At(member.id), Plain(f"修改配置时发生错误:\n{e}")])
async def set_active(app: Mirai, group: Group, member: Member, message: MessageChain): if message.toString().find(conf.get("basic", "command_head") + "cs") == 0: if group.id in conf.get("banner", "group_id"): return conf.get("active", "group_id").append(group.id) msg = await app.sendGroupMessage(group, [At(member.id), Plain("启用")]) call_later(10, app.revokeMessage, msg.messageId)
async def set_active(app: Mirai, group: Group, member: Member, message: MessageChain): if message.toString().find(conf.get("basic", "command_head") + "cs") == 0: if group.id in conf.get("banner", "group_id"): return conf.get("active", "group_id").append(group.id) await app.sendGroupMessage( group, [At(member.id), Plain("激活成功,输入 !help 获取帮助")])
async def get_list(app: Mirai, group: Group, member: Member): if member.id in conf.get("permission", "operator"): await app.sendGroupMessage(group, [ At(member.id), Plain("模块列表:"), Plain(json.dumps(conf.get("plugins", "active"), indent=2)) ]) else: await app.sendGroupMessage(group, [At(member.id), Plain("权限不足")])
async def rm_modules(app: Mirai, group: Group, member: Member, message: MessageChain): if member.id in conf.get("permission", "operator"): mp = message.toString().split(" ", 1)[1] conf.get("plugins", "active").remove(mp) await app.sendGroupMessage( group, [At(member.id), Plain("删除模块成功,将在下次重载生效")]) else: await app.sendGroupMessage(group, [At(member.id), Plain("权限不足")])
async def active_list(app: Mirai, group: Group, member: Member): if member.id not in conf.get("permission", "operator"): await app.sendGroupMessage(group, [At(member.id), Plain("权限不足")]) return await app.sendGroupMessage(group, [ At(member.id), Plain("已激活群组:"), Plain(json.dumps(conf.get("active", "group_id"), indent=2)) ])
async def testjson(app: Mirai, group: Group, member: Member): if member.id in conf.get("permission", "operator"): return await app.sendGroupMessage( group, JsonMessage( json={ "app": "com.tencent.gamecenter.gameshare", "desc": "", "view": "noDataView", "ver": "0.0.0.0", "prompt": "英雄分享:影流之主", "meta": { "shareData": { "scene": "SCENE_SHARE_VIDEO", "jumpUrl": "https://url.cn/5VN4uaZ", "type": "video", "url": "http:\/\/t.cn\/A6wslkFS" } }, "config": { "forward": 1 } })) else: return await app.sendGroupMessage(group, Plain("功能暂未开放"))
def lock(name: int): if name not in lottery_lock: if name not in conf.get("permission", "operator"): lottery_lock.add(name) call_later(240, lottery_lock.remove, name) return True else: return False
async def reload_modules(app: Mirai, group: Group, member: Member): if member.id in conf.get("permission", "operator"): from core.loader import manager error = manager.reload_modules() await app.sendGroupMessage(group, [At(member.id), Plain("重载模块成功")]) if error: await app.sendGroupMessage(group, [ Plain("但在重载时,发生了一些错误:\n"), *[Plain(str(e) + "\n") for e in error] ]) else: await app.sendGroupMessage(group, [At(member.id), Plain("权限不足")])
async def custom_trigger(app: Mirai, group: Group, member: Member, message: MessageChain): if member.id in conf.get("banner", "qq_id"): return True elif message.toString().find("一言") == -1: return False async with aiohttp.request("GET", "https://v1.alapi.cn/api/soul") as req: data = await req.json() if data["code"] != 200: raise ValueError("Status Error:" + str(data["code"] + ":" + data["msg"])) return await app.sendGroupMessage( group, [At(member.id), Plain(data["data"]["title"])])
async def edit_nick(app: Mirai, group: Group, member: Member, cp: CommandParser): if member.id in conf.get("permission", "operator"): pa = cp.parse_with_valid([("Int", "String")]) if isinstance(pa, str): return await app.sendGroupMessage( group, [At(member.id), Plain(pa)]) elif not pa: return await app.sendGroupMessage( group, [At(member.id), Plain("参数不能为空")]) info = await app.botMemberInfo(group) info.modify({"name": pa[0][1]}) await app.changeMemberInfo(group, app.qq, info) await app.sendGroupMessage(group, [At(member.id), Plain("修改成功")]) else: await app.sendGroupMessage(group, [At(member.id), Plain("权限不足")])
from mirai import Mirai, Group, Member, At, Plain from core.helpers import CommandParser from core.config import conf admin = conf.get("permission", "operator") cache_msg = {} async def repeat(app: Mirai, group: Group, member: Member, cp: CommandParser): args = cp.parse_with_valid(("Int", ("Int", "String"))) # count, content if isinstance(args, str): return await app.sendGroupMessage(group, [At(member.id), Plain(args)]) if member.id not in admin and args[0][1] > 3: return await app.sendGroupMessage(group, [At(member.id), Plain("次数不能大于3")]) for _ in range(args[0][1]): await app.sendGroupMessage(group, [Plain(str(args[1][1]))]) export = { "command": {"rp": repeat} }
async def save_config(app: Mirai, group: Group, member: Member): if member.id in conf.get("permission", "operator"): conf.save() await app.sendGroupMessage(group, [At(member.id), Plain("保存配置成功")]) else: await app.sendGroupMessage(group, [At(member.id), Plain("权限不足")])
async def set_inactive(app: Mirai, group: Group, member: Member): conf.get("active", "group_id").remove(group.id) msg = await app.sendGroupMessage(group, [At(member.id), Plain("禁用")]) call_later(10, app.revokeMessage, msg.messageId)
parser.add_argument("-r", "--reload", action="store_true", help="restart server(Daemon)") if __name__ == "__main__": args = parser.parse_args(sys.argv[1:]) if args.reload: if os.path.isfile("server.pid"): with open("server.pid", "r") as f: os.kill(int(f.read()), 15) # SIGTERM else: print("no pid file, pass") if args.develop: conf.set("server", "daemon", False) conf.set("server", "loop_debug", True) conf.set("logger", "save_log", False) conf.set("http", "rewrite_only", False) if args.log is not None: conf.set("logger", "level", args.log) from core.route import get_handler from core.server import FullAsyncServer if conf.get("server", "daemon") or args.daemon: from core.ext import daemon daemon.daemon("server.pid") try: FullAsyncServer(handler=get_handler()).run() except OSError as e: print(e)
async def testkick(app: Mirai, group: Group, member: Member): if member.id in conf.get("permission", "operator"): await app.sendGroupMessage(group, Plain("我滚了")) await app.quit(group) else: return await app.sendGroupMessage(group, Plain("功能暂未开放"))