如何使用discord.py向VoiceChannel语音频道发送聊天消息?
核心原因
直接对VoiceChannel实例调用send()方法无法发送消息,是因为VoiceChannel实体仅对应音视频传输通道,不承载语音频道的文本聊天能力。语音频道的公屏聊天由其绑定的专属文本频道实体处理,相关属性归类在VoiceChannel的成员属性条目下,不属于频道消息发送的通用方法章节,查阅时容易遗漏。
正确实现代码
基础写法:
# 获取目标语音频道实例 voice_channel = self.bot.get_channel(填入语音频道ID) # 调用语音频道关联的文本频道对象发送消息 await voice_channel.text_channel.send("Hello World")
兼容未开启内置文本聊天场景的写法:
voice_channel = self.bot.get_channel(填入语音频道ID) # 先判断关联文本频道是否存在、是否有权限访问 if voice_channel.text_channel: await voice_channel.text_channel.send("Hello World") else: # 自行实现无可用文本频道时的处理逻辑 pass
注意事项
- 机器人需持有目标语音频道的查看权限,以及对应关联文本频道的发送消息权限,否则会抛出权限不足异常
- 上述写法要求discord.py版本为2.0及以上,1.7.x及更早版本未适配语音频道内置文本频道特性,不存在
text_channel属性,需要升级依赖版本后才可使用 - 若服务器管理员手动关闭了指定语音频道的内置文本聊天功能,
text_channel属性会返回空值,必须做非空判断避免程序崩溃
内容的提问来源于stack exchange,提问作者Charles Sosmeña
相关产品推荐
相关产品推荐

