正在召唤神秘力量

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

作者:七夜草时间:2022-12-27 22:24:00分类:开发

由于本人没有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贴纸的方法,仅进行简单讲解)

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

例如:有三张想要导入的图片,分别是

101535960_p0_master1200.jpg

101685263_p0_master1200.jpg

103225680_p0_master1200.jpg

你想要在使用表情包时显示名称,比如第一张显示双子,第二张是月亮,第三张是树王,那么命名应该是:

双子.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上遇到此类问题,欢迎一起探讨!

#Matrix#Synapse#技巧#Element#Python#Git