def savePic(savePicLs, counter, app, sourceid, group, loop): lock = Universe.get_value("SavePicLock") lock.acquire() Universe.set_value("SavePicLock", lock) for ls in savePicLs: print(ls) print(ls.http_to_bytes(ls.url)) direct = "{}/{}/collection".format(pivixDownloader._ROOTDIC, getDate()) if not os.path.exists(direct): os.makedirs(direct) try: response = requests.get(ls.url) img = PILImage.open(BytesIO(response.content)) wid, hght = img.size if wid + hght < 500 and len(savePicLs) < 2: print("表情包") asyncio.run_coroutine_threadsafe( app.sendGroupMessage(group, MessageChain.create([Plain("表情包".format(counter))]), quote=sourceid), loop) lock.release() Universe.set_value("SavePicLock", lock) return 0 img.save(os.path.join(direct, "{}.{}".format(ls.imageId[1:-7], img.format.lower()))) asyncio.run_coroutine_threadsafe( app.sendGroupMessage(group, MessageChain.create([Plain("{}张".format(counter))])), loop) print("saved") except: asyncio.run_coroutine_threadsafe( app.sendGroupMessage(group, MessageChain.create([Plain("{}张保存失败".format(counter))]), quote=sourceid), loop) print("failed") lock.release() Universe.set_value("SavePicLock", lock)
async def GroupWarnMember(app:GraiaMiraiApplication,event:GroupMessage): quoted=event.messageChain.get(Source)[0] if not await checkMemberPermission(app,event.sender,[MemberPerm.Administrator,MemberPerm.Owner],quoted): return target=getTargetFromAt(app,event.sender.group,event.messageChain) for i in target: reply=[At(target=i.id)] times=GetMemberStatusFromGrouBlockDB(app,event.sender.group,i,"Warn") if times==None: return times+=1 if not InsertMemberStatusToGroupBlockDB(app,event.sender.group,i,"Warn",times): return if times==1: reply.append(Plain("第一次警告,注意群规.")) elif times==2: reply.append(Plain("第二次警告,注意群规.关小黑屋1天.")) await muteMember(app,event.sender.group,i,24*60,quoted) elif times==3: reply.append(Plain("第三次警告,注意群规.关小黑屋一个月.下次直接飞机票.")) await muteMember(app,event.sender.group,i,30*24*60-1,quoted) elif times==4: reply.append(Plain("第四次警告,飞机票.")) await kickMember(app,event.sender.group,i,quoted) block=GetMemberStatusFromGrouBlockDB(app,event.sender.group,i,"Blocked") if block==None: return block+=1 if not InsertMemberStatusToGroupBlockDB(app,event.sender.group,i,"Blocked",block): return await app.sendGroupMessage(event.sender.group,MessageChain.create(reply)) await app.sendGroupMessage(event.sender.group,MessageChain.create([ Plain("操作完成") ]),quote=quoted)
async def GroupRemoveAdmin(app: GraiaMiraiApplication, event: GroupMessage): quoted = event.messageChain.get(Source)[0] if not await checkMemberPermission( app, event.sender, [MemberPerm.Administrator, MemberPerm.Owner], quoted ): return target = set(map(lambda at: at.target, event.messageChain.get(At))) succ_result = [] fail_result = [] for i in target: if DeleteFromGroupDB(app, event.sender.group, "GroupPermission", "AdminID", i): succ_result.append(At(i)) else: fail_result.append(At(i)) await app.sendGroupMessage( event.sender.group, MessageChain.create( [ Plain("操作完成\n以下成员取消权限成功:\n"), *succ_result, Plain("\n以下成员取消权限失败:\n"), *fail_result, ] ), quote=quoted, )
async def pix_update(app: GraiaMiraiApplication, friend: Friend): logger.info("收到手动更新请求,正在处理") msg_list = await pix.run(friend.id) if not msg_list: await app.sendFriendMessage( friend, MessageChain.create([Plain("无更新哟~再等一会吧~~")])) elif isinstance(msg_list, list): async def send_msg_list(m_list): for msg in m_list: await app.sendFriendMessage(master_id, MessageChain.create(msg)) await asyncio.sleep(1) await app.sendFriendMessage(master_id, MessageChain.create([Plain("结束")])) try: await send_msg_list(msg_list) except BaseException as e: logger.error("发送时出错:") logger.error(str(e)) await app.sendFriendMessage( master_id, MessageChain.create([Plain("发送时出错,具体类型请看日志,等待450s重试")])) await asyncio.sleep(450) await send_msg_list(msg_list)
async def friend_request_handler(event: NewFriendRequestEvent, app: GraiaMiraiApplication): msg = "收到好友请求:\nQQ:{}\n昵称:{}\n描述消息:{}\n群组:{}\n请输入y/n进行同意或拒绝" if event.sourceGroup: await app.sendFriendMessage( master_id, MessageChain.create([ Plain( msg.format(str(event.supplicant), event.nickname, event.message, str(event.sourceGroup))) ])) else: await app.sendFriendMessage( master_id, MessageChain.create([ Plain( msg.format(str(event.supplicant), event.nickname, event.message, "无")) ])) msg = await inc.wait( FriendMessageInterrupt( master_id, custom_judgement=lambda x: x.messageChain.asDisplay().startswith( "y") or x.messageChain.asDisplay().startswith("n"))) if msg.messageChain.asDisplay().startswith("y"): await event.accept() await app.sendFriendMessage(master_id, MessageChain.create([Plain("添加成功")])) await app.sendFriendMessage(event.supplicant, welcome.welcome_messagechain) else: await event.reject() await app.sendFriendMessage(master_id, MessageChain.create([Plain("已拒绝")]))
async def func(app: GraiaMiraiApplication, event: eventType): quoted = event.messageChain.get(Source)[0] await SendToTarget( app, event.sender, eventType, MessageChain.create([Plain("发送APP消息")]), quote=quoted, ) @Waiter.create_using_function( [eventType], using_decorators=[Interrupt.SendFromSameTarget(event, eventType)], block_propagation=True) async def waiter(wait_event: eventType): message = wait_event.messageChain.get(App) if message: print(message[0]) return message[0] message = await Interrupt.interruptcontrol.wait(waiter) url = AppMessageToUrl(message) if not url: url = "没找到合适的链接" await SendToTarget( app, event.sender, eventType, MessageChain.create([Plain(url)]), quote=quoted, )
def getYgg(self) -> list: r1 = requests.post( 'https://mcskin.littleservice.cn/api/yggdrasil/api/profiles/minecraft', json=[self.playerName]) s1 = r1.json() if s1 == []: return [Plain(f'Error: Player {self.playerName} not found')] # player_uuid = s1[0]['id'] r2 = requests.get( f'https://mcskin.littleservice.cn/api/yggdrasil/sessionserver/session/minecraft/profile/{player_uuid}' ) s2 = r2.json() unbase64ed = s2['properties'][0]['value'] _gameprofile = base64.b64decode(unbase64ed) # gameprofile = YggdrasilProfile(json.loads(_gameprofile)) return [ Plain(f'''角色名:{gameprofile.name} UUID:{gameprofile.uuid} 模型:{gameprofile.skin.model.description} 皮肤:{gameprofile.skin.hash} ({gameprofile.skin.provider.description}) 披风:{gameprofile.cape.hash} ({gameprofile.cape.provider.description}) '''), *self.previewImage( gameprofile.skin.hash if isinstance( gameprofile.skin.provider, TextureProvider.LittleSkin) else None, gameprofile.cape.hash if isinstance( gameprofile.cape.provider, TextureProvider.LittleSkin) else None) ]
async def command_csl(app: GraiaMiraiApplication, group: Group, params: MessageChain): player_name = params.asDisplay() result = await apis.CustomSkinLoaderApi.get( 'https://mcskin.littleservice.cn/csl', player_name) if not result.existed: await app.sendGroupMessage( group, MessageChain.create([Plain(f'「{player_name}」不存在')])) else: skin_hash = result.skins.slim or result.skins.default cape_hash = result.cape littleskin_root = 'https://mcskin.littleservice.cn' preview_images: List[Image] = list() for texture in [skin_hash, cape_hash]: if skin_hash: preview_images.append( Image.fromUnsafeBytes(await apis.getTexturePreview( littleskin_root, texture))) await app.sendGroupMessage( group, MessageChain.create([ *preview_images, Plain( f'Skin: {skin_hash[:7] if skin_hash else None} [{result.skin_type}]\nCape: {cape_hash[:7] if cape_hash else None}' ) ]))
async def BotInviteJoinGroup(app: GraiaMiraiApplication, event: BotInvitedJoinGroupRequestEvent): if event.supplicant in BotMaster: event.accept("邀请通过") return taskList = [RequsetBotMaster(app, i, event) for i in BotMaster] try: await asyncio.gather(*taskList) except ReturnValue as value: for t in taskList: t.cancel() regexResult = value.ReturnValue[0] if regexResult.group(1) == "同意": event.accept(regexResult.group(2) if regexResult.group(2) else "") await app.sendFriendMessage( value.ReturnValue[1], MessageChain.create([Plain("完成同意加群申请")]), quote=value.ReturnValue[2], ) else: event.reject(regexResult.group(2) if regexResult.group(2) else "") await app.sendFriendMessage( value.ReturnValue, MessageChain.create([Plain("完成拒绝加群申请")]), quote=value.ReturnValue[2], ) finally: await asyncio.sleep(30)
async def command_ban(app: GraiaMiraiApplication, group: Group, _gm: GroupMessage): CP = CommandParser(_gm, settings.commandSymbol) def add() -> str: _l = str() for t in CP.at: targetGP = groupPermissions(t.target) if not targetGP.isAdmin(): _result = targetGP.blockme() _message = f'{t.display} {tF.ban.add_succ}\n' if _result else f'{t.display} {tF.ban.add_fail}\n' _l = f'{_l}{_message}' return _l.strip('\n') def remove() -> str: _l = str() for t in CP.at: targetGP = groupPermissions(t.target) _result = targetGP.unblockme() _message = f'{t.display} {tF.ban.remove_succ}\n' if _result else f'{t.display} {tF.ban.remove_fail}\n' _l = f'{_l}{_message}' return _l.strip('\n') if CP.Command.args: subCommand = CP.Command.argsList[0] if subCommand == 'add': await app.sendGroupMessage(group, MessageChain.create([Plain(add())])) if subCommand == 'remove': await app.sendGroupMessage(group, MessageChain.create([Plain(remove())]))
def set_auto_update(self, com: str): code_ = com.split()[-1] if code_ == "0": self.auto = False return [Plain("自动更新已关闭")] elif code_ == "1": self.auto = True return [Plain("自动更新已开启")]
async def GroupConfessTalk(app: GraiaMiraiApplication, event: GroupAllowConfessTalkEvent): await GroupSettingChanged( app, event, enable=MessageChain.create([Plain("坦白说开启了?有人要用吗?")]), disable=MessageChain.create([Plain("坦白说被关了.需要的等下次开启吧.")]), invalid=MessageChain.create([Plain("为啥会发出这句?这是发生了啥?我不知道,不要问我.")]), )
async def GroupAnonymousChat(app: GraiaMiraiApplication, event: GroupAllowAnonymousChatEvent): await GroupSettingChanged( app, event, enable=MessageChain.create([Plain("突然开始允许匿名聊天?")]), disable=MessageChain.create([Plain("匿名聊天被关了..")]), invalid=MessageChain.create([Plain("为啥会发出这句?这是发生了啥?我不知道,不要问我.")]), )
def initNow(app: GraiaMiraiApplication, message: MessageChain, friend, loop): global setuList, haotuList getPicList() if type(friend) is Friend: asyncio.run_coroutine_threadsafe(app.sendFriendMessage(friend, message.create( [Plain("今日色图:{}份\n今日好图:{}份".format(len(setuList), len(haotuList)))])), loop) elif type(friend) is Group: asyncio.run_coroutine_threadsafe(app.sendGroupMessage(friend, message.create( [Plain("今日色图:{}份\n今日好图:{}份".format(len(setuList), len(haotuList)))])), loop)
async def func1(app: GraiaMiraiApplication, event: GroupMessage, cool): if cool: await app.sendGroupMessage(event.sender.group, MessageChain.create([Plain("do func2")]), quote=event.messageChain.get(Source)[0]) else: await app.sendGroupMessage(event.sender.group, MessageChain.create( [Plain("func2 in cooling")]), quote=event.messageChain.get(Source)[0])
async def func2(app: GraiaMiraiApplication, event: GroupMessage, allow): if allow: await app.sendGroupMessage(event.sender.group, MessageChain.create([Plain("have perm 2")]), quote=event.messageChain.getFirst(Source)) else: await app.sendGroupMessage(event.sender.group, MessageChain.create( [Plain("not have perm 2")]), quote=event.messageChain.getFirst(Source))
async def new_question_nofication(app: GraiaMiraiApplication, group: Group, msg: MessageChain): enable_in_groups: List[int] = [qq.littleskin_main] if group.id in enable_in_groups: await app.sendGroupMessage(qq.notification_channel, MessageChain.create( [Plain(tF.new_question_nofication)]), quote=msg[Source][0].id) await app.sendGroupMessage(group, MessageChain.create( [Plain(tF.new_question_sent)]), quote=msg[Source][0].id)
async def parse_csl_log(app: GraiaMiraiApplication, group: Group, _gm: GroupMessage): await app.sendGroupMessage( group, MessageChain.create([Plain(tF.csl_log_parsing)])) M = MessagePro(_gm) fromLs = group.id in [qq.littleskin_main, qq.littleskin_cafe] try: _message = aoscPastebin(M.plain_message, fromLittleSkin=fromLs) await app.sendGroupMessage(group, MessageChain.create([Plain(_message)])) except Exception as e: await app.sendGroupMessage(group, MessageChain.create([Plain(e)]))
async def set_auto_pix(app: GraiaMiraiApplication, friend: Friend, code: MessageChain): if friend.id == master_id: commond = code.asDisplay().strip() if commond == "0": pix.auto = False await app.sendFriendMessage( friend, MessageChain.create([Plain("自动更新已关闭")])) if commond == "1": pix.auto = True await app.sendFriendMessage( friend, MessageChain.create([Plain("自动更新已开启")]))
async def GroupEntranceAnnouncementChange( app: GraiaMiraiApplication, event: GroupEntranceAnnouncementChangeEvent): await app.sendGroupMessage( event.group, MessageChain.create([ Plain("本群的入群公告改了哦,记得去看看."), (Plain("\n此处应有@全体") if event.group.accountPerm in [ MemberPerm.Owner, MemberPerm.Administrator ] else Plain("\n既然不具备权限就不@全体了")), ]), )
async def GroupUpdateMemberJoinMessage(app:GraiaMiraiApplication,event:GroupMessage): quoted=event.messageChain.get(Source)[0] if not await checkMemberPermission(app,event.sender,[MemberPerm.Administrator,MemberPerm.Owner],quoted): return result= await MessageChainToStr(event.messageChain,"#更新入群词") if UpdateGroupInfoDB(app,event.sender.group,"MemberJoinMessage",result): await app.sendGroupMessage(event.sender.group,MessageChain.create([ Plain("入群词更新成功.") ]),quote=quoted) else: await app.sendGroupMessage(event.sender.group,MessageChain.create([ Plain("入群词更新失败.") ]),quote=quoted)
async def GroupDeleteMessage(app:GraiaMiraiApplication,event:GroupMessage,regexResult=Depend(regexPlain(r"^#删除语录[\s]*([\d]*)"))): quoted=event.messageChain.get(Source)[0] SentenceID=int(regexResult.groups()[0]) message=GetSentenceFromDBById(app,event.sender.group,SentenceID) if message: message=StrToMessageChain(message) else: message=MessageChain.create([]) if DeleteSentenceById(app,event.sender.group,SentenceID): message.__root__.insert(0,Plain("语录删除成功,原内容为:\n")) else : message.__root__.insert(0,Plain("语录删除失败")) await app.sendGroupMessage(event.sender.group,message,quote=quoted)
async def GroupMuteAll(app: GraiaMiraiApplication, event: GroupMuteAllEvent): if not event.group.accountPerm in [ MemberPerm.Administrator, MemberPerm.Owner ]: return else: await GroupSettingChanged( app, event, enable=MessageChain.create([Plain("看誰还再跳,这不,被开全体禁言了吧.")]), disable=MessageChain.create([Plain("这里我们赢感谢管理大大(大雾)")]), invalid=MessageChain.create([Plain("为啥会发出这句?这是发生了啥?我不知道,不要问我.")]), )
async def memberjoinevent_listener(app: GraiaMiraiApplication, event: MemberJoinEvent): member = event.member group = member.group if group.id == settings.specialqq.littleskin_main: await app.sendGroupMessage( group, MessageChain.create([Plain(tF.constance_refresh_name)])) await app.sendGroupMessage( group, MessageChain.create( [At(member.id), Plain(tF.welcome_to_littleskin)])) elif group.id == settings.specialqq.littleskin_cafe: await app.sendGroupMessage( group, MessageChain.create([Plain(tF.constance_refresh_name)]))
async def GroupDeleteAnswer(app:GraiaMiraiApplication,event:GroupMessage,regexResult=Depend(regexPlain(r'^#删除进群答案[\s]*([^\s]*)$'))): quoted=event.messageChain.get(Source)[0] if not await checkMemberPermission(app,event.sender,[MemberPerm.Administrator,MemberPerm.Owner],quoted): return answer=regexResult.groups()[0] if not answer: return if DeleteFromGroupDB(app,event.sender.group,"GroupAnswer","Answer",answer): await app.sendGroupMessage(event.sender.group,MessageChain.create([ Plain("答案删除成功") ]),quote=quoted) else : await app.sendGroupMessage(event.sender.group,MessageChain.create([ Plain("答案删除失败") ]),quote=quoted)
async def parse_csl_log(app: GraiaMiraiApplication, group: Group, _gm: GroupMessage): await app.sendGroupMessage( group, MessageChain.create([Plain(tF.csl_log_parsing)])) CP = CommandParser(_gm, settings.commandSymbol) fromLs = group.id in [ settings.specialqq.littleskin_main, settings.specialqq.littleskin_cafe ] try: _message = aoscPastebin(CP.plain_message, fromLittleSkin=fromLs) await app.sendGroupMessage(group, MessageChain.create([Plain(_message)])) except Exception as e: await app.sendGroupMessage(group, MessageChain.create([Plain(repr(e))]))
async def GroupAddSentence(app:GraiaMiraiApplication,event:GroupMessage): quoted=event.messageChain.get(Source)[0] message= await MessageChainToStr(event.messageChain,"#添加群语录") SentenceID=GetFromGroupInfoDB(app,event.sender.group,"SentenceID") SentenceID+=1 reply=[] if InsertGroupSentenceIntoDB(app,event.sender.group,message,SentenceID): if UpdateGroupInfoDB(app,event.sender.group,"SentenceID",SentenceID): reply=[Plain(f"语录插入成功,ID为{SentenceID}")] else : if not DeleteSentenceById(app,event.sender.group,SentenceID): reply=[Plain("发生了某些未知问题,建议去寻找管理")] else: reply=[Plain("语录插入失败")] await app.sendGroupMessage(event.sender.group,MessageChain.create(reply),quote=quoted)
async def Group_Member_Sleep(app:GraiaMiraiApplication,event:GroupMessage): quoted=event.messageChain.get(Source)[0] group=event.sender.group startTime=datetime.now() endTime=datetime(startTime.year,startTime.month,startTime.day,7,0,0) if startTime.hour<7: delta=(endTime-startTime).total_seconds() else : delta=24*3600-(startTime-endTime).total_seconds() delta//=60 random.gauss(delta,30.0) target=await getTargetFromAt(app,group,event.messageChain) if not target: target=[event.sender] elif not await checkMemberPermission(app,event.sender,[MemberPerm.Administrator,MemberPerm.Owner],quoted): target=[] for i in target: if not await muteMember(app,group,i,delta,quoted): break await app.sendGroupMessage(group,MessageChain.create([ At(i.id), Plain(f"\n你的睡眠套餐已到账,请查收.\n总时长为{delta}分钟") ]),quote=(quoted if i==event.sender else {}))
async def GroupAvailableAdmin(app:GraiaMiraiApplication,event:GroupMessage): quoted=event.messageChain.get(Source)[0] admin=GetAllFromGroupDB(app,event.sender.group,"GroupPermission","AdminID") admin='\n'.join(map(lambda ad:str(ad[0]) ,admin)) await app.sendGroupMessage(event.sender.group,MessageChain.create([ Plain("可用的管理为:\n"+admin) ]),quote=quoted)
async def GroupAllowAnswer(app:GraiaMiraiApplication,event:GroupMessage): quoted=event.messageChain.get(Source)[0] answer=GetAllFromGroupDB(app,event.sender.group,"GroupAnswer","Answer") answer='\n'.join(map(lambda ans: ans[0],answer)) await app.sendGroupMessage(event.sender.group,MessageChain.create([ Plain("可用的进群答案为:\n"+answer) ]),quote=quoted)