Skip to content
On this page

八嘎 hentai 无路赛

DANGER

本文档还没有写完比如没准备好钉宫三连语音包,欢迎 有志之士(hentai xiong di)提供十分建议在阅读的时候不要声音拉满 + 外放 除非你跟

太好听了吧唐可可一样有社交牛逼症

虽然有点突然,但你是否有想过机器人能够对你钉宫三连呢?

Graia Framework Community
G
GraiaX
无路赛
EroEroBot
贴心的音量条:

100%

还记得上一节我们简单的讲解消息链时候,给出了这样一种构建图片元素的办法:

python
Image(path="./Graiax/EroEroBot/eropic.jpg")
1

很简单,对吧,只需要传入一个 path ,就可以构建一个图片元素实例。 如果只有这么简单,那怎么可能专门拿出一个章节来讲解这个呢?

接下来,让我们好好讲解一下图片元素的父类 —— 多媒体元素 MultimediaElement

什么是 MultimediaElement

多媒体元素 MultimediaElement,是 graia-ariadne 为了方便构建类似图片这种需要上传二进制数据的元素所创造的, 目前其子类包含有 ImageFlashImageVoice

下面,就让(举例狂魔)给大家举几个例子:

python
>>> 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 对象
1
2
3
4
5
6
7
8

关于发送语音的一些小问题

众所周知 tx 服务器只接受 amrsilk 两种格式的语音(其中 silk 格式支持更高的码率)。 而语音发送一直是困扰着 Mirai 用户的问题之一,与隔壁(go-cqhttp)不同的是,隔壁内置了语音转换器帮你转换音频格式,而我们只能自力更生。

截至目前,Python 有不少第三方库能够帮你将音频转换成 silk

以下我们将会以 graiax-silkcoder 举例(因为其是现阶段上述转换器中唯一支持 wav/pcm 以外格式的编解码器虽然是借助 ffmpeg 这种牛刀不过 0.3.x 开始支持 libsndfile 了,占用会超小(不到 1Mb 大概)

首先安装 graiax-silkcoder

WARNING

该文档最后更新的时候,graiax-silkcoder 的版本的 0.3.0
现在的最新版本为 PyPI版本

bash
# 普通安装
poetry add graiax-silkcoder
# 假设你的环境中没有安装 ffmpeg 但又需要 wav 以外的音频格式转换
poetry add graiax-silkcoder[ffmpeg]
# 假设你想要的音频格式被 libsndfile 支持又不想要 ffmpeg 这么大的库
poetry add graiax-silkcoder[libsndfile]
1
2
3
4
5
6
bash
# 普通安装
pip install graiax-silkcoder
# 假设你的环境中没有安装 ffmpeg 但又需要 wav 以外的音频格式转换
pip install graiax-silkcoder[ffmpeg]
# 假设你想要的音频格式被 libsndfile 支持又不想要 ffmpeg 这么大的库
pip install graiax-silkcoder[libsndfile]
1
2
3
4
5
6

快速简单地创建一个 Voice 对象:

python
from graiax import silkcoder

audio_bytes = await silkcoder.async_encode("Graiax/EroEroBot/hentai.m4a", ios_adaptive=True)
Voice(data_bytes=audio_bytes)
1
2
3
4
python
from graiax import silkcoder

audio_bytes = await silkcoder.async_encode("Graiax/EroEroBot/hentai.m4a")
Voice(data_bytes=audio_bytes)
1
2
3
4
python
from graiax import silkcoder

audio_bytes = await silkcoder.encode("Graiax/EroEroBot/hentai.m4a")
Voice(data_bytes=audio_bytes)
1
2
3
4

TIP

0.2.6 + 新增的 ios_adaptive 参数,是为了让音频能够被 iOS 客户端的用户听到。
(因为 iOS 客户端的只能播放 25kbps 以下(不含) 码率的音频)

把 Voice 对象放入 MessageChain 中:

python
>>> MessageChain.create(Voice(data_bytes=audio_bytes))
1

TIP

详细用法请去其Pypi 页面查看

这次就不能说逊了,因为这就是我写的$h!t Mountain
(注:此处的“我”指该文档的主要作者 —— I Love Study(详见鸣谢))

Tip:

本文档使用 CC BY-NC-SA 4.0 协议进行共享,详情见 README

MIT License