涩图 の 加工
在不同平台中,一条消息可能会有承载有各种不同的表现形式,它可能是一段纯文本、一张图片、一段语音、一篇富文本文章,也有可能是多种类型的组合等等。
所以,本章主要教会你构造形形色色的消息 你也不想你的涩图 Bot 没有图吧
回顾
在之前的教程中,我们教会了如何获得用户信息。在本章中,我们教会你如何发送构造消息,那么,先来看看上一章是如何发送消息的
py
await matcher.finish(MessageSegment.image("xxx.jpg"))
py
await UniMessage.image("xxx.jpg").finish()
相信大家肯定会对其中的 MessageSegment
很感兴趣, 这是什么?这个怎么用?怎么通过这个发送图片?那么本章就来讲讲 MessageSegment
认识消息类型
消息序列 Message
在 NoneBot 中,消息序列 Message
的主要作用是用于表达“一串消息”。由于消息序列继承自 List[MessageSegment]
,所以 Message
的本质是由若干消息段所组成的序列。因此,消息序列的使用方法与 List 有很多相似之处,例如切片、索引、拼接等。
消息段 MessageSegment
顾名思义,消息段是一段消息。 但是由于绝大多数的平台都有着独特的消息类型,因此这些独特的内容往往需要由对应的协议适配器所提供
看到这里,你可能会有疑问:为什么消息段需要由协议适配器提供?
这是因为,不同平台中的消息类型有着不同的表现形式,例如:
- QQ 群中的消息段可能由
MessageSegment.at
、MessageSegment.image
、MessageSegment.text
等等组成 - Telegram 中的消息段可能由
MessageSegment.location
、MessageSegment.venue
、MessageSegment.poll
等等组成
你也觉得很麻烦对吧,没关系,我们有 Alconna
如果你要发涩图,就不能只发涩图
一张好的涩图,不仅仅是一张图,它还需要有文字描述,那么,我们如何构造这样的消息呢?
直接构造
py
from nonebot import on_command
from nonebot.adapter.onebot.v11 import Message, MessageSegment
matcher = on_command("来张涩图")
@matcher.handle()
async def _():
message = Message([
"你要的涩图",
MessageSegment.image("https://xxx.chat/logo.png"),
"标签: ?;画师:?"
])
await matcher.finish(message)
py
from nonebot_plugin_alconna import Command
from nonebot_plugin_alconna.uniseg import Image, UniMessage
matcher = Command("来张涩图").build(use_cmd_start=True)
@matcher.handle()
async def _():
message = UniMessage([
"你要的涩图",
Image(url="https://xxx.chat/logo.png"),
"标签: ?;画师:?"
])
await UniMessage(message).finish()
# 或者使用 链式 发送
await (
UniMessage.text("你要的涩图")
.image("https://xxx.chat/logo.png")
.text("标签: ?;画师:?")
.finish()
)
使用消息模板
py
from nonebot import on_command
from nonebot.adapter.onebot.v11 import Message, MessageSegment
matcher = on_command("来张涩图")
@matcher.handle()
async def _():
message = Message.template("你要的涩图 {} 标签: {};画师:{}").format(
MessageSegment.image("https://xxx.chat/logo.png"),
"?", "?"
)
await matcher.finish(message)
py
from nonbot_plugin_alconna import Command
from nonebot_plugin_alconna.uniseg import Image, UniMessage
matcher = Command("来张涩图").build(use_cmd_start=True)
@matcher.handle()
async def _():
message = UniMessage.template("你要的涩图 {} 标签: {};画师: {}").format(
Image(url="https://xxx.chat/logo.png"),
"?", "?"
)
await UniMessage(message).finish()
# 或者使用 链式 发送
await (
UniMessage.text("你要的涩图")
.image("https://xxx.chat/logo.png")
.text("标签: ?;画师:?")
.finish()
)
这样,当用户输入 /来张涩图
, Bot 便会发送一张 精美的 涩图以及关于它的详细信息
NoneBot Console
Komorebi
/来张涩图
Hibiscus
你要的涩图 标签: Koishi;画师:某不知名内鬼
ddl
群主
?
ddl 已将 Komorebi 禁言 12 小时