概述
Discord 适配器提供完整的 Discord 平台集成功能,包括消息处理、图像管理、语音连接等。所有功能基于 discord.py 库的原生 API 实现。核心 API
DiscordAdapter 类
Discord 平台适配器主类,提供与 Discord 平台交互的完整接口。消息相关方法
send_message(target_type, target_id, message)
发送消息到指定频道。
参数:
target_type(str): 目标类型,通常为 “channel”target_id(str): 目标频道 IDmessage(MessageChain): 要发送的消息链
- 支持文本消息发送
- 支持图像文件批量发送
- 自动处理消息格式转换
reply_message(message_source, message, quote_origin=False)
回复指定消息。
参数:
message_source(MessageEvent): 要回复的原始消息事件message(MessageChain): 回复内容quote_origin(bool): 是否引用原消息
语音相关方法
join_voice_channel(guild_id, channel_id, user_id=None)
加入指定的语音频道。
参数:
guild_id(int): Discord 服务器 IDchannel_id(int): 语音频道 IDuser_id(int, optional): 请求用户 ID,用于权限验证
discord.VoiceClient: 语音客户端对象
VoicePermissionError: 权限不足VoiceNetworkError: 网络连接问题VoiceConnectionError: 其他连接错误
leave_voice_channel(guild_id)
离开指定服务器的语音频道。
参数:
guild_id(int): Discord 服务器 ID
bool: 成功断开返回True
get_voice_client(guild_id)
获取指定服务器的语音客户端对象。
参数:
guild_id(int): Discord 服务器 ID
discord.VoiceClient: 语音客户端对象,如果存在连接None: 如果没有活跃连接
is_connected_to_voice(guild_id)
检查是否连接到指定服务器的语音频道。
参数:
guild_id(int): Discord 服务器 ID
bool: 已连接返回True
get_voice_connection_status(guild_id)
获取语音连接的详细状态信息。
参数:
guild_id(int): Discord 服务器 ID
dict: 连接状态信息字典,如果存在连接None: 如果没有连接
list_active_voice_connections()
获取所有活跃的语音连接列表。
返回值:
List[dict]: 活跃连接状态列表
get_voice_channel_info(guild_id, channel_id)
获取指定语音频道的详细信息。
参数:
guild_id(int): 服务器 IDchannel_id(int): 频道 ID
dict: 频道信息字典None: 如果频道不存在
管理方法
is_muted(group_id)
检查群组是否被静音(Discord 适配器始终返回 False)。
参数:
group_id(int): 群组 ID
bool: 是否静音
register_listener(event_type, callback)
注册事件监听器。
参数:
event_type(Type[Event]): 事件类型callback(Callable): 回调函数
unregister_listener(event_type, callback)
注销事件监听器。
参数:
event_type(Type[Event]): 事件类型callback(Callable): 回调函数
run_async()
启动 Discord 适配器,建立与 Discord 的连接。
功能:
- 初始化语音管理器
- 启动连接监控
- 建立 WebSocket 连接
kill()
关闭 Discord 适配器。
返回值:
bool: 是否成功关闭
- 断开所有语音连接
- 关闭 Discord 客户端
- 清理资源
消息转换器 API
DiscordMessageConverter 类
负责在 LangBot 和 Discord 消息格式之间进行转换。yiri2target(message_chain)
将 LangBot MessageChain 转换为 Discord 格式。
参数:
message_chain(MessageChain): LangBot 消息链
Tuple[str, List[discord.File]]: (文本内容, 文件列表)
Plain: 纯文本内容Image: 图像内容(支持 base64、URL、文件路径)At: @ 提及(会被移除)Forward: 转发消息
- Base64 图像: 自动检测格式并解码
- URL 图像: 异步下载并转换
- 文件路径: 读取本地文件
- 格式检测: 支持 PNG、JPG、GIF、WebP
- 错误处理: 跳过无效图像
target2yiri(message)
将 Discord 消息转换为 LangBot MessageChain。
参数:
message(discord.Message): Discord 消息对象
MessageChain: LangBot 消息链
- 文本内容 →
Plain元素 - 附件图像 →
Image元素 - 嵌入内容 →
Plain元素(描述文本)
事件转换器 API
DiscordEventConverter 类
负责将 Discord 事件转换为 LangBot 平台事件。target2yiri(message)
将 Discord 消息转换为 LangBot MessageEvent。
参数:
message(discord.Message): Discord 消息对象
MessageEvent: LangBot 消息事件
message_chain: 转换后的消息链sender: 发送者信息query: 查询上下文信息
异常类
VoiceConnectionError
基础语音连接异常类。 属性:error_code(str): 错误代码guild_id(int): 相关服务器 IDtimestamp(datetime): 错误发生时间
"GUILD_NOT_FOUND": 服务器不存在"CHANNEL_NOT_FOUND": 频道不存在"MANAGER_NOT_READY": 语音管理器未初始化"OPUS_NOT_LOADED": Opus编码器未加载"UNKNOWN_ERROR": 未知错误
VoicePermissionError
语音权限异常,继承自VoiceConnectionError。
属性:
missing_permissions(List[str]): 缺失的权限列表user_id(int): 相关用户 IDchannel_id(int): 相关频道 ID
"user_not_in_channel": 用户不在语音频道中"member_not_found": 找不到用户"connect": Bot缺少连接权限"speak": Bot缺少发言权限
VoiceNetworkError
语音网络异常,继承自VoiceConnectionError。
属性:
retry_count(int): 重试次数last_attempt(datetime): 最后尝试时间
使用示例
综合消息处理
语音播放控制
状态监控
最佳实践
错误处理
资源管理
图像处理优化
注意: 本 API 文档基于实际的 discord.py 实现,涵盖了 Discord 适配器的完整功能集。图像处理功能无需额外依赖,语音功能需要安装可选依赖。
