mirror of
https://github.com/AstrBotDevs/AstrBot
synced 2026-07-18 18:10:37 +08:00
* docs: transfer AstrBotDevs/AstrBot-docs to AstrBotDevs/AstrBot * refactor: reorder imports and improve type hints in sync_docs_to_wiki.py and upload_doc_images_to_r2.py * feat: add GitHub Actions workflow to sync wiki with documentation Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com> Co-authored-by: anka-afk <110004162+anka-afk@users.noreply.github.com> Co-authored-by: zouyonghe <62183434+zouyonghe@users.noreply.github.com> Co-authored-by: shuiping233 <49360196+shuiping233@users.noreply.github.com> Co-authored-by: LIghtJUNction <106986785+LIghtJUNction@users.noreply.github.com> Co-authored-by: Sjshi763 <179909421+Sjshi763@users.noreply.github.com> Co-authored-by: xiewoc <70128845+xiewoc@users.noreply.github.com> Co-authored-by: QingFeng-awa <151742581+QingFeng-awa@users.noreply.github.com> Co-authored-by: PaloMiku <96452465+PaloMiku@users.noreply.github.com> Co-authored-by: shangxueink <138397030+shangxueink@users.noreply.github.com> Co-authored-by: IGCrystal-A <244300990+IGCrystal-A@users.noreply.github.com> Co-authored-by: RC-CHN <67079377+RC-CHN@users.noreply.github.com> Co-authored-by: MC090610 <113341105+MC090610@users.noreply.github.com> Co-authored-by: Waterwzy <196913419+Waterwzy@users.noreply.github.com> Co-authored-by: Lanhuace-Wan <186303160+Lanhuace-Wan@users.noreply.github.com> Co-authored-by: LiAlH4qwq <61769640+LiAlH4qwq@users.noreply.github.com> Co-authored-by: HSOS6 <209910899+HSOS6@users.noreply.github.com> Co-authored-by: th-dd <162813557+th-dd@users.noreply.github.com> Co-authored-by: miaoxutao123 <81676466+miaoxutao123@users.noreply.github.com> Co-authored-by: nuomicici <143102889+nuomicici@users.noreply.github.com> Co-authored-by: nasyt233 <210103278+nasyt233@users.noreply.github.com> Co-authored-by: jlugjb <7426462+jlugjb@users.noreply.github.com> Co-authored-by: Raven95676 <176760093+Raven95676@users.noreply.github.com> Co-authored-by: Futureppo <180109455+Futureppo@users.noreply.github.com> Co-authored-by: MliKiowa <61873808+MliKiowa@users.noreply.github.com> Co-authored-by: Fridemn <150212937+Fridemn@users.noreply.github.com> Co-authored-by: BakaCookie520 <138355736+BakaCookie520@users.noreply.github.com> Co-authored-by: YumeYuka <125112916+YumeYuka@users.noreply.github.com> Co-authored-by: xming521 <32786500+xming521@users.noreply.github.com> Co-authored-by: ywh555hhh <121592812+ywh555hhh@users.noreply.github.com> Co-authored-by: stevessr <89645372+stevessr@users.noreply.github.com> Co-authored-by: roeseth <41995115+roeseth@users.noreply.github.com> Co-authored-by: ikun-1145141 <265925499+ikun-1145141@users.noreply.github.com> Co-authored-by: evpeople <54983536+evpeople@users.noreply.github.com> Co-authored-by: Yue-bin <60509781+Yue-bin@users.noreply.github.com> Co-authored-by: W1ndys <109416673+W1ndys@users.noreply.github.com> Co-authored-by: TheFurina <218887821+TheFurina@users.noreply.github.com> Co-authored-by: Seayon <12275933+Seayon@users.noreply.github.com> Co-authored-by: OnlyblackTea <38585636+OnlyblackTea@users.noreply.github.com> Co-authored-by: ocetars <74854972+ocetars@users.noreply.github.com> Co-authored-by: railgun19457 <117180744+railgun19457@users.noreply.github.com> Co-authored-by: JunieXD <107397009+JunieXD@users.noreply.github.com> Co-authored-by: advent259141 <197440256+advent259141@users.noreply.github.com> Co-authored-by: Doge2077 <91442300+Doge2077@users.noreply.github.com> Co-authored-by: Bocity <23430545+Bocity@users.noreply.github.com> Co-authored-by: Aurora-xk <192227833+Aurora-xk@users.noreply.github.com>
132 lines
4.3 KiB
Markdown
132 lines
4.3 KiB
Markdown
|
|
# Sending Messages
|
|
|
|
## Passive Messages
|
|
|
|
Passive messages refer to the bot responding to messages reactively.
|
|
|
|
```python
|
|
@filter.command("helloworld")
|
|
async def helloworld(self, event: AstrMessageEvent):
|
|
yield event.plain_result("Hello!")
|
|
yield event.plain_result("你好!")
|
|
|
|
yield event.image_result("path/to/image.jpg") # Send an image
|
|
yield event.image_result("https://example.com/image.jpg") # Send an image from URL, must start with http or https
|
|
```
|
|
|
|
## Active Messages
|
|
|
|
Active messages refer to the bot proactively pushing messages. Some platforms may not support active message sending.
|
|
|
|
For scheduled tasks or when you don't want to send messages immediately, you can use `event.unified_msg_origin` to get a string and store it, then use `self.context.send_message(unified_msg_origin, chains)` to send messages when needed.
|
|
|
|
```python
|
|
from astrbot.api.event import MessageChain
|
|
|
|
@filter.command("helloworld")
|
|
async def helloworld(self, event: AstrMessageEvent):
|
|
umo = event.unified_msg_origin
|
|
message_chain = MessageChain().message("Hello!").file_image("path/to/image.jpg")
|
|
await self.context.send_message(event.unified_msg_origin, message_chain)
|
|
```
|
|
|
|
With this feature, you can store the `unified_msg_origin` and send messages when needed.
|
|
|
|
> [!TIP]
|
|
> About unified_msg_origin.
|
|
> `unified_msg_origin` is a string that records the unique ID of a session. AstrBot uses it to identify which messaging platform and which session it belongs to. This allows messages to be sent to the correct session when using `send_message`. For more about MessageChain, see the next section.
|
|
|
|
## Rich Media Messages
|
|
|
|
AstrBot supports sending rich media messages such as images, audio, videos, etc. Use `MessageChain` to construct messages.
|
|
|
|
```python
|
|
import astrbot.api.message_components as Comp
|
|
|
|
@filter.command("helloworld")
|
|
async def helloworld(self, event: AstrMessageEvent):
|
|
chain = [
|
|
Comp.At(qq=event.get_sender_id()), # Mention the message sender
|
|
Comp.Plain("Check out this image:"),
|
|
Comp.Image.fromURL("https://example.com/image.jpg"), # Send image from URL
|
|
Comp.Image.fromFileSystem("path/to/image.jpg"), # Send image from local file system
|
|
Comp.Plain("This is an image.")
|
|
]
|
|
yield event.chain_result(chain)
|
|
```
|
|
|
|
The above constructs a `message chain`, which will ultimately send a message containing both images and text while preserving the order.
|
|
|
|
> [!TIP]
|
|
> In the aiocqhttp message adapter, for messages of type `plain`, the `strip()` method is used during sending to remove spaces and line breaks. You can add zero-width spaces `\u200b` before and after the message to resolve this issue.
|
|
|
|
Similarly,
|
|
|
|
**File**
|
|
|
|
```py
|
|
Comp.File(file="path/to/file.txt", name="file.txt") # Not supported by some platforms
|
|
```
|
|
|
|
**Audio Record**
|
|
|
|
```py
|
|
path = "path/to/record.wav" # Currently only accepts wav format, please convert other formats yourself
|
|
Comp.Record(file=path, url=path)
|
|
```
|
|
|
|
**Video**
|
|
|
|
```py
|
|
path = "path/to/video.mp4"
|
|
Comp.Video.fromFileSystem(path=path)
|
|
Comp.Video.fromURL(url="https://example.com/video.mp4")
|
|
```
|
|
|
|
## Sending Video Messages
|
|
|
|
```python
|
|
from astrbot.api.event import filter, AstrMessageEvent
|
|
|
|
@filter.command("test")
|
|
async def test(self, event: AstrMessageEvent):
|
|
from astrbot.api.message_components import Video
|
|
# fromFileSystem requires the user's protocol client and bot to be on the same system.
|
|
music = Video.fromFileSystem(
|
|
path="test.mp4"
|
|
)
|
|
# More universal approach
|
|
music = Video.fromURL(
|
|
url="https://example.com/video.mp4"
|
|
)
|
|
yield event.chain_result([music])
|
|
```
|
|
|
|

|
|
|
|
## Sending Group Forward Messages
|
|
|
|
> Most platforms do not support this message type. Current support: OneBot v11
|
|
|
|
You can send group forward messages as follows.
|
|
|
|
```py
|
|
from astrbot.api.event import filter, AstrMessageEvent
|
|
|
|
@filter.command("test")
|
|
async def test(self, event: AstrMessageEvent):
|
|
from astrbot.api.message_components import Node, Plain, Image
|
|
node = Node(
|
|
uin=905617992,
|
|
name="Soulter",
|
|
content=[
|
|
Plain("hi"),
|
|
Image.fromFileSystem("test.jpg")
|
|
]
|
|
)
|
|
yield event.chain_result([node])
|
|
```
|
|
|
|

|