mutan 89201

This commit is contained in:
46620 2021-08-18 20:51:37 +00:00
parent 9091f8c447
commit 05eb5bcc38
8 changed files with 170801 additions and 0 deletions

56773
patches/mutan/1371.patch Normal file

File diff suppressed because it is too large Load diff

56793
patches/mutan/87202.patch Normal file

File diff suppressed because it is too large Load diff

56793
patches/mutan/89201.patch Normal file

File diff suppressed because it is too large Load diff

24
patches/mutan/README.md Normal file
View file

@ -0,0 +1,24 @@
## DisTok CutTheCord: Mutant Standard Emoji Patch
This patch replaces internal emoji list with the custom emojis of mutant standard.
Custom color modifiers and mutant modifiers (paw, claw) are added too.
Additionally, a feature to generate diverse emojis are added. To use it, put the emoji you want, then write :skin-tone-, pick a skin tone, and remove the space between them (`:ok_hand::skin-tone-2:` etc). When you post that, it'll be sent as a diverse version of that emoji.
You'll need to pack in the right images to the apk. See BUILDING.md at the root of the repo for more information.
Various scripts are provided to help building of custom patches easier.
#### Bugs / Side effects
- Not all emojis are replaced
- Fitzpatrick values are not provided for non-human variants of mutated emojis
- Custom mutstd emojis won't be visible for users who aren't using a patch similar to this.
#### Available and tested on:
- 56.0
- 78.4 - Alpha
#### Disclaimer
This patch uses Mutant Standard emoji (https://mutant.tech), which are licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License (https://creativecommons.org/licenses/by-nc-sa/4.0/).

160
patches/mutan/emojipatch.py Normal file
View file

@ -0,0 +1,160 @@
import copy
import json
# Unicode hexes that will have Mutant Modifier (mm) applied to
mm_emojis = [0x1f446, 0x1f447, 0x1f448, 0x1f449, 0x1f44a, 0x1f44b, 0x1f44c,
0x1f44d, 0x1f44e, 0x1f44f, 0x1f450, 0x1f485, 0x1f4aa, 0x1f590,
0x1f595, 0x1f596, 0x1f64c, 0x1f64f, 0x1f918, 0x1f919, 0x1f91a,
0x1f91b, 0x1f91c, 0x1f91d, 0x1f91e, 0x1f933, 0x261d, 0x270a,
0x270b, 0x270c, 0x270d]
# Mutant Modifier names and their modifiers
mm_types = {"paw": "􁙐",
"claw": "􁙑"}
# Custom emojis that will be inserted to the end of an emoji category
custom_emojis = {"symbols": {"💯🌈": ["queer_100"],
"􁚚": ["dont_at", "no_at",
"no_mention", "dont_mention"],
"": ["neuter_symbol"],
"": ["androgyne_symbol"],
"": ["transgender_symbol"],
"": ["male_female_symbol"],
"": ["male_and_female_symbol"],
"": ["two_male_symbols"],
"": ["two_female_symbols"],
"": ["male_symbol"],
"": ["female_symbol"],
"🧡": ["orange_heart"],
"􁚅": ["labrys_symbol"],
"􁚄": ["bisexual_triangles"],
"􁚃": ["black_triangle"],
"􁚂": ["pink_triangle"]},
"objects": {"🧻": ["toilet_paper"],
"🧱": ["brick"],
"🧨": ["firecracker"],
"🦴": ["bone"],
"􁚖": ["d20"],
"􁚕": ["d12"],
"􁚔": ["d10"],
"􁚓": ["d8"],
"􁚒": ["d4"]},
"nature": {"􁚛🌈": ["furry_pride", "rainbow_paw"],
"􁚛": ["paw"],
"􁚘": ["awoo"],
"􁚙": ["dont_awoo", "no_awoo"],
"🧝": ["elf"],
"🦝": ["raccoon"],
"🦜": ["parrot"],
"🦚": ["peacock"],
"􁙦": ["demon"]},
"people": {"🧑✈": ["pilot"],
"🧑⚕": ["health_worker"],
"🧑🚀": ["astronaut"],
"🧑🔬": ["scientist"],
"🧑🔧": ["mechanic"],
"🧑💻": ["technologist"],
"🧑🍳": ["chef"],
"🧐": ["monocle"],
"🥺": ["pleading"],
"🥶": ["cold"],
"🥵": ["hot"],
"🥴": ["woozy"],
"🥳": ["party_face"],
"🥰": ["smile_hearts"],
"🤯": ["mind_blown"],
"🤮": ["vomiting"],
"🤭": ["hand_over_mouth"],
"🤬": ["swearing"],
"🤫": ["shush"],
"🤪": ["crazy"],
"🤩": ["starry_eyes"],
"🤨": ["raised_eyebrow"],
"🕵􁘫": ["detective"],
"💆􁘫": ["massage"],
"💁􁘫": ["tipping_hand"],
"􁚐": ["hot_shit"],
"􁚗": ["headpats"],
"🧜": ["merperson"]},
"flags": {"􁚁": ["transgender_flag"],
"􁚀": ["polysexual_flag"],
"􁙿": ["polyamory_flag"],
"􁙾": ["pansexual_flag"],
"􁙽": ["nonbinary_flag"],
"􁙼": ["neutrois_flag"],
"􁙻": ["intersex_flag"],
"􁙺": ["genderqueer_flag"],
"􁙹": ["genderfluid_flag"],
"􁙸": ["deminonbinary_flag"],
"􁙷": ["demigirl_flag"],
"􁙶": ["demiguy_flag"],
"􁙵": ["bisexual_flag"],
"􁙴": ["bigender_flag"],
"􁙳": ["bear_flag"],
"􁙲": ["asexual_flag"],
"􁙱": ["aromantic_flag"],
"􁙰": ["agender_flag"],
"􁚆": ["lesbian_flag"],
"􁙐": ["paw-modifier"],
"􁙑": ["claw-modifier"]},
"food": {"􁚑": ["cannabis_leaf"]}
}
emoji_post = {}
# Convert aforementioned unicode addresses to actual emojis
mm_emojis = [chr(mm_emoji) for mm_emoji in mm_emojis]
# Load a file called "emojis.json" from same directory.
# On discord android, this file is on "/assets/data/emojis.json"
with open('emojis.json', 'r') as f:
emoji_j_pre = json.load(f)
# Add skin tone modifiers as emojis
# so that mobile clients can send emojis with diversity
unicodecolorbase = 0x1f3fb
mutantcolorbase = 0x101600
for st_count in range(1, 6):
character = chr(unicodecolorbase)
custom_emojis["flags"][character] = [f"skin-tone-{st_count}"]
unicodecolorbase += 1
for st_count in range(6, 51):
character = chr(mutantcolorbase)
custom_emojis["flags"][character] = [f"skin-tone-{st_count}"]
mutantcolorbase += 1
# Iterate through every emoji in emojis.json
for category in emoji_j_pre:
emoji_post[category] = []
for emoji in emoji_j_pre[category]:
emoji_post[category].append(emoji)
# If this is MM emoji, create variants
if emoji["surrogates"] in mm_emojis:
names = emoji["names"]
# Add a variant for each MM type
for mm_type in mm_types:
# Ignore paw version of hand_splayed, because it's missing
if mm_type == "paw" and emoji["surrogates"] == chr(0x1f590):
continue
# Copy the variant's entry bc of pointers
variant = copy.deepcopy(emoji)
# Append variant info to the emoji entry
variant["names"] = [f"{name}_{mm_type}" for name in names]
variant["surrogates"] += mm_types[mm_type]
variant["unicodeVersion"] = 11
# and add it to the result file
emoji_post[category].append(variant)
# Add custom emojis
if category in custom_emojis:
for custom_emoji in custom_emojis[category]:
entry = {"names": custom_emojis[category][custom_emoji],
"surrogates": custom_emoji}
emoji_post[category].append(entry)
# When finally done, dump the result as "emojispost.json"
with open('emojispost.json', 'w') as f:
json.dump(emoji_post, f, indent=2)

View file

@ -0,0 +1,223 @@
#!/bin/env python3
import os
import re
import shutil
# You'll likely want to edit these lines or set DISTOK_EXTRACTED_DISCORD_PATH and DISTOK_EMOJI_MUTANT
extracted_discord_path = os.environ.get("DISTOK_EXTRACTED_DISCORD_PATH", "/tmp/cutthecord/discord")
extracted_mutstd_path = os.environ.get("DISTOK_EMOJI_MUTANT", "/root/distokfiles/mutant/72x72")
# Add your custom emojis here
# with "mutstd filename": "discord filename".
# You'll need to write a patch for `assets/data/emojis.json` too.
custom_emojis = {"1f4af-200d-1f308.png": "emoji_1f4af_1f308.png",
"10169b-200d-1f308.png": "emoji_10169b_1f308.png",
"1f9d1-200d-2708-fe0f.png": "emoji_1f9d1_2708.png",
"1f9d1-200d-2695-fe0f.png": "emoji_1f9d1_2695.png",
"1f9d1-200d-1f680.png": "emoji_1f9d1_1f680.png",
"1f9d1-200d-1f52c.png": "emoji_1f9d1_1f52c.png",
"1f9d1-200d-1f527.png": "emoji_1f9d1_1f527.png",
"1f9d1-200d-1f4bb.png": "emoji_1f9d1_1f4bb.png",
"1f9d1-200d-1f373.png": "emoji_1f9d1_1f373.png",
"1f3fb.png": "emoji_1f3fb.png",
"1f3fc.png": "emoji_1f3fc.png",
"1f3fd.png": "emoji_1f3fd.png",
"1f3fe.png": "emoji_1f3fe.png",
"1f3ff.png": "emoji_1f3ff.png",
"101600.png": "emoji_101600.png",
"101601.png": "emoji_101601.png",
"101602.png": "emoji_101602.png",
"101603.png": "emoji_101603.png",
"101604.png": "emoji_101604.png",
"101605.png": "emoji_101605.png",
"101606.png": "emoji_101606.png",
"101607.png": "emoji_101607.png",
"101608.png": "emoji_101608.png",
"101609.png": "emoji_101609.png",
"10160a.png": "emoji_10160a.png",
"10160b.png": "emoji_10160b.png",
"10160c.png": "emoji_10160c.png",
"10160d.png": "emoji_10160d.png",
"10160e.png": "emoji_10160e.png",
"10160f.png": "emoji_10160f.png",
"101610.png": "emoji_101610.png",
"101611.png": "emoji_101611.png",
"101612.png": "emoji_101612.png",
"101613.png": "emoji_101613.png",
"101614.png": "emoji_101614.png",
"101615.png": "emoji_101615.png",
"101616.png": "emoji_101616.png",
"101617.png": "emoji_101617.png",
"101618.png": "emoji_101618.png",
"101619.png": "emoji_101619.png",
"10161a.png": "emoji_10161a.png",
"10161b.png": "emoji_10161b.png",
"10161c.png": "emoji_10161c.png",
"10161d.png": "emoji_10161d.png",
"10161e.png": "emoji_10161e.png",
"10161f.png": "emoji_10161f.png",
"101620.png": "emoji_101620.png",
"101621.png": "emoji_101621.png",
"101622.png": "emoji_101622.png",
"101623.png": "emoji_101623.png",
"101624.png": "emoji_101624.png",
"101625.png": "emoji_101625.png",
"101626.png": "emoji_101626.png",
"101627.png": "emoji_101627.png",
"101628.png": "emoji_101628.png",
"101629.png": "emoji_101629.png",
"10162a.png": "emoji_10162a.png",
"10162b.png": "emoji_10162b.png",
"10162c.png": "emoji_10162c.png",
"101650.png": "emoji_101650.png",
"101651.png": "emoji_101651.png",
"10169a.png": "emoji_10169a.png",
"26b2-fe0f.png": "emoji_26b2.png",
"26a8-fe0f.png": "emoji_26a8.png",
"26a7-fe0f.png": "emoji_26a7.png",
"26a5-fe0f.png": "emoji_26a5.png",
"26a4-fe0f.png": "emoji_26a4.png",
"26a3-fe0f.png": "emoji_26a3.png",
"26a2-fe0f.png": "emoji_26a2.png",
"2642-fe0f.png": "emoji_2642.png",
"2640-fe0f.png": "emoji_2640.png",
"1f9e1.png": "emoji_1f9e1.png",
"101685.png": "emoji_101685.png",
"101684.png": "emoji_101684.png",
"101683.png": "emoji_101683.png",
"101682.png": "emoji_101682.png",
"1f9fb.png": "emoji_1f9fb.png",
"1f9f1.png": "emoji_1f9f1.png",
"1f9e8.png": "emoji_1f9e8.png",
"1f9b4.png": "emoji_1f9b4.png",
"101696.png": "emoji_101696.png",
"101695.png": "emoji_101695.png",
"101694.png": "emoji_101694.png",
"101693.png": "emoji_101693.png",
"101692.png": "emoji_101692.png",
"10169b.png": "emoji_10169b.png",
"101698.png": "emoji_101698.png",
"101699.png": "emoji_101699.png",
"1f9dd.png": "emoji_1f9dd.png",
"1f99d.png": "emoji_1f99d.png",
"1f99c.png": "emoji_1f99c.png",
"1f99a.png": "emoji_1f99a.png",
"101666.png": "emoji_101666.png",
"1f9d0.png": "emoji_1f9d0.png",
"1f97a.png": "emoji_1f97a.png",
"1f976.png": "emoji_1f976.png",
"1f975.png": "emoji_1f975.png",
"1f974.png": "emoji_1f974.png",
"1f973.png": "emoji_1f973.png",
"1f970.png": "emoji_1f970.png",
"1f92f.png": "emoji_1f92f.png",
"1f92e.png": "emoji_1f92e.png",
"1f92d.png": "emoji_1f92d.png",
"1f92c.png": "emoji_1f92c.png",
"1f92b.png": "emoji_1f92b.png",
"1f92a.png": "emoji_1f92a.png",
"1f929.png": "emoji_1f929.png",
"1f928.png": "emoji_1f928.png",
"1f575-10162b.png": "emoji_1f575_10162b.png",
"1f486-10162b.png": "emoji_1f486_10162b.png",
"1f481-10162b.png": "emoji_1f481_10162b.png",
"101690.png": "emoji_101690.png",
"101697.png": "emoji_101697.png",
"1f9dc.png": "emoji_1f9dc.png",
"101681.png": "emoji_101681.png",
"101680.png": "emoji_101680.png",
"10167f.png": "emoji_10167f.png",
"10167e.png": "emoji_10167e.png",
"10167d.png": "emoji_10167d.png",
"10167c.png": "emoji_10167c.png",
"10167b.png": "emoji_10167b.png",
"10167a.png": "emoji_10167a.png",
"101679.png": "emoji_101679.png",
"101678.png": "emoji_101678.png",
"101677.png": "emoji_101677.png",
"101676.png": "emoji_101676.png",
"101675.png": "emoji_101675.png",
"101674.png": "emoji_101674.png",
"101673.png": "emoji_101673.png",
"101672.png": "emoji_101672.png",
"101671.png": "emoji_101671.png",
"101670.png": "emoji_101670.png",
"101686.png": "emoji_101686.png",
"101691.png": "emoji_101691.png"}
# self note to get MM emojos:
# ls 72x72 | grep "101650-" | cut -f 1 -d '-' | sort | uniq
# ls 72x72 | grep "101651-" | cut -f 1 -d '-' | sort | uniq
# echo -e "\U1f44c"
# paw: 􁙐
# claw: 􁙑
def add_diverse_emojos():
# Hackiest regex ever
div_regex = r'(|.*/)([a-f0-9]+(|-fe0f)-(|101650|101651|101650-|101651-)'\
r'(|1016[0-2][a-f0-9]|1f3f[b-f])\.png)'
div_regex = re.compile(div_regex)
for file in mutstd_emojis:
re_result = div_regex.fullmatch(file)
if re_result:
mutant = re_result.group(2)
discord = discordify_emoji_name(mutant)
custom_emojis[mutant] = discord
def clean_emoji_name(name):
name = name.lower().replace("_", "-")\
.replace("emoji-", "").replace("-fe0f", "")
return name
def discordify_emoji_name(name):
name = "emoji_" + name.lower().replace("-", "_").replace("fe0f_", "")\
.replace("200d_", "")
return name
discord_emoji_path = os.path.join(extracted_discord_path, "res", "raw")
# Get file listings in relevant folders
discord_emojis = os.listdir(discord_emoji_path)
mutstd_emojis = os.listdir(extracted_mutstd_path)
add_diverse_emojos()
# Clean names of mutantstd emojis so thar we can compare them
# to clean discord emojis later
clean_mutstd_emojis = {clean_emoji_name(emoji): emoji for
emoji in mutstd_emojis}
replace_counter = 0
# Go through each discord emoji, and clean their names
for emoji in discord_emojis:
clean_discord_emoji = clean_emoji_name(emoji)
# Check if said clean name of emoji is in clean mutstd list
if clean_discord_emoji in clean_mutstd_emojis:
# Get full unclean filename of mutantstd emoji, generate relevant paths
full_mutstd_name = clean_mutstd_emojis[clean_discord_emoji]
full_mutstd_path = os.path.join(extracted_mutstd_path, full_mutstd_name)
full_discord_path = os.path.join(discord_emoji_path, emoji)
# Copy and overwrite the discord emojis with the mutantstd alternatives
shutil.copyfile(full_mutstd_path, full_discord_path)
# print("Replaced {} emoji.".format(emoji))
replace_counter += 1
for custom_emoji in custom_emojis:
# One day I'd like to do discordify_emoji_name(custom_emoji)
# But discord has too many exceptions for that~
discord_emoji_name = custom_emojis[custom_emoji]
full_mutstd_path = os.path.join(extracted_mutstd_path, custom_emoji)
full_discord_path = os.path.join(discord_emoji_path, discord_emoji_name)
shutil.copyfile(full_mutstd_path, full_discord_path)
# print("Added custom {} emoji.".format(discord_emoji_name))
replace_counter += 1
print("Done, {} emojis replaced.".format(replace_counter))

View file

@ -0,0 +1,8 @@
mutantcolorbase = 0x101600
for oof in range(5, 50):
character = chr(mutantcolorbase)
print(f'const-string v1, "{character}"', end="\n\n")
print(f'const/16 v2, {hex(oof)}', end="\n\n")
print(f'aput-object v1, v0, v2', end="\n\n")
mutantcolorbase += 1

View file

@ -0,0 +1,27 @@
def genemojo(emojo, fitzpatrick=True, mutant=True):
if fitzpatrick:
unicodecolorbase = 0x1f3fb
for oof in range(1, 6):
character = chr(unicodecolorbase)
print(f'{emojo}{character}', end='')
unicodecolorbase += 1
if mutant:
mutantcolorbase = 0x101600
for oof in range(6, 51):
character = chr(mutantcolorbase)
print(f'{emojo}{character}', end='')
mutantcolorbase += 1
print()
emojis = ["👆", "👇", "👈", "👉", "👊", "👋", "👌", "👍", "👎", "👏", "👐", "💅", "💪",
"🖕", "🖖", "🙌", "🙏", "🤘", "🤙", "🤚", "🤛", "🤜", "🤝", "🤞", "🤳",
"", "", "", "", ""]
mm_types = {"􁙐", "􁙑"}
for emoji in emojis:
genemojo(emoji)
for mm_type in mm_types:
genemojo(emoji + mm_type, fitzpatrick=False)