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 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 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)
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 GroupMessageHelp(app:GraiaMiraiApplication,event:GroupMessage): quoted=event.messageChain.get(Source)[0] await app.sendGroupMessage(event.sender.group,MessageChain.create([ Plain("因帮助过长,转为私发") ]),quote=quoted) await app.sendTempMessage(event.sender.group,event.sender,MessageChain.create([ Plain("支持的命令为:\n"), Plain("#睡眠套餐\n如果要为他人提供,使用@或者回复的方式,需要具有管理权限\n"), Plain("#添加进群答案 [答案]\n需要管理权限\n"), Plain("#删除进群答案 [答案]\n需要管理权限\n"), Plain("#可用进群答案\n展示现在允许的答案\n"), Plain("#添加管理员 [@被添加的人]\n需要管理权限,可以同时添加多人\n"), Plain("#解除管理员 [@被解除的人]\n需要管理权限,可以同事解除多人\n"), Plain("#当前管理员\n以列出qq号的方式列出当前群在库中的管理员\n") ])) await app.sendTempMessage(event.sender.group,event.sender,MessageChain.create([ Plain("#禁言 [禁言时间] [@被禁言的人]\n时间的单位是分钟,支持同时禁言多人,需要管理权限.\n"), Plain("#解除禁言 [@被解除的人]\n需要管理权限,支持同时解除多人\n"), Plain("#更新入群词 ...\n被添加的内容会在新成员加入的时候发出\n"), Plain("#当前入群词\n查看当前群有新成员加入时发出的内容\n"), Plain("#神启 [内容]\n仅支持文字内容.不宜过长.由 https://www.daanshu.com/ 提供答案.\n"), Plain("#网易云音乐 [歌曲名]\n返回第一个搜索结果\n"), Plain("#撤回\n用 #撤回 回复需要被撤回的内容,bot会尝试撤回对应内容,需要管理权限\n") ])) await app.sendTempMessage(event.sender.group,event.sender,MessageChain.create([ Plain("#警告 [@被警告的人]\n警告次数+1,警告3次后飞机票,需要管理权限\n"), Plain("#解除警告 [@被解除的人]\n警告次数置0,需要管理权限\n"), Plain("#拉黑 [@被拉黑的人]\n飞机票处理.并自动拒绝加入申请\n"), Plain("#关于\n项目链接\n"), Plain("#帮助\n显示此条帮助") ]))
async def send_msg_list(m_list): for msg in m_list: await app.sendFriendMessage( account, MessageChain.create(msg)) await asyncio.sleep(5) await app.sendFriendMessage( account, MessageChain.create([Plain("结束")]))
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())]))
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, )
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 wake_up(app: GraiaMiraiApplication): group_list = await app.groupList() for group in group_list: await app.sendGroupMessage(group.id, MessageChain.create([Plain("七点半辣!!")])) await app.sendGroupMessage( group.id, MessageChain.create([Voice().fromLocalFile(_voice_wake_up_path)]))
async def GroupConfessTalk(app: GraiaMiraiApplication, event: GroupAllowConfessTalkEvent): 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 GroupAnonymousChat(app: GraiaMiraiApplication, event: GroupAllowAnonymousChatEvent): await GroupSettingChanged( app, event, enable=MessageChain.create([Plain("突然开始允许匿名聊天?")]), disable=MessageChain.create([Plain("匿名聊天被关了..")]), invalid=MessageChain.create([Plain("为啥会发出这句?这是发生了啥?我不知道,不要问我.")]), )
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 command_handler(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: _message = f'「{player_name}」不存在' else: _message = f'''「{player_name}」 Skin: {result.skins.slim[:7] or result.skins.default[:7]} [{result.skin_type}] Cape: {result.cape[:7] if result.cape else None}''' await app.sendGroupMessage(group, MessageChain.create([Plain(_message)]))
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 auto_send_news(app: GraiaMiraiApplication): await news.update() if news.is_update: group_list = await app.groupList() for group in group_list: await app.sendGroupMessage( group.id, MessageChain.create([Image.fromUnsafeBytes(news.img_bytes)])) await app.sendFriendMessage( master_id, MessageChain.create([Image.fromUnsafeBytes(news.img_bytes)]))
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 messageEvent(friend: Friend, message: MessageChain): _msg_text = "".join([msg.text.strip() for msg in message[Plain] ]) if message.has(Plain) else '' if message.has(Plain): _chat_response = await ChatBot.chat(_msg_text) _chain = MessageChain.create([ Plain(_chat_response["message"] if _chat_response['status'] == 'success' else atri.chatBot['badRequest']) ]) if _chain: await atri.app.sendFriendMessage(friend, _chain)
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 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 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 command_handler(app: GraiaMiraiApplication, group: Group, params: MessageChain): player_name = params.asDisplay() littleskin_yggdrasil_root = 'https://mcskin.littleservice.cn/api/yggdrasil' player_uuid = await apis.YggdrasilPlayerUuidApi.get(littleskin_yggdrasil_root, player_name) if not player_uuid.existed: _message = f'「{player_name}」不存在' else: result: apis.YggdrasilGameProfileApi = await apis.YggdrasilGameProfileApi.get(littleskin_yggdrasil_root, player_uuid.id) textures: apis.YggdrasilTextures = result.properties.textures.textures _message = f'''「{result.name}」 Skin: {textures.SKIN.hash[:7] if textures.SKIN else None} [{textures.SKIN.metadata.model if textures.SKIN else None}] Cape: {textures.CAPE.hash[:7] if textures.CAPE else None} UUID: {UUID(player_uuid.id)}''' await app.sendGroupMessage(group, MessageChain.create([Plain(_message)]))
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 electricity(app: GraiaApp, message: MessageChain, group: Group): if not (group.id in TEST_GROUP_LIST and message.asDisplay().startswith("电费")): return async with aiohttp.ClientSession() as s: resp = await s.get("http://172.81.215.215/pi/electricity", params={'room': message.asDisplay()[2:]}) json = await resp.json() if json['success']: text = f"{json['name']} {json['type']}: {json['number']}{json['unit']}" else: text = f"查询失败,原因:{json['error']}" await app.sendGroupMessage(group, MessageChain.create([Plain(text)]))
async def send_img(app: GraiaMiraiApplication, group: Group, text: MessageChain): text_list = text.asDisplay().strip().split() logger.info(text_list) if len(text_list) == 2: logger.info(f"触发cy5:[{text_list[0]},{text_list[1]}]") url = f"https://api.dihe.moe/5000choyen/?upper={text_list[0]}&lower={text_list[1]}" async with aiohttp.request("GET", url) as res: img_bytes = await res.read() await app.sendGroupMessage( group.id, MessageChain.create([Image.fromUnsafeBytes(img_bytes)])) else: await app.sendGroupMessage(group.id, MessageChain.create([Plain("输入参数不合法")]))
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))]))