Archived
1
0
Fork 0

add MessageChain elements

This commit is contained in:
yzhh 2021-12-31 22:44:34 +08:00
parent 4be1c8b65e
commit 2af03986e1
13 changed files with 251 additions and 251 deletions

View file

@ -12,9 +12,8 @@ from core.bots.aiocqhttp.tasks import MessageTaskManager, FinishedTasks
from core.bots.aiocqhttp.message_guild import MessageSession as MessageSessionGuild
from core.elements import Plain, Image, MessageSession as MS, MsgInfo, Session, Voice, FetchTarget as FT, \
ExecutionLockList
from core.elements.message.internal import Embed
from core.elements.message.chain import MessageChain
from core.elements.others import confirm_command
from core.secret_check import Secret
from core.logger import Logger
from database import BotDBUtil
@ -39,36 +38,18 @@ class MessageSession(MS):
msg = MessageSegment.text('')
if quote and self.target.targetFrom == 'QQ|Group':
msg = MessageSegment.reply(self.session.message.message_id)
if Secret.find(msgchain):
msgchain = MessageChain(msgchain)
if not msgchain.is_safe:
return await self.sendMessage('https://wdf.ink/6Oup')
if isinstance(msgchain, (Plain, Image, Voice)):
msgchain = [msgchain]
if isinstance(msgchain, Embed):
msgchain = msgchain.to_msgchain()
if isinstance(msgchain, str):
msg = msg + (MessageSegment.text(msgchain if msgchain != '' else
'发生错误:机器人尝试发送空文本消息,请联系机器人开发者解决问题。'
'\n错误汇报地址https://github.com/Teahouse-Studios/bot/issues/new?assignees=OasisAkari&labels=bug&template=report_bug.yaml&title=%5BBUG%5D%3A+'))
elif isinstance(msgchain, (list, tuple)):
count = 0
for x in msgchain:
if isinstance(x, Plain):
msg = msg + MessageSegment.text(('\n' if count != 0 else '') + x.text)
elif isinstance(x, Image):
msg = msg + MessageSegment.image(Path(await x.get()).as_uri())
elif isinstance(x, Voice):
msg = msg + MessageSegment.record(Path(x.path).as_uri())
elif isinstance(x, Embed):
chains = x.to_msgchain()
for y in chains:
if isinstance(y, Plain):
msg = msg + MessageSegment.text(('\n' if count != 0 else '') + y.text)
elif isinstance(y, Image):
msg = msg + MessageSegment.image(Path(await y.get()).as_uri())
count += 1
else:
msg = msg + MessageSegment.text('发生错误:机器人尝试发送非法消息链,请联系机器人开发者解决问题。'
'\n错误汇报地址https://github.com/Teahouse-Studios/bot/issues/new?assignees=OasisAkari&labels=bug&template=report_bug.yaml&title=%5BBUG%5D%3A+')
count = 0
for x in msgchain.asSendable(embed=False):
if isinstance(x, Plain):
msg = msg + MessageSegment.text(('\n' if count != 0 else '') + x.text)
elif isinstance(x, Image):
msg = msg + MessageSegment.image(Path(await x.get()).as_uri())
elif isinstance(x, Voice):
msg = msg + MessageSegment.record(Path(x.path).as_uri())
count += 1
Logger.info(f'[Bot] -> [{self.target.targetId}]: {msg}')
if self.target.targetFrom == 'QQ|Group':
send = await bot.send_group_msg(group_id=self.session.target, message=msg)

View file

@ -8,9 +8,9 @@ from aiocqhttp import MessageSegment
from core.bots.aiocqhttp.client import bot
from core.bots.aiocqhttp.tasks import MessageTaskManager, FinishedTasks
from core.elements import Plain, Image, MessageSession as MS, MsgInfo, Session, ExecutionLockList
from core.elements.message.chain import MessageChain
from core.elements.others import confirm_command
from core.logger import Logger
from core.secret_check import Secret
def convert2lst(s) -> list:
@ -33,25 +33,18 @@ class MessageSession(MS):
msg = MessageSegment.text('')
# if quote:
# msg = MessageSegment.reply(self.session.message.message_id)
if Secret.find(msgchain):
msgchain = MessageChain(msgchain)
if not msgchain.is_safe:
return await self.sendMessage('https://wdf.ink/6Oup')
if isinstance(msgchain, str):
msg = msg + (MessageSegment.text(msgchain if msgchain != '' else
'发生错误:机器人尝试发送空文本消息,请联系机器人开发者解决问题。'
'\n错误汇报地址https://github.com/Teahouse-Studios/bot/issues/new?assignees=OasisAkari&labels=bug&template=5678.md&title='))
elif isinstance(msgchain, (list, tuple)):
count = 0
for x in msgchain:
if isinstance(x, Plain):
msg = msg + MessageSegment.text(('\n' if count != 0 else '') + x.text)
elif isinstance(x, Image):
msg = msg + MessageSegment.image(Path(await x.get()).as_uri())
# elif isinstance(x, Voice):
# msg = msg + MessageSegment.record(Path(x.path).as_uri())
count += 1
else:
msg = msg + MessageSegment.text('发生错误:机器人尝试发送非法消息链,请联系机器人开发者解决问题。'
'\n错误汇报地址https://github.com/Teahouse-Studios/bot/issues/new?assignees=OasisAkari&labels=bug&template=5678.md&title=')
count = 0
for x in msgchain.asSendable(embed=False):
if isinstance(x, Plain):
msg = msg + MessageSegment.text(('\n' if count != 0 else '') + x.text)
elif isinstance(x, Image):
msg = msg + MessageSegment.image(Path(await x.get()).as_uri())
# elif isinstance(x, Voice):
# msg = msg + MessageSegment.record(Path(x.path).as_uri())
count += 1
Logger.info(f'[Bot] -> [{self.target.targetId}]: {msg}')
Logger.info(self.session.target)
match_guild = re.match(r'(.*)\|(.*)', self.session.target)

View file

@ -1,15 +1,14 @@
import asyncio
import re
import traceback
from typing import List
from typing import List, Union
from core.bots.aiogram.client import dp, bot
from core.bots.aiogram.tasks import MessageTaskManager, FinishedTasks
from core.elements import Plain, Image, MessageSession as MS, MsgInfo, Session, Voice, FetchTarget as FT, \
ExecutionLockList
from core.elements.message.internal import Embed
from core.elements.message.chain import MessageChain
from core.elements.others import confirm_command
from core.secret_check import Secret
from database import BotDBUtil
@ -30,57 +29,32 @@ class MessageSession(MS):
delete = True
async def sendMessage(self, msgchain, quote=True):
if Secret.find(msgchain):
msgchain = MessageChain(msgchain)
if not msgchain.is_safe:
return await self.sendMessage('https://wdf.ink/6Oup')
if isinstance(msgchain, (Plain, Image, Voice)):
msgchain = [msgchain]
if isinstance(msgchain, Embed):
msgchain = msgchain.to_msgchain()
if isinstance(msgchain, str):
if msgchain == '':
msgchain = '发生错误:机器人尝试发送空文本消息,请联系机器人开发者解决问题。\n错误汇报地址https://github.com/Teahouse-Studios/bot/issues/new?assignees=OasisAkari&labels=bug&template=report_bug.yaml&title=%5BBUG%5D%3A+'
send = await bot.send_message(self.session.target, msgchain,
reply_to_message_id=self.session.message.message_id if quote and self.session.message else None)
elif isinstance(msgchain, (list, tuple)):
count = 0
send = []
for x in msgchain:
if isinstance(x, Plain):
send_ = await bot.send_message(self.session.target, x.text,
reply_to_message_id=self.session.message.message_id if quote
and count == 0 and self.session.message else None)
elif isinstance(x, Image):
with open(await x.get(), 'rb') as image:
send_ = await bot.send_photo(self.session.target, image,
reply_to_message_id=self.session.message.message_id if quote
and count == 0
and self.session.message else None)
elif isinstance(x, Voice):
with open(x.path, 'rb') as voice:
send_ = await bot.send_audio(self.session.target, voice,
reply_to_message_id=self.session.message.message_id if quote
and count == 0 and self.session.message else None)
elif isinstance(x, Embed):
chains = x.to_msgchain()
for y in chains:
if isinstance(y, Plain):
send_ = await bot.send_message(self.session.target, y.text,
reply_to_message_id=self.session.message.message_id if quote
and count == 0 and self.session.message else None)
elif isinstance(y, Image):
with open(await y.get(), 'rb') as image:
send_ = await bot.send_photo(self.session.target, image,
reply_to_message_id=self.session.message.message_id if quote
and count == 0 and self.session.message else None)
else:
send_ = False
if send_:
send.append(send_)
count += 1
else:
msgchain = '发生错误:机器人尝试发送非法消息链,请联系机器人开发者解决问题。\n错误汇报地址https://github.com/Teahouse-Studios/bot/issues/new?assignees=OasisAkari&labels=bug&template=report_bug.yaml&title=%5BBUG%5D%3A+'
send = await bot.send_message(self.session.target, msgchain,
reply_to_message_id=self.session.message.message_id if quote and self.session.message else None)
count = 0
send = []
for x in msgchain.asSendable(embed=False):
if isinstance(x, Plain):
send_ = await bot.send_message(self.session.target, x.text,
reply_to_message_id=self.session.message.message_id if quote
and count == 0 and self.session.message else None)
elif isinstance(x, Image):
with open(await x.get(), 'rb') as image:
send_ = await bot.send_photo(self.session.target, image,
reply_to_message_id=self.session.message.message_id if quote
and count == 0
and self.session.message else None)
elif isinstance(x, Voice):
with open(x.path, 'rb') as voice:
send_ = await bot.send_audio(self.session.target, voice,
reply_to_message_id=self.session.message.message_id if quote
and count == 0 and self.session.message else None)
else:
send_ = False
if send_:
send.append(send_)
count += 1
return MessageSession(target=MsgInfo(targetId=0, senderId=0, senderName='', targetFrom='Telegram|Bot',
senderFrom='Telegram|Bot'),
session=Session(message=send, target=send, sender=send))
@ -144,7 +118,7 @@ class MessageSession(MS):
class FetchTarget(FT):
@staticmethod
async def fetch_target(targetId) -> MessageSession:
async def fetch_target(targetId) -> Union[MessageSession, bool]:
matchChannel = re.match(r'^(Telegram\|.*?)\|(.*)', targetId)
if matchChannel:
return MessageSession(MsgInfo(targetId=targetId, senderId=targetId, senderName='',

View file

@ -2,17 +2,15 @@ import asyncio
import datetime
import re
import traceback
from typing import List
from typing import List, Union
import discord
from pathlib import Path
from core.bots.discord.client import client
from core.elements import Plain, Image, MessageSession as MS, MsgInfo, Session, FetchTarget as FT, ExecutionLockList, \
Voice
from core.elements.message.internal import Embed, EmbedField
from core.elements import Plain, Image, MessageSession as MS, MsgInfo, Session, FetchTarget as FT, ExecutionLockList
from core.elements.message.chain import MessageChain
from core.elements.message.internal import Embed
from core.elements.others import confirm_command
from core.secret_check import Secret
from database import BotDBUtil
@ -31,7 +29,8 @@ async def convert_embed(embed: Embed) -> discord.Embed:
description=embed.description if embed.description is not None else discord.Embed.Empty,
color=embed.color if embed.color is not None else discord.Embed.Empty,
url=embed.url if embed.url is not None else discord.Embed.Empty,
timestamp=datetime.datetime.fromtimestamp(embed.timestamp) if embed.timestamp is not None else discord.Embed.Empty,)
timestamp=datetime.datetime.fromtimestamp(
embed.timestamp) if embed.timestamp is not None else discord.Embed.Empty, )
""" if embed.image is not None:
embeds.set_image(url=Path(await embed.image.get()).as_uri())
if embed.thumbnail is not None:
@ -54,43 +53,29 @@ class MessageSession(MS):
delete = True
async def sendMessage(self, msgchain, quote=True):
if Secret.find(msgchain):
msgchain = MessageChain(msgchain)
if not msgchain.is_safe:
return await self.sendMessage('https://wdf.ink/6Oup')
if isinstance(msgchain, (Plain, Image, Voice)):
msgchain = [msgchain]
if isinstance(msgchain, Embed):
send = await self.session.target.send(embed=await convert_embed(msgchain),
reference=self.session.message if quote and self.session.message else None)
elif isinstance(msgchain, str):
if msgchain == '':
msgchain = '发生错误:机器人尝试发送空文本消息,请联系机器人开发者解决问题。\n错误汇报地址https://github.com/Teahouse-Studios/bot/issues/new?assignees=OasisAkari&labels=bug&template=report_bug.yaml&title=%5BBUG%5D%3A+'
send = await self.session.target.send(msgchain,
reference=self.session.message if quote and self.session.message else None)
elif isinstance(msgchain, (list, tuple)):
count = 0
send = []
for x in msgchain:
if isinstance(x, Plain):
send_ = await self.session.target.send(x.text,
reference=self.session.message if quote and count == 0
and self.session.message else None)
elif isinstance(x, Image):
send_ = await self.session.target.send(file=discord.File(await x.get()),
reference=self.session.message if quote and count == 0
and self.session.message else None)
elif isinstance(x, Embed):
send_ = await self.session.target.send(embed=await convert_embed(x),
reference=self.session.message if quote and count == 0
and self.session.message else None)
else:
send_ = False
if send_:
send.append(send_)
count += 1
else:
msgchain = '发生错误:机器人尝试发送非法消息链,请联系机器人开发者解决问题。\n错误汇报地址https://github.com/Teahouse-Studios/bot/issues/new?assignees=OasisAkari&labels=bug&template=report_bug.yaml&title=%5BBUG%5D%3A+'
send = await self.session.target.send(msgchain,
reference=self.session.message if quote and self.session.message else None)
count = 0
send = []
for x in msgchain.asSendable():
if isinstance(x, Plain):
send_ = await self.session.target.send(x.text,
reference=self.session.message if quote and count == 0
and self.session.message else None)
elif isinstance(x, Image):
send_ = await self.session.target.send(file=discord.File(await x.get()),
reference=self.session.message if quote and count == 0
and self.session.message else None)
elif isinstance(x, Embed):
send_ = await self.session.target.send(embed=await convert_embed(x),
reference=self.session.message if quote and count == 0
and self.session.message else None)
else:
send_ = False
if send_:
send.append(send_)
count += 1
return MessageSession(target=MsgInfo(targetId=0, senderId=0, senderName='', targetFrom='Discord|Bot',
senderFrom='Discord|Bot'),
session=Session(message=send, target=self.session.target, sender=self.session.sender))
@ -153,7 +138,7 @@ class MessageSession(MS):
class FetchTarget(FT):
@staticmethod
async def fetch_target(targetId) -> MessageSession:
async def fetch_target(targetId) -> Union[MessageSession, bool]:
matchChannel = re.match(r'^(Discord\|(?:DM\||)Channel)\|(.*)', targetId)
if matchChannel:
getChannel = await client.fetch_channel(int(matchChannel.group(2)))

View file

@ -1,4 +1,4 @@
from typing import List
from typing import List, Union
class MsgInfo:

View file

@ -0,0 +1,80 @@
from .internal import Plain, Image, Voice, Embed
from core.elements.others import Secret, ErrorMessage
from typing import Union, List, Tuple
class MessageChain:
def __init__(self, elements: Union[str, List[Union[Plain, Image, Voice, Embed]],
Tuple[Union[Plain, Image, Voice, Embed]],
Plain, Image, Voice, Embed]):
self.value = []
if isinstance(elements, str):
if elements != '':
self.value.append(Plain(elements))
else:
self.value.append(
Plain(ErrorMessage('机器人尝试发送空文本消息,请联系机器人开发者解决问题。')))
elif isinstance(elements, (Plain, Image, Voice, Embed)):
self.value.append(elements)
elif isinstance(elements, (list, tuple)):
for e in elements:
if isinstance(e, (Plain, Image, Voice, Embed)):
self.value.append(e)
else:
self.value.append(
Plain(ErrorMessage('机器人尝试发送非法消息链,请联系机器人开发者解决问题。')))
elif isinstance(elements, MessageChain):
self.value = elements.value
else:
self.value.append(
Plain(ErrorMessage('机器人尝试发送非法消息链,请联系机器人开发者解决问题。')))
@property
def is_safe(self):
for v in self.value:
if isinstance(v, Plain):
for secret in Secret.list:
if v.text.upper().find(secret.upper()) != -1:
return False
elif isinstance(v, Embed):
for secret in Secret.list:
if v.title.upper().find(secret.upper()) != -1:
return False
if v.description.upper().find(secret.upper()) != -1:
return False
if v.footer.upper().find(secret.upper()) != -1:
return False
if v.author.upper().find(secret.upper()) != -1:
return False
if v.url.upper().find(secret.upper()) != -1:
return False
for f in v.fields:
if f.name.upper().find(secret.upper()) != -1:
return False
if f.value.upper().find(secret.upper()) != -1:
return False
return True
def asSendable(self, embed=True):
value = []
for x in self.value:
if isinstance(x, Embed) and not embed:
value.append(x.to_msgchain())
else:
value.append(x)
return value
def append(self, element):
self.value.append(element)
def remove(self, element):
self.value.remove(element)
def __str__(self):
return f'[{", ".join([str(x.__dict__) for x in self.value])}]'
def __repr__(self):
return self.value
__all__ = ["MessageChain"]

View file

@ -1,12 +1,12 @@
import re
import uuid
from os.path import abspath
from typing import List
from typing import List, Union
import aiohttp
import filetype
from PIL import Image as PImage
from aiohttp_retry import ExponentialRetry, RetryClient
from tenacity import retry, stop_after_attempt
from config import CachePath
@ -19,23 +19,26 @@ class Plain:
class Image:
def __init__(self,
path):
path, headers=None):
self.need_get = False
self.path = path
self.headers = headers
if isinstance(path, PImage.Image):
savepath = f'{CachePath}{str(uuid.uuid4())}.jpg'
path.convert('RGB').save(savepath)
self.path = savepath
save = f'{CachePath}{str(uuid.uuid4())}.jpg'
path.convert('RGB').save(save)
self.path = save
elif re.match('^https?://.*', path):
self.need_get = True
async def get(self):
if self.need_get:
return abspath(await self.get_image(self.path))
return abspath(await self.get_image())
return abspath(self.path)
async def get_image(self, url, headers=None):
async with RetryClient(retry_options=ExponentialRetry(attempts=3)) as session:
@retry(stop=stop_after_attempt(3))
async def get_image(self):
url = self.path
async with aiohttp.ClientSession as session:
async with session.get(url, timeout=aiohttp.ClientTimeout(total=20)) as req:
raw = await req.read()
ft = filetype.match(raw).extension

View file

@ -1,4 +1,9 @@
import os
from configparser import ConfigParser
from os.path import abspath
import traceback
import requests
confirm_command = ["", "", '确定', '是吧', '大概是',
'也许', '可能', '对的', '是呢', '对呢', '', '嗯呢',
@ -23,4 +28,47 @@ class PrivateAssets:
PrivateAssets.path = path
__all__ = ["confirm_command", "command_prefix", "EnableDirtyWordCheck", "PrivateAssets"]
class Secret:
list = []
@staticmethod
def add(secret):
Secret.list.append(secret)
class ErrorMessage:
def __init__(self, error_message):
self.error_message = '发生错误:' + error_message \
+ '\n错误汇报地址https://github.com/Teahouse-Studios/bot/issues/new?assignees=OasisAkari&labels=bug&template=report_bug.yaml&title=%5BBUG%5D%3A+'
def __str__(self):
return self.error_message
def __repr__(self):
return self.error_message
def load_secret():
config_filename = 'config.cfg'
config_path = abspath('./config/' + config_filename)
cp = ConfigParser()
cp.read(config_path)
section = cp.sections()[0]
options = cp.options(section)
for option in options:
value = cp.get(section, option)
if value != '':
Secret.add(value.upper())
try:
ip = requests.get('https://api.ip.sb/ip', timeout=10)
if ip:
Secret.add(ip.text.replace('\n', ''))
except:
traceback.print_exc()
pass
load_secret()
__all__ = ["confirm_command", "command_prefix", "EnableDirtyWordCheck", "PrivateAssets", "Secret", "ErrorMessage"]

View file

@ -44,7 +44,7 @@ class ModulesManager:
modules: Dict[str, Union[Command, Option, Schedule, RegexCommand, StartUp]] = {}
@staticmethod
def add_module(module: [Command, Option, Schedule, RegexCommand, StartUp]):
def add_module(module: Union[Command, Option, Schedule, RegexCommand, StartUp]):
if module.bind_prefix not in ModulesManager.modules:
ModulesManager.modules.update({module.bind_prefix: module})
else:

View file

@ -1,53 +0,0 @@
import traceback
from configparser import ConfigParser
from os.path import abspath
from typing import Union, List
import requests
from core.elements import Plain
class Secret:
list = []
@staticmethod
def add(secret):
Secret.list.append(secret)
@staticmethod
def find(message: Union[str, List]):
if isinstance(message, str):
for secret in Secret.list:
if message.upper().find(secret.upper()) != -1:
return True
elif isinstance(message, (list, tuple)):
for m in message:
if isinstance(m, Plain):
for secret in Secret.list:
if m.text.upper().find(secret.upper()) != -1:
return True
return False
def load_secret():
config_filename = 'config.cfg'
config_path = abspath('./config/' + config_filename)
cp = ConfigParser()
cp.read(config_path)
section = cp.sections()[0]
options = cp.options(section)
for option in options:
value = cp.get(section, option)
if value != '':
Secret.add(value.upper())
try:
ip = requests.get('https://api.ip.sb/ip', timeout=10)
if ip:
Secret.add(ip.text.replace('\n', ''))
except:
traceback.print_exc()
pass
load_secret()

View file

@ -4,7 +4,8 @@ from PIL import Image
from core.elements import MessageSession, Plain, Image as BImage, Session, MsgInfo, FetchTarget as FT, Voice, Embed
from core.elements.others import confirm_command
from core.secret_check import Secret
from core.elements.message.chain import MessageChain
from core.logger import Logger
class Template(MessageSession):
@ -15,33 +16,17 @@ class Template(MessageSession):
delete = True
async def sendMessage(self, msgchain, quote=True) -> MessageSession:
if Secret.find(msgchain):
return await self.sendMessage('https://wdf.ink/6Oup')
if isinstance(msgchain, (Plain, BImage, Voice)):
msgchain = [msgchain]
if isinstance(msgchain, Embed):
msgchain = msgchain.to_msgchain()
if isinstance(msgchain, str):
print(msgchain)
return MessageSession(target=self.target,
session=Session(message=msgchain, target='TEST|Console', sender='TEST|Console'))
if isinstance(msgchain, list):
msg_list = []
for x in msgchain:
if isinstance(x, Plain):
print(x.text)
msg_list.append(x.text)
if isinstance(x, BImage):
img = Image.open(await x.get())
img.show()
if isinstance(x, Embed):
chains = x.to_msgchain()
for y in chains:
if isinstance(y, Plain):
print(y.text)
if isinstance(y, BImage):
img = Image.open(await y.get())
img.show()
Logger.info(msgchain)
msgchain = MessageChain(msgchain)
Logger.info(msgchain)
msg_list = []
for x in msgchain.asSendable(embed=False):
if isinstance(x, Plain):
print(x.text)
msg_list.append(x.text)
if isinstance(x, BImage):
img = Image.open(await x.get())
img.show()
return MessageSession(target=self.target,
session=Session(message=str(msg_list), target='TEST|Console', sender='TEST|Console'))

View file

@ -98,7 +98,7 @@ async def slk_converter(filepath: str) -> str:
return filepath2
async def load_prompt(bot: FetchTarget) -> None:
async def load_prompt(bot) -> None:
author_cache = os.path.abspath(PrivateAssets.path + '/cache_restart_author')
loader_cache = os.path.abspath(PrivateAssets.path + '/.cache_loader')
if os.path.exists(author_cache):

View file

@ -375,6 +375,7 @@ async def query_pages(msg: MessageSession, title: Union[str, list, tuple],
wait_msg_list = []
wait_list = []
web_render_list = []
dl_list = []
for q in query_task:
current_task = query_task[q]
ready_for_query_pages = current_task['query']
@ -415,15 +416,7 @@ async def query_pages(msg: MessageSession, title: Union[str, list, tuple],
if plain_slice:
msg_list.append(Plain('\n'.join(plain_slice)))
if r.file is not None:
dl = await download_to_cache(r.file)
guess_type = filetype.guess(dl)
if guess_type is not None:
if guess_type.extension in ["png", "gif", "jpg", "jpeg", "webp", "bmp", "ico"]:
if msg.Feature.image:
msg_list.append(Image(dl))
elif guess_type.extension in ["oga", "ogg", "flac", "mp3", "wav"]:
if msg.Feature.voice:
msg_list.append(Voice(dl))
dl_list.append(r.file)
else:
if msg.Feature.image and r.link is not None:
web_render_list.append({r.link: r.info.realurl})
@ -460,6 +453,17 @@ async def query_pages(msg: MessageSession, title: Union[str, list, tuple],
infobox_msg_list.append(Image(get_infobox))
if infobox_msg_list:
await msg.sendMessage(infobox_msg_list, quote=False)
if dl_list:
for f in dl_list:
dl = await download_to_cache(f)
guess_type = filetype.guess(dl)
if guess_type is not None:
if guess_type.extension in ["png", "gif", "jpg", "jpeg", "webp", "bmp", "ico"]:
if msg.Feature.image:
await msg.sendMessage(Image(dl), quote=False)
elif guess_type.extension in ["oga", "ogg", "flac", "mp3", "wav"]:
if msg.Feature.voice:
await msg.sendMessage(Voice(dl), quote=False)
if wait_msg_list:
confirm = await msg.waitConfirm(wait_msg_list)
if confirm and wait_list: