Exemple #1
0
async def msgDistributer(**kwargs):
    """
    根据player号分发消息
    输入字典msg为源文本,typ标识其类型('E'表情,'I'图片文件目录,'P'普通文本)
    """
    if 'msg' in kwargs and kwargs['msg']:
        if kwargs.get('typ', 'P') == 'E':
            seq = [Face(QQFaces[kwargs['msg']])]
        elif kwargs.get('typ', 'P') == 'I':
            f_n = randstr(8)
            with open(f_n, 'wb') as f:
                f.write(kwargs['msg'])
            seq = [Image.fromFileSystem(f_n)]
            # seq = [Image.fromFileSystem(kwargs['msg'])]
        else:
            seq = [Plain(kwargs['msg'])]

        if 'gp' in kwargs:
            await GLOBAL.app.sendGroupMessage(kwargs['gp'], seq)
        elif 'mem' in kwargs:
            await GLOBAL.app.sendFriendMessage(kwargs['mem'], seq)
        elif 'player' in kwargs:
            kwargs['player'] = int(kwargs['player'])
            if kwargs['player'] > 1 << 39:
                await GLOBAL.app.sendGroupMessage(kwargs['player'] - (1 << 39),
                                                  seq)
            else:
                await GLOBAL.app.sendFriendMessage(kwargs['player'], seq)
Exemple #2
0
async def CFProblemRender(g, cid, ti):
    FN = 'CF/%s.png' % cid
    print('在%f秒后渲染比赛' % ti + cid + '的问题图片')
    if cid in GLOBAL.CFRenderFlag or os.path.exists(FN):  #有队列在做了
        await asyncio.sleep(ti)
        if not os.path.exists(FN):
            await asyncio.sleep(20)
        await GLOBAL.app.sendGroupMessage(g, [Image.fromFileSystem(FN)])
    else:
        GLOBAL.CFRenderFlag.add(cid)
        await asyncio.sleep(ti)
        base = 'https://codeforces.com/contest/' + cid + '/problems'
        l = renderHtml(base, FN)
        GLOBAL.CFRenderFlag.discard(ti)
        l.append(Image.fromFileSystem(FN))
        await GLOBAL.app.sendGroupMessage(g, l)
Exemple #3
0
 def __validate_responses__(self, resps):
     valid_resps = []
     for r in resps:
         if r.startswith(self.image_save_path):
             valid_resps.append(Image.fromFileSystem(r))
         else:
             valid_resps.append(Plain(r))
     return valid_resps
Exemple #4
0
def 二维码生成器(*attrs, **kwargs):
    s = ' '.join(attrs)
    q = qrcode.make(s)
    fn = randstr(GLOBAL.randomStrLength) + 'tmpqrcode' + str(kwargs['mem'].id)
    q.save(fn)
    #threading.Thread(target=rmTmpFile).start()
    asyncio.ensure_future(rmTmpFile(fn), loop=None)
    return [Image.fromFileSystem(fn)]
Exemple #5
0
 async def event_gm(session: Session, message: MessageChain,
                    friend: Friend):
     if message.toString().startswith("/image"):
         await session.sendFriendMessage(friend, [
             Image.fromFileSystem(
                 "E:\\Image\\00C49FCD-D8D9-4966-B2FC-F18F6220485E.jpg"),
             Plain(text="??")
         ])
Exemple #6
0
def 爬LaTeX(*attrs, **kwargs):
    base = r'\dpi{150} \bg_white \large ' + ' '.join(attrs).replace(
        '+', '&plus;')
    r = requests.get(
        'https://latex.vimsky.com/test.image.latex.php?fmt=png&dl=0&val=' +
        urllib.parse.quote(urllib.parse.quote(base)))
    fn = f"tmpLaTeX{randstr(3)}.png"
    with open(fn, 'wb') as f:
        f.write(r.content)
    asyncio.ensure_future(rmTmpFile(fn))
    return [Image.fromFileSystem(fn)]
Exemple #7
0
def 优质解答生成器(*attrs,**kwargs):
    font = ImageFont.truetype('sarasa-gothic-ttf-0.12.5/sarasa-ui-tc-bold.ttf',25)
    nyaSrc = PImage.open('answer.jpg').convert('RGBA')
    layer2 = PImage.new('RGBA',nyaSrc.size,(255,255,255,0))
    draw = ImageDraw.Draw(layer2)
    
    text = ' '.join(attrs)
    beginPixel = (50,120)

    draw.text(beginPixel,text,fill=(0,0,0,255),font=font)
    p = 'tmpAns' + randstr(GLOBAL.randomStrLength) +str(kwargs['mem'].id)+'.png'

    PImage.alpha_composite(nyaSrc,layer2).save(p)
    asyncio.ensure_future(rmTmpFile(p),loop=None)
    return [Image.fromFileSystem(p)]
Exemple #8
0
def IPlay生成器(*attrs,**kwargs):
    font = ImageFont.truetype('sarasa-gothic-ttf-0.12.5/sarasa-ui-tc-bold.ttf',25)
    Src = PImage.open('IPlayRhythmGame.png').convert('RGBA')
    layer2 = PImage.new('RGBA',Src.size,(255,255,255,0))
    draw = ImageDraw.Draw(layer2)
    
    text = ' '.join(attrs)
    beginPixel = (308,1004)

    draw.text(beginPixel,text,fill=(255,255,255,255),font=font)
    p = 'tmpIPlay' + randstr(GLOBAL.randomStrLength) +str(kwargs['mem'].id)+'.png'

    PImage.alpha_composite(Src,layer2).save(p)
    asyncio.ensure_future(rmTmpFile(p))
    return [Image.fromFileSystem(p)]
Exemple #9
0
def showClock(sender):
    clockMessage=[
        At(target=sender),
        Plain(text="看中后直接发送选择表盘+序号即可哦~\n"),
        Plain(text="如:选择表盘1\n"),
        Plain(text="表盘预览:")
    ]
    clockList = os.listdir(clockPreviewDist)
    clockList.sort(key=lambda x:int(x[:-4]))
    index=1
    for i in clockList:
        clockMessage.append(Plain(text="\n%s."%index))
        clockMessage.append(Image.fromFileSystem(clockPreviewDist+i))
        index+=1
    return clockMessage
Exemple #10
0
def 希望工程(*attrs,**kwargs):
    font = ImageFont.truetype('sarasa-gothic-ttf-0.12.5/sarasa-ui-tc-bold.ttf',100)
    nyaSrc = PImage.open('wish.jpg').convert('RGBA')
    layer2 = PImage.new('RGBA',nyaSrc.size,(255,255,255,0))
    draw = ImageDraw.Draw(layer2)
    
    text = attrs[0]
    beginPixel = (540-len(text)*50,900)
    if len(attrs)>1:
        r = int(attrs[1][:2],16)
        g = int(attrs[1][2:4],16)
        b = int(attrs[1][4:],16)
        draw.text(beginPixel,text,fill=(r,g,b,255),font=font)
    else:
        draw.text(beginPixel,text,fill=(0,0,0,255),font=font)
    p = 'tmpWish' + randstr(GLOBAL.randomStrLength) + str(kwargs['mem'].id)+'.png'

    PImage.alpha_composite(nyaSrc,layer2).save(p)
    asyncio.ensure_future(rmTmpFile(p),loop=None)
    return [Image.fromFileSystem(p)]
    def get_response(self):
        if self.__handle_at_all__():
            return self.responses

        if not self.command.chat_mode:
            bot = config['mirai_http_api']['qq']
            if bot not in (at.target for at in self.ats):
                return self.responses

        if self.__handle_plain_text__():
            return self.responses

        self.__handle_face__()
        self.__handle_image__()

        if not self.responses:
            rand_img = image_helper.get_rand_img(
                config['image']['not_understand'])
            return [Image.fromFileSystem(rand_img)]

        return self.responses
Exemple #12
0
    def get_setu(self, tags=None):
        if not tags or tags == "normalrank":
            classi = "normalrank"
            label = None
        elif tags.split(" ")[0] == "user":
            classi = "illustrator"
            label = tags.split(" ")[1]
        else:
            classi = "tag"
            label = tags

        self.check_tempfile_overflow()
        setu_path = pc.random_one_by_classfi(classi, label)

        if isinstance(setu_path, list):
            ret_msg = []
            text_lis = [
                "{0}({1})".format(user[0], user[1]) for user in setu_path
            ]
            text = "\n".join(text_lis)
            ret_msg = [Plain(text=text)]
        else:

            # setu_path="./default_save/75568889_p0.png"
            if not setu_path: return None

            ret_msg = [Image.fromFileSystem(setu_path)]

        # if os.path.getsize(setu_path)<4*1024*1024 and False:
        #     #UPLOAD
        #     # setu_url=self.upload_tuc(setu_path)
        #     setu_url=self.jdtuc.upload(setu_path)
        #     if not setu_url:return None
        # else:
        #     # use akaisora.tech
        #     setu_url=setu_path.replace("/var/www/html","http://akaisora.tech")
        #     print(setu_url)

        return ret_msg
Exemple #13
0
async def GMHandler(app: Mirai, group: Group, message: MessageChain):
    aat: At = message.getFirstComponent(At)
    replyFlag = 0
    if aat is not None:
        if aat.target == Account.qq:
            aplain: Plain = message.getFirstComponent(Plain)
            replyFlag = 1
            if aplain is None:
                plainToSend = Plain(text="还没有输入指令哦")
            else:
                atext = aplain.text
                if "谁" in atext:
                    aimage: Image = message.getFirstComponent(Image)
                    if aimage is None:
                        plainToSend = Plain(text="没有收到图片呢,请在@我的同时发送图片")
                    else:
                        replyFlag = 2
                        utility.download_imgae(aimage.url)
                        recg_face.recognize_face()
                else:
                    plainToSend = Plain(text="兔兔目前还不会这个指令哟")
    if replyFlag == 1:
        await app.sendGroupMessage(group.id, [plainToSend])
    elif replyFlag == 2:
        if recg_face.recg_res:
            plainToSend = [Plain(text=f"兔兔找到了{len(recg_face.reslist)}个人")]
            if len(recg_face.reslist) > 1:
                plainToSend.append(Plain(text="分别"))
            plainToSend.append(Plain(text="是:\n"))
            for name in recg_face.reslist:
                plainToSend.append(Plain(text=f"{name} "))
            imageToSend = Image.fromFileSystem(
                f"{recg_face.res_face_path}/{recg_face.image_cnt}.jpg")
            await app.sendGroupMessage(group.id, plainToSend)
            await app.sendGroupMessage(group.id, [imageToSend])
        else:
            plainToSend = Plain(text="兔兔没有找到人脸欸,换张照片试试吧")
            await app.sendGroupMessage(group.id, [plainToSend])
Exemple #14
0
def printHelp(*attrs,**kwargs):
    if not attrs:
        l = [Plain('命令分类:\n')]
        l.append(Plain('\tAVG 正在开发的文字冒险游戏类\n'))
        l.append(Plain('\tGame 小游戏类\n'))
        l.append(Plain('\tString 字符串处理类\n'))
        l.append(Plain('\tFile 异步与文件读写类\n'))
        l.append(Plain('\tSpider 爬虫类\n'))
        l.append(Plain('\tTest 测试类(开发用\n'))
        l.append(Plain('\tGenerator 生成器类\n'))
        l.append(Plain('\tTranslate 翻译类\n'))
        l.append(Plain('\tMath 数学类\n'))
        l.append(Plain('输入#h <类名> 以查询分类下命令\n'))
        l.append(Plain('使用#h <命令名> 可以查询详细用法\n'))
        l.append(Plain('使用#h #abb可以查询缩写表\n'))
    else:
        if attrs[0] in shortMap:
            attrs = [shortMap[attrs[0]],*attrs[1:]]
        if attrs[0] in functionDescript:
            l=[Plain(text=functionDescript[attrs[0]])]

        elif attrs[0] in ('all','old'):
            l = [Plain(text='可用命令表:\n')]
            for k in functionMap:
                l.append(Plain(text='\t'+k+'\n'))
            l.append(Plain(text='使用#h 命令名(带井号)可以查询详细用法\n'))
            l.append(Plain(text='使用#h #abb可以查询缩写表\n'))
            l.append(Plain(text='注命令后需打空格,之后的参数如存在空格即以空格分开多个参数,如#qr 1 1 4 5 1 4\n'))
            l.append(Image.fromFileSystem('muzukashi.png'))
        elif attrs[0] in Classes:
            l = [Plain(text=f'分类:{attrs[0]}\n')]
            for k in Classes[attrs[0]]:
                l.append(Plain(text='\t'+k+'\n'))
        else:
            l = [Plain('【错误】参数不合法\n')] + printHelp()
        
    return l
Exemple #15
0
def asobiSlidingPuzzle(*attrs,**kwargs):
    player = getPlayer(**kwargs)

    def find1(array):
        for p,i in enumerate(array):
            for q,j in enumerate(i):
                if j == 1:
                    return p,q

    def splitImage(fn:str,n:int,array)->str:
        """
        根据传入的array将图片重组
        array得是n*n的numpy.array对象
        返回保存的文件的临时文件路径
        array是1~n^2,注意不是从0开始
        """
        bg = PImage.open(fn).convert('RGBA')
        edge = min(bg.width,bg.height)
        cell = edge // n
        bg = bg.crop((0,0,edge,edge))
        newbg = []
        for i in range(n):
            # tmp = []
            for j in range(n):
                newbg.append(bg.crop((i * cell, j * cell, (i + 1) * cell, (j + 1) * cell)))
            # newbg.append(tmp)

        dst = PImage.new('RGBA',(n*cell,n*cell))

        for i in range(n):
            # tmp = []
            for j in range(n):
                if array[i][j]!=1:
                    dst.paste(newbg[int(array[i][j]-1)],(i * cell, j * cell, (i + 1) * cell, (j + 1) * cell))

        sfn = 'tmp' + randstr(4) + '.png'
        dst.save(sfn)
        asyncio.ensure_future(rmTmpFile(sfn))
        return sfn


    if not os.path.exists('SlidingPuzzle/'):
        os.mkdir('SlidingPuzzle/')

    if not os.path.exists(f'''SlidingPuzzle/{player}BG'''):
        shutil.copy('default.png',f'''SlidingPuzzle/{player}BG''')

    
    if not os.path.exists(f'''SlidingPuzzle/{player}.txt''') or attrs and attrs[0] == 'init':
        try:
            n=int(attrs[1])
            if n not in range(2,7):
                return [Plain(text='为了宁的游戏体验,棋盘只能要2~6阶内的方阵')]
        except:
            n = 3
        arr = [i for i in range(1,1+n*n)]
        random.shuffle(arr)
        tmp = copy.deepcopy(arr)
        tmp.remove(1)
        invs = calcinvs(tmp)
        k = arr.index(1) // n
        if n&1:
            while invs&1:
                random.shuffle(arr)
                tmp = copy.deepcopy(arr)
                tmp.remove(1)
                invs = calcinvs(tmp)
        else:
            while (invs^(k&1)) & 1:
                random.shuffle(arr)
                tmp = copy.deepcopy(arr)
                tmp.remove(1)
                invs = calcinvs(tmp)
                k = arr.index(1) // n
        print(arr)
        grids = numpy.array(arr)
        grids.resize(n,n)
        numpy.savetxt(f'''SlidingPuzzle/{player}.txt''',grids,fmt='%d')
        return [
            Plain(f'移动拼图初始化完成\n{grids}'),
            Image.fromFileSystem(splitImage(f'''SlidingPuzzle/{player}BG''',n,grids))
        ]
        
        
    grids = numpy.loadtxt(f'''SlidingPuzzle/{player}.txt''')
    n = len(grids)
    if attrs:
        if attrs[0] in ('下','S','s','shita'):
            x,y = find1(grids)
            if y>0:
                grids[x][y],grids[x][y-1] = grids[x][y-1],grids[x][y]
        elif attrs[0] in ('上','W','w','ue'):
            x,y = find1(grids)
            if y<3:
                grids[x][y],grids[x][y+1] = grids[x][y+1],grids[x][y]

        elif attrs[0] in ('右','D','d','migi'):
            x,y = find1(grids)
            if x>0:
                grids[x][y],grids[x-1][y] = grids[x-1][y],grids[x][y]
        elif attrs[0] in ('左','A','a','hidari'):
            x,y = find1(grids)
            if x<3:
                grids[x][y],grids[x+1][y] = grids[x+1][y],grids[x][y]
        elif attrs[0] in ('txt','t','T','文字'):
            return [Plain(f'{grids}')]
        elif attrs[0] in ('bg','changebackground','换图','换老婆'):
            if 'pic' in kwargs and kwargs['pic']:
                src = requests.get(kwargs['pic'].url).content
                with open(f'''SlidingPuzzle/{player}BG''','wb') as f:
                    f.write(src)
                return [Plain('图片背景更新成功')]
        elif attrs[0] in ('快速模式','gamestart'):
            GLOBAL.QuickCalls[player] = [asobiSlidingPuzzle]
            return [Plain(text=random.choice(['老婆快速重组模式,退出请用bye']))]
        elif attrs[0].lower() in ('cancel','terminate','quit','exit','seeyou','bye','sayonara','sayounara','madane','yamero','停','关','やめろ'):
            del GLOBAL.QuickCalls[player]
            return [Plain(text=random.choice(['还是慢慢拼老婆吧']))]

    numpy.savetxt(f'''SlidingPuzzle/{player}.txt''',grids,fmt='%d')
    return [Image.fromFileSystem(splitImage(f'''SlidingPuzzle/{player}BG''',n,grids))]
Exemple #16
0
async def Process(message,groupId,sender):

    responseCalled=getData("responseCalled")
    responseCalled+=1                               #responseCalled计数
    updateData(responseCalled,"response")

    # message预处理
    messageText=message.toString()

    # setu功能
    if messageText in setuCallText:
        setuCalled=getData("setuCalled")
        setuCalled+=1                               #setuCalled计数  
        updateData(setuCalled,"setu")
        if not getSetting(groupId,"setu"):                    #本群禁止要setu
            forbiddenCount=getSetting(groupId,"forbiddenCount")
            forbiddenCount+=1
            updateSetting(groupId,"forbiddenCount",forbiddenCount)
            record("setu","none",sender,groupId,False,"img")
            if forbiddenCount<=3:
                return [Plain(text="我们是正规群呐,不搞那一套哦,想看去辣种群看哟~")]
            elif forbiddenCount<=6:
                return [Plain(text="Kora!都说了是正规群啦!怎么老要这种东西呀,真是够讨厌的呢!再问我就生气啦!")]
            elif forbiddenCount<=9:
                return [Plain(text="爬爬爬,天天脑子里都是些什么啊,滚呐!爷生气啦!打你哦!")]
            else:
                return [Image.fromFileSystem(angryDist)]
        else:
            if sender in blackList:                     #发送人在黑名单中
                record("setu","none",sender,groupId,False,"img")
                return [
                    At(target=sender),
                    Plain(text="要你🐎?大胆妖孽!我一眼就看出来你不是人!大威天龙!世尊地藏!般若诸佛!般若巴麻空!")
                ]
            
            if getSetting(groupId,"countLimit"):                   #如果有每分钟调用次数限制
                if not getMemberPicStatus(groupId,sender):
                    record("setu","none",sender,groupId,False,"img")
                    return [Plain(text="你已达到限制,每分钟最多只能要%d张setu/real哦~\n歇会儿再来吧!"%getSetting(groupId,"limit"))]
            
            if getSetting(groupId,"setuLocal"):           #是否为本地库
                if getSetting(groupId,"imgLightning") and randomJudge():
                    record("setu","lightning",sender,groupId,False,"img")
                    return "lightningPic"
                if getSetting(groupId,"r18"):
                    dist=randomPic(setu18Dist)
                    record("setu18",dist,sender,groupId,True,"img")
                else:
                    dist=randomPic(setuDist)
                    record("setu",dist,sender,groupId,True,"img")
                print("本地setu图片地址:",dist)
                return [Image.fromFileSystem(dist)]  
            else:
                pass                                    #因api变动不稳定,暂时不进行编写     

    # real功能
    elif messageText=="real":
        realCalled=getData("realCalled")
        realCalled+=1                                   #realCalled计数  
        updateData(realCalled,"real")

        if not getSetting(groupId,"real"):                    #本群禁止要real
            forbiddenCount=getSetting(groupId,"forbiddenCount")
            forbiddenCount+=1
            updateSetting(groupId,"forbiddenCount",forbiddenCount)
            record("real","none",sender,groupId,False,"img")
            if forbiddenCount<=3:
                return [Plain(text="我们是正规群呐,不搞那一套哦,想看去辣种群看哟~")]
            elif forbiddenCount<=6:
                return [Plain(text="Kora!都说了是正规群啦!怎么老要这种东西呀,真是够讨厌的呢!再问我就生气啦!")]
            elif forbiddenCount<=9:
                return [Plain(text="爬爬爬,天天脑子里都是些什么啊,滚呐!爷生气啦!打你哦!")]
            else:
                return [Image.fromFileSystem(angryDist)]
        else:
            if sender in blackList:                     #发送人在黑名单中
                record("real",dist,sender,groupId,False,"img")
                return [Plain(text="要要要你🐎?大胆妖孽!我一眼就看出来你不是人!大威天龙!世尊地藏!般若诸佛!般若巴麻空!")]
            
            if getSetting(groupId,"countLimit"):                   #如果有每分钟调用次数限制
                if not getMemberPicStatus(groupId,sender):
                    record("real","none",sender,groupId,False,"img")
                    return [Plain(text="你已达到限制,每分钟最多只能要%d张setu/real哦~\n歇会儿再来吧!"%getSetting(groupId,"limit"))]
            if getSetting(groupId,"imgLightning") and randomJudge():
                record("real","lightning",sender,groupId,False,"img")
                return "lightningPic"
            dist=randomPic(realDist)
            record("real",dist,sender,groupId,True,"img")
            print("本地real图片地址:",dist)
            return [Image.fromFileSystem(dist)]  
            
    # bizhi功能
    elif messageText=="bizhi":
        bizhiCalled=getData("bizhiCalled")
        bizhiCalled+=1                                  #bizhiCalled计数  
        updateData(bizhiCalled,"bizhi")

        if not getSetting(groupId,"bizhi"):                    #本群禁止要bizhi
            record("bizhi","none",sender,groupId,False,"img")
            return [Plain(text="bizhi功能被关闭了呐>^<,想打开的话联系下管理员呐~")]
        else:
            if sender in blackList:                     #发送人在黑名单中
                record("bizhi",dist,sender,groupId,False,"img")
                return [Plain(text="要要要你🐎?大胆妖孽!我一眼就看出来你不是人!大威天龙!世尊地藏!般若诸佛!般若巴麻空!")]
        dist=randomPic(bizhiDist)
        print("本地bizhi图片地址:",dist)
        record("bizhi",dist,sender,groupId,True,"img")
        return [Image.fromFileSystem(dist)]  
    
    # 批量pic功能
    elif messageText[:5]=="setu*" or messageText[:5]=="real*":
        aim=messageText[:4]
        if aim=="setu":
            aimDist=setuDist
        else:
            aimDist=realDist
        if not ((getSetting(groupId,"setu") and aim=="setu") or (getSetting(groupId,"real") and aim=="real")):                    #本群禁止要setu
            forbiddenCount=getSetting(groupId,"forbiddenCount")
            forbiddenCount+=1
            updateSetting(groupId,"forbiddenCount",forbiddenCount)
            record(messageText,"none",sender,groupId,False,"img")
            if forbiddenCount<=3:
                return [Plain(text="我们是正规群呐,不搞那一套哦,想看去辣种群看哟~")]
            elif forbiddenCount<=6:
                return [Plain(text="Kora!都说了是正规群啦!怎么老要这种东西呀,真是够讨厌的呢!再问我就生气啦!")]
            elif forbiddenCount<=9:
                return [Plain(text="爬爬爬,天天脑子里都是些什么玩意儿,滚呐!爷生气啦!打你哦!")]
            else:
                return [Image.fromFileSystem(angryDist)]
        else:
            try:
                num=int(message.toString()[5:])
                if aim=="setu":
                    setuCalled=getData("setuCalled")
                    setuCalled+=num
                    updateData(setuCalled,"setu")
                else:
                    realCalled=getData("realCalled")
                    realCalled+=num
                    updateData(realCalled,"real")
                if sender in getAdmin(groupId):
                    if sender == HostQQ or num <= 5:
                        picMsg=[]
                        for i in range(num):
                            # if setting[groupId]["setuLocal"]:
                            dist=randomPic(aimDist)
                            picMsg.append(Image.fromFileSystem(dist))
                            record("%s*%d"%(aim,num),dist,sender,groupId,True,"img")
                            # else:
                                # pass
                        return picMsg
                    else:
                        record("%s*%d"%(aim,num),dist,sender,groupId,False,"img")
                        return [Plain(text="管理最多也只能要5张呐~我可不会被轻易玩儿坏呢!!!!")]
                elif num <= 5:
                    record("%s*%d"%(aim,num),"none",sender,groupId,False,"img")
                    return [Plain(text="只有主人和管理员可以使用%s*num命令哦~你没有权限的呐~"%aim)]
                else:
                    record("%s*%d"%(aim,num),"none",sender,groupId,False,"img")
                    return [Plain(text="老色批,要那么多,给你🐎一拳,爬!")]
            except ValueError:
                return [Plain(text="命令错误!%s*后必须跟数字!"%aim)]

    # 搜图功能
    elif messageText in searchCallText:
        if not getSetting(groupId,"search"):
            return [
                At(target=sender),
                Plain(text="搜图功能关闭了呐~想要打开就联系机器人管理员吧~")
            ]
        setSearchReady(groupId,sender,True)
        return [
            At(target=sender),
            Plain(text="请发送要搜索的图片呐~")
        ]
    elif message.hasComponent(Image) and getSetting(groupId,"search") and getSearchReady(groupId,sender):
        print("searching")
        img = message.getFirstComponent(Image)
        return searchImage(groupId,sender,img)
        
    # 图片预测功能
    elif messageText=="这张图里是什么":
        if not getSetting(groupId,"imgPredict"):
            return [
                At(target=sender),
                Plain(text="图片预测功能关闭了呐~想要打开就联系机器人管理员吧~")
            ]
        setPredictReady(groupId,sender,True)
        return [
            At(target=sender),
            Plain(text="请发送要预测的图片呐(推荐真实图片呐)~")
        ]
    elif message.hasComponent(Image) and getSetting(groupId,"imgPredict") and getPredictReady(groupId,sender):
        print("predicting")
        img = message.getFirstComponent(Image)
        return predictImage(groupId,sender,img)
        
    # 黄图评价功能
    elif messageText=="这张图涩吗":
        if not getSetting(groupId,"yellowPredict"):
            return [
                At(target=sender),
                Plain(text="图片涩度评价功能关闭了呐~想要打开就联系机器人管理员吧~")
            ]
        setYellowPredictReady(groupId,sender,True)
        return [
            At(target=sender),
            Plain(text="请发送要预测的图片呐~")
        ]
    elif message.hasComponent(Image) and getSetting(groupId,"yellowPredict") and getYellowPredictReady(groupId,sender):
        print("judging")
        img = message.getFirstComponent(Image)
        return judgeImageYellow(groupId,sender,img.url)
    
    # 笑话功能
    elif "来点" in messageText and "笑话" in messageText:
        name=re.findall(r'来点(.*?)笑话',messageText,re.S)
        if name==[]:
            return "noneReply"
        else:
            record("joke","none",sender,groupId,True,"function")
            return getJoke(name[0])
    # 获取时间功能(可选背景)
    elif messageText in timeCallText:
        clockCalled=getData("clockCalled")
        clockCalled+=1
        updateData(clockCalled,"clock")
        if getClockChoice(groupId,sender)=="none":
            clockMessage=[
                At(target=sender),
                Plain(text="你还没有选择表盘哦~快来选择一个吧~\n"),
                Plain(text="看中后直接发送选择表盘+序号即可哦~\n"),
                Plain(text="如:选择表盘1\n"),
                Plain(text="表盘预览:")
            ]
            clockList = os.listdir(clockPreviewDist)
            clockList.sort(key=lambda x:int(x[:-4]))
            index=1
            for i in clockList:
                clockMessage.append(Plain(text="\n%s."%index))
                clockMessage.append(Image.fromFileSystem(clockPreviewDist+i))
                index+=1
            return clockMessage
        else:
            t = datetime.datetime.now()    #目前时间
            t = t.strftime("%H:%M")
            t = t.replace(":","")
            dist=timeDist+str(getClockChoice(groupId,sender))+"/%s.png"%t
            return [Image.fromFileSystem(dist)]

    # 选择表盘(获取时间功能)
    elif messageText[:4]=="选择表盘":
        if messageText=="选择表盘":
            return showClock(sender)
        else:
            code=messageText[4:]
            if code.isdigit() and int(code)<=int(getData("dialsCount")):
                recordClock(groupId,sender,int(code))
                return[
                    Plain(text="已经选择了表盘%s呢!\n现在可以问我时间啦~"%code)
                ]
            else:
                return [
                    Plain(text="看中后直接发送选择表盘+序号即可哦~\n"),
                    Plain(text="再检查下有没有输错呢~\n")
                ]

    # 天气查询功能
    elif "[At::target=%i] 天气"%BotQQ in messageText:
        weatherCalled=getData("weatherCalled")
        weatherCalled+=1
        updateData(weatherCalled,"weather")
        return getWeather(message,sender)

    # 碧蓝航线wiki查询功能
    elif "[At::target=%i] blhx:"%BotQQ in messageText:
        name=messageText[28:]
        return blhxWiki(sender,name)
        
    # 营销号生成器
    elif "[At::target=%i] 营销号"%BotQQ in messageText:
        _,somebody,something,other_word=messageText.split('、')
        # print(something,somebody,other_word)
        return yingxiaohao(somebody,something,other_word)

    # 问你点儿事儿
    elif "[At::target=%i] 问你点儿事儿:"%BotQQ in message.toString():
        question=message.toString()[30:]
        question=parse.quote(question)
        return askSth(sender,question)

    #linux命令查询功能
    elif "[At::target=%i] linux"%BotQQ in messageText:
        if ':' in messageText:
            messageText=messageText.replace(':',':')
        command=messageText.replace("[At::target=%i] linux:"%BotQQ,"")
        print("get linux:%s"%command)
        text=getLinuxExplanation(command)
        if text=="error!no command!":
            return [
                At(target=sender),
                Plain(text="未搜索到命令%s!请检查拼写!"%command)
            ]
        else:
            return [
                At(target=sender),
                Plain(text="%s:%s"%(command,text))
            ]

    # 翻译功能
    elif "[At::target=%i] "%BotQQ in messageText and "用" in messageText and "怎么说" in messageText:
        supportLanguage={"中文":"zh","英文":"en","日文":"jp","韩文":"kr","法文":"fr","西班牙文":"es","意大利文":"it","德文":"de","土耳其文":"tr","俄文":"ru","葡萄牙文":"pt","越南文":"vi","印度尼西亚文":"id","马来西亚文":"ms","泰文":"th"}
        tp=re.findall(r'\[At::target=\] (.*?)用(.*?)怎么说',messageText,re.S)[0]    #target后面换成qqbot
        text=tp[0]
        target=tp[1]
        print("text:%s,target:%s"%(text,target))
        source=textDetect(text.encode("utf-8"))
        if target not in supportLanguage.keys():
            sL=""
            for i in supportLanguage.keys():
                sL+=i
                sL+='、'
            return [
                At(target=sender),
                Plain(text="目前只支持翻译到%s哦~\n要全字匹配哦~看看有没有打错呐~\n翻译格式:text用(目标语言)怎么说"%sL)
            ]
        target=supportLanguage[target]
        # print(target)
        return translate(groupId,sender,text,source,target)

    #设置处理
    elif "[At::target=%i] setting."%BotQQ in messageText:
        command=messageText[16:]
        try:
            print(command)
            name,config,change=command.split('.')
            print(name,'-->'," config:",config,"set to",change)
            return settingProcess(groupId,sender,config,change)
        except ValueError:
            return [
                At(target=sender),
                Plain(text="Command error! Use the '@bot command' command to query the commands you can use!")
            ]
    
    # 获取信息处理
    elif "[At::target=%i] info."%BotQQ in messageText:
        command=messageText[16:]
        # try:
        print(command)
        info,check=command.split('.')
        print(info,'-->'," info:",check)
        return infoProcess(groupId,sender,check)

    # wiki处理
    elif "[At::target=%i] wiki"%BotQQ in messageText:
        if ':' in messageText:
            messageText=messageText.replace(':',':')
            print(messageText)
        print("get wiki:%s"%messageText.replace("[At::target=%i] wiki"%BotQQ,""))
        return wikiProcess(groupId,sender,messageText)
        
    # 添加管理员处理
    elif "[At::target=%i] addAdmin"%BotQQ in messageText:
        target=int(re.findall(r'At::target=(.*?)]',message.toString()[19:],re.S)[0])
        print("add admin:%d in group %d"%(target,groupId))
        return addAdmin(groupId,target)


    # 回复@bot(normal,zuanLow,zuanHigh,rainbow)
    elif "[At::target=%i]"%BotQQ in messageText:
        if messageText.replace("[At::target=%d] "%BotQQ,"") in sleepMuteCallText and sender not in getAdmin(groupId):
            return "goodNight"
        elif messageText.replace("[At::target=%d] "%BotQQ,"") in muteAllCallText and sender==HostQQ:
            return "muteAll"
        elif messageText.replace("[At::target=%d] "%BotQQ,"") in unmuteAllCallText and sender==HostQQ:
            return "unmuteAll"
        elif sender == HostQQ and not getSetting(groupId,"speakMode")=="chat":
            return [
                At(target=sender),
                Plain(text="诶嘿嘿,老公@我是要找人家玩嘛~纱雾这就来找你玩哟~")
            ]
        else:
            mode_now=getSetting(groupId,"speakMode")
            if not mode_now=="normal":
                if mode_now=="zuanHigh":
                    text=requests.get(zuanHighSrc).text
                    record("zuanHigh","none",sender,groupId,True,"function")
                elif mode_now=="zuanLow":
                    text=requests.get(zuanLowSrc).text
                    record("zuanLow","none",sender,groupId,True,"function")
                elif mode_now=="rainbow":
                    text=requests.get(rainbowSrc).text
                    record("rainbow","none",sender,groupId,True,"function")
                elif mode_now=="chat":
                    if not len(messageText.replace("[At::target=%i] "%BotQQ,""))==0:
                        text=getChatText(groupId,sender,str(messageText.replace("[At::target=%i] "%BotQQ,"")))
                        record("chat","none",sender,groupId,True,"function")
                    else:
                        return "noneReply"
                return [
                    At(target=sender),
                    Plain(text=text)
                ]

    return "noneReply"
Exemple #17
0
 async def good_night(self):
     rand_img = image_helper.get_rand_img(config['image']['good_night'])
     await self.app.sendGroupMessage(self.group,
                                     [Image.fromFileSystem(rand_img)])
Exemple #18
0
def searchImage(groupId,sender,img):
    setSearchReady(groupId,sender,False)
    searchCount=getData("searchCount")+1
    print(searchCount)
    updateData(searchCount,"search")
    dist="%s%s.png"%(searchDist,searchCount)
    img_content=requests.get(img.url).content
    image=IMG.open(BytesIO(img_content))
    image.save(dist)
    #url for headers
    url = 'https://saucenao.com/search.php'
    #picture url
    picUrl = img.url
    #json requesting url
    url2 = f'https://saucenao.com/search.php?db=999&output_type=2&testmode=1&numres=1&url={picUrl}'
    #data for posting.
    data = {
        'url' : picUrl,
        'numres' : 1,
        'testmode' : 1,
        'db' : 999,
        'output_type' : 2,
    }

    #header to fool the website.
    headers = {
        'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36',
        'Sec-Fetch-Dest' : 'document',
        'Sec-Fetch-Mode' : 'navigate',
        'Sec-Fetch-Site' : 'none',
        'Sec-Fetch-User' : '?1',
        'Referer' : url,
        'Origin' : 'https://saucenao.com',
        'Host' : 'saucenao.com'
    }

    page = requests.post(url, headers=headers, data=data)
    # html=page.text
    json_data = page.json()
    #print thumbnail URL.
    # print(json_data)
    # print(json_data['results'][0]['header']['thumbnail'])

    dist="M:\pixiv\Thumbnail\\%s.png"%searchCount
    response=requests.get(json_data['results'][0]['header']['thumbnail'])
    imgContent=response.content
    image=IMG.open(BytesIO(imgContent))
    image.save(dist)
    similarity=json_data['results'][0]['header']['similarity']
    try:
        pixiv_url=json_data['results'][0]['data']['ext_urls'][0]
    except KeyError:
        pixiv_url="None"
    if 'pixiv_id' not in json_data['results'][0]['data']:
        if 'source' not in json_data['results'][0]['data']:   
            record("search",dist,sender,groupId,False,"img")
            return [Plain(text="8好意思~没有找到相似的图诶~")]
        else:
            try:
                creator=json_data['results'][0]['data']['creator'][0]
            except Exception:
                creator="Unknown!"   
            record("search",dist,sender,groupId,True,"img")
            return [
                At(target=sender),
                Plain(text="这个结果相似度很低诶。。。。要不你康康?\n"),
                Image.fromFileSystem(dist),
                Plain(text="\n相似度:%s%%\n"%(similarity)),
                Plain(text="原图地址:%s\n"%pixiv_url),
                Plain(text="作者:%s\n"%creator),
                Plain(text="如果不是你想找的图的话可能因为这张图是最近才画出来的哦,网站还未收录呢~过段日子再来吧~")
            ]
    else:
        pixiv_id=json_data['results'][0]['data']['pixiv_id']
        user_name=json_data['results'][0]['data']['member_name']
        user_id=json_data['results'][0]['data']['member_id']           
        record("search",dist,sender,groupId,True,"img")
        return [
            At(target=sender),
            Image.fromFileSystem(dist),
            Plain(text="\n相似度:%s%%\n"%(similarity)),
            Plain(text="原图地址:%s\n"%pixiv_url),
            Plain(text="作品id:%s\n"%pixiv_id),
            Plain(text="作者名字:%s\n"%user_name),
            Plain(text="作者id:%s\n"%user_id)
        ]
Exemple #19
0
async def Process(message, groupId, sender, memberList):

    responseCalled = getData("responseCalled")
    responseCalled += 1  #responseCalled计数
    updateData(responseCalled, "response")

    if sender in blackList:  #发送人在黑名单中
        return "noneReply"

    # message预处理
    messageText = message.toString()

    # setu功能
    if messageText in setuCallText:
        if sender == 80000000:
            return [Plain(text="匿名请求已被屏蔽!做涩批就要光明正大!匿名算什么好汉!")]
        updateDragon(groupId, sender, "normal")
        updateUserCalled(groupId, sender, "setu", 1)
        setuCalled = getData("setuCalled")
        setuCalled += 1  #setuCalled计数
        updateData(setuCalled, "setu")
        if not getSetting(groupId, "setu"):  #本群禁止要setu
            forbiddenCount = getSetting(groupId, "forbiddenCount")
            forbiddenCount += 1
            updateSetting(groupId, "forbiddenCount", forbiddenCount)
            record("setu", "none", sender, groupId, False, "img")
            if forbiddenCount <= 3:
                return [Plain(text="我们是正规群呐,不搞那一套哦,想看去辣种群看哟~")]
            elif forbiddenCount <= 6:
                return [Plain(text="Kora!都说了是正规群啦!怎么老要这种东西呀,真是够讨厌的呢!再问我就生气啦!")]
            elif forbiddenCount <= 9:
                return [Plain(text="爬爬爬,天天脑子里都是些什么啊,滚呐!爷生气啦!打你哦!")]
            else:
                return [Image.fromFileSystem(angryDist)]
        else:
            # if sender in blackList:                     #发送人在黑名单中
            #     record("setu","none",sender,groupId,False,"img")
            #     return [
            #         At(target=sender),
            #         Plain(text="要你🐎?大胆妖孽!我一眼就看出来你不是人!大威天龙!世尊地藏!般若诸佛!般若巴麻空!")
            #     ]

            if getSetting(groupId, "tribute") and not getTributeInfo(
                    sender, "VIP"):  #是否已完成上贡
                return [
                    At(target=sender),
                    Plain(text="啊嘞嘞~你还不是VIP哦~不能使用setu功能呐~\n"),
                    Plain(text="快来完成每月指标吧~\n"),
                    Plain(text="群内发送'开始上贡'即可开始发送图片哦~\n"),
                    Plain(text="群内发送'停止上贡'即可停止发送图片哦~")
                ]

            if getSetting(groupId, "countLimit"):  #如果有每分钟调用次数限制
                if not getMemberPicStatus(groupId, sender):
                    record("setu", "none", sender, groupId, False, "img")
                    return [
                        Plain(text="你已达到限制,每分钟最多只能要%d张setu/real哦~\n歇会儿再来吧!" %
                              getSetting(groupId, "limit"))
                    ]

            if getSetting(groupId, "tribute") and not getTributeInfo(
                    sender, "VIP"):  #是否已完成上贡
                return [
                    At(target=sender),
                    Plain(text="啊嘞嘞~你还不是VIP哦~不能使用setu功能呐~\n"),
                    Plain(text="快来完成每月指标吧~\n"),
                    Plain(text="群内发送'开始上贡'即可开始发送图片哦~\n"),
                    Plain(text="群内发送'停止上贡'即可停止发送图片哦~")
                ]

            if getSetting(groupId, "setuLocal"):  #是否为本地库
                if getSetting(groupId, "imgLightning") and randomJudge():
                    record("setu", "lightning", sender, groupId, False, "img")
                    return "lightningPic"
                if getSetting(groupId, "r18"):
                    dist = randomPic(setu18Dist)
                    record("setu18", dist, sender, groupId, True, "img")
                else:
                    dist = randomPic(setuDist)
                    record("setu", dist, sender, groupId, True, "img")
                print("本地setu图片地址:", dist)
                return [Image.fromFileSystem(dist)]
            else:
                pass  #因api变动不稳定,暂时不进行编写

    # real功能
    elif messageText == "real":
        if sender == 80000000:
            return [Plain(text="匿名请求已被屏蔽!做涩批就要光明正大!匿名算什么好汉!")]
        updateDragon(groupId, sender, "normal")
        updateUserCalled(groupId, sender, "real", 1)
        realCalled = getData("realCalled")
        realCalled += 1  #realCalled计数
        updateData(realCalled, "real")

        if not getSetting(groupId, "real"):  #本群禁止要real
            forbiddenCount = getSetting(groupId, "forbiddenCount")
            forbiddenCount += 1
            updateSetting(groupId, "forbiddenCount", forbiddenCount)
            record("real", "none", sender, groupId, False, "img")
            if forbiddenCount <= 3:
                return [Plain(text="我们是正规群呐,不搞那一套哦,想看去辣种群看哟~")]
            elif forbiddenCount <= 6:
                return [Plain(text="Kora!都说了是正规群啦!怎么老要这种东西呀,真是够讨厌的呢!再问我就生气啦!")]
            elif forbiddenCount <= 9:
                return [Plain(text="爬爬爬,天天脑子里都是些什么啊,滚呐!爷生气啦!打你哦!")]
            else:
                return [Image.fromFileSystem(angryDist)]
        else:
            # if sender in blackList:                     #发送人在黑名单中
            #     record("real",dist,sender,groupId,False,"img")
            #     return [Plain(text="要要要你🐎?大胆妖孽!我一眼就看出来你不是人!大威天龙!世尊地藏!般若诸佛!般若巴麻空!")]

            if getSetting(groupId, "tribute") and not getTributeInfo(
                    sender, "VIP"):  #是否已完成上贡
                return [
                    At(target=sender),
                    Plain(text="啊嘞嘞~你还不是VIP哦~不能使用real功能呐~\n"),
                    Plain(text="快来完成每月指标吧~\n"),
                    Plain(text="群内发送'开始上贡'即可开始发送图片哦~\n"),
                    Plain(text="群内发送'停止上贡'即可停止发送图片哦~")
                ]

            if getSetting(groupId, "countLimit"):  #如果有每分钟调用次数限制
                if not getMemberPicStatus(groupId, sender):
                    record("real", "none", sender, groupId, False, "img")
                    return [
                        At(target=sender),
                        Plain(text="你已达到限制,每分钟最多只能要%d张setu/real哦~\n歇会儿再来吧!" %
                              getSetting(groupId, "limit"))
                    ]

            if getSetting(groupId, "imgLightning") and randomJudge():
                record("real", "lightning", sender, groupId, False, "img")
                return "lightningPic"
            dist = randomPic(realDist)
            record("real", dist, sender, groupId, True, "img")
            print("本地real图片地址:", dist)
            return [Image.fromFileSystem(dist)]

    # bizhi功能
    elif messageText == "bizhi":
        bizhiCalled = getData("bizhiCalled")
        bizhiCalled += 1  #bizhiCalled计数
        updateData(bizhiCalled, "bizhi")
        updateUserCalled(groupId, sender, "bizhi", 1)

        if not getSetting(groupId, "bizhi"):  #本群禁止要bizhi
            record("bizhi", "none", sender, groupId, False, "img")
            return [Plain(text="bizhi功能被关闭了呐>^<,想打开的话联系下管理员呐~")]

        if getSetting(groupId, "tribute") and not getTributeInfo(
                sender, "VIP"):  #是否已完成上贡
            return [
                At(target=sender),
                Plain(text="啊嘞嘞~你还不是VIP哦~不能使用bizhi功能呐~\n"),
                Plain(text="快来完成每月指标吧~\n"),
                Plain(text="群内发送'开始上贡'即可开始发送图片哦~\n"),
                Plain(text="群内发送'停止上贡'即可停止发送图片哦~")
            ]

        # else:
        # if sender in blackList:                     #发送人在黑名单中
        #     record("bizhi",dist,sender,groupId,False,"img")
        #     return [Plain(text="要要要你🐎?大胆妖孽!我一眼就看出来你不是人!大威天龙!世尊地藏!般若诸佛!般若巴麻空!")]
        dist = randomPic(bizhiDist)
        print("本地bizhi图片地址:", dist)
        record("bizhi", dist, sender, groupId, True, "img")
        return [Image.fromFileSystem(dist)]

    # 批量pic功能
    elif messageText[:5] == "setu*" or messageText[:5] == "real*":
        aim = messageText[:4]
        if aim == "setu":
            aimDist = setuDist
        else:
            aimDist = realDist
        if not ((getSetting(groupId, "setu") and aim == "setu") or
                (getSetting(groupId, "real") and aim == "real")):  #本群禁止要setu
            forbiddenCount = getSetting(groupId, "forbiddenCount")
            forbiddenCount += 1
            updateSetting(groupId, "forbiddenCount", forbiddenCount)
            record(messageText, "none", sender, groupId, False, "img")
            if forbiddenCount <= 3:
                return [Plain(text="我们是正规群呐,不搞那一套哦,想看去辣种群看哟~")]
            elif forbiddenCount <= 6:
                return [Plain(text="Kora!都说了是正规群啦!怎么老要这种东西呀,真是够讨厌的呢!再问我就生气啦!")]
            elif forbiddenCount <= 9:
                return [Plain(text="爬爬爬,天天脑子里都是些什么玩意儿,滚呐!爷生气啦!打你哦!")]
            else:
                return [Image.fromFileSystem(angryDist)]
        else:
            try:
                num = int(message.toString()[5:])
                if sender in getAdmin(groupId):
                    if sender == HostQQ or num <= 5:
                        if aim == "setu":
                            setuCalled = getData("setuCalled")
                            setuCalled += num
                            updateData(setuCalled, "setu")
                        else:
                            realCalled = getData("realCalled")
                            realCalled += num
                            updateData(realCalled, "real")
                        picMsg = ["pic*"]
                        for i in range(num):
                            # if setting[groupId]["setuLocal"]:
                            dist = randomPic(aimDist)
                            picMsg.append(Image.fromFileSystem(dist))
                            record("%s*%d" % (aim, num), dist, sender, groupId,
                                   True, "img")
                            # else:
                            # pass
                        return picMsg
                    else:
                        record("%s*%d" % (aim, num), "none", sender, groupId,
                               False, "img")
                        return [Plain(text="管理最多也只能要5张呐~我可不会被轻易玩儿坏呢!!!!")]
                elif num <= 5:
                    record("%s*%d" % (aim, num), "none", sender, groupId,
                           False, "img")
                    return [Plain(text="只有主人和管理员可以使用%s*num命令哦~你没有权限的呐~" % aim)]
                else:
                    record("%s*%d" % (aim, num), "none", sender, groupId,
                           False, "img")
                    return [Plain(text="不是管理员你要你🐎呢?老色批!还要那么多?给你🐎一拳,给爷爬!")]
            except ValueError:
                return [Plain(text="命令错误!%s*后必须跟数字!" % aim)]

    # 搜图功能
    elif messageText in searchCallText:
        if not getSetting(groupId, "search"):
            return [At(target=sender), Plain(text="搜图功能关闭了呐~想要打开就联系机器人管理员吧~")]

        if getSetting(groupId, "tribute") and not getTributeInfo(
                sender, "VIP"):  #是否已完成上贡
            return [
                At(target=sender),
                Plain(text="啊嘞嘞~你还不是VIP哦~不能使用搜图功能呐~\n"),
                Plain(text="快来完成每月指标吧~\n"),
                Plain(text="群内发送'开始上贡'即可开始发送图片哦~\n"),
                Plain(text="群内发送'停止上贡'即可停止发送图片哦~")
            ]

        setReady(groupId, sender, True, "searchReady")
        return [At(target=sender), Plain(text="请发送要搜索的图片呐~")]
    elif message.hasComponent(Image) and getSetting(
            groupId, "search") and getReady(groupId, sender, "searchReady"):
        print("searching")
        img = message.getFirstComponent(Image)
        return searchImage(groupId, sender, img)

    # 图片预测功能
    elif messageText == "这张图里是什么":
        if not getSetting(groupId, "imgPredict"):
            return [
                At(target=sender),
                Plain(text="图片预测功能关闭了呐~想要打开就联系机器人管理员吧~")
            ]

        if getSetting(groupId, "tribute") and not getTributeInfo(
                sender, "VIP"):  #是否已完成上贡
            return [
                At(target=sender),
                Plain(text="啊嘞嘞~你还不是VIP哦~不能使用图片预测功能呐~\n"),
                Plain(text="快来完成每月指标吧~\n"),
                Plain(text="群内发送'开始上贡'即可开始发送图片哦~\n"),
                Plain(text="群内发送'停止上贡'即可停止发送图片哦~")
            ]

        setReady(groupId, sender, True, "PredictReady")
        return [At(target=sender), Plain(text="请发送要预测的图片呐(推荐真实图片呐)~")]
    elif message.hasComponent(Image) and getSetting(
            groupId, "imgPredict") and getReady(groupId, sender,
                                                "predictReady"):
        print("predicting")
        updateUserCalled(groupId, sender, "imgPredict", 1)
        img = message.getFirstComponent(Image)
        return predictImage(groupId, sender, img)

    # 黄图评价功能
    elif messageText == "这张图涩吗":
        if not getSetting(groupId, "yellowPredict"):
            return [
                At(target=sender),
                Plain(text="图片涩度评价功能关闭了呐~想要打开就联系机器人管理员吧~")
            ]

        if getSetting(groupId, "tribute") and not getTributeInfo(
                sender, "VIP"):  #是否已完成上贡
            return [
                At(target=sender),
                Plain(text="啊嘞嘞~你还不是VIP哦~不能使用涩度评价功能呐~\n"),
                Plain(text="快来完成每月指标吧~\n"),
                Plain(text="群内发送'开始上贡'即可开始发送图片哦~\n"),
                Plain(text="群内发送'停止上贡'即可停止发送图片哦~")
            ]

        setReady(groupId, sender, True, "yellowPredictReady")
        return [At(target=sender), Plain(text="请发送要预测的图片呐~")]
    elif message.hasComponent(Image) and getSetting(
            groupId, "yellowPredict") and getReady(groupId, sender,
                                                   "yellowPredictReady"):
        print("judging")
        updateUserCalled(groupId, sender, "yellowPredict", 1)
        img = message.getFirstComponent(Image)
        return judgeImageYellow(groupId, sender, img.url, yellowJudgeDist)

    # 上贡图片Judge
    elif message.hasComponent(Image) and getSetting(
            groupId, "tribute") and getReady(groupId, sender, "tributeReady"):
        # setReady(groupId,sender,False,"tributeready")
        print("judging")
        img = message.getFirstComponent(Image)
        result = judgeImageYellow(groupId, sender, img.url, tributeDist)
        Normal = float(re.findall(r'Normal :(.*?)%', result[2].text)[0])
        Hot = float(re.findall(r'Hot :(.*?)%', result[3].text)[0])
        Sexy = float(re.findall(r'Sexy :(.*?)%', result[4].text)[0])
        Total = float(re.findall(r'Total :(.*?)%', result[5].text)[0])
        if Normal <= 55 or Hot > 50 or Sexy > 50 or Total > 20:
            code = getData("searchCount")
            hammRes = imgSimilarJudge(
                imgHash("%s%d.png" % (tributeDist, code)), "tribute", 3)
            if hammRes[0]:
                removedFile = "%s%d.png" % (tributeDist, code)
                shutil.move(removedFile, tributeSimilarDist)
                return [
                    "上贡",
                    At(target=sender),
                    Plain(text="\n有相似图片在tribute图库中呐~\n"),
                    Plain(text="汉明距离%d\n" % hammRes[1]),
                    Plain(text="再找些别的图吧~")
                ]
            else:
                hammRes = imgSimilarJudge(
                    imgHash("%s%d.png" % (tributeDist, code)), "setu", 3)
                if hammRes[0]:
                    removedFile = "%s%d.png" % (tributeDist, code)
                    shutil.move(removedFile, tributeSimilarDist)
                    return [
                        "上贡",
                        At(target=sender),
                        Plain(text="\n有相似图片在setu图库中呐~\n"),
                        Plain(text="汉明距离%d\n" % hammRes[1]),
                        Plain(text="再找些别的图吧~")
                    ]
                else:
                    hammRes = imgSimilarJudge(
                        imgHash("%s%d.png" % (tributeDist, code)), "setu18", 3)
                    if hammRes[0]:
                        removedFile = "%s%d.png" % (tributeDist, code)
                        shutil.move(removedFile, tributeSimilarDist)
                        return [
                            "上贡",
                            At(target=sender),
                            Plain(text="\n有相似图片在setu18图库中呐~\n"),
                            Plain(text="汉明距离%d\n" % hammRes[1]),
                            Plain(text="再找些别的图吧~")
                        ]

            insertHash("%s%d.png" % (tributeDist, code),
                       imgHash("%s%d.png" % (tributeDist, code)), "tribute")
            record("tribute accepted", "%s%d.png" % (tributeDist, code),
                   sender, groupId, 1, "img")
            if int(getTributeInfo(sender, "tributeCount")) + 1 >= int(
                    getSetting(groupId, "tributeQuantity")):
                setTributeInfo(sender,
                               getTributeInfo(sender, "tributeCount") + 1,
                               "tributeCount")
                now = datetime.datetime.now()
                end = now + relativedelta(months=+1)
                now = now.strftime("%Y-%m-%d %H:%M:%S")
                end = end.strftime("%Y-%m-%d %H:%M:%S")
                setTributeInfo(sender, now, "startTime")
                setTributeInfo(sender, end, "endTime")
                setTributeInfo(sender, True, "VIP")
                setReady(groupId, sender, False, "tributeready")
                return [
                    "上贡",
                    At(target=sender),
                    Plain(text="恭喜~这张图通过了测试呐~\n"),
                    Plain(text="本月目标%d张,现在已经传了%d张呐~\n" %
                          (getSetting(groupId, "tributeQuantity"),
                           getTributeInfo(sender, "tributeCount"))),
                    Plain(text="你已获得VIP身份辣~\n"),
                    Plain(text="VIP从现在开始到%s哦" % end)
                ]
            else:
                setTributeInfo(sender,
                               getTributeInfo(sender, "tributeCount") + 1,
                               "tributeCount")
                return [
                    "上贡",
                    At(target=sender),
                    Plain(text="恭喜~这张图通过了测试呐~\n"),
                    Plain(text="本月目标%d张,现在已经传了%d张呐~\n" %
                          (getSetting(groupId, "tributeQuantity"),
                           getTributeInfo(sender, "tributeCount"))),
                    Plain(text="群内发送'停止上贡'即可停止发送图片哦~")
                ]
        else:
            code = getData("searchCount")
            insertHash("%s%d.png" % (tributeDist, code),
                       imgHash("%s%d.png" % (tributeDist, code)), "tribute")
            removedFile = "%s%d.png" % (tributeDist, code)
            shutil.move(removedFile, tributeDelDist)
            record("tribute not accepted", "%s%d.png" % (tributeDelDist, code),
                   sender, groupId, 1, "img")
            return [
                "上贡",
                At(target=sender),
                Plain(text="很遗憾,这张图没有达标呢~\n"),
                Plain("本图评价结果:\n"), result[2], result[3], result[4], result[5],
                Plain(text="\n评判标准为:\n"),
                Plain(text="Normal<=55 or Hot>50 or Sexy>50 or Total>20\n"),
                Plain(text="再找些别的图吧~\n"),
                Plain(text="群内发送'停止上贡'即可停止发送图片哦~")
            ]

    # 笑话功能
    elif "来点" in messageText and "笑话" in messageText:
        jokeDict = {
            "苏联": "soviet",
            "法国": "french",
            "法兰西": "french",
            "美国": "america",
            "美利坚": "america"
        }
        name = re.findall(r'来点(.*?)笑话', messageText, re.S)
        if name == ['']:
            return [At(target=sender), Plain(text="来点儿啥笑话啊,你又不告诉人家!哼!")]
        elif name[0] in jokeDict.keys():
            record("joke", "none", sender, groupId, True, "function")
            return getKeyJoke(jokeDict[name[0]])
        else:
            record("joke", "none", sender, groupId, True, "function")
            return getJoke(name[0])

    # 群语录功能 celebrityQuotes
    elif messageText == "群语录":
        return getCelebrityQuotes(groupId, memberList, "none", "random")

    # 群语录精准迫害功能
    elif "来点" in messageText and "语录" in messageText:
        name = re.findall(r'来点(.*?)语录', messageText, re.S)
        if name == []:
            return "noneReply"
        else:
            record("quotes", "none", sender, groupId, True, "function")
            return getCelebrityQuotes(groupId, memberList, name, "select")

    # 网抑云
    elif messageText == "网抑云" or messageText == "wyy":
        return getWyy()

    # 群友平安
    elif messageText == "平安":
        return safe(groupId, memberList)

    # 历史上的今天
    elif messageText == "历史上的今天":
        return getHistoryToday()

    # 开始上贡
    elif messageText == "开始上贡":
        if not getSetting(groupId, "tribute"):
            return [At(target=sender), Plain(text="本群未开启上贡功能哦~")]
        if int(getTributeInfo(sender, "tributeCount")) >= int(
                getSetting(groupId, "tributeQuantity")):
            setReady(groupId, sender, False, "tributeready")
            return [
                At(target=sender),
                Plain(text="你这个月已经发够%s张符合标准的图了呐~可以不用发啦~" %
                      getSetting(groupId, "tributeQuantity"))
            ]
        else:
            setReady(groupId, sender, True, "tributeready")
            return [
                At(target=sender),
                Plain(text="现在可以发图啦~本月目标%d张,现在已经传了%d张呐~" %
                      (getSetting(groupId, "tributeQuantity"),
                       getTributeInfo(sender, "tributeCount")))
            ]

    # 停止上贡
    elif messageText == "停止上贡":
        if not getSetting(groupId, "tribute"):
            return [At(target=sender), Plain(text="本群未开启上贡功能哦~")]
        setReady(groupId, sender, False, "tributeready")
        return [
            At(target=sender),
            Plain(text="上贡暂停啦~本月目标%d张,现在已经传了%d张呐~" %
                  (getSetting(groupId, "tributeQuantity"),
                   getTributeInfo(sender, "tributeCount")))
        ]

    # 获取时间功能(可选背景)
    elif messageText in timeCallText:
        clockCalled = getData("clockCalled")
        clockCalled += 1
        updateData(clockCalled, "clock")
        if getClockChoice(groupId, sender) == "none":
            clockMessage = [
                At(target=sender),
                Plain(text="你还没有选择表盘哦~快来选择一个吧~\n"),
                Plain(text="看中后直接发送选择表盘+序号即可哦~\n"),
                Plain(text="如:选择表盘1\n"),
                Plain(text="表盘预览:")
            ]
            clockList = os.listdir(clockPreviewDist)
            clockList.sort(key=lambda x: int(x[:-4]))
            index = 1
            for i in clockList:
                clockMessage.append(Plain(text="\n%s." % index))
                clockMessage.append(Image.fromFileSystem(clockPreviewDist + i))
                index += 1
            return clockMessage
        else:
            t = datetime.datetime.now()  #目前时间
            t = t.strftime("%H:%M")
            t = t.replace(":", "")
            dist = timeDist + str(getClockChoice(groupId,
                                                 sender)) + "/%s.png" % t
            return [Image.fromFileSystem(dist)]

    # 选择表盘(获取时间功能)
    elif messageText[:4] == "选择表盘":
        if messageText == "选择表盘":
            return showClock(sender)
        else:
            code = messageText[4:]
            if code.isdigit() and int(code) <= int(getData("dialsCount")):
                recordClock(groupId, sender, int(code))
                return [Plain(text="已经选择了表盘%s呢!\n现在可以问我时间啦~" % code)]
            else:
                return [
                    Plain(text="看中后直接发送选择表盘+序号即可哦~\n"),
                    Plain(text="再检查下有没有输错呢~\n")
                ]

    # 天气查询功能
    elif "[At::target=%i] 天气" % BotQQ in messageText:
        updateUserCalled(groupId, sender, "at", 1)
        weatherCalled = getData("weatherCalled")
        weatherCalled += 1
        updateData(weatherCalled, "weather")
        return getWeather(message, sender)

    # 碧蓝航线wiki查询功能
    elif "[At::target=%i] blhx:" % BotQQ in messageText:
        updateUserCalled(groupId, sender, "at", 1)
        name = messageText[28:]
        return blhxWiki(sender, name)

    # 营销号生成器
    elif "[At::target=%i] 营销号" % BotQQ in messageText:
        updateUserCalled(groupId, sender, "at", 1)
        _, somebody, something, other_word = messageText.split('、')
        # print(something,somebody,other_word)
        return yingxiaohao(somebody, something, other_word)

    # 问你点儿事儿
    elif "[At::target=%i] 问你点儿事儿:" % BotQQ in message.toString():
        updateUserCalled(groupId, sender, "at", 1)
        question = message.toString()[30:]
        question = parse.quote(question)
        return askSth(sender, question)

    # myInfo功能
    elif "[At::target=%i] myInfo" % BotQQ in messageText:
        updateUserCalled(groupId, sender, "at", 1)
        return getUserCalled(groupId, sender, memberList)

    # lspRank功能
    elif "[At::target=%i] rank" % BotQQ in messageText:
        updateUserCalled(groupId, sender, "at", 1)
        return getRank(groupId, memberList)

    # linux命令查询功能
    elif "[At::target=%i] linux" % BotQQ in messageText:
        updateUserCalled(groupId, sender, "at", 1)
        if ':' in messageText:
            messageText = messageText.replace(':', ':')
        command = messageText.replace("[At::target=%i] linux:" % BotQQ, "")
        print("get linux:%s" % command)
        text = getLinuxExplanation(command)
        if text == "error!no command!":
            return [At(target=sender), Plain(text="未搜索到命令%s!请检查拼写!" % command)]
        else:
            return [At(target=sender), Plain(text="%s:%s" % (command, text))]

    # 翻译功能
    elif "[At::target=%i] " % BotQQ in messageText and "用" in messageText and "怎么说" in messageText:
        updateUserCalled(groupId, sender, "at", 1)
        supportLanguage = {
            "中文": "zh",
            "英文": "en",
            "日文": "jp",
            "韩文": "kr",
            "法文": "fr",
            "西班牙文": "es",
            "意大利文": "it",
            "德文": "de",
            "土耳其文": "tr",
            "俄文": "ru",
            "葡萄牙文": "pt",
            "越南文": "vi",
            "印度尼西亚文": "id",
            "马来西亚文": "ms",
            "泰文": "th"
        }
        tp = re.findall(r'\] (.*?)用(.*?)怎么说', messageText, re.S)[0]
        text = tp[0]
        target = tp[1]
        print("text:%s,target:%s" % (text, target))
        source = textDetect(text.encode("utf-8"))
        if target not in supportLanguage.keys():
            sL = ""
            for i in supportLanguage.keys():
                sL += i
                sL += '、'
            return [
                At(target=sender),
                Plain(
                    text="目前只支持翻译到%s哦~\n要全字匹配哦~看看有没有打错呐~\n翻译格式:text用(目标语言)怎么说"
                    % sL)
            ]
        target = supportLanguage[target]
        # print(target)
        return translate(groupId, sender, text, source, target)

    # 设置处理
    elif "[At::target=%i] setting." % BotQQ in messageText:
        updateUserCalled(groupId, sender, "at", 1)
        command = messageText[16:]
        try:
            print(command)
            name, config, change = command.split('.')
            print(name, '-->', " config:", config, "set to", change)
            return settingProcess(groupId, sender, config, change)
        except ValueError:
            return [
                At(target=sender),
                Plain(
                    text=
                    "Command error! Use the '@bot command' command to query the commands you can use!"
                )
            ]

    # 获取信息处理
    elif "[At::target=%i] info." % BotQQ in messageText:
        updateUserCalled(groupId, sender, "at", 1)
        command = messageText[16:]
        # try:
        print(command)
        info, check = command.split('.')
        print(info, '-->', " info:", check)
        return infoProcess(groupId, sender, check)

    # wiki处理
    elif "[At::target=%i] wiki" % BotQQ in messageText:
        updateUserCalled(groupId, sender, "at", 1)
        if ':' in messageText:
            messageText = messageText.replace(':', ':')
            print(messageText)
        print("get wiki:%s" %
              messageText.replace("[At::target=%i] wiki" % BotQQ, ""))
        return wikiProcess(groupId, sender, messageText)

    # 添加群语录处理 @bot func.addQuote.content.target
    elif "[At::target=%i] func.addQuote." % BotQQ in messageText:
        updateUserCalled(groupId, sender, "at", 1)
        if message.hasComponent(Image):
            try:
                _, func, target, img = messageText.split(".")
                quotesCount = getData("quotesCount") + 1
                print(quotesCount)
                updateData(quotesCount, "quotes")
                dist = "%s%s.png" % (quotesDist, quotesCount)
                print(dist)
                img = message.getFirstComponent(Image)
                img_content = requests.get(img.url).content
                image = IMG.open(BytesIO(img_content))
                image.save(dist)
                return funcProcess(groupId, sender, func,
                                   pymysql.escape_string(dist), target, "img")
            except Exception:
                pass
        else:
            try:
                _, func, content, target = messageText.split(".")
                return funcProcess(groupId, sender, func, content, target,
                                   "text")
            except Exception:
                pass

    # 添加别名处理 @bot func.addQuote.content.target
    elif "[At::target=%i] func.addNickname." % BotQQ in messageText:
        updateUserCalled(groupId, sender, "at", 1)
        try:
            _, func, nickname, target = messageText.split(".")
            return funcProcess(groupId, sender, func, nickname, target,
                               "nickname")
        except Exception:
            pass

    # 添加管理员处理
    elif "[At::target=%i] addAdmin" % BotQQ in messageText:
        updateUserCalled(groupId, sender, "at", 1)
        target = int(
            re.findall(r'At::target=(.*?)]',
                       message.toString()[19:], re.S)[0])
        print("add admin:%d in group %d" % (target, groupId))
        return addAdmin(groupId, target)

    # 删除管理员处理
    elif "[At::target=%i] deleteAdmin" % BotQQ in messageText:
        updateUserCalled(groupId, sender, "at", 1)
        target = int(
            re.findall(r'At::target=(.*?)]',
                       message.toString()[19:], re.S)[0])
        print("delete admin:%d in group %d" % (target, groupId))
        return deleteAdmin(groupId, target)

    # 加入黑名单处理
    elif "[At::target=%i] addBlacklist" % BotQQ in messageText:
        updateUserCalled(groupId, sender, "at", 1)
        target = int(
            re.findall(r'At::target=(.*?)]',
                       message.toString()[19:], re.S)[0])
        if target in blackList:
            return [
                Plain(text="%s is already in the blacklist") %
                qq2name(memberList, target)
            ]
        else:
            blackList.append(target)
            print("%s is added to the blacklist" % qq2name(memberList, target))
            return addToBlacklist(target)

    # 移出黑名单处理
    elif "[At::target=%i] removeBlacklist" % BotQQ in messageText:
        updateUserCalled(groupId, sender, "at", 1)
        target = int(
            re.findall(r'At::target=(.*?)]', messageText[19:], re.S)[0])
        if target not in blackList:
            return [
                Plain(text="%s is not in the blacklist originally") %
                qq2name(memberList, target)
            ]
        else:
            blackList.remove(target)
            print("%s is removed from the blacklist" %
                  qq2name(memberList, target))
            return removeFromBlacklist(target)

    # 添加监听处理
    elif "[At::target=%i] addListen" % BotQQ in messageText:
        updateUserCalled(groupId, sender, "at", 1)
        target = int(
            re.findall(r'At::target=(.*?)]',
                       message.toString()[19:], re.S)[0])
        print("add listen:%d in group %d" % (target, groupId))
        Msg = addListen(groupId, target)
        Msg.insert(0, "addListen.%d.%d" % (groupId, target))
        return Msg

    # 获取疫情统计
    elif messageText == "疫情" or messageText == "疫情统计":
        return [LightApp(getEpidemic())]

    # 点歌
    elif messageText[:3] == "点歌 ":
        if getSetting(groupId, "music") != "off":
            target = messageText[3:]
            updateUserCalled(groupId, sender, "songOrder", 1)
            return [LightApp(songOrder(target))]
        else:
            return [At(target=sender), Plain(text="点歌功能关闭了呐~想要打开就去找主人吧~")]

    # 微博热搜
    elif messageText == "weibo" or messageText == "微博" or messageText == "微博热搜":
        return getWeiboHot()

    # 超度
    elif "超度" in messageText and sender == HostQQ:
        target = int(re.findall(r'\[At::target=(.*?)\]', messageText, re.S)[0])
        return [At(target=target), Plain(text=chaodu)]

    # 添加订阅检查
    elif messageText[:7] == "添加B站订阅 ":
        target = messageText.replace("添加B站订阅 ", "")
        status = getBilibiliRoomInfo(target)
        if status[0]:
            return [
                At(target=sender),
                Plain(text="\n你确定要添加直播间%s?\n" % target),
                Plain(text="--------------------------------\n"),
                Plain(text="该直播间信息如下:\n"),
                Plain(text="房间名:%s\n" % status[2]),
                Plain(text="主播名:%s\n" % status[3]),
                Plain(text="主播种类:%s\n" % status[4]),
                Plain(text="主播区域:%s\n" % status[5]),
                Plain(text="房间链接:%s\n" % status[6]),
                Plain(text="--------------------------------\n"),
                Plain(text="确认是此主播嘛~\n如果确认的话发送\n'确定添加B站订阅 %s'\n就可以添加订阅啦~" %
                      target)
            ]
        else:
            return [At(target=sender), Plain(text="\n直播间号错误!请检查后重新发送!")]

    # 添加订阅
    elif messageText[:9] == "确定添加B站订阅 ":
        target = messageText.replace("确定添加B站订阅 ", "")
        status = getBilibiliRoomInfo(target)
        return addSubscribe(groupId, sender, target, "bilibili")

    # 回复@bot(normal,zuanLow,zuanHigh,rainbow)
    elif "[At::target=%i]" % BotQQ in messageText:
        updateUserCalled(groupId, sender, "at", 1)
        if messageText.replace(
                "[At::target=%d] " % BotQQ,
                "") in sleepMuteCallText and sender not in getAdmin(groupId):
            return "goodNight"
        elif messageText.replace("[At::target=%d] " % BotQQ,
                                 "") in muteAllCallText and sender == HostQQ:
            return "muteAll"
        elif messageText.replace("[At::target=%d] " % BotQQ,
                                 "") in unmuteAllCallText and sender == HostQQ:
            return "unmuteAll"
        elif sender == HostQQ and not getSetting(groupId,
                                                 "speakMode") == "chat":
            return [At(target=sender), Plain(text="诶嘿嘿,老公我来啦~")]
        else:
            mode_now = getSetting(groupId, "speakMode")
            if not mode_now == "normal":
                if mode_now == "zuanHigh":
                    text = requests.get(zuanHighSrc).text
                    record("zuanHigh", "none", sender, groupId, True,
                           "function")
                elif mode_now == "zuanLow":
                    text = requests.get(zuanLowSrc).text
                    record("zuanLow", "none", sender, groupId, True,
                           "function")
                elif mode_now == "rainbow":
                    text = requests.get(rainbowSrc).text
                    record("rainbow", "none", sender, groupId, True,
                           "function")
                elif mode_now == "chat":
                    if not len(
                            messageText.replace("[At::target=%i] " % BotQQ,
                                                "")) == 0:
                        text = getChatText(
                            groupId, sender,
                            str(
                                messageText.replace("[At::target=%i] " % BotQQ,
                                                    "")))
                        if text == "":
                            text = "我不知道怎么回答呐~抱歉哦~"
                        record("chat", "none", sender, groupId, True,
                               "function")
                    else:
                        return "noneReply"
                return [At(target=sender), Plain(text=text)]

    return "noneReply"
Exemple #20
0
def 爬OIWiki(*attrs, **kwargs):
    lnk = 'https://oi-wiki.org/'
    if len(attrs):
        query = ' '.join(attrs)
        plnk = 'https://search.oi-wiki.org:8443/?s=' + query
        j = json.loads(requests.get(plnk).text)
        ostr = [Plain(text='找到了%d个类似的东西\n' % len(j))]
        if len(j):
            c = j[0]
            ostr.append(Plain(text='直接把%s扔给你了\n' % c['title']))
            suflnk = c['url']
            # print(c)
            # print(suflnk)
        else:
            ostr.append(Plain(text='无结果'))
            return ostr
    else:
        ostr = []
        if random.choice([True, False]):
            r = requests.get(lnk, headers=GLOBAL.OIWikiHeaders)
            r.encoding = 'utf-8'

            s = BeautifulSoup(r.text, 'html.parser')
            res = s.find('nav', attrs={'data-md-component': 'tabs'})

            hdir = random.choice(res('a')[2:-2])
            subRes = s.find('label',
                            string=hdir.string,
                            attrs={'class': 'md-nav__link'})

            hd2 = random.choice(
                list(subRes.next_siblings)[1]('li',
                                              attrs={
                                                  'class': 'md-nav__item'
                                              }))
            suflnk = hd2.a['href']
        else:
            lnk = 'https://ctf-wiki.github.io/ctf-wiki/'
            r = requests.get(lnk, headers=GLOBAL.OIWikiHeaders)
            r.encoding = 'utf-8'

            s = BeautifulSoup(r.text, 'html.parser')
            res = s.find('nav', attrs={'data-md-component': 'tabs'})

            hdir = random.choice(res('a')[1:])
            subRes = [
                i for i in s('label',
                             attrs={
                                 'class': 'md-nav__link',
                                 'for': re.compile('nav-[0-9]*$')
                             }) if hdir.string.strip() in i.text
            ][0]

            hd2 = random.choice(
                list(subRes.next_siblings)[1]('li',
                                              attrs={
                                                  'class': 'md-nav__item'
                                              }))
            suflnk = hd2.a['href']

    url = lnk + suflnk
    print(url)

    save_fn = randstr(GLOBAL.randomStrLength) + "tmpLearn" + str(
        kwargs['gp'].id) + '.png'
    ostr += renderHtml(url, save_fn)

    asyncio.ensure_future(rmTmpFile(save_fn), loop=None)
    ostr.append(Image.fromFileSystem(save_fn))
    return ostr
Exemple #21
0
async def Process(message, groupId, sender):

    responseCalled = getData("responseCalled")
    responseCalled += 1  #responseCalled计数
    updateData(responseCalled, "response")

    #message预处理
    messageText = message.toString()

    #setu功能
    if messageText in setuCallText:
        setuCalled = getData("setuCalled")
        setuCalled += 1  #setuCalled计数
        updateData(setuCalled, "setu")
        if not getSetting(groupId, "setu"):  #本群禁止要setu
            forbiddenCount = getSetting(groupId, "forbiddenCount")
            forbiddenCount += 1
            updateSetting(groupId, "forbiddenCount", forbiddenCount)
            record("setu", "none", sender, groupId, False, "img")
            if forbiddenCount <= 3:
                return [Plain(text="我们是正规群呐,不搞那一套哦,想看去辣种群看哟~")]
            elif forbiddenCount <= 6:
                return [Plain(text="Kora!都说了是正规群啦!怎么老要这种东西呀,真是够讨厌的呢!再问我就生气啦!")]
            elif forbiddenCount <= 9:
                return [Plain(text="爬爬爬,天天脑子里都是些什么啊,滚呐!爷生气啦!打你哦!")]
            else:
                return [Image.fromFileSystem(angryDist)]
        else:
            if sender in blackList:  #发送人在黑名单中
                record("setu", "none", sender, groupId, False, "img")
                return [
                    At(target=sender),
                    Plain(text="要你🐎?大胆妖孽!我一眼就看出来你不是人!大威天龙!世尊地藏!般若诸佛!般若巴麻空!")
                ]

            if getSetting(groupId, "countLimit"):  #如果有每分钟调用次数限制
                if not getMemberPicStatus(groupId, sender):
                    record("setu", "none", sender, groupId, False, "img")
                    return [
                        Plain(text="你已达到限制,每分钟最多只能要%d张setu/real哦~\n歇会儿再来吧!" %
                              getSetting(groupId, "limit"))
                    ]

            if getSetting(groupId, "setuLocal"):  #是否为本地库
                if getSetting(groupId, "r18"):
                    dist = randomPic(setu18Dist)
                    record("setu18", dist, sender, groupId, True, "img")
                else:
                    dist = randomPic(setuDist)
                    record("setu", dist, sender, groupId, True, "img")
                print("本地setu图片地址:", dist)
                return [Image.fromFileSystem(dist)]
            else:
                pass  #因api变动不稳定,暂时不进行编写

    #real功能
    elif messageText == "real":
        realCalled = getData("realCalled")
        realCalled += 1  #realCalled计数
        updateData(realCalled, "real")

        if not getSetting(groupId, "real"):  #本群禁止要real
            forbiddenCount = getSetting(groupId, "forbiddenCount")
            forbiddenCount += 1
            updateSetting(groupId, "forbiddenCount", forbiddenCount)
            record("real", "none", sender, groupId, False, "img")
            if forbiddenCount <= 3:
                return [Plain(text="我们是正规群呐,不搞那一套哦,想看去辣种群看哟~")]
            elif forbiddenCount <= 6:
                return [Plain(text="Kora!都说了是正规群啦!怎么老要这种东西呀,真是够讨厌的呢!再问我就生气啦!")]
            elif forbiddenCount <= 9:
                return [Plain(text="爬爬爬,天天脑子里都是些什么啊,滚呐!爷生气啦!打你哦!")]
            else:
                return [Image.fromFileSystem(angryDist)]
        else:
            if sender in blackList:  #发送人在黑名单中
                record("real", dist, sender, groupId, False, "img")
                return [
                    Plain(text="要要要你🐎?大胆妖孽!我一眼就看出来你不是人!大威天龙!世尊地藏!般若诸佛!般若巴麻空!")
                ]

            if getSetting(groupId, "countLimit"):  #如果有每分钟调用次数限制
                if not getMemberPicStatus(groupId, sender):
                    record("real", "none", sender, groupId, False, "img")
                    return [
                        Plain(text="你已达到限制,每分钟最多只能要%d张setu/real哦~\n歇会儿再来吧!" %
                              getSetting(groupId, "limit"))
                    ]

            dist = randomPic(realDist)
            record("real", dist, sender, groupId, True, "img")
            print("本地real图片地址:", dist)
            return [Image.fromFileSystem(dist)]

    #bizhi功能
    elif messageText == "bizhi":
        bizhiCalled = getData("bizhiCalled")
        bizhiCalled += 1  #bizhiCalled计数
        updateData(bizhiCalled, "bizhi")

        if not getSetting(groupId, "bizhi"):  #本群禁止要bizhi
            record("bizhi", "none", sender, groupId, False, "img")
            return [Plain(text="bizhi功能被关闭了呐>^<,想打开的话联系下管理员呐~")]
        else:
            if sender in blackList:  #发送人在黑名单中
                record("bizhi", dist, sender, groupId, False, "img")
                return [
                    Plain(text="要要要你🐎?大胆妖孽!我一眼就看出来你不是人!大威天龙!世尊地藏!般若诸佛!般若巴麻空!")
                ]
        dist = randomPic(bizhiDist)
        print("本地bizhi图片地址:", dist)
        record("bizhi", dist, sender, groupId, True, "img")
        return [Image.fromFileSystem(dist)]

    #批量pic功能
    elif messageText[:5] == "setu*" or messageText[:5] == "real*":
        aim = messageText[:4]
        if aim == "setu":
            aimDist = setuDist
        else:
            aimDist = realDist
        if not ((getSetting(groupId, "setu") and aim == "setu") or
                (getSetting(groupId, "real") and aim == "real")):  #本群禁止要setu
            forbiddenCount = getSetting(groupId, "forbiddenCount")
            forbiddenCount += 1
            updateSetting(groupId, "forbiddenCount", forbiddenCount)
            record(messageText, "none", sender, groupId, False, "img")
            if forbiddenCount <= 3:
                return [Plain(text="我们是正规群呐,不搞那一套哦,想看去辣种群看哟~")]
            elif forbiddenCount <= 6:
                return [Plain(text="Kora!都说了是正规群啦!怎么老要这种东西呀,真是够讨厌的呢!再问我就生气啦!")]
            elif forbiddenCount <= 9:
                return [Plain(text="爬爬爬,天天脑子里都是些什么玩意儿,滚呐!爷生气啦!打你哦!")]
            else:
                return [Image.fromFileSystem(angryDist)]
        else:
            try:
                num = int(message.toString()[5:])
                if aim == "setu":
                    setuCalled = getData("setuCalled")
                    setuCalled += num
                    updateData(setuCalled, "setu")
                else:
                    realCalled = getData("realCalled")
                    realCalled += num
                    updateData(realCalled, "real")
                if sender in getAdmin(groupId):
                    if sender == HostQQ or num <= 5:
                        picMsg = []
                        for i in range(num):
                            # if setting[groupId]["setuLocal"]:
                            dist = randomPic(aimDist)
                            picMsg.append(Image.fromFileSystem(dist))
                            record("%s*%d" % (aim, num), dist, sender, groupId,
                                   True, "img")
                            # else:
                            # pass
                        return picMsg
                    else:
                        record("%s*%d" % (aim, num), dist, sender, groupId,
                               False, "img")
                        return [Plain(text="管理最多也只能要5张呐~我可不会被轻易玩儿坏呢!!!!")]
                elif num <= 5:
                    record("%s*%d" % (aim, num), "none", sender, groupId,
                           False, "img")
                    return [Plain(text="只有主人和管理员可以使用%s*num命令哦~你没有权限的呐~" % aim)]
                else:
                    record("%s*%d" % (aim, num), "none", sender, groupId,
                           False, "img")
                    return [Plain(text="老色批,要那么多,给你🐎一拳,爬!")]
            except ValueError:
                return [Plain(text="命令错误!%s*后必须跟数字!" % aim)]

    #搜图功能
    elif messageText in searchCallText:
        setSearchReady(groupId, sender, True)
        return [At(target=sender), Plain(text="请发送要搜索的图片呐~")]
    elif message.hasComponent(Image) and getSearchReady(groupId, sender):
        print("searching")
        img = message.getFirstComponent(Image)
        return searchImage(groupId, sender, img)

    #获取时间功能(可选背景)
    elif messageText in timeCallText:
        clockCalled = getData("clockCalled")
        clockCalled += 1
        updateData(clockCalled, "clock")
        if getClockChoice(groupId, sender) == "none":
            clockMessage = [
                At(target=sender),
                Plain(text="你还没有选择表盘哦~快来选择一个吧~\n"),
                Plain(text="看中后直接发送选择表盘+序号即可哦~\n"),
                Plain(text="如:选择表盘1\n"),
                Plain(text="表盘预览:")
            ]
            clockList = os.listdir(clockPreviewDist)
            clockList.sort(key=lambda x: int(x[:-4]))
            index = 1
            for i in clockList:
                clockMessage.append(Plain(text="\n%s." % index))
                clockMessage.append(Image.fromFileSystem(clockPreviewDist + i))
                index += 1
            return clockMessage
        else:
            t = datetime.datetime.now()  #目前时间
            t = t.strftime("%H:%M")
            t = t.replace(":", "")
            dist = timeDist + str(getClockChoice(groupId,
                                                 sender)) + "/%s.png" % t
            return [Image.fromFileSystem(dist)]

    #选择表盘(获取时间功能)

    elif messageText[:4] == "选择表盘":
        if messageText == "选择表盘":
            return showClock(sender)
        else:
            code = messageText[4:]
            if code.isdigit() and int(code) <= int(getData("dialsCount")):
                recordClock(groupId, sender, int(code))
                return [Plain(text="已经选择了表盘%s呢!\n现在可以问我时间啦~" % code)]
            else:
                return [
                    Plain(text="看中后直接发送选择表盘+序号即可哦~\n"),
                    Plain(text="再检查下有没有输错呢~\n")
                ]

    #天气查询功能
    elif "[At::target=%i] 天气" % BotQQ in messageText:
        weatherCalled = getData("weatherCalled")
        weatherCalled += 1
        updateData(weatherCalled, "weather")
        return getWeather(message, sender)

    #碧蓝航线wiki查询功能
    elif "[At::target=%i] blhx:" % BotQQ in messageText:
        name = messageText[28:]
        return blhxWiki(sender, name)

    #营销号生成器
    elif "[At::target=%i] 营销号" % BotQQ in messageText:
        _, somebody, something, other_word = messageText.split('、')
        # print(something,somebody,other_word)
        return [Plain(text=yingxiaohao(somebody, something, other_word))]

    #设置处理
    elif "[At::target=%i] setting." % BotQQ in messageText:
        command = messageText[16:]
        try:
            print(command)
            name, config, change = command.split('.')
            print(name, '-->', " config:", config, "set to", change)
            return settingProcess(groupId, sender, config, change)
        except ValueError:
            return [
                At(target=sender),
                Plain(
                    text=
                    "Command error! Use the '@bot command' command to query the commands you can use!"
                )
            ]

    #获取信息处理
    elif "[At::target=%i] info." % BotQQ in messageText:
        command = messageText[16:]
        # try:
        print(command)
        info, check = command.split('.')
        print(info, '-->', " info:", check)
        return infoProcess(groupId, sender, check)
        # except:
        #     return [
        #         At(target=sender),
        #         Plain(text="Command error! Use the '@bot command' command to query the commands you can use!")
        #     ]

    #回复@bot(normal,zuanLow,zuanHigh,rainbow)
    elif "[At::target=%i]" % BotQQ in messageText:
        if sender == HostQQ:
            return [Plain(text="诶嘿嘿,老公@我是要找人家玩嘛~纱雾这就来找你玩哟~")]
        else:
            mode_now = getSetting(groupId, "speakMode")
            if not mode_now == "normal":
                # text="@我是要干什么呢?可以通过 @我+menu/command/info/mode 的方式查询信息哟~"
                if mode_now == "zuanHigh":
                    text = requests.get(zuanHighSrc).text
                    record("zuanHigh", "none", sender, groupId, True,
                           "function")
                elif mode_now == "zuanLow":
                    text = requests.get(zuanLowSrc).text
                    record("zuanLow", "none", sender, groupId, True,
                           "function")
                elif mode_now == "rainbow":
                    text = requests.get(rainbowSrc).text
                    record("rainbow", "none", sender, groupId, True,
                           "function")
                return [At(target=sender), Plain(text=text)]

    return "noneReply"
Exemple #22
0
async def event_fm(app: Mirai, friend: Friend, message: MessageChain):
    print(message.toString())
    if message.toString() == "/followed":
        await app.sendFriendMessage(friend, [
            Image.fromFileSystem("D:\\palette\\Sync\\Devices\\81519056_p0.jpg")
        ])
Exemple #23
0
def asobiPolyline(*attrs,**kwargs):
    player = getPlayer(**kwargs)
    n=1000
    m = {
        1:(0,-1), # 左
        2:(-1,0), # 上
        3:(0,1), # 右
        4:(1,0) # 下
    }
    if not os.path.exists('Polyline/'):
        os.mkdir('Polyline/')
    try:
        if attrs[0] == 'init':
            try:
                n=int(attrs[1])
                if n < 2 or n > 2000:
                    return [Plain(text='为了宁的游戏体验,地图只能要2~2000阶内的方阵')]
            except:
                pass
            raise NameError('PolylineRESET')
        grids = numpy.loadtxt(f'''Polyline/{player}mat.txt''')
        n = len(grids)
        with open(f'''Polyline/{player}ans.txt''','r') as fr:
            s = fr.readline().strip().split(' ')
            ctr = int(fr.readline().strip())
        op = numpy.array([int(s[0]),int(s[1])])
        ed = numpy.array([int(s[2]),int(s[3])])
    except: #进行初始化操作
        grids = numpy.zeros([n,n])
        op = (random.randint(0,n-1),random.randint(0,n-1))
        polylen = random.randint(1,(n-1)*n)
        print(polylen)

        p = numpy.array(op)
        op = numpy.array(op)
        rush = 0
        for i in range(polylen):
            if rush:
                rush-=1
            else:
                movement = random.randint(1,4)
                rush = random.randint(1,int(min(n,(polylen-i))**0.5))
                
            tmp = numpy.array(m[movement]) + p
            if i % 10000 == 0:
                print(rush)
                print(i)
                print(p)
                print(grids[p[0]][p[1]])
            if tmp[0] in range(n) and tmp[1] in range(n) and grids[tmp[0]][tmp[1]] == 0:
                valid = True
                grids[p[0]][p[1]] = movement
                p = tmp
            else:
                tm = copy.deepcopy(m)
                tm.pop(movement)
                valid = False
                while len(tm):
                    movement = random.choice(list(tm))
                    tmp = numpy.array(tm[movement]) + p
                    if tmp[0] in range(n) and tmp[1] in range(n) and grids[tmp[0]][tmp[1]] == 0:
                        grids[p[0]][p[1]] = movement
                        p = tmp
                        valid = True
                        break
                    tm.pop(movement)
                    #print(tm.pop(movement))
                #print('out')
                if valid == False:
                    print('getBreakSignal')
                    polylen = i
                    ed = p
                    break
        if valid:
            ed = p
        numpy.savetxt(f'''Polyline/{player}mat.txt''',grids,fmt='%d')
        with open(f'''Polyline/{player}ans.txt''','w') as fw:
            fw.write(f'{op[0]} {op[1]} {ed[0]} {ed[1]}\n0')
        ctr = 0
        return [Plain(text=f'折线初始化完毕,长度{polylen},flag状态{valid}')]
    if attrs[0] == '!':
        try:
            x,y,X,Y = (int(_)-1 for _ in attrs[1:])
            
            if (x==op[0] and y==op[1] and X==ed[0] and Y==ed[1]) or (x==ed[0] and y==ed[1] and X==op[0] and Y==op[1]):
                return [Plain(text=f'正确,目前查询次数{ctr}')]
            else:
                return [Plain(text='错啦!')]
        except Exception as e:
            return [Plain(text=f'输入格式错误,info:{e}')]
    elif attrs[0] == '?':
        try:
            x,y,X,Y = (int(_)-1 for _ in attrs[1:])
            if x>X:
                x,X=X,x
            if y>Y:
                y,Y=Y,y
            if X>=n or Y>=n or x<0 or y<0:
                return [Plain(text='查询越界')]
            ctr+=1
            with open(f'''Polyline/{player}ans.txt''','w') as fw:
                fw.write(f'{op[0]} {op[1]} {ed[0]} {ed[1]}\n')
                fw.write(str(ctr))
            penetrateCtr = 0
            for i in range(x,X+1): #统计列
                if y:
                    if grids[i][y-1] == 3:
                        penetrateCtr += 1
                if y != n:
                    if grids[i][y] == 1:
                        penetrateCtr += 1
                if Y+1:
                    if grids[i][Y] == 3:
                        penetrateCtr += 1
                if Y+1 != n:
                    if grids[i][Y+1] == 1:
                        penetrateCtr += 1
            for i in range(y,Y+1): #统计行
                if x:
                    if grids[x-1][i] == 4:
                        penetrateCtr += 1
                if x != n:
                    if grids[x][i] == 2:
                        penetrateCtr += 1
                if X+1:
                    if grids[X][i] == 4:
                        penetrateCtr += 1
                if X+1 != n:
                    if grids[X+1][i] == 2:
                        penetrateCtr += 1
            return [Plain(text=f'穿界次数:{penetrateCtr},查询次数:{ctr}')]
        except Exception as e:
            return [Plain(text=f'输入格式错误,info:{e}')]
    elif attrs[0] == 'render':
        col = 255
        try:
            col = int(attrs[1])
        except:
            pass
        for pi,i in enumerate(grids):
            for pj,j in enumerate(i):
                if j:
                    grids[pi][pj] = col
        renderedPng = PImage.fromarray(grids).convert('L')
        fn = f'''Polyline/{player}.png'''
        with open(fn,'wb') as fw:
            renderedPng.save(fw)
        asyncio.ensure_future(rmTmpFile(fn))
        return [Image.fromFileSystem(fn)]
    else:
        return [Plain(text='命令错误')]