175 lines
4.6 KiB
Markdown
175 lines
4.6 KiB
Markdown
# 消息发送API
|
||
|
||
消息发送API模块专门负责发送各种类型的消息,支持文本、表情包、图片等多种消息类型。
|
||
|
||
## 导入方式
|
||
|
||
```python
|
||
from src.plugin_system.apis import send_api
|
||
# 或者
|
||
from src.plugin_system import send_api
|
||
```
|
||
|
||
## 主要功能
|
||
|
||
### 1. 发送文本消息
|
||
```python
|
||
async def text_to_stream(
|
||
text: str,
|
||
stream_id: str,
|
||
typing: bool = False,
|
||
reply_to: str = "",
|
||
storage_message: bool = True,
|
||
) -> bool:
|
||
```
|
||
发送文本消息到指定的流
|
||
|
||
**Args:**
|
||
- `text` (str): 要发送的文本内容
|
||
- `stream_id` (str): 聊天流ID
|
||
- `typing` (bool): 是否显示正在输入
|
||
- `reply_to` (str): 回复消息,格式为"发送者:消息内容"
|
||
- `storage_message` (bool): 是否存储消息到数据库
|
||
|
||
**Returns:**
|
||
- `bool` - 是否发送成功
|
||
|
||
### 2. 发送表情包
|
||
```python
|
||
async def emoji_to_stream(emoji_base64: str, stream_id: str, storage_message: bool = True) -> bool:
|
||
```
|
||
向指定流发送表情包。
|
||
|
||
**Args:**
|
||
- `emoji_base64` (str): 表情包的base64编码
|
||
- `stream_id` (str): 聊天流ID
|
||
- `storage_message` (bool): 是否存储消息到数据库
|
||
|
||
**Returns:**
|
||
- `bool` - 是否发送成功
|
||
|
||
### 3. 发送图片
|
||
```python
|
||
async def image_to_stream(image_base64: str, stream_id: str, storage_message: bool = True) -> bool:
|
||
```
|
||
向指定流发送图片。
|
||
|
||
**Args:**
|
||
- `image_base64` (str): 图片的base64编码
|
||
- `stream_id` (str): 聊天流ID
|
||
- `storage_message` (bool): 是否存储消息到数据库
|
||
|
||
**Returns:**
|
||
- `bool` - 是否发送成功
|
||
|
||
### 4. 发送命令
|
||
```python
|
||
async def command_to_stream(command: Union[str, dict], stream_id: str, storage_message: bool = True, display_message: str = "") -> bool:
|
||
```
|
||
向指定流发送命令。
|
||
|
||
**Args:**
|
||
- `command` (Union[str, dict]): 命令内容
|
||
- `stream_id` (str): 聊天流ID
|
||
- `storage_message` (bool): 是否存储消息到数据库
|
||
- `display_message` (str): 显示消息
|
||
|
||
**Returns:**
|
||
- `bool` - 是否发送成功
|
||
|
||
### 5. 发送自定义类型消息
|
||
```python
|
||
async def custom_to_stream(
|
||
message_type: str,
|
||
content: str,
|
||
stream_id: str,
|
||
display_message: str = "",
|
||
typing: bool = False,
|
||
reply_to: str = "",
|
||
storage_message: bool = True,
|
||
show_log: bool = True,
|
||
) -> bool:
|
||
```
|
||
向指定流发送自定义类型消息。
|
||
|
||
**Args:**
|
||
- `message_type` (str): 消息类型,如"text"、"image"、"emoji"、"video"、"file"等
|
||
- `content` (str): 消息内容(通常是base64编码或文本)
|
||
- `stream_id` (str): 聊天流ID
|
||
- `display_message` (str): 显示消息
|
||
- `typing` (bool): 是否显示正在输入
|
||
- `reply_to` (str): 回复消息,格式为"发送者:消息内容"
|
||
- `storage_message` (bool): 是否存储消息到数据库
|
||
- `show_log` (bool): 是否显示日志
|
||
|
||
**Returns:**
|
||
- `bool` - 是否发送成功
|
||
|
||
## 使用示例
|
||
|
||
### 1. 基础文本发送,并回复消息
|
||
|
||
```python
|
||
from src.plugin_system.apis import send_api
|
||
|
||
async def send_hello(chat_stream):
|
||
"""发送问候消息"""
|
||
|
||
success = await send_api.text_to_stream(
|
||
text="Hello, world!",
|
||
stream_id=chat_stream.stream_id,
|
||
typing=True,
|
||
reply_to="User:How are you?",
|
||
storage_message=True
|
||
)
|
||
|
||
return success
|
||
```
|
||
|
||
### 2. 发送表情包
|
||
|
||
```python
|
||
from src.plugin_system.apis import emoji_api
|
||
async def send_emoji_reaction(chat_stream, emotion):
|
||
"""根据情感发送表情包"""
|
||
# 获取表情包
|
||
emoji_result = await emoji_api.get_by_emotion(emotion)
|
||
if not emoji_result:
|
||
return False
|
||
|
||
emoji_base64, description, matched_emotion = emoji_result
|
||
|
||
# 发送表情包
|
||
success = await send_api.emoji_to_stream(
|
||
emoji_base64=emoji_base64,
|
||
stream_id=chat_stream.stream_id,
|
||
storage_message=False # 不存储到数据库
|
||
)
|
||
|
||
return success
|
||
```
|
||
|
||
## 消息类型说明
|
||
|
||
### 支持的消息类型
|
||
- `"text"`:纯文本消息
|
||
- `"emoji"`:表情包消息
|
||
- `"image"`:图片消息
|
||
- `"command"`:命令消息
|
||
- `"video"`:视频消息(如果支持)
|
||
- `"audio"`:音频消息(如果支持)
|
||
|
||
### 回复格式
|
||
回复消息使用格式:`"发送者:消息内容"` 或 `"发送者:消息内容"`
|
||
|
||
系统会自动查找匹配的原始消息并进行回复。
|
||
|
||
## 注意事项
|
||
|
||
1. **异步操作**:所有发送函数都是异步的,必须使用`await`
|
||
2. **错误处理**:发送失败时返回False,成功时返回True
|
||
3. **发送频率**:注意控制发送频率,避免被平台限制
|
||
4. **内容限制**:注意平台对消息内容和长度的限制
|
||
5. **权限检查**:确保机器人有发送消息的权限
|
||
6. **编码格式**:图片和表情包需要使用base64编码
|
||
7. **存储选项**:可以选择是否将发送的消息存储到数据库 |