def infoProcess(groupId,sender,check): if sender in getAdmin(groupId): if infoCheckJudge(check): if check in adminCheck: return showSetting(groupId,sender,check) else: if not sender==HostQQ: record("setting:Insufficient permissions","none",sender,groupId,False,"function") return [ At(target=sender), Plain(text="Insufficient permissions!") ] else: return showSetting(groupId,sender,check) else: record("setting:command error","none",sender,groupId,False,"function") return [ At(target=sender), Plain("Command error!") ] else: return [ At(target=sender), Plain(text="爬爬爬,你没有管理权限!离人家远一点啦!死变态!") ]
async def daily_pic(app: Mirai, group: Group, member: Member, message: MessageChain): matches = ['.setu', '来张色图', '来份色图', '不够色', '就这?'] if any(x in message.toString() for x in matches): ans = random.randint(0, 1) if ans: try: path = os.path.abspath(__file__) path = os.path.dirname(path) path = os.path.join(path, 'Tornado_webite_test') path = os.path.join(path, 'Pixiv') # print(path) pic_name = os.listdir(path) # print(pic_name) random_pic = os.path.join(path, random.choice(pic_name)) await app.sendGroupMessage(group.id, [ At(target=member.id), Image.fromFileSystem(random_pic), Plain(text="这是您点的一份色图~") ]) except (RuntimeError, ValueError, EnvironmentError, PermissionError, ConnectionRefusedError): print("send setu message error!") else: await app.sendGroupMessage(group.id, [ At(target=member.id), Plain(text="本烫不想理你"), Face(faceId=212), ])
async def search_image(app: Mirai, group: Group, member: Member, cp: CommandParser, message: MessageChain): pa = cp.parse_with_valid(["[Image"]) 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("参数不能为空")]) img = message.getFirstComponent(Image) with open(f"{ROOT}{str(img.imageId)}.jpg", "wb") as f: f.write((await img.toBytes()).getvalue()) try: _, raw = await wget(f"https://saucenao.com/search.php?output_type=2&testmode=0&numres=4&url=https://www.pixivdl.net/static/img/{str(img.imageId)}.jpg") finally: os.remove(f"{ROOT}{str(img.imageId)}.jpg") data = Parser.parse_raw(raw) if data.header.status != 0: print(raw) return await app.sendGroupMessage(group, [At(member.id), Plain(f"发生错误:status: {data.header.status}")]) result = ["查询结果:\n", f"作品类型:{DataBase.get(data.results[0].header.index_id)}\n", f"准确度:{data.results[0].header.similarity}%\n", f"剩余次数:{data.header.long_remaining}\n"] if data.results[0].header.index_id in (21, 22): # Anime, HAnime result.append(f"作品名:{data.results[0].data.source}\n") result.append(f"年份:{data.results[0].data.year}\n") result.append(f"目标位置:第{data.results[0].data.part}集,{data.results[0].data.est_time}\n") elif data.results[0].header.index_id in (5, 31, 33, 34): # Image result.append(f"标题:{data.results[0].data.title}\n") result.append(f"更多信息:{data.results[0].data.ext_urls[0]}") await app.sendGroupMessage(group, [At(member.id), *(Plain(msg) for msg in result)])
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 wipDDL(g, mb, tit, delays): print('delay:', delays) try: await asyncio.sleep(delays) with open(f'ddl/{g}', 'r') as fr: j = json.load(fr) del ddlQueuer[tit] del j[tit] with open(f'ddl/{g}', 'w') as fw: json.dump(j, fw) if delays > -10: if g >= 2**39: if random.randint(0, 4): await GLOBAL.app.sendGroupMessage( g - 2**39, [At(mb), Plain(tit + '大限已至,我扔掉了。')]) else: await GLOBAL.app.sendGroupMessage( g - 2**39, [At(mb), Plain(tit + '变臭力,只能扔了(悲')]) else: if random.randint(0, 4): await GLOBAL.app.sendFriendMessage( g, [Plain(tit + '大限已至,我扔掉了。')]) else: await GLOBAL.app.sendFriendMessage( g, [Plain(tit + '变臭力,只能扔了(悲')]) except Exception as e: print(e)
def settingProcess(groupId,sender,config,change): if sender in getAdmin(groupId): if configChangeJudge(config,change): if config in adminConfig: updateSetting(groupId,config,settingCode[change]) record("setting:%s set to %s"%(config,change),"none",sender,groupId,True,"function") else: if not sender==HostQQ: record("setting:Insufficient permissions","none",sender,groupId,False,"function") return [ At(target=sender), Plain(text="Insufficient permissions!") ] else: if change.isnumeric(): updateSetting(groupId,config,change) else: updateSetting(groupId,config,settingCode[change]) record("setting:%s set to %s"%(config,change),"none",sender,groupId,True,"function") if (config=="real" or config=="setu") and change=="Enable" and (getSetting(groupId,"setu") and getSetting(groupId,"real")): updateSetting(groupId,"forbiddenCount",0) else: record("setting:command error","none",sender,groupId,False,"function") return [ At(target=sender), Plain("Command error!") ] return [ Plain(text="group:%d %s set to %s"%(groupId,config,change)) ] else: return [ At(target=sender), Plain(text="爬爬爬,你没有管理权限!离人家远一点啦!死变态!") ]
def showSetting(groupId,sender,check): settingList=["groupId","groupName","repeat","setuLocal","bizhiLocal","countLimit","setu","bizhi","real","r18","speakMode","switch"] if check=="sys": return [ At(target=sender), Plain(text=getSysInfo()) ] elif check=="all": title=Plain(text="\n-----------setting-----------\n") groupSetting=getGroupAllSetting(groupId) split=Plain(text="\n-----------System-----------\n") sysInfo=getSysInfo() return [ At(target=sender), title, groupSetting, split, Plain(text=sysInfo) ] elif check=="group": title=Plain(text="\n-----------setting-----------\n") groupSetting=getGroupAllSetting(groupId) return [ At(target=sender), title, groupSetting ] else: setting=getSetting(groupId,check) return [ At(target=sender), Plain(text="group:%d %s:%d"%(groupId,check,setting)) ]
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]))])
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 cget(app: Mirai, group: Group, member: Member): if member.id in room[state[member.id]]: await app.sendGroupMessage(group, [ At(member.id), Image.fromBytes(bind[state[member.id]].get_image( quality=random.randint(90, 99))) ]) 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 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 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 left(app: Mirai, group: Group, member: Member): if member.id in room[state[member.id]]: for m in room[state[member.id]]: try: state.pop(m) room.pop(m) bind.pop(m) except KeyError: pass await app.sendGroupMessage(group, [At(member.id), Plain("已退出")]) else: await app.sendGroupMessage(group, [At(member.id), Plain("未找到你所处的房间")])
async def wrapper(message: MESSAGE_T, *, at_sender: bool = False): if at_sender: if isinstance(message, list): message.insert(0, At(sender.id)) elif isinstance(message, MessageChain): message.__root__.insert(0, At(sender.id)) else: raise TypeError(f"not supported type for reply: {message.__class__.__name__}") if event_type == "GroupMessage": await app.sendGroupMessage(sender.group, message) elif event_type == "FriendMessage": await app.sendFriendMessage(sender, message) else: raise ValueError("Not supported event type")
async def lm_create(app: Mirai, count_data: dict, gid: int, mid: int): raw = sabee_gets(count_data, str(gid), count=10) if not raw: return [At(mid), Plain("暂时还没有数据..")] result = [At(mid), Plain("发言数统计:\n")] result.append(Plain("+==================+\n")) for p, (m, c) in enumerate(raw): if p == 0: p = "🔥" else: p = f" {p+1} " result.extend([Plain(f"L[{p}] {(await app.memberInfo(gid, int(m))).name or await qname.query(m)}: {c}\n")]) result.append(Plain(f"共{len(count_data[str(gid)])}人水群")) return result
async def lottery(app: Mirai, group: Group, member: Member): if group: raw = sabee_gets(sabee, str(group.id), count=10) print(raw) if not raw: return await app.sendGroupMessage(group, [At(member.id), Plain("至少要有3个人才能开始...")]) victim = random.choice(raw) mt = random.randint(1, 240) try: await app.mute(group, int(victim[0]), 300) call_later(mt, app.unmute, group=group.id, member=int(victim[0])) return await app.sendGroupMessage(group, Plain(f"{(await app.memberInfo(group, int(victim[0]))).name or await qname.query(victim[0])}收到了红茶大礼包*{mt}")) except PermissionError: return await app.sendGroupMessage(group, Plain("我手上的权力还不够呢...")) else: await app.sendGroupMessage(group, [At(member.id), Plain("过一会再来吧")])
async def aps_job(app: Mirai, msg: str, member: Member, isAll=False): if isAll: await app.sendGroupMessage(member.group, [AtAll(), Plain(text=msg)]) else: await app.sendGroupMessage( member.group, [At(target=member.id), Plain(text=msg)])
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("权限不足")])
def translate(groupId,sender,text,source,target): url="https://api.ai.qq.com/fcgi-bin/nlp/nlp_texttranslate" # 请求时间戳(秒级),用于防止请求重放(保证签名5分钟有效) t = time.time() time_stamp = str(int(t)) # 请求随机字符串,用于保证签名不可预测 nonce_str = ''.join(random.sample(string.ascii_letters + string.digits, 10)) # 应用标志,这里修改成自己的id和key app_id = '' app_key = '' params = { 'app_id' : app_id, 'text' : text, 'time_stamp':time_stamp, 'nonce_str':nonce_str, 'source':source, 'target':target } sign_before = '' for key in sorted(params): sign_before += '{}={}&'.format(key, quote(params[key], safe='')) sign_before += 'app_key={}'.format(app_key) sign = curlmd5(sign_before) params['sign'] = sign r = requests.get(url,params=params) # print(r.text) record("translate %s->%s"%(source,target),"none",sender,groupId,True,"function") return [ At(target=sender), Plain("translate:\n"), Plain(text="%s"%r.json()["data"]["target_text"]) ]
def getWeather(message,sender): global city point=message.toString()[25:] print("天气查询,城市:",point) if point not in city: return [ At(target=sender), Plain(text="请检查城市名称,只支持中国城市及部分地区哦~") ] weather_src=weatherSrc+point response=requests.get(weather_src) html=response.text html.replace("\/","/") html.replace("//",'/') html=html.encode('utf-8').decode('unicode_escape') wea=re.findall(r'wea":"(.*?)"',html,re.S)[0] tem=re.findall(r'"tem":"(.*?)"',html,re.S)[0] tem_day=re.findall(r'"tem_day":"(.*?)"',html,re.S)[0] tem_night=re.findall(r'"tem_night":"(.*?)"',html,re.S)[0] win=re.findall(r'"win":"(.*?)"',html,re.S)[0] win_speed=re.findall(r'"win_speed":"(.*?)"',html,re.S)[0] win_meter=re.findall(r'"win_meter":"(.*?)"',html,re.S)[0] air=re.findall(r'"air":"(.*?)"',html,re.S)[0] return [ Plain(text="%s今日天气\n"%point), Plain(text="天气情况:%s\n"%wea), Plain(text="实时温度:%s℃\n"%tem), Plain(text="最高温:%s℃\n"%tem_day), Plain(text="最低温:%s℃\n"%tem_night), Plain(text="风向:%s\n"%win), Plain(text="风力等级:%s\n"%win_speed), Plain(text="风速:%s\n"%win_meter), Plain(text="空气质量:%s"%air) ]
async def setuExecutor(app: Mirai, message: GroupMessage, number: int, keyword: str): """根据关键词获取data_array,并调用sendSetu""" global LAST_QUOTA member_id: int = message.sender.id group: Group = message.sender.group if keyword == '': if len(SetuDatabase.load_from_file().__root__ ) >= 300 and LAST_QUOTA < 200: resp = SetuResp(code=-430, msg='空关键词') else: resp = await SetuResp.get() LAST_QUOTA = resp.quota elif cd.check(member_id): resp = await SetuResp.get(keyword) LAST_QUOTA = resp.quota else: # resp = SetuResp(code=-3, msg='你的请求太快了,休息一下吧') await app.sendGroupMessage(group, [ At(member_id), Plain('太快了,受不了!\n'), Image.fromBytes(LoadFrequencyFile()) ]) return if resp.code == 0: cd.update(member_id) await sendSetu(app, message, resp.data, number) elif resp.code in [429, -430]: db = SetuDatabase.load_from_file() await sendSetu(app, message, db.__root__, number) else: source: Source = message.messageChain.getSource() await app.sendGroupMessage(group, resp.msg, source)
async def member_join(app: Mirai, event: MemberJoinEvent): try: await app.sendGroupMessage( event.member.group.id, [At(target=event.member.id), Plain(text="我是本群小可爱纱雾哟~欢迎呐~一起快活鸭~")]) except exceptions.BotMutedError: pass
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 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)
def askSth(sender,question): return [ At(target=sender), Plain(text="啧啧啧,都多大了,还不会百度嘛,不会的话谷歌也行啊\n"), Plain(text="什么?你说还不会?你可真是个小憨批呢\n"), Plain(text="没办法呢,就让聪明的我来帮帮你吧!\n"), Plain(text="https://baidu.sagiri-web.com/?%s"%question) ]
async def quote(app: Mirai, group: Group, message: MessageChain, member: Member, source: Source): if message.toString().find("骂我") != -1: txt1 = requests.get(url1) await app.sendGroupMessage( group, [At(member.id), Plain(text=txt1.text)], quoteSource=source) return True if message.toString().find("夸我") != -1: txt2 = requests.get(url2) await app.sendGroupMessage( group, [At(member.id), Plain(text=txt2.text)], quoteSource=source) return True if message.toString().find("tu") != -1: pic = picbase() print(pic) await app.sendGroupMessage(group, [Image.fromBase64(pic)]) return True
async def join(app: Mirai, group: Group, member: Member, cp: CommandParser): pa = cp.parse_with_valid(["Int"]) 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] not in bind: return await app.sendGroupMessage( group, [At(member.id), Plain("没有找到这个房间")]) elif member.id in bind: return await app.sendGroupMessage( group, [At(member.id), Plain("你不能加入自己的房间")]) elif len(room[pa[0][1]]) > 1: return await app.sendGroupMessage( group, [At(member.id), Plain("已经开始了")]) else: room[pa[0][1]].append(member.id) state[member.id] = state[pa[0][1]] await app.sendGroupMessage( group, [At(member.id), Plain("加入成功,若图片无法正常加载可输入!cget")]) await app.sendGroupMessage(group, [ At(pa[0][1]), Image.fromBytes(bind[state[member.id]].get_image()), Plain("输入!p x y来放置棋子") ])
async def bangumi_push(app: Mirai, member: Member, group: Group, cp: CommandParser): global nt pa = cp.parse_with_valid(["Int"]) if isinstance(pa, str): return await app.sendGroupMessage(group, [At(member.id), Plain(pa)]) elif not pa: week = datetime.today().isoweekday() else: week = pa[0][1] if nt+3600 < time.time(): l.clear() l.update(await kisssub()) if l: nt = time.time() print(l) now = l[str(week)] await app.sendGroupMessage(group, [At(member.id), Plain(f"{now[0]['utime'][3]}的番剧列表:\n"), *(Plain(f"{b['name']}:{b['tag']}\n") for b in now)])
def judgeImageYellow(groupId,sender,image_url): setYellowPredictReady(groupId,sender,False) # yellowPredictCount=getData("yellowPredictCount")+1 # print(yellowPredictCount) # updateData(yellowPredictCount,"yellow") # dist="%s%s.png"%(searchDist,searchCount) url="https://api.ai.qq.com/fcgi-bin/vision/vision_porn" # 请求时间戳(秒级),用于防止请求重放(保证签名5分钟有效) t = time.time() time_stamp = str(int(t)) # 请求随机字符串,用于保证签名不可预测 nonce_str = ''.join(random.sample(string.ascii_letters + string.digits, 10)) # 应用标志,这里修改成自己的id和key app_id = '' app_key = '' params = { 'app_id' : app_id, 'time_stamp':time_stamp, 'nonce_str':nonce_str, 'image_url':str(image_url) } params['sign'] = getSign(params) print(params) r = requests.post(url,params=params) print(r.text) if r.json()["ret"]>0: return [ At(target=sender), Plain("Error!:\nReason:"), Plain(text="%s"%r.json()["msg"]) ] elif r.json()["ret"]==0: return [ At(target=sender), Plain("Possiblity Result:\n"), Plain("Normal :%"), Plain(text="%d"%r.json()["data"]["tag_list"][0]["tag_confidence"]), Plain("Hot :%"), Plain(text="%d"%r.json()["data"]["tag_list"][1]["tag_confidence"]), Plain("Sexy :%"), Plain(text="%d"%r.json()["data"]["tag_list"][2]["tag_confidence"]), Plain("Total :%"), Plain(text="%d"%r.json()["data"]["tag_list"][9]["tag_confidence"]) ]