Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
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,
    )
Пример #4
0
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)
Пример #5
0
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("已拒绝")]))
Пример #6
0
    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,
        )
Пример #7
0
    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)
        ]
Пример #8
0
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}'
            )
        ]))
Пример #9
0
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)
Пример #10
0
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())]))
Пример #11
0
 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("为啥会发出这句?这是发生了啥?我不知道,不要问我.")]),
    )
Пример #14
0
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)
Пример #15
0
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])
Пример #16
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))
Пример #17
0
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)
Пример #18
0
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)]))
Пример #19
0
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既然不具备权限就不@全体了")),
        ]),
    )
Пример #21
0
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)
Пример #22
0
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("为啥会发出这句?这是发生了啥?我不知道,不要问我.")]),
        )
Пример #24
0
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)]))
Пример #25
0
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)
Пример #26
0
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))]))
Пример #27
0
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)
Пример #28
0
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 {}))
Пример #29
0
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)
Пример #30
0
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)