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
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)
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来放置棋子") ])
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("还没有轮到你")])
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("未找到你所处的房间")])
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
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
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
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)
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
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