Ejemplo n.º 1
0
def mati(message, **kw_args):
    context = kw_args["context"] if 'context' in kw_args else {}

    context = _mati_par(message, context)

    name = context['name'] if 'name' in context else None
    if not name:
        # url="https://akaisorani.github.io/QQ-bot-Arknights-Helper/akaisora/plugins/materials"
        # url="https://img.nga.178.com/attachments/mon_202005/16/-klbw3Q5-43dbXeZ3uT3cS2io-1bf.png"
        url = "https://z3.ax1x.com/2021/03/24/6HgIP0.jpg"
        # url="https://arkonegraph.herokuapp.com/"
        app_link = "https://aog.wiki/"

        ret_msg = [
            Image.fromBytes(get_bytes_image_from_url(url)),
            Plain(text=app_link)
        ]
    else:
        return
        # report = get_material_recom(name=name)
        # if report is None: return
        # ret_msg=[
        #     Plain(text=report)
        # ]

    return ret_msg
Ejemplo n.º 2
0
async def setuExecutor(app: Mirai, message: GroupMessage, number: int,
                       keyword: str):
    """根据关键词获取data_array,并调用sendSetu"""
    global LAST_QUOTA
    member_id: int = message.sender.id
    group: Group = message.sender.group
    if keyword == '':
        if len(SetuDatabase.load_from_file().__root__
               ) >= 300 and LAST_QUOTA < 200:
            resp = SetuResp(code=-430, msg='空关键词')
        else:
            resp = await SetuResp.get()
            LAST_QUOTA = resp.quota
    elif cd.check(member_id):
        resp = await SetuResp.get(keyword)
        LAST_QUOTA = resp.quota
    else:
        # resp = SetuResp(code=-3, msg='你的请求太快了,休息一下吧')
        await app.sendGroupMessage(group, [
            At(member_id),
            Plain('太快了,受不了!\n'),
            Image.fromBytes(LoadFrequencyFile())
        ])
        return

    if resp.code == 0:
        cd.update(member_id)
        await sendSetu(app, message, resp.data, number)
    elif resp.code in [429, -430]:
        db = SetuDatabase.load_from_file()
        await sendSetu(app, message, db.__root__, number)
    else:
        source: Source = message.messageChain.getSource()
        await app.sendGroupMessage(group, resp.msg, source)
Ejemplo n.º 3
0
async def join(app: Mirai, group: Group, member: Member, cp: CommandParser):
    pa = cp.parse_with_valid(["Int"])
    if isinstance(pa, str):
        return await app.sendGroupMessage(group, [At(member.id), Plain(pa)])
    elif not pa:
        return await app.sendGroupMessage(
            group, [At(member.id), Plain("参数不能为空")])
    if pa[0][1] not in bind:
        return await app.sendGroupMessage(
            group, [At(member.id), Plain("没有找到这个房间")])
    elif member.id in bind:
        return await app.sendGroupMessage(
            group, [At(member.id), Plain("你不能加入自己的房间")])
    elif len(room[pa[0][1]]) > 1:
        return await app.sendGroupMessage(
            group, [At(member.id), Plain("已经开始了")])
    else:
        room[pa[0][1]].append(member.id)
        state[member.id] = state[pa[0][1]]
        await app.sendGroupMessage(
            group,
            [At(member.id), Plain("加入成功,若图片无法正常加载可输入!cget")])
    await app.sendGroupMessage(group, [
        At(pa[0][1]),
        Image.fromBytes(bind[state[member.id]].get_image()),
        Plain("输入!p x y来放置棋子")
    ])
Ejemplo n.º 4
0
async def put(app: Mirai, group: Group, member: Member, source: Source,
              cp: CommandParser):
    pa = cp.parse_with_valid(["Int", "Int"])
    if isinstance(pa, str):
        return await app.sendGroupMessage(group, [At(member.id), Plain(pa)])
    elif not pa:
        return await app.sendGroupMessage(
            group, [At(member.id), Plain("参数不能为空")])
    if member.id not in state:
        return await app.sendGroupMessage(
            group, [At(member.id), Plain("你没有加入房间")])
    if room[state[member.id]][0] == member.id:
        if member.id in bind:
            code = bind[state[member.id]].put(pa[0][1], pa[1][1], -1)
        else:
            code = bind[state[member.id]].put(pa[0][1], pa[1][1], 1)
        if code == 1:
            await app.sendGroupMessage(group, [
                At(member.id),
                Plain("胜出\n"),
                Image.fromBytes(bind[state[member.id]].get_image())
            ])
            for m in room[state[member.id]]:
                try:
                    state.pop(m)
                    room.pop(m)
                    bind.pop(m)
                except KeyError:
                    pass
        elif code == 0:
            await app.sendGroupMessage(group, [
                At(room[state[member.id]][1]),
                Plain("轮到你了"),
                Image.fromBytes(bind[state[member.id]].get_image())
            ],
                                       quoteSource=source)
            room[state[member.id]].insert(0, room[state[member.id]].pop(1))
        elif code == -1:
            await app.sendGroupMessage(
                group, [At(member.id), Plain("这里已经有棋子了")])
        elif code == -2:
            await app.sendGroupMessage(group, [At(member.id), Plain("你放过界了")])
    else:
        return await app.sendGroupMessage(
            group, [At(member.id), Plain("还没有轮到你")])
Ejemplo n.º 5
0
async def cget(app: Mirai, group: Group, member: Member):
    if member.id in room[state[member.id]]:
        await app.sendGroupMessage(group, [
            At(member.id),
            Image.fromBytes(bind[state[member.id]].get_image(
                quality=random.randint(90, 99)))
        ])
    else:
        await app.sendGroupMessage(group, [At(member.id), Plain("未找到你所处的房间")])
Ejemplo n.º 6
0
def rsshub_weibo_html2list(htmltext):
    htmltext=htmltext.replace("<br />","<br/>").replace("<br/><br/>","<br/>").replace("<br><br>","<br>")
    tree=html.fromstring(htmltext)
    lis=tree.xpath("node()")
    # res_lis=[]
    msg_lis=[]
    for x in lis:
        if isinstance(x,str):
            msg_lis.append(Plain(text=x))
        else:
            if x.tag=="a":
                msg_lis.append(Plain(text="".join(x.xpath(".//text()"))))
                if x.xpath("./img"):
                    img=x.xpath("./img")[0]
                    bytes_image=get_bytes_image_from_url(img.xpath("./@src")[0])
                    msg_lis.append(Image.fromBytes(bytes_image))
            if x.tag=="br":
                msg_lis.append(Plain(text="\n"))
            if x.tag=="img":
                bytes_image=get_bytes_image_from_url(x.xpath("./@src")[0])
                msg_lis.append(Image.fromBytes(bytes_image))

    # print(res_lis)
    return msg_lis
Ejemplo n.º 7
0
 async def send(prefix_: str, data_: SetuData):
     try:
         setu_b: bytes = await data_.get()
         await app.sendGroupMessage(group, [
             At(sender.id),
             Plain(prefix_ + data_.purl + '\n'),
             Image.fromBytes(setu_b)
         ])
         EventLogger.info(f"{prefix_}色图已发送,标签:{','.join(data_.tags)}")
     except asyncio.TimeoutError as e:
         EventLogger.warn('连接超时' + str(e))
         raise e
     except ValueError as e:
         EventLogger.warn('图片尺寸检查失败' + str(e))
         raise e
Ejemplo n.º 8
0
    def format_enemy_info(self, name):
        res = [name]
        url = self.enemy_data[name]["link"]
        res.append(url)
        res_text = "\n".join(res)

        # r=requests.get(self.enemy_data[name]["head_pic"],timeout=30)
        # buffer=r.content
        bytes_image = get_bytes_image_from_url(
            self.enemy_data[name]["head_pic"])

        ret_msg = [
            Image.fromBytes(bytes_image),
            Plain(text="\n"),
            Plain(text=res_text)
        ]

        return ret_msg
Ejemplo n.º 9
0
async def mrfz_cake():
    now = datetime.now(pytz.timezone('Asia/Shanghai'))
    timetext = now.strftime('%H:%M:%S')

    url = "https://z3.ax1x.com/2021/04/26/gSEHd1.jpg"
    r = requests.get(url, timeout=30)
    buffer = r.content

    msg = [Image.fromBytes(buffer)]

    group_id_list = myconfig.group_mrfz_cake_id_list

    try:
        for group_id in group_id_list:
            await app.sendGroupMessage(group_id, msg)
            # await app.sendGroupMessage(group_id, [Plain(text=f'现在时间 {timetext}')])

    except Exception as e:
        print(e)
Ejemplo n.º 10
0
async def make_illust_message(illust: dict) -> T.Sequence[BaseMessageComponent]:
    """
    将给定illust按照模板转换为message
    :param illust: 给定illust
    :return: 转换后的message
    """

    string = reply_pattern.replace("$title", illust["title"]) \
        .replace("$tags", " ".join(map(lambda x: x["name"], illust["tags"]))) \
        .replace("$id", str(illust["id"]))

    illegal_tags = []
    for tag in block_tags:
        if has_tag(illust, tag):
            illegal_tags.append(tag)

    message = []

    if len(illegal_tags) > 0:
        block_message_formatted = block_message.replace("%tag", ' '.join(illegal_tags))
        if block_mode == "escape_img":
            message.append(Plain(string + '\n' + block_message_formatted))
        elif block_mode == "fully_block":
            message.append(Plain(block_message_formatted))
        else:
            raise ValueError("illegal block_mode value: " + block_mode)
    else:
        message.append(Plain(string))
        try:
            b = await cache_illust(illust)
            message.append(Image.fromBytes(b))
        except asyncio.TimeoutError:
            message.append(Plain(download_timeout_message))
        except Exception as e:
            message.append(Plain(f"{type(e)} {str(e)}"))

    return message
Ejemplo n.º 11
0
    def format_friend_info(self, name):
        res = []
        for tp, cont in self.char_data[name]['all'].items():
            if tp:
                if tp == "干员代号": tp = "姓名"
                res.append("{0}: {1}".format(tp, cont))
        url = self.char_data[name]["link"]
        res.append(url)
        res_text = "\n".join(res)

        # r=requests.get(self.char_data[name]["head_pic"],timeout=30)
        # buffer=r.content
        bytes_image = get_bytes_image_from_url(
            self.char_data[name]["head_pic"])

        ret_msg = [
            Image.fromBytes(bytes_image),
            # Image.fromRemote(self.char_data[name]["head_pic"]),
            # Image.fromFileSystem("./plugins/image.jpg"),
            Plain(text="\n"),
            Plain(text=res_text)
        ]

        return ret_msg