[零基础级]Haty(Matrix)添加自定义表情包

发布于 2022-12-17  1,629 次阅读


由于本人没有MacOS,所以无法对于在该系统环境下可能出现的问题给出解决方案,如有疑问可以留言。本文主要针对Windows用户,对于Linux用户以及高水平Android用户有部分内容不适用。

前言

Haty是以Matrix&Element为基础搭建的去中心化端到端加密即时通讯平台。具体介绍请参考本文,在此不多赘述。
而相应的,由于Element集成服务器不开源等问题,用惯了QQ微信等平台的Matrix用户面对着一个问题:如何自定义表情包?
对于这个绊脚石,今天本人就给出一个可以跨平台自定义表情包的解决方案:stickerpicker
GitHub:https://github.com/maunium/stickerpicker

通用步骤(全平台通用)

准备阶段

首先,你需要准备:
1. 一个电脑
2. Python环境
3. 静态页面托管平台(Haty用户可以联系我托管)
4. 可以突破网络封锁的工具(很可能需要)
5. Git(可选)
6. 配置好的Termux(Android用户专属)

操作步骤

第一步,你需要将用到的源码给获取到本地。
git clone https://github.com/maunium/stickerpicker.git
然后在stickerpicker(就是克隆下来的仓库的根目录)里面使用以下命令安装(此处Windows用户一定不会成功,解决方法见后文)
pip install .
此命令会安装依赖,所以如果你不是开发者且初次使用pip时执行该命令时间会较长。

导入本地图片(该项目实际上同时提供了导入telegram贴纸的方法,仅进行简单讲解)

在项目根目录下创建一个新目录,然后将所有的想要导入的图片放置在内,注意命名;如果需要排序,在文件名最前面加上序号。
例如:有三张想要导入的图片,分别是



你想要在使用表情包时显示名称,比如第一张显示双子,第二张是月亮,第三张是树王,那么命名应该是:
双子.jpg,月亮.jpg,树王.jpg(后缀名按照实际情况定,此处的意思是修改后缀名前面的字符)。
同时假如想要树王在表情包里面是第一个表情,双子和月亮分别为二三,命名应该是:
1树王.jpg,2双子.jpg,3月亮.jpg(此处必须是数字)。
然后执行命令打包。
sticker-pack <pack directory> --add-to-index web/packs/
此处<pack directory>指的是放图片的目录,web/packs/是输出目录,如果你不明白此处相对目录的概念,请一定在仓库根目录执行。
例如,你新建文件夹名为test,那此处命令应该为
sticker-pack test --add-to-index web/packs/
此时如果直接打包会以文件夹的名称命名贴纸包,因此你可以再追加--title <custom title>命名,比如你想上传的是test文件夹里面的图片,但是贴纸包想要命名为Favor,则命令应该为
sticker-pack test --add-to-index web/packs/ --title Favor

如果想要直接从telegram里面获取已有的贴纸包,可以通过这个命令进行
sticker-import <pack_url>

无论是通过什么方式导入,第一次使用时都需要登录Matrix(通过telegram导入还需要登录telegram)。Matrix的Homeserver以及Access Token可以在Settings的Help&About最下面找到。如果使用Haty网页版中文译本,则是在设置里面的“帮助与关于”一页最下方的“访问令牌”处。
之后静待上传完毕即可。
执行完毕后你需要将web文件夹部署为静态页面,在此不多赘述,Haty用户可以直接联系我部署。

导入贴纸包

你需要在Element-Desktop或者在Haty网页端执行该操作。

随意点开一个对话框,输入/devtools并发送。
然后点进显示的页面里面的Other标题下第一项“Explore account data”,寻找m.widgets(如果找不到就点最后一项继续找,此处最后一项不是指Back和Send)
如果实在找不到,就自定义(就是那个custom选项)一个,Enevt Type填m.widgets
点进去,删掉所有内容,使其变成下面的样子,请注意千万不要盲目复制

{
    "stickerpicker": {
        "content": {
            "type": "m.stickerpicker",
            "url": "你的静态页面?theme=$theme",
            "name": "Stickerpicker",
            "data": {}
        },
        "sender": "你的ID",
        "state_key": "stickerpicker",
        "type": "m.widget",
        "id": "stickerpicker"
    }
}

此处静态页面以https:// 开头,ID形式是@yourname:example.com,其中yourname是你的用户名(不是昵称),example.com是实例名。例如我的用户名是test,实例是example.com,静态页面地址是https://example.com/testpage,那应该输入以下内容(千万不要盲目复制)

{
    "stickerpicker": {
        "content": {
            "type": "m.stickerpicker",
            "url": "https://example.com/testpage?theme=$theme",
            "name": "Stickerpicker",
            "data": {}
        },
        "sender": "@test:example.com",
        "state_key": "stickerpicker",
        "type": "m.widget",
        "id": "stickerpicker"
    }
}

确认无误后点击Send发送即可。
如果后续想要取消自定义表情包,将此处内容改为{}即可。
输入完毕后重启Element即可使用,且多端同步。

Windows用户专属问题

Git,Python怎么安装?

资深大佬们别笑,真的有人不会。
Git去该网址下载,请注意提前了解你的Windows位数并据此在Standalone Installer一栏下选择你的安装包,x86下载32-bit,x64下载64-bit
安装傻瓜式全打勾即可。
Python去该网址下载,同样注意位数,下载3.x最新版本,并且要在Windows Installer选择。
安装开始先别急,把最下面两个框都勾上,然后点第二项,就是Customize installation,看看第一页是不是全部勾选状态,如果是,直接Next。
第二页确保前四项全部勾选或者取消勾选第一项,注意下面三项空着就行,在这里可以更改安装目录。确认无误后直接Install就可以了。
打开命令行,输入该命令
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
(此处是换源,换成清华源,可以让pip速度有显著提升)

如何打开命令行

Win+R打开运行,输入cmd回车即可
想要在指定目录下运行,在该目录下按住Shift键同时按鼠标右键,在弹出的菜单里点击“在终端打开”或者类似于在powershell/命令提示符打开的字样即可。

pip install . 出错怎么办

这就是Windows用户面临的问题。
打开Python IDLE(在Windows菜单全部程序那里可以找到)或者其他的代码编辑器(别用记事本),找到这个仓库sticker文件夹里面的get_version.py,将第九行,也就是"HOME": os.environ["HOME"],的第二个HOME改成HOMEPATH,然后将以下代码覆盖掉根目录的setup.py。

import setuptools

from sticker.get_version import git_tag, git_revision, version, linkified_version

with open("requirements.txt") as reqs:
    install_requires = reqs.read().splitlines()

try:
    #long_desc = open("README.md").read()
    pass
except IOError:
    long_desc = "Failed to read README.md"

with open("sticker/version.py", "w") as version_file:
    version_file.write(f"""# Generated in setup.py

git_tag = {git_tag!r}
git_revision = {git_revision!r}
version = {version!r}
linkified_version = {linkified_version!r}
""")

setuptools.setup(
    name="maunium-stickerpicker",
    version=version,
    url="https://github.com/maunium/stickerpicker",

    author="Tulir Asokan",
    author_email="[email protected]",

    description="A fast and simple Matrix sticker picker widget",
    long_description="",
    long_description_content_type="text/markdown",

    packages=setuptools.find_packages(),

    install_requires=install_requires,
    python_requires="~=3.6",

    classifiers=[
        "Development Status :: 4 - Beta",
        "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)",
        "Framework :: AsyncIO",
        "Programming Language :: Python",
        "Programming Language :: Python :: 3",
        "Programming Language :: Python :: 3.6",
        "Programming Language :: Python :: 3.7",
        "Programming Language :: Python :: 3.8",
        "Programming Language :: Python :: 3.9",
    ],
    entry_points={"console_scripts": [
        "sticker-import=sticker.stickerimport:cmd",
        "sticker-pack=sticker.pack:cmd",
    ]},
)

保存再运行即可。

使用Git出现网络错误怎么办

你可以直接在GitHub下载zip文件。
另外如果你找不到可以突破网络封锁的工具,可以试试一些反代站,就比如你可以将github.com替换为git.codeproxy.net解决问题。

我还是不会怎么办

欢迎提问或者Google一下,“如何开关机”这类水平的问题恕不解答。

本人水平有限,如有缺漏谬误,请及时指出。如果你恰好在MacOS上遇到此类问题,欢迎一起探讨!