update builtin emojis

This commit is contained in:
Yuxin Wu
2025-01-28 23:47:52 -08:00
parent a508e29003
commit 837a9ef2f7
27 changed files with 1173 additions and 20 deletions
+4 -1
View File
@@ -113,7 +113,10 @@ class WeChatMsg(object):
return "[Money Transfer]"
elif self.type == TYPE_REPLY:
pq = PyQuery(self.content_xml_ready)
msg = pq('title').text()
titles = pq('title')
if len(titles) == 0:
return self.content_xml_ready
msg = titles[0].text
# TODO parse reply.
return msg
else:
+19 -9
View File
@@ -2,10 +2,9 @@
# -*- coding: UTF-8 -*-
import os
import functools
import re
import re
import json
import struct
from .common.textutil import get_file_b64
@@ -40,10 +39,20 @@ TEMPLATE = """.{name} {{
background-size: 24px 24px;
}}"""
def _css_class_name(s):
s = s.replace("/", "_")
s = s.replace(".", "_")
return "smiley_" + s
def _css_class_name(name: str) -> str:
"""
Sanitizes a string to be a valid CSS class name by replacing invalid characters with underscores.
"""
# CSS class names must start with a letter or underscore, followed by letters, digits, hyphens, or underscores
name = re.sub(r'[^a-zA-Z0-9_-]', '_', name)
# Ensure the first character is a valid start character (letter or underscore)
if not name[0].isalpha() and name[0] != '_':
name = '_' + name
return "smiley_" + name
class SmileyProvider(object):
def __init__(self, html_replace=True):
@@ -76,7 +85,6 @@ class SmileyProvider(object):
if k in msg:
msg = msg.replace(k, self.gen_replace_elem(v))
return msg
return msg
def gen_used_smiley_css(self):
ret = HEAD
@@ -88,6 +96,8 @@ class SmileyProvider(object):
if __name__ == '__main__':
smiley = SmileyProvider()
msg = u"[挥手]哈哈呵呵hihi\U0001f684\u2728\u0001 /::<\ue415"
msg = u"[天啊]哈哈呵呵hihi\U0001f684\u2728\u0001 /::<\ue415"
msg = smiley.replace_smileycode(msg)
smiley.gen_used_smiley_css()
print(msg)
print()
print(smiley.gen_used_smiley_css())
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

+1
View File
@@ -0,0 +1 @@
Copied from /data/data/com.tencent.mm/files/public/emoji/newemoji
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

-2
View File
@@ -1,2 +0,0 @@
{
"version": 86}
+181 -1
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<newemoji>
<emoji>
<emoji>
<key><![CDATA[[Smirk]]]></key>
<cn-value><![CDATA[[奸笑]]]></cn-value>
<qq-value><![CDATA[[奸笑]]]></qq-value>
@@ -272,4 +272,184 @@
<fileName>KeepFighting.png</fileName>
<eggIndex>2038</eggIndex>
</emoji>
<emoji>
<key><![CDATA[[Boring]]]></key>
<cn-value><![CDATA[[翻白眼]]]></cn-value>
<qq-value><![CDATA[[翻白眼]]]></qq-value>
<en-value><![CDATA[[Boring]]]></en-value>
<tw-value><![CDATA[[翻白眼]]]></tw-value>
<th-value><![CDATA[[Boring]]]></th-value>
<fileName>Boring.png</fileName>
<eggIndex>2043</eggIndex>
</emoji>
<emoji>
<key><![CDATA[[666]]]></key>
<cn-value><![CDATA[[666]]]></cn-value>
<qq-value><![CDATA[[666]]]></qq-value>
<en-value><![CDATA[[Awesome]]]></en-value>
<tw-value><![CDATA[[666]]]></tw-value>
<th-value><![CDATA[[Awesome]]]></th-value>
<fileName>666.png</fileName>
<eggIndex>2044</eggIndex>
</emoji>
<emoji>
<key><![CDATA[[LetMeSee]]]></key>
<cn-value><![CDATA[[让我看看]]]></cn-value>
<qq-value><![CDATA[[让我看看]]]></qq-value>
<en-value><![CDATA[[LetMeSee]]]></en-value>
<tw-value><![CDATA[[讓我看看]]]></tw-value>
<th-value><![CDATA[[LetMeSee]]]></th-value>
<fileName>LetMeSee.png</fileName>
<eggIndex>2045</eggIndex>
</emoji>
<emoji>
<key><![CDATA[[Sigh]]]></key>
<cn-value><![CDATA[[叹气]]]></cn-value>
<qq-value><![CDATA[[叹气]]]></qq-value>
<en-value><![CDATA[[Sigh]]]></en-value>
<tw-value><![CDATA[[嘆息]]]></tw-value>
<th-value><![CDATA[[Sigh]]]></th-value>
<fileName>Sigh.png</fileName>
<eggIndex>2046</eggIndex>
</emoji>
<emoji>
<key><![CDATA[[Hurt]]]></key>
<cn-value><![CDATA[[苦涩]]]></cn-value>
<qq-value><![CDATA[[苦涩]]]></qq-value>
<en-value><![CDATA[[Hurt]]]></en-value>
<tw-value><![CDATA[[難受]]]></tw-value>
<th-value><![CDATA[[Hurt]]]></th-value>
<fileName>Hurt.png</fileName>
<eggIndex>2047</eggIndex>
</emoji>
<emoji>
<key><![CDATA[[Broken]]]></key>
<cn-value><![CDATA[[裂开]]]></cn-value>
<qq-value><![CDATA[[裂开]]]></qq-value>
<en-value><![CDATA[[Broken]]]></en-value>
<tw-value><![CDATA[[崩潰]]]></tw-value>
<th-value><![CDATA[[Broken]]]></th-value>
<fileName>Broken.png</fileName>
<eggIndex>2048</eggIndex>
</emoji>
<emoji>
<key><![CDATA[[Flushed]]]></key>
<cn-value><![CDATA[[脸红]]]></cn-value>
<qq-value><![CDATA[[脸红]]]></qq-value>
<en-value><![CDATA[[Flushed]]]></en-value>
<tw-value><![CDATA[[臉紅]]]></tw-value>
<th-value><![CDATA[[Flushed]]]></th-value>
<fileName>Flushed.png</fileName>
<eggIndex>2049</eggIndex>
</emoji>
<emoji>
<key><![CDATA[[Happy]]]></key>
<cn-value><![CDATA[[笑脸]]]></cn-value>
<qq-value><![CDATA[[笑脸]]]></qq-value>
<en-value><![CDATA[[Happy]]]></en-value>
<tw-value><![CDATA[[笑臉]]]></tw-value>
<th-value><![CDATA[[Happy]]]></th-value>
<fileName>Happy.png</fileName>
<eggIndex>2050</eggIndex>
</emoji>
<emoji>
<key><![CDATA[[Lol]]]></key>
<cn-value><![CDATA[[破涕为笑]]]></cn-value>
<qq-value><![CDATA[[破涕为笑]]]></qq-value>
<en-value><![CDATA[[Lol]]]></en-value>
<tw-value><![CDATA[[破涕為笑]]]></tw-value>
<th-value><![CDATA[[Lol]]]></th-value>
<fileName>Lol.png</fileName>
<eggIndex>2051</eggIndex>
</emoji>
<emoji>
<key><![CDATA[[Fireworks]]]></key>
<cn-value><![CDATA[[烟花]]]></cn-value>
<qq-value><![CDATA[[烟花]]]></qq-value>
<en-value><![CDATA[[Fireworks]]]></en-value>
<tw-value><![CDATA[[煙花]]]></tw-value>
<th-value><![CDATA[[Fireworks]]]></th-value>
<fileName>Fireworks.png</fileName>
<eggIndex>2052</eggIndex>
</emoji>
<emoji>
<key><![CDATA[[gift]]]></key>
<cn-value><![CDATA[[礼物]]]></cn-value>
<qq-value><![CDATA[[礼物]]]></qq-value>
<en-value><![CDATA[[Gift]]]></en-value>
<tw-value><![CDATA[[禮物]]]></tw-value>
<th-value><![CDATA[[Gift]]]></th-value>
<fileName>Gift.png</fileName>
<eggIndex>2053</eggIndex>
</emoji>
<emoji>
<key><![CDATA[[Party]]]></key>
<cn-value><![CDATA[[庆祝]]]></cn-value>
<qq-value><![CDATA[[庆祝]]]></qq-value>
<en-value><![CDATA[[Party]]]></en-value>
<tw-value><![CDATA[[慶祝]]]></tw-value>
<th-value><![CDATA[[Party]]]></th-value>
<fileName>Party.png</fileName>
<eggIndex>2054</eggIndex>
</emoji>
<emoji>
<key><![CDATA[[Terror]]]></key>
<cn-value><![CDATA[[恐惧]]]></cn-value>
<qq-value><![CDATA[[恐惧]]]></qq-value>
<en-value><![CDATA[[Terror]]]></en-value>
<tw-value><![CDATA[[恐懼]]]></tw-value>
<th-value><![CDATA[[Terror]]]></th-value>
<fileName>Terror.png</fileName>
<eggIndex>2055</eggIndex>
</emoji>
<emoji>
<key><![CDATA[[Duh]]]></key>
<cn-value><![CDATA[[无语]]]></cn-value>
<qq-value><![CDATA[[无语]]]></qq-value>
<en-value><![CDATA[[Duh]]]></en-value>
<tw-value><![CDATA[[無語]]]></tw-value>
<th-value><![CDATA[[Duh]]]></th-value>
<fileName>Duh.png</fileName>
<eggIndex>2056</eggIndex>
</emoji>
<emoji>
<key><![CDATA[[LetDown]]]></key>
<cn-value><![CDATA[[失望]]]></cn-value>
<qq-value><![CDATA[[失望]]]></qq-value>
<en-value><![CDATA[[Let Down]]]></en-value>
<tw-value><![CDATA[[失望]]]></tw-value>
<th-value><![CDATA[[Let Down]]]></th-value>
<fileName>Let Down.png</fileName>
<eggIndex>2057</eggIndex>
</emoji>
<emoji>
<key><![CDATA[[Sick]]]></key>
<cn-value><![CDATA[[生病]]]></cn-value>
<qq-value><![CDATA[[生病]]]></qq-value>
<en-value><![CDATA[[Sick]]]></en-value>
<tw-value><![CDATA[[生病]]]></tw-value>
<th-value><![CDATA[[Sick]]]></th-value>
<fileName>Sick.png</fileName>
<eggIndex>2058</eggIndex>
</emoji>
<emoji>
<key><![CDATA[[Worship]]]></key>
<cn-value><![CDATA[[合十]]]></cn-value>
<qq-value><![CDATA[[合十]]]></qq-value>
<en-value><![CDATA[[Worship]]]></en-value>
<tw-value><![CDATA[[合十]]]></tw-value>
<th-value><![CDATA[[Worship]]]></th-value>
<fileName>Worship.png</fileName>
<eggIndex>2059</eggIndex>
</emoji>
<emoji>
<key><![CDATA[[Firecracker]]]></key>
<cn-value><![CDATA[[爆竹]]]></cn-value>
<qq-value><![CDATA[[爆竹]]]></qq-value>
<en-value><![CDATA[[Firecracker]]]></en-value>
<tw-value><![CDATA[[爆竹]]]></tw-value>
<th-value><![CDATA[[Firecracker]]]></th-value>
<fileName>Firecracker.png</fileName>
<eggIndex>2060</eggIndex>
</emoji>
</newemoji>
+2 -1
View File
@@ -2,6 +2,7 @@
# -*- coding: UTF-8 -*-
import xml.etree.ElementTree as ET
import struct
import os
import json
@@ -84,4 +85,4 @@ if __name__ == "__main__":
add(parse_unicode_smiley(), "unicode-smiley.json")
with open('tencent-smiley.json', 'w') as f:
json.dump(smileys, f)
json.dump(smileys, f, indent=2)
File diff suppressed because one or more lines are too long
+4 -4
View File
@@ -3,7 +3,7 @@ html,
body {
word-break: normal;
word-wrap: break-word;
}
}
/* for single line hack */
.chatListColumn .nickName,
@@ -145,7 +145,7 @@ body {
text-align: center;
}
body {
position: relative;
position: relative;
padding: 20px 0;
box-sizing: border-box;
}
@@ -5234,7 +5234,7 @@ a.btnBlue:active .btnBluePanel {
}
.you .cloud {
float: left;
min-width: 50px;
/* *min-width: 50px; */
max-width: 300px;
margin: 0 0 0 15px;
}
@@ -5389,7 +5389,7 @@ a.btnBlue:active .btnBluePanel {
}
.me .cloud {
float: right;
min-width: 50px;
/* *min-width: 50px; */
max-width: 300px;
margin: 0 15px 0 0;
}
+2 -1
View File
@@ -16,7 +16,8 @@ class WxgfAndroidDecoder:
self.ws = create_connection(server)
def __del__(self):
self.ws.close()
if self.has_server():
self.ws.close()
def has_server(self) -> bool:
return hasattr(self, 'ws')