Ejemplo n.º 1
0
async def rmup_handler(*args, bot: Bot, subject: Union[Member, Friend]):
    '''取消订阅UP主投稿

    用法: /rmup UP主uid'''
    if len(args) != 1:
        return MessageChain.create([Plain("缺少参数或参数过多")])
    up_id = args[0]
    res = getCards(up_id)
    if res == "error":
        msg = [Plain("未找到该UP主!")]
        logger.info("[RMUP]未找到该UP主")
    else:
        up_dict = readJSON(BILI_UP_JSON_PATH)
        if not isinstance(up_dict, dict):
            raise TypeError("Expected dict but found:", up_dict)
        if up_id in up_dict.keys():
            if isinstance(subject, Member):
                up_dict[up_id].remove(groupToStr(subject.group))
            elif isinstance(subject, Friend):
                up_dict[up_id].remove(subject.id)
            if len(up_dict[up_id]) == 0:
                del up_dict[up_id]
        updateJSON(BILI_UP_JSON_PATH, up_dict)
        msg = [Plain("已将 {} 移出监视列表\n".format(getNameByUid(up_id)))]
        logger.info("[RMUP]返回成功")
    return MessageChain.create(msg)
Ejemplo n.º 2
0
def process(content: str, fuzzy: int = 0) -> list:
    def handle_type(result: dict) -> List:
        if result['type'] == 'text':
            return [Plain(result['return'])]
        elif result['type'] == 'image':
            return [
                Image.fromLocalFile(result['return'],
                                    method=UploadMethods.Temp)
            ]
        elif result['type'] == 'error':
            return [Face(faceId=168), Plain(result['return'])]
        else:
            return []

    # 命令运行
    if content.startswith('/'):
        return handle_type(command.from_str(content[1:]))
    # 关键词回复 + 模糊查询回复
    returns = []
    for result in database.keyword_match(content):
        returns += handle_type(result) + [Plain('\n\n')]
    if fuzzy:
        for result in database.keyword_match(content, fuzzy=fuzzy):
            returns += handle_type(result) + [Plain('\n\n')]
    return returns[:-1]
Ejemplo n.º 3
0
 async def update_keyword(message_serialization: str) -> MessageItem:
     _, function, keyword = message_serialization.split("#")
     if re.match(r"\[mirai:image:{.*}\..*]", keyword):
         keyword = re.findall(r"\[mirai:image:{(.*?)}\..*]", keyword,
                              re.S)[0]
     if function not in ImageSenderHandler.functions:
         return MessageItem(MessageChain.create([Plain(text="非法方法名!")]),
                            QuoteSource(GroupStrategy()))
     try:
         await orm.insert_or_ignore(TriggerKeyword, [
             TriggerKeyword.keyword == keyword, TriggerKeyword.function
             == function
         ], {
             "keyword": keyword,
             "function": function
         })
         return MessageItem(
             MessageChain.create(
                 [Plain(text=f"关键词添加成功!\n{keyword} -> {function}")]),
             QuoteSource(GroupStrategy()))
     except Exception:
         logger.error(traceback.format_exc())
         return MessageItem(
             MessageChain.create([Plain(text="发生错误!请查看日志!")]),
             QuoteSource(GroupStrategy()))
Ejemplo n.º 4
0
async def offDefine(app, group, msg):
    text = msg.split(' ')
    if (len(text) != 3):
        return
    Localpath = './data/pcrcharacter.json'
    data = {}
    fr = open(Localpath, encoding='utf-8')
    data = json.load(fr)
    fr.close()
    wanna = short2name(data, text[1])
    for i in data["data"]:
        if wanna == i["name"]:
            if text[2] in i["short"]:
                i["short"].remove(text[2])
                await app.sendGroupMessage(
                    group,
                    MessageChain.create(
                        [Plain("删除缩写:" + wanna + " 缩写为 " + text[2])]))
            else:
                await app.sendGroupMessage(
                    group, MessageChain.create([Plain(wanna + "没有这个缩写哦!")]))
            break
    else:
        await app.sendGroupMessage(group,
                                   MessageChain.create([Plain("卡池里没有这个角色哦!")]))
        return
    with open(Localpath, "w") as fw:
        jsObj = json.dumps(data)
        fw.write(jsObj)
        fw.close()
Ejemplo n.º 5
0
async def main(kwargs: dict):
    command = re.sub('^user ', '', kwargs['trigger_msg'])
    commandsplit = command.split(' ')
    mode = None
    metaurl = None
    username = None
    if Group in kwargs:
        id = kwargs[Group].id
    if Friend in kwargs:
        id = kwargs[Friend].id

    if '-r' in commandsplit:
        mode = '-r'
        commandsplit.remove('-r')
        command = ' '.join(commandsplit)
    if '-p' in commandsplit:
        mode = '-p'
        commandsplit.remove('-p')
        command = ' '.join(commandsplit)
    match_gpsite = re.match(r'~(.*?) (.*)', command)
    if match_gpsite:
        metaurl = f'https://{match_gpsite.group(1)}.gamepedia.com/api.php'
        username = match_gpsite.group(2)
    else:
        match_interwiki = re.match(r'(.*?):(.*)', command)
        if match_interwiki:
            if Group in kwargs:
                table = 'custom_interwiki_group'
            if Friend in kwargs:
                table = 'custon_interwiki_self'
            get_iw = get_custom_interwiki(table, id, match_interwiki.group(1))
            if get_iw:
                metaurl = get_iw
                username = match_interwiki.group(2)
        else:
            if Group in kwargs:
                table = 'start_wiki_link_group'
            if Friend in kwargs:
                table = 'start_wiki_link_self'
            get_url = get_start_wiki(table, id)
            if get_url:
                metaurl = get_url
                username = command
            else:
                await sendMessage(kwargs, '未设置起始Interwiki。')
    result = await GetUser(metaurl, username, mode)
    if result:
        matchimg = re.match('.*\[\[uimgc:(.*)]]', result)
        if matchimg:
            if Group in kwargs:
                mth = UploadMethods.Group
            if Friend in kwargs:
                mth = UploadMethods.Friend
            imgchain = MessageChain.create([Image.fromLocalFile(matchimg.group(1), method=mth)])
            result = re.sub('\[\[uimgc:.*]]', '', result)
            msgchain = MessageChain.create([Plain(result)])
            msgchain = msgchain.plusWith(imgchain)
        else:
            msgchain = MessageChain.create([Plain(result)])
        await sendMessage(kwargs, msgchain)
Ejemplo n.º 6
0
async def friend_message_listener(message: MessageChain,
                                  app: GraiaMiraiApplication, friend: Friend):
    if message.asDisplay().startswith("/天气" or "/weather"):
        msg = message.asDisplay()
        msg = re.split(r' +', msg)
        if (msg.__len__() != 2):
            await app.sendFriendMessage(
                friend,
                MessageChain.create([
                    Plain("不要捣乱哦,要遵守输入格式 : '/天气 城市', 请您重新输入~"),
                ]))
        else:
            city = msg[1]
            city_code = city_code_dict[city]
            wea_list = await getWeather.get_weather(city, city_code)
            wea_dict = wea_list[1]
            string = ""
            for date in wea_dict:
                string += date + "  ".join(wea_dict[date]) + "\n"
            await app.sendFriendMessage(
                friend,
                MessageChain.create([
                    Plain("[" + city + "]  近七日天气情况如下:  \n"),
                    Plain(string),
                    Plain("From: " + wea_list[0])
                ]))
Ejemplo n.º 7
0
def setu(group,id):
    print('开始请求色图')
    id = str(id)
    gr = str(group)
    hsolv = id_data[id]
    outmsg = [(Plain("你没有剩余色图或其他错误"))]
    if group in cfg['sg'] or fr_data[id] >= 1:
        x = randint(0,setulen)
        filepach = str(filepachs[x])
        filename = filepach.replace(setu_ + '/','')
        print("选中色图" + filepach)
        hsolvmax = cfg['hsolvmax']
        if group in cfg['sg'] and hsolv <= hsolvmax: 
            lstgr_data[id] = filename
            id_data[id] = id_data[id] + 1
            stlist_data[id] = stlist_data[id] + 1
            outmsg = [Image.fromLocalFile(filepach)]
        elif fr_data[id] >= 1:
            df = 'https://pixiv.lxns.org/i/' + filename
            for i in folders:
                df = df.replace('/' + str(i),'')
            df = df[:-7]
            if group == 0: lstfr_data[id] = filename
            else:          
                lstgr_data[gr] = filename
                print(lstgr_data[gr])
            fr_data[id] = fr_data[id] - 1
            stlist_data[id] = stlist_data[id] + 1
            savecfg()
            outmsg = [(Plain(df + "剩余色图:" + str(fr_data[id])))]
    return outmsg
 async def handle(self, app: GraiaMiraiApplication, message: MessageChain,
                  group: Group, member: Member):
     message_text = message.asDisplay()
     if re.match(r"super .*:[\n\r]+[\s\S]*", message_text):
         await update_user_call_count_plus1(group, member,
                                            UserCalledCount.functions,
                                            "functions")
         if not await get_setting(group.id, "compile"):
             return MessageItem(
                 MessageChain.create([Plain(text="网络编译器功能关闭了呐~去联系管理员开启吧~")
                                      ]), Normal(GroupStrategy()))
         language = re.findall(r"super (.*?):", message_text, re.S)[0]
         code = message_text[8 + len(language):]
         result = await self.network_compiler(group, member, language, code)
         if isinstance(result, str):
             return MessageItem(MessageChain.create([Plain(text=result)]),
                                QuoteSource(GroupStrategy()))
         else:
             return MessageItem(
                 MessageChain.create([
                     Plain(text=result["output"]
                           if result["output"] else result["errors"])
                 ]), QuoteSource(GroupStrategy()))
     else:
         return await super().handle(app, message, group, member)
Ejemplo n.º 9
0
 async def atOrQuoteHandler(self, app, message: GroupMessage):
     logger.debug('TalkToMe at handler act')
     cmd: str = message.messageChain.asDisplay().split(' ')[0]
     if cmd == '骂他':
         if self.Economy:
             if not await self.Economy.Economy.pay(
                     message.sender.id, self.Economy.capitalist, 500):
                 info: dict = await self.Economy.Economy.money(
                     message.sender.id)
                 plain: Plain = Plain(
                     f"你的{self.Economy.unit}不足,你还剩{info['balance']}只{self.Economy.unit},单价500只{self.Economy.unit}"
                 )
                 await app.sendGroupMessage(message.sender.group,
                                            MeCh.create([plain]))
                 return
         else:
             if message.sender.permission == MemberPerm.Member:
                 await app.sendGroupMessage(message.sender.group,
                                            MeCh.create([Plain('你骂你爹呢')]))
                 return
         if ats := message.messageChain.get(At):
             for a in range(0, random.randint(2, 10)):
                 msg = ats.copy()
                 love = await requestText(self.nm_api)
                 msg.append(Plain(love[0]))
                 await app.sendGroupMessage(message.sender.group,
                                            MeCh.create(msg))
                 await asyncio.sleep(2)
                 msg.clear()
Ejemplo n.º 10
0
async def hero_handler(*args, bot: Bot, subject: Union[Member, Friend]):
    '''展示玩家英雄平均数据

    用法: /hero (id) 英雄名'''
    if len(args) != 2:
        return MessageChain.create(
            [Plain(f"缺少参数或参数过多:{args},用法: /hero (id) 英雄名")])
    query_id = args[0]
    if isinstance(subject, Member):
        dota_id = bot.db.get(subject.group, "dota_id").get(query_id)
    else:
        dota_id = bot.db.get(subject, "dota_id").get(query_id)
    if not dota_id:
        logger.info(f"[HERO]未添加该用户{query_id}")
        return MessageChain.create([Plain(f"未添加该用户{query_id}!")])
    else:
        query_id = dota_id
        res = getDotaHero(query_id, args[1])
        if isinstance(res, tuple):
            res = res[1]
            logger.info("[HERO]返回成功")
        elif res == 0:
            res = f"参数有误:{args[1]}"
            logger.info(f"[HERO]参数有误:{args[1]}")
        else:
            logger.info("[HERO]返回成功")
        return MessageChain.create([Plain(res)])
Ejemplo n.º 11
0
async def stat_handler(*args, bot: Bot, subject: Union[Member, Friend]):
    '''展示最近指定场数(默认20场)游戏平均数据

    用法: /stat (id) (num)'''
    if len(args) < 1 or len(args) > 2:
        return MessageChain.create(
            [Plain(f"缺少参数或参数过多:{args},用法: /stat (id) (num)")])
    query_id, *num = args
    if isinstance(subject, Member):
        dota_id = bot.db.get(subject.group, "dota_id").get(query_id)
    else:
        dota_id = bot.db.get(subject, "dota_id").get(query_id)
    if not dota_id:
        logger.info(f"[STAT]未添加该用户{query_id}")
        return MessageChain.create([Plain(f"未添加该用户{query_id}!")])
    else:
        if num and type(num[0]) == type(query_id) and query_id == num[0]:
            num = [20]
        query_id = dota_id
        args = 20
        if len(num) == 1:
            try:
                args = int(num[0])
                if args > 50 or args <= 0:
                    args = 20
            except ValueError:
                args = 20
        res = getStat(query_id, args)
        logger.info("[STAT]返回成功")
        return MessageChain.create([Plain(res)])
Ejemplo n.º 12
0
 async def handle(self, app: GraiaMiraiApplication, message: MessageChain,
                  group: Group, member: Member):
     message_serialization = message.asSerializationString().replace(
         "[mirai:source:" +
         re.findall(r'\[mirai:source:(.*?)]',
                    message.asSerializationString(), re.S)[0] + "]", "")
     if re.match(r"添加回复关键词#[\s\S]*#[\s\S]*", message_serialization):
         if await user_permission_require(group, member, 2):
             set_result(
                 message, await self.update_keyword(message,
                                                    message_serialization))
         else:
             return MessageItem(MessageChain.create([Plain(text="权限不足,爬")]),
                                QuoteSource(GroupStrategy()))
     elif re.match(r"删除回复关键词#[\s\S]*", message_serialization):
         if await user_permission_require(group, member, 2):
             set_result(
                 message, await
                 self.delete_keyword(app, message_serialization, group,
                                     member))
         else:
             set_result(
                 message,
                 MessageItem(MessageChain.create([Plain(text="权限不足,爬")]),
                             QuoteSource(GroupStrategy())))
     elif result := await self.keyword_detect(message_serialization):
         set_result(message, result)
Ejemplo n.º 13
0
async def GroupMessageHandler(group: Group, member: Member, msgchain: MessageChain):
    Record.addMessage(ChatRecord(messagechain=msgchain, group=group, member=member))
    if msgchain.has(Plain):
        text = msgchain.get(Plain)[0].text
        if text == '#词云生成':
            await app.sendGroupMessage(group, MessageChain.create(
                [At(member.id),
                 Plain('生成中...')]
            ))
            await app.sendGroupMessage(group, MessageChain.create(
                [At(member.id),
                 Image.fromLocalFile(wordCloudGenerator(Record.getAGroupMessageList(group.id)))]
            ))
        elif text == '#今日消息图表':
            await app.sendGroupMessage(group, MessageChain.create(
                [At(member.id),
                 Plain('生成中...')]
            ))
            await app.sendGroupMessage(group, MessageChain.create(
                [At(member.id),
                 Image.fromLocalFile(summaryGraphGenerator("today", Record.getAGroupMessageList(group.id)))]
            ))
        elif text == '#总消息图表':
            await app.sendGroupMessage(group, MessageChain.create(
                [At(member.id),
                 Plain('生成中...')]
            ))
            await app.sendGroupMessage(group, MessageChain.create(
                [At(member.id),
                 Image.fromLocalFile(summaryGraphGenerator("total", Record.getAGroupMessageList(group.id)))]
            ))
Ejemplo n.º 14
0
 async def waiter(event: GroupMessage, waiter_group: Group, waiter_member: Member, waiter_message: MessageChain):
     if waiter_group.id == group.id and waiter_member.id == member.id:
         if is_int(waiter_message.asDisplay()):
             id = int(waiter_message.asDisplay()) - 1
             if id >= len(lit) or id < 0:
                 await app.sendGroupMessage(group, MessageChain.create([Plain('查询被取消了切噜噜——')]))
                 return event
             text = lit[id].split(', ')
             if len(text) == 2:
                 text.append('')
             if msg.startswith("天气") or msg.startswith("今日天气") or msg.startswith("1日天气"):
                 await report(app, group, text)
             elif msg.startswith("昨日天气"):
                 await reporttomorrow(app, group, text, 0)
             elif msg.startswith("明日天气"):
                 await reporttomorrow(app, group, text, 2)
             elif msg.startswith("后日天气"):
                 await reporttomorrow(app, group, text, 3)
             elif is_int(msg[0]):
                 day = int(msg[0])
                 if day < 0 or day > 7:
                     return
                 await reporttomorrow(app, group, text, day)
         else:
             await app.sendGroupMessage(group, MessageChain.create([Plain('查询被取消了切噜噜——')]))
         return event
Ejemplo n.º 15
0
async def get_weibo_hot(group_id: int) -> list:
    weibo_hot_url = "http://api.weibo.cn/2/guest/search/hot/word"
    async with aiohttp.ClientSession() as session:
        async with session.get(url=weibo_hot_url) as resp:
            data = await resp.json()
    data = data["data"]
    text_list = [f"随机数:{random.randint(0,10000)}", "\n微博实时热榜:"]
    index = 0
    for i in data:
        index += 1
        text_list.append("\n%d.%s" % (index, i["word"]))
    text = "".join(text_list).replace("#", "")
    long_text_setting = await get_setting(group_id, "longTextType")
    if long_text_setting == "img":
        img = text2piiic(string=text,
                         poster="",
                         length=max(len(x) for x in text.split("\n")))
        img.save("./statics/temp/tempWeibo.png")
        return [
            "None",
            MessageChain.create(
                [Image.fromLocalFile("./statics/temp/tempWeibo.png")])
        ]
    elif long_text_setting == "text":
        return ["None", MessageChain.create([Plain(text=text)])]
    else:
        return [
            "None",
            MessageChain.create([Plain(text="数据库 longTextType 项出错!请检查!")])
        ]
Ejemplo n.º 16
0
 async def shutTheFuckUp(self, app: Slave, message: GroupMessage):
     rands = [random.randint(0, 999) for _ in range(0, 4)]
     if rands[0] < 12:
         plain: Plain = message.messageChain.get(Plain)
         if plain:
             await app.sendGroupMessage(message.sender.group.id,
                                        MeCh.create(plain))
     if rands[1] < 12:
         await app.sendGroupMessage(message.sender.group.id,
                                    MeCh.create([Plain('确实')]))
     if rands[2] < 12:
         if random.randint(1, 3) < 2:
             msg = MeCh.create([At(message.sender.id), Plain('我爱你')])
             await app.sendGroupMessage(message.sender.group.id, msg)
         else:
             if message.messageChain.has(Plain):
                 plain: Plain = message.messageChain.get(Plain)[0]
                 sent = await self.trySentiment(plain.text)
                 if sent[0] == 0:
                     url = self.nm_api if sent[1] > 0.7 else self.nm_api
                 else:
                     return
                 love = await requestText(url)
                 msg = [At(message.sender.id), Plain(love[0])]
                 await app.sendGroupMessage(message.sender.group,
                                            MeCh.create(msg))
     if rands[3] < 12:
         await self.sendPhilosophy(app, message)
Ejemplo n.º 17
0
 async def wrapper(*args, **kwargs):
     member_id = -1
     group_id = -1
     for i in args:
         if isinstance(i, Member):
             member_id = i.id
         if isinstance(i, Group):
             group_id = i.id
     if member_id == -1 or group_id == -1 or not await get_setting(group_id, Setting.frequency_limit):
         if asyncio.iscoroutinefunction(func):
             return await func(*args, **kwargs)
         return func(*args, **kwargs)
     frequency_limit_instance = GlobalFrequencyLimitDict()
     await frequency_limit_instance.add_record(group_id, member_id, weight)
     if frequency_limit_instance.blacklist_judge(group_id, member_id):
         if not frequency_limit_instance.announce_judge(group_id, member_id):
             await frequency_limit_instance.blacklist_announced(group_id, member_id)
             return MessageItem(MessageChain.create([Plain(text="检测到大量请求,加入黑名单一小时!")]), QuoteSource(GroupStrategy()))
         else:
             return MessageItem(MessageChain.create([Plain("")]), DoNoting(GroupStrategy()))
     if frequency_limit_instance.get(group_id, member_id, func.__name__) + weight >= 10:
         return MessageItem(MessageChain.create([Plain(text="超过频率调用限制!")]), QuoteSource(GroupStrategy()))
     else:
         await frequency_limit_instance.update(group_id, weight)
         if asyncio.iscoroutinefunction(func):
             return await func(*args, **kwargs)
         return func(*args, **kwargs)
Ejemplo n.º 18
0
async def Monitor(nickname: str, app: GraiaMiraiApplication, QQ_id: int,
                  Group_id: int, blog_id_set: Set) -> List:
    '''
    每隔一段时间监控一次, 如有新微博,发送给指定群组, 并@指定人
    '''
    try:
        tempList = await raw_monitor(nickname, blog_id_set)
    except:
        tempList = [False, []]
    if tempList[0] is True:
        new_blog_list = tempList[1]
        msg_to_send = MessageChain.create([At(QQ_id)])
        msg_st = "\n"
        msg_st += f"您关注的[ {nickname} ]有新动态哦, 请注意查收~~\n"
        msg_to_send.plus(MessageChain.create([Plain(msg_st)]))
        for blog in new_blog_list:
            try:
                msg_end = ""
                msg_end += "[Content] : \n{}\n".format(blog["blog_text"])
                msg_end += "[Time] : {}\n".format(blog["blog_time"])
                msg_end += "[Source] : {}\n".format(blog["source"])
                msg_end += "[Likes] : {}\n".format(blog["attitudes_count"])
                msg_end += "[Comments] : {}\n".format(blog["comments_count"])
                msg_end += "[Reposts] : {}\n".format(blog["reposts_count"])
                if blog["blog_imgs"].__len__() > 0:
                    msg_to_send.plus(
                        MessageChain.create([
                            Image.fromNetworkAddress(img)
                            for img in blog["blog_imgs"]
                        ]))
                msg_to_send.plus(MessageChain.create([Plain(msg_end)]))
            except:
                print("[发送错误, pos = 1]")
        await app.sendGroupMessage(Group_id, msg_to_send)
Ejemplo n.º 19
0
async def voice(app: GraiaMiraiApplication, group: Group,
                message: MessageChain, member: Member):
    message_raw = message.asDisplay()
    if message_raw[:2] == "语音" and len(message_raw) > 4:
        sp_m = message_raw.split(" ")

        if not sp_m[1] in data.keys():
            await app.sendGroupMessage(
                group, MessageChain.create([At(member.id),
                                            Plain(" 发音人选择错误!")]))
            return

        if len(message.asDisplay()) > 200:
            await app.sendGroupMessage(
                group, MessageChain.create([At(member.id),
                                            Plain(" 字数过多!")]))
            return

        if len(sp_m) < 3:
            await app.sendGroupMessage(
                group,
                MessageChain.create(
                    [At(member.id),
                     Plain(" 请按照格式发送!格式如下:\n语音 发音人 文本")]),
            )
            return
        await app.sendGroupMessage(group, MessageChain.create([Plain("请稍后")]))
        text = "".join(sp_m[2:])
        # text为文本,sp_m[1]为发音人的名字
        informant = data[sp_m[1]]
        voice_raw = await azure.get_speech(text, informant)
        # 转码
        silk: bytes = await silkcoder.encode(voice_raw)
        voice_m = await app.uploadVoice(silk)
        await app.sendGroupMessage(group, MessageChain.create([voice_m]))
Ejemplo n.º 20
0
async def pornhub_style_logo_generator(app: GraiaMiraiApplication,
                                       message: MessageChain, group: Group):
    try:
        _, left_text, right_text = message.asDisplay().split(" ")
        try:
            try:
                genImage(word_a=left_text,
                         word_b=right_text).save("./modules/5000zhao/test.png")
            except TypeError:
                await app.sendGroupMessage(
                    group,
                    MessageChain.create([Plain(text="不支持的内容!不要给我一些稀奇古怪的东西!")]))
                return None
            await app.sendGroupMessage(
                group,
                MessageChain.create(
                    [Image.fromLocalFile("./modules/5000zhao/test.png")]))
        except AccountMuted:
            pass
    except ValueError:
        try:
            await app.sendGroupMessage(
                group,
                MessageChain.create(
                    [Plain(text="参数非法!使用格式:5000兆 text1 text2")]))
        except AccountMuted:
            pass
Ejemplo n.º 21
0
async def dayReportTotal(app, group, flag=False):
    tt = datetime.now()
    td = timedelta(hours=5)
    t = (tt - td).strftime("%Y-%m-%d")
    url = 'https://www.bigfun.cn/api/feweb?target=gzlj-clan-day-report%2Fa&size=30&date=' + t
    headers = {"cookie": cookie, "x_csrf_token": token}
    r = requests.get(url, headers=headers)
    if (r.json()["code"] == 0):
        num = 0
        membernum = 0
        s = '今日未出满3刀的人有:'
        for i in r.json()["data"]:
            num += i["number"]
            if i["number"] != 3:
                membernum += 1
                s += '\n' + i["name"]
        if num == 90:
            s = '今天的刀全部出完辣!'
        else:
            if flag == True:
                s = '今日未出满3刀人数:' + str(membernum) + ' / ' + str(len(r.json()["data"]))\
                    + '\n今日出刀总数:' + str(num) + ' / ' + str(3 * len(r.json()["data"]))\
                    + '\n' + s
            else:
                s = '今日未出满3刀人数:' + str(membernum) + ' / ' + str(len(r.json()["data"]))\
                    + '\n今日出刀总数:' + str(num) + ' / ' + \
                    str(3 * len(r.json()["data"]))
        await app.sendGroupMessage(group, MessageChain.create([Plain(s)]))
    else:
        await app.sendGroupMessage(
            group, MessageChain.create([Plain(r.json()["message"])]))
    pass
Ejemplo n.º 22
0
async def Admin_Group_Test(message: MessageChain, app: GraiaMiraiApplication,
                           group: Group, member: Member):
    if group.id in TestGroup:
        if message.asDisplay().startswith("/test_need_confirm"):
            await app.sendGroupMessage(
                group,
                MessageChain.create(
                    [At(member.id), Plain("发送 /confirm 以继续运行")]))

            @Waiter.create_using_function([GroupMessage])
            async def waiter(event: GroupMessage, waiter_group: Group,
                             waiter_member: Member,
                             waiter_message: MessageChain):
                if all([
                        waiter_group.id == group.id,
                        waiter_member.id == member.id,
                        waiter_message.asDisplay().startswith("/confirm")
                ]):
                    await app.sendGroupMessage(
                        group, MessageChain.create([Plain("开始执行.")]))
                    return event

            # await asyncio.wait_for(waiter, 60)
            try:
                await asyncio.wait_for(inc.wait(waiter), timeout=10)
            except asyncio.TimeoutError:
                await app.sendGroupMessage(
                    group, MessageChain.create([Plain("命令超时")]))
            await app.sendGroupMessage(group,
                                       MessageChain.create([Plain("执行完毕.")]))
Ejemplo n.º 23
0
    async def waiter(event: GroupMessage, waiter_group: Group,
                     waiter_member: Member, waiter_message: MessageChain):
        if waiter_group.id == group.id and waiter_member.id == member.id:
            if is_int(waiter_message.asDisplay()):
                location = int(waiter_message.asDisplay()) - 1
                print(location)
                if location >= data_json['result'][
                        'songCount'] or location < 0 or location >= 10:
                    await app.sendGroupMessage(
                        group,
                        MessageChain.create([Plain('没有该歌曲'),
                                             Face(faceId=107)]))
                    return event
                msg = MessageChain.create([
                    Plain("https://y.music.163.com/m/song/" +
                          str(data_json['result']['songs'][location]['id']) +
                          "/?userid=335141010&app_version=8.1.80")
                ])
                print(msg)
                await app.sendGroupMessage(group, msg)

            else:
                await app.sendGroupMessage(
                    group,
                    MessageChain.create([Plain('没有该歌曲'),
                                         Face(faceId=107)]))
            return event
Ejemplo n.º 24
0
async def get_rank(group_id: int, memberList: list) -> list:
    sql = "select * from dragon where groupId=%d order by count desc" % group_id
    lsp_rank = await execute_sql(sql)
    print(lsp_rank)
    msg = []
    text = "啊嘞嘞,从启动到现在都没有人要过涩图的嘛!呜呜呜~\n人家。。。人家好寂寞的,快来找我玩嘛~"
    if lsp_rank == ():
        return ["None", MessageChain.create([Plain(text=text)])]
    else:
        lsp_champion_count = lsp_rank[0][3]
        if lsp_champion_count == 0:
            return ["None", MessageChain.create([Plain(text=text)])]
        text = "目前lsp排行榜:"
        msg.append(Plain(text=text))
        text = ""
        index = 0
        add_bool = False
        add = 0
        last = -1
        for i in lsp_rank:
            if i[3] == 0:
                break
            if i[3] == last:
                add += 1
                add_bool = True
            else:
                if add_bool:
                    index += add
                index += 1
                add = 0
                add_bool = False
                last = i[3]
            text += "\n%i.%-20s %3d" % (index, qq2name(memberList, i[2]), i[3])
        msg.append(Plain(text=text))
        return msg
Ejemplo n.º 25
0
async def keyword_reply(
    app: GraiaMiraiApplication,
    message: MessageChain,
    group: Group
):
    message_serialization = message.asSerializationString()
    message_serialization = message_serialization.replace(
        "[mirai:source:" + re.findall(r'\[mirai:source:(.*?)]', message_serialization, re.S)[0] + "]",
        ""
    )
    if re.match(r"\[mirai:image:{.*}\..*]", message_serialization):
        message_serialization = re.findall(r"\[mirai:image:{(.*?)}\..*]", message_serialization, re.S)[0]
    sql = f"SELECT * FROM keywordReply WHERE keyword='{message_serialization}'"
    if result := await execute_sql(sql):
        replies = []
        for i in range(len(result)):
            content_type = result[i][1]
            content = result[i][2]
            replies.append([content_type, content])
        # print(replies)
        final_reply = random.choice(replies)

        content_type = final_reply[0]
        content = final_reply[1]
        try:
            if content_type == "img":
                await app.sendGroupMessage(group, MessageChain.create([Image.fromUnsafeBytes(base64.b64decode(content))]))
            elif content_type == "text":
                await app.sendGroupMessage(group, MessageChain.create([Plain(text=content)]))
            else:
                await app.sendGroupMessage(group, MessageChain.create([Plain(text=f"unknown content_type:{content_type}")]))
        except AccountMuted:
            pass
async def get_abbreviation_explain(abbreviation: str) -> MessageChain:
    url = "https://lab.magiconch.com/api/nbnhhsh/guess"
    headers = {"referer": "https://lab.magiconch.com/nbnhhsh/"}
    data = {"text": abbreviation}

    async with aiohttp.ClientSession() as session:
        async with session.post(url=url, headers=headers, data=data) as resp:
            res = await resp.json()
    # print(res)
    result = "可能的结果:\n\n"
    has_result = False
    for i in res:
        if "trans" in i:
            if i["trans"]:
                has_result = True
                result += f"{i['name']} => {','.join(i['trans'])}\n\n"
            else:
                result += f"{i['name']} => 没找到结果!\n\n"
        else:
            if i["inputting"]:
                has_result = True
                result += f"{i['name']} => {','.join(i['inputting'])}\n\n"
            else:
                result += f"{i['name']} => 没找到结果!\n\n"

    if has_result:
        return MessageChain.create([Plain(text=result)])
    else:
        return MessageChain.create([Plain(text="没有找到结果哦~")])
Ejemplo n.º 27
0
async def portune(app, group: int, member: int, var, model=''):
    '''
    uid = ev.user_id
    if not lmt.check(uid):
        await bot.finish(ev, f'你今天已经抽过签了,欢迎明天再来~', at_sender=True)
    lmt.increase(uid)
    model = 'DEFAULT'

    pic = drawing_pic(model)
    await bot.send(ev, pic, at_sender=True)
    '''

    t = datetime.datetime.now() - datetime.timedelta(hours=4)
    if var[0].date() != t.date():
        var = [t, '', {}]

    p = Plain('')
    if var[1] and var[2]:
        p = Plain('\n你今天已经抽过签了,这是你今天抽到的签,欢迎明天再来~\n')
    img = drawing_pic(var, model)
    img.save("./source/bak1.png")
    m = MessageChain.create(
        [At(member), p, Img.fromLocalFile("./source/bak1.png")])
    m.__root__[0].display = ''
    await app.sendGroupMessage(group, m)
Ejemplo n.º 28
0
    async def get_review(group: Group, member: Member, review_type: str,
                         target: str) -> MessageItem:
        group_id = group.id
        member_id = member.id
        time = datetime.now()
        time_right = time.strftime("%Y-%m-%d %H:%M:%S")
        if review_type == "year":
            timep = time - relativedelta(years=1)
            time_left = (time -
                         relativedelta(years=1)).strftime("%Y-%m-%d %H:%M:%S")
            tag = "年内"
        elif review_type == "month":
            timep = time - relativedelta(months=1)
            time_left = (time -
                         relativedelta(years=1)).strftime("%Y-%m-%d %H:%M:%S")
            tag = "月内"
        else:
            return MessageItem(
                MessageChain.create(
                    [Plain(text="Error: review_type invalid!")]),
                QuoteSource(GroupStrategy()))

        sql = select(ChatRecord).where(
            ChatRecord.group_id == group_id,
            ChatRecord.member_id == member_id if target == "member" else True,
            ChatRecord.time < time, ChatRecord.time > timep)

        if not (res := list(orm.fetchall(sql))):
            return MessageItem(MessageChain.create([Plain(text="没有你的发言记录呐~")]),
                               QuoteSource(GroupStrategy()))
Ejemplo n.º 29
0
async def hot_weibo(some,rmsg,*member):
    m = rmsg.split(' ')
    if len(m) == 2:
        serial = int(m[1]) - 1
        reso_data = weibo.reso()[1]
        if serial >= len(reso_data):
            send_message = MessageChain.create([Plain("查找数值不正确,数值应为1~{}".format(len(reso_data)))])
        else:
            send_message = MessageChain.create([
                Plain("序号:{}\n"
                      "标题:{}\n"
                      "链接:{}"
                      .format(
                    reso_data[serial]['id'] + 1,
                    reso_data[serial]['name'],
                    reso_data[serial]['url']))])
    elif len(m) == 1:
        send_message = MessageChain.create([Plain('\n{}\n输入 微博热搜 [序号] 来获取访问链接'.format(weibo.reso()[0]))])
    else:
        send_message = MessageChain.create([Plain("你输入的参数有误")])
    if member[0] == ():
        await app.sendFriendMessage(some, send_message)
    else:
        at = MessageChain.create([At(member[0][0].id)])
        await app.sendGroupMessage(some,MessageChain.join(at,send_message))
Ejemplo n.º 30
0
async def rmlive_handler(*args, bot: Bot, subject: Union[Member, Friend]):
    '''取消订阅直播间

    用法: /rmlive 房间号'''
    if len(args) != 1:
        return MessageChain.create([Plain("缺少参数或参数过多")])
    room_id = args[0]
    res = getLiveInfo(room_id)
    if isinstance(res, str):
        msg = [Plain("未找到该直播!")]
        logger.info("[RMLIVE]未找到该直播")
    else:
        monitor_dict = readJSON(BILI_LIVE_JSON_PATH)
        if not isinstance(monitor_dict, dict):
            raise TypeError("Expected dict but found:", monitor_dict)
        if room_id in monitor_dict.keys():
            if isinstance(subject, Member):
                monitor_dict[room_id].remove(groupToStr(subject.group))
            elif isinstance(subject, Friend):
                monitor_dict[room_id].remove(subject.id)
            if len(monitor_dict[room_id]) == 0:
                del monitor_dict[room_id]
        updateJSON(BILI_LIVE_JSON_PATH, monitor_dict)
        msg = [Plain("已将 {} 移出监视列表\n".format(res['name']))]
        logger.info("[RMLIVE]返回成功")
    return MessageChain.create(msg)