八嘎 hentai 无路赛
DANGER
本文档还没有写完比如没准备好钉宫三连语音包,欢迎 有志之士提供十分建议在阅读的时候不要声音拉满 + 外放 除非你跟唐可可一样有社交牛逼症
虽然有点突然,但你是否有想过机器人能够对你钉宫三连呢?
100%
还记得上一节我们简单的讲解消息链时候,给出了这样一种构建图片元素的办法:
Image(path="./GraiaX/EroEroBot/eropic.jpg")
很简单,对吧,只需要传入一个 path
,就可以构建一个图片元素实例。 如果只有这么简单,那怎么可能专门拿出一个章节来讲解这个呢?
接下来,让我们好好讲解一下图片元素的父类 —— 多媒体元素 MultimediaElement
什么是 MultimediaElement
多媒体元素 MultimediaElement
,是 Graia Ariadne 为了方便构建类似图片这种需要上传二进制数据的元素所创造的, 目前其子类包含有 Image
、FlashImage
、Voice
。
下面,就让我给大家举几个例子:
>>> path_data = "./GraiaX/EroEroBot/eropic.jpg"
>>> bytes_data: bytes = Path("./GraiaX/EroEroBot/eropic.jpg").read_bytes()
>>> base64_data: str = b64encode(bytes_data).decode()
>>> Image(path=path_data) # 通过传入 path 字符串创建 Image 对象
>>> Image(path=Path(path_data)) # 通过传入 Path 实例创建 Image 对象
>>> Image(data_bytes=bytes_data) # 通过传入二进制数据创建 Image 对象
>>> Image(base64=base64_data) # 通过传入 base64 编码的二进制数据创建 Image 对象
2
3
4
5
6
7
8
关于发送语音的一些小问题
众所周知 tx 服务器只接受 amr
跟 silk
两种格式的语音(其中 silk
格式支持更高的码率)。 而语音发送一直是困扰着 Mirai
用户的问题之一,与隔壁(go-cqhttp
)不同的是,隔壁内置了语音转换器帮你转换音频格式,而我们只能自力更生。
截至目前,Python 有不少第三方库能够帮你将音频转换成 silk
以下我们将会以 GraiaX Silkcoder 举例(因为其是现阶段上述转换器中唯一支持 wav/pcm 以外格式的编解码器虽然是借助 ffmpeg 这种牛刀不过 0.3.x 开始支持 libsndfile 了,占用会超小(不到 1Mb 大概))
首先安装 GraiaX Silkcoder:
WARNING
该文档最后更新的时候,GraiaX Silkcoder 的版本的 0.3.0
现在的最新版本为
# 普通安装
poetry add graiax-silkcoder
# 假设你的环境中没有安装 ffmpeg 但又需要 wav 以外的音频格式转换
poetry add graiax-silkcoder[ffmpeg]
# 假设你想要的音频格式被 libsndfile 支持又不想要 ffmpeg 这么大的库
poetry add graiax-silkcoder[libsndfile]
2
3
4
5
6
# 普通安装
pip install graiax-silkcoder
# 假设你的环境中没有安装 ffmpeg 但又需要 wav 以外的音频格式转换
pip install graiax-silkcoder[ffmpeg]
# 假设你想要的音频格式被 libsndfile 支持又不想要 ffmpeg 这么大的库
pip install graiax-silkcoder[libsndfile]
2
3
4
5
6
快速简单地创建一个 Voice 对象:
from graiax import silkcoder
audio_bytes = await silkcoder.async_encode("GraiaX/EroEroBot/hentai.m4a", ios_adaptive=True)
Voice(data_bytes=audio_bytes)
2
3
4
from graiax import silkcoder
audio_bytes = await silkcoder.async_encode("GraiaX/EroEroBot/hentai.m4a")
Voice(data_bytes=audio_bytes)
2
3
4
from graiax import silkcoder
audio_bytes = await silkcoder.encode("GraiaX/EroEroBot/hentai.m4a")
Voice(data_bytes=audio_bytes)
2
3
4
TIP
0.2.6 + 新增的 ios_adaptive
参数,是为了让音频能够被 iOS 客户端的用户听到。
(因为 iOS 客户端的只能播放 25kbps 以下(不含) 码率的音频)
把 Voice 对象放入 MessageChain 中:
>>> MessageChain.create(Voice(data_bytes=audio_bytes))
相关链接
https://graia.cn/ariadne/feature/msg-chain/
EroEroBot:
本章完整示例可在 EroEroBot/modules/multimedia_message.py 找到。