mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-08-09 12:40:59 +00:00
feat(platform): pass original image URL to Image component in 6 adapters (#2362)
Preserve the platform CDN URL in Image.url alongside base64 data, enabling plugins to use ContentElement.from_image_url() for direct vision API access without redundant local download. - aiocqhttp: use msg_data["data"]["url"] and msg.data["url"] - discord: use attachment.url - telegram: use file.file_path - slack: use pic_url - wecom: use picurl - qqofficial: use pic_url Satori adapter already follows this pattern (satori.py:168). The change is purely additive — base64 is preserved for backward compatibility, and get_bytes() priority (url → base64 → path) ensures plugins can choose the optimal path. Closes #2355 Co-authored-by: douxt <8429023+douxt@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -240,7 +240,11 @@ class AiocqhttpMessageConverter(abstract_platform_adapter.AbstractMessageConvert
|
|||||||
async def process_message_data(msg_data, reply_list):
|
async def process_message_data(msg_data, reply_list):
|
||||||
if msg_data['type'] == 'image':
|
if msg_data['type'] == 'image':
|
||||||
image_base64, image_format = await image.qq_image_url_to_base64(msg_data['data']['url'])
|
image_base64, image_format = await image.qq_image_url_to_base64(msg_data['data']['url'])
|
||||||
reply_list.append(platform_message.Image(base64=f'data:image/{image_format};base64,{image_base64}'))
|
reply_list.append(
|
||||||
|
platform_message.Image(
|
||||||
|
url=msg_data['data']['url'], base64=f'data:image/{image_format};base64,{image_base64}'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
elif msg_data['type'] == 'text':
|
elif msg_data['type'] == 'text':
|
||||||
reply_list.append(platform_message.Plain(text=msg_data['data']['text']))
|
reply_list.append(platform_message.Plain(text=msg_data['data']['text']))
|
||||||
@@ -285,7 +289,9 @@ class AiocqhttpMessageConverter(abstract_platform_adapter.AbstractMessageConvert
|
|||||||
image_msg = platform_message.Face(face_id=face_id, face_name=face_name)
|
image_msg = platform_message.Face(face_id=face_id, face_name=face_name)
|
||||||
else:
|
else:
|
||||||
image_base64, image_format = await image.qq_image_url_to_base64(msg.data['url'])
|
image_base64, image_format = await image.qq_image_url_to_base64(msg.data['url'])
|
||||||
image_msg = platform_message.Image(base64=f'data:image/{image_format};base64,{image_base64}')
|
image_msg = platform_message.Image(
|
||||||
|
url=msg.data['url'], base64=f'data:image/{image_format};base64,{image_base64}'
|
||||||
|
)
|
||||||
yiri_msg_list.append(image_msg)
|
yiri_msg_list.append(image_msg)
|
||||||
elif msg.type == 'forward':
|
elif msg.type == 'forward':
|
||||||
# 暂时不太合理
|
# 暂时不太合理
|
||||||
|
|||||||
@@ -783,7 +783,9 @@ class DiscordMessageConverter(abstract_platform_adapter.AbstractMessageConverter
|
|||||||
image_data = await response.read()
|
image_data = await response.read()
|
||||||
image_base64 = base64.b64encode(image_data).decode('utf-8')
|
image_base64 = base64.b64encode(image_data).decode('utf-8')
|
||||||
image_format = response.headers['Content-Type']
|
image_format = response.headers['Content-Type']
|
||||||
element_list.append(platform_message.Image(base64=f'data:{image_format};base64,{image_base64}'))
|
element_list.append(
|
||||||
|
platform_message.Image(url=attachment.url, base64=f'data:{image_format};base64,{image_base64}')
|
||||||
|
)
|
||||||
|
|
||||||
return platform_message.MessageChain(element_list)
|
return platform_message.MessageChain(element_list)
|
||||||
|
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ class QQOfficialMessageConverter(abstract_platform_adapter.AbstractMessageConver
|
|||||||
yiri_msg_list.append(platform_message.Source(id=message_id, time=datetime.datetime.now()))
|
yiri_msg_list.append(platform_message.Source(id=message_id, time=datetime.datetime.now()))
|
||||||
if pic_url is not None:
|
if pic_url is not None:
|
||||||
base64_url = await image.get_qq_official_image_base64(pic_url=pic_url, content_type=content_type)
|
base64_url = await image.get_qq_official_image_base64(pic_url=pic_url, content_type=content_type)
|
||||||
yiri_msg_list.append(platform_message.Image(base64=base64_url))
|
yiri_msg_list.append(platform_message.Image(url=pic_url, base64=base64_url))
|
||||||
|
|
||||||
yiri_msg_list.append(platform_message.Plain(text=message))
|
yiri_msg_list.append(platform_message.Plain(text=message))
|
||||||
chain = platform_message.MessageChain(yiri_msg_list)
|
chain = platform_message.MessageChain(yiri_msg_list)
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ class SlackMessageConverter(abstract_platform_adapter.AbstractMessageConverter):
|
|||||||
yiri_msg_list.append(platform_message.Source(id=message_id, time=datetime.datetime.now()))
|
yiri_msg_list.append(platform_message.Source(id=message_id, time=datetime.datetime.now()))
|
||||||
if pic_url is not None:
|
if pic_url is not None:
|
||||||
base64_url = await image.get_slack_image_to_base64(pic_url=pic_url, bot_token=bot.bot_token)
|
base64_url = await image.get_slack_image_to_base64(pic_url=pic_url, bot_token=bot.bot_token)
|
||||||
yiri_msg_list.append(platform_message.Image(base64=base64_url))
|
yiri_msg_list.append(platform_message.Image(url=pic_url, base64=base64_url))
|
||||||
|
|
||||||
yiri_msg_list.append(platform_message.Plain(text=message))
|
yiri_msg_list.append(platform_message.Plain(text=message))
|
||||||
chain = platform_message.MessageChain(yiri_msg_list)
|
chain = platform_message.MessageChain(yiri_msg_list)
|
||||||
|
|||||||
@@ -157,7 +157,8 @@ class TelegramMessageConverter(abstract_platform_adapter.AbstractMessageConverte
|
|||||||
|
|
||||||
message_components.append(
|
message_components.append(
|
||||||
platform_message.Image(
|
platform_message.Image(
|
||||||
base64=f'data:{file_format};base64,{base64.b64encode(file_bytes).decode("utf-8")}'
|
url=file.file_path,
|
||||||
|
base64=f'data:{file_format};base64,{base64.b64encode(file_bytes).decode("utf-8")}',
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -133,7 +133,9 @@ class WecomMessageConverter(abstract_platform_adapter.AbstractMessageConverter):
|
|||||||
yiri_msg_list = []
|
yiri_msg_list = []
|
||||||
yiri_msg_list.append(platform_message.Source(id=message_id, time=datetime.datetime.now()))
|
yiri_msg_list.append(platform_message.Source(id=message_id, time=datetime.datetime.now()))
|
||||||
image_base64, image_format = await image.get_wecom_image_base64(pic_url=picurl)
|
image_base64, image_format = await image.get_wecom_image_base64(pic_url=picurl)
|
||||||
yiri_msg_list.append(platform_message.Image(base64=f'data:image/{image_format};base64,{image_base64}'))
|
yiri_msg_list.append(
|
||||||
|
platform_message.Image(url=picurl, base64=f'data:image/{image_format};base64,{image_base64}')
|
||||||
|
)
|
||||||
chain = platform_message.MessageChain(yiri_msg_list)
|
chain = platform_message.MessageChain(yiri_msg_list)
|
||||||
|
|
||||||
return chain
|
return chain
|
||||||
|
|||||||
Reference in New Issue
Block a user