Exemplo n.º 1
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}'
            )
        ]))
Exemplo n.º 2
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("已拒绝")]))
Exemplo n.º 3
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)
Exemplo n.º 4
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)
Exemplo n.º 5
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)
Exemplo n.º 6
0
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显示此条帮助")
    ]))
Exemplo n.º 7
0
 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("结束")]))
Exemplo n.º 8
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())]))
Exemplo n.º 9
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,
        )
Exemplo n.º 10
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)
Exemplo n.º 11
0
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("为啥会发出这句?这是发生了啥?我不知道,不要问我.")]),
    )
Exemplo n.º 13
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)
async def GroupAnonymousChat(app: GraiaMiraiApplication,
                             event: GroupAllowAnonymousChatEvent):
    await GroupSettingChanged(
        app,
        event,
        enable=MessageChain.create([Plain("突然开始允许匿名聊天?")]),
        disable=MessageChain.create([Plain("匿名聊天被关了..")]),
        invalid=MessageChain.create([Plain("为啥会发出这句?这是发生了啥?我不知道,不要问我.")]),
    )
Exemplo n.º 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])
Exemplo n.º 16
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)]))
Exemplo n.º 17
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))
Exemplo n.º 18
0
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)]))
Exemplo n.º 19
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)
Exemplo n.º 20
0
    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)
Exemplo n.º 21
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)]))
Exemplo n.º 22
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("自动更新已开启")]))
Exemplo n.º 23
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)
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("为啥会发出这句?这是发生了啥?我不知道,不要问我.")]),
        )
Exemplo n.º 25
0
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)]))
Exemplo n.º 26
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)]))
Exemplo n.º 27
0
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)]))
Exemplo n.º 28
0
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("输入参数不合法")]))
Exemplo n.º 29
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)
Exemplo n.º 30
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))]))