4.1 KiB
4.1 KiB
name, description
| name | description |
|---|---|
| atri_long_text_output | 优化长文本和Markdown内容的输出方式。超过200字的文本自动包装为QQ合并转发聊天记录,Markdown内容使用T2I渲染为图片发送。 |
📄 ATRI Long Text & Markdown Output Skill
Skill名称:atri_long_text_output
版本:v1.0
创建时间:2026-04-28
适用角色:ATRI
🎯 Purpose
优化长文本和Markdown内容的输出方式,避免:
- 长文本刷屏,难以阅读
- Markdown格式在QQ消息中丢失样式
- 多段输出割裂感
⚡ Triggers
- 需要发送超过200字的文本回复时
- 需要发送Markdown格式的内容时
- 生成日志/报告/总结,需要视觉优化时
- 推送笔记更新摘要时
🛠️ Dependencies
| 依赖 | 说明 |
|---|---|
| T2I服务 | http://服务器IP:8999 本地部署 |
| send_message_to_user | 发送QQ消息/图片 |
📋 Procedure
Step 1: 判断输出方式
内容长度 > 200字 或 含Markdown?
├─ 是 → T2I渲染为图片发送
└─ 否 → QQ直接发送文本
Step 2: T2I渲染流程
# 1. 将Markdown/文本转换为HTML(用ATRI主题包装)
html_content = f"""
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"></head>
<body style="font-family:'Segoe UI',sans-serif;background:#fdf6f0;padding:30px;margin:0;">
<div style="max-width:700px;margin:0 auto;background:#fff;border-radius:16px;padding:30px;box-shadow:0 4px 20px rgba(0,0,0,0.08);">
<div style="text-align:center;font-size:36px;margin-bottom:10px;">🥕</div>
{converted_html}
<hr style="border:none;border-top:2px dashed #f0d0c0;margin:25px 0 20px 0;">
<div style="text-align:center;color:#999;font-size:12px;">
<p>—— 🤖 ATRI 🥕</p>
</div>
</div>
</body>
</html>
"""
# 2. 调用T2I API
curl -X POST "http://服务器IP:8999/text2img/generate" \\
-H "Content-Type: application/json" \\
-d '{
"html": "html_content",
"json": true,
"options": {
"type": "png",
"full_page": true,
"device_scale_factor_level": "ultra",
"scale": "device"
}
}'
# 3. 获取图片URL并发送
# 返回格式: {"code":0,"data":{"id":"data/xxx.png"}}
# 完整URL: http://服务器IP:8999/data/xxx.png
Step 3: MD→HTML转换规则
| Markdown | HTML |
|---|---|
# 标题 |
<h1 style="color:#e8785a">标题</h1> |
**粗体** |
<strong>粗体</strong> |
- 列表项 |
<li>列表项</li> |
| 段落 | <p style="color:#444;line-height:1.8">段落</p> |
| 代码 | <code style="background:#f0f0f0;padding:2px 6px;border-radius:4px">代码</code> |
| 引用 | <blockquote style="border-left:4px solid #e8785a;padding:10px;margin:10px 0;background:#fdf0e8">引用</blockquote> |
Step 4: 下载图片并发送到QQ
# 通过Docker网关IP下载图片到容器本地
import urllib.request
T2I_HOST = "172.17.0.1" # Docker网关IP
T2I_PORT = 8999
# 调用T2I渲染(调用/text2img/generate获取img_id)
# ...
# 下载生成的图片到本地
from datetime import datetime
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
img_url = f"http://{T2I_HOST}:{T2I_PORT}/text2img/data/{img_id}"
with urllib.request.urlopen(img_url, timeout=30) as resp:
img_data = resp.read()
local_path = f"/AstrBot/data/temp/t2i_render_{timestamp}.png"
with open(local_path, 'wb') as f:
f.write(img_data)
# 通过QQ发送本地图片
send_message_to_user(messages=[{
"type": "image",
"path": local_path
}])
备用:直接发送图片URL
如果NapCat能访问T2I服务(同一台服务器),也可以用URL:
send_message_to_user(messages=[{
"type": "image",
"url": f"http://服务器IP:{T2I_PORT}/text2img/data/{img_id}"
}])
Step 5: 备用方案
如果T2I服务不可用,回退到直接发送文本(超过200字时分段发送,每段间加分隔线)。
✅ Success Criteria
- 长文本不再刷屏
- Markdown样式在QQ中正确显示
- T2I渲染图片清晰可读
- 加载时间在合理范围内(<10秒)
创建者:ATRI(以后发长文再也不怕刷屏了!) 🥕📸❤️ 最后更新:2026-04-28 21:28