convert marsey submission form to include all emojis

pull/142/head
Aevann 2023-03-18 15:34:04 +02:00
parent a88fb10455
commit dd54413cf3
20 changed files with 1149 additions and 9439 deletions

File diff suppressed because it is too large Load Diff

View File

@ -139,7 +139,7 @@ const emojisSearchDictionary = {
// get public emojis list
const emojiRequest = new XMLHttpRequest();
emojiRequest.open("GET", '/emojis.csv?v=1');
emojiRequest.open("GET", '/emojis.csv');
emojiRequest.setRequestHeader('xhr', 'xhr');
emojiRequest.onload = async (e) => {
let emojis = JSON.parse(emojiRequest.response);
@ -161,7 +161,7 @@ emojiRequest.onload = async (e) => {
for(let i = 0; i < emoji.tags.length; i++)
emojisSearchDictionary.updateTag(emoji.tags[i], emoji.name);
classes.add(emoji.class);
classes.add(emoji.kind);
// Create emoji DOM
const emojiDOM = document.importNode(emojiButtonTemplateDOM.content, true).children[0];
@ -171,7 +171,7 @@ emojiRequest.onload = async (e) => {
emojiDOM.title += "\nauthor\t" + emoji.author
if(emoji.count !== undefined)
emojiDOM.title += "\nused\t" + emoji.count;
emojiDOM.dataset.className = emoji.class;
emojiDOM.dataset.className = emoji.kind;
emojiDOM.dataset.emojiName = emoji.name;
emojiDOM.onclick = emojiAddToInput;
emojiDOM.hidden = true;

View File

@ -1,8 +1,9 @@
function approve_marsey(t, name) {
postToast(t, `/admin/approve/marsey/${name}`,
postToast(t, `/admin/approve/emoji/${name}`,
{
"tags": document.getElementById(`${name}-tags`).value,
"name": document.getElementById(`${name}-name`).value,
"kind": document.getElementById(`${name}-kind`).value,
},
() => {
document.getElementById(`${name}-marsey`).remove()
@ -11,7 +12,7 @@ function approve_marsey(t, name) {
}
function remove_marsey(t, name) {
postToast(t, `/remove/marsey/${name}`,
postToast(t, `/remove/emoji/${name}`,
{
},
() => {

View File

@ -25,7 +25,7 @@ from .follows import *
from .lottery import *
from .casino_game import *
from .hats import *
from .marsey import *
from .emoji import *
from .transactions import *
from .sub_logs import *
from .media import *

View File

@ -5,10 +5,11 @@ from sqlalchemy.sql.sqltypes import *
from files.classes import Base
class Marsey(Base):
__tablename__ = "marseys"
class Emoji(Base):
__tablename__ = "emojis"
name = Column(String, primary_key=True)
kind = Column(String)
author_id = Column(Integer, ForeignKey("users.id"))
tags = Column(String)
count = Column(Integer, default=0)
@ -33,7 +34,7 @@ class Marsey(Base):
"tags": self.tags_list(),
"count": self.count,
"created_utc": self.created_utc,
"class": "Marsey",
"kind": self.kind,
}
if "author" in self.__dict__ and self.author:
data["author"] = self.author

View File

@ -6,7 +6,7 @@ from sqlalchemy.orm import scoped_session
from files.helpers.config.const import *
from .badges import Badge
from .marsey import Marsey
from .emoji import *
from .user import User
from .userblock import UserBlock
@ -67,10 +67,10 @@ class Leaderboard:
sq_criteria = None
if lb_criteria == Badge.user_id:
sq_criteria = User.id == sq.c.user_id
elif lb_criteria == Marsey.author_id:
elif lb_criteria == Emoji.author_id:
sq_criteria = User.id == sq.c.author_id
else:
raise ValueError("This leaderboard function only supports Badge.user_id and Marsey.author_id")
raise ValueError("This leaderboard function only supports Badge.user_id and Emoji.author_id")
leaderboard = db.query(User, sq.c.count).join(sq, sq_criteria).order_by(sq.c.count.desc())
position = db.query(User.id, sq.c.rank, sq.c.count).join(sq, sq_criteria).filter(User.id == v.id).one_or_none()

View File

@ -63,12 +63,12 @@ def execute_snappy(post:Submission, v:User):
if random.random() < 0.5: body = "wow, this lawlzpost sucks!"
else: body = "wow, a good lawlzpost for once!"
else:
if SNAPPY_MARSEYS and SNAPPY_QUOTES:
if marseys_const and SNAPPY_QUOTES:
if IS_FISTMAS() or random.random() > 0.5:
SNAPPY_CHOICES = SNAPPY_QUOTES
else:
SNAPPY_CHOICES = SNAPPY_MARSEYS
elif SNAPPY_MARSEYS: SNAPPY_CHOICES = SNAPPY_MARSEYS
SNAPPY_CHOICES = marseys_const
elif marseys_const: SNAPPY_CHOICES = marseys_const
elif SNAPPY_QUOTES: SNAPPY_CHOICES = SNAPPY_QUOTES
else: SNAPPY_CHOICES = [""]

View File

@ -76,7 +76,6 @@ LOGGED_OUT_CACHE_KEY = f"{SITE}_loggedout"
CHAT_ONLINE_CACHE_KEY = f"{SITE}_online"
REDDIT_NOTIFS_CACHE_KEY = "reddit_notifications"
MARSEYS_CACHE_KEY = "marseys"
EMOJIS_CACHE_KEY = "emojis"
SESSION_LIFETIME = 60 * 60 * 24 * 365
@ -1078,3 +1077,5 @@ else:
GLOBAL = None
STARS = '\n\n★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n'
EMOJIS_KINDS = ('Marsey', 'Marsey Alphabet', 'Marsey Flags', 'Platy', 'Wolf', 'Tay', 'Classic', 'Rage', 'Wojak', 'Misc')

View File

@ -2,7 +2,7 @@ from os import path
from sqlalchemy.orm import scoped_session
from files.classes import Marsey
from files.classes import Emoji
from files.helpers.config.const import *
marseys_const = []
@ -17,9 +17,9 @@ def const_initialize(db:scoped_session):
def _initialize_marseys(db:scoped_session):
global marseys_const, marseys_const2, marsey_mappings
marseys_const = [x[0] for x in db.query(Marsey.name).filter(Marsey.submitter_id==None, Marsey.name!='chudsey').all()]
marseys_const = [x[0] for x in db.query(Emoji.name).filter(Emoji.kind=="Marsey", Emoji.submitter_id==None, Emoji.name!='chudsey').all()]
marseys_const2 = marseys_const + ['chudsey','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','exclamationpoint','period','questionmark']
marseys = db.query(Marsey).filter(Marsey.submitter_id==None).all()
marseys = db.query(Emoji).filter(Emoji.kind=="Marsey", Emoji.submitter_id==None).all()
for marsey in marseys:
for tag in marsey.tags.split():
if tag in marsey_mappings:

View File

@ -5,7 +5,6 @@ from typing import List, Optional, Union
from .config.const import *
valid_username_chars = 'a-zA-Z0-9_\-'
valid_username_regex = re.compile("^[a-zA-Z0-9_\-]{3,25}$", flags=re.A)
mention_regex = re.compile('(?<!\/)@([a-zA-Z0-9_\-]{1,30})(?!([^<]*<\/(code|pre|a)>|[^`]*`))', flags=re.A)
@ -20,7 +19,7 @@ marseyaward_body_regex = re.compile(">[^<\s+]|[^>\s+]<", flags=re.A)
marseyaward_title_regex = re.compile("( *<img[^>]+>)+", flags=re.A)
marsey_regex = re.compile("marsey[a-z0-9]{1,24}", flags=re.A)
marsey_regex = re.compile("[a-z0-9]{1,30}", flags=re.A)
tags_regex = re.compile("[a-z0-9: ]{1,200}", flags=re.A)
hat_regex = re.compile("[a-zA-Z0-9\-() ,_]{1,50}", flags=re.A)
description_regex = re.compile("[^<>&\n\t]{1,300}", flags=re.A)
@ -51,9 +50,9 @@ strikethrough_regex = re.compile('(^|\s|>)~{1,2}([^~]+)~{1,2}(?!([^<]*<\/(code|p
mute_regex = re.compile("\/mute @?([a-z0-9_\-]{3,30}) ([0-9]+)", flags=re.A|re.I)
emoji_regex = re.compile(f"<p>\s*(:[!#@]{{0,3}}[{valid_username_chars}]+:\s*)+<\/p>", flags=re.A)
emoji_regex2 = re.compile(f'(?<!"):([!#@{valid_username_chars}]{{1,36}}?):(?!([^<]*<\/(code|pre|a)>|[^`]*`))', flags=re.A)
emoji_regex3 = re.compile(f'(?<!"):([!@{valid_username_chars}]{{1,35}}?):', flags=re.A)
emoji_regex = re.compile(f"<p>\s*(:[!#@a-zA-Z0-9]{{1,36}}:\s*)+<\/p>", flags=re.A)
emoji_regex2 = re.compile(f'(?<!"):([!#@a-zA-Z0-9]{{1,36}}?):(?!([^<]*<\/(code|pre|a)>|[^`]*`))', flags=re.A)
emoji_regex3 = re.compile(f'(?<!"):([!@a-zA-Z0-9]{{1,35}}?):', flags=re.A)
snappy_url_regex = re.compile('<a href="(https?:\/\/.+?)".*?>(.+?)<\/a>', flags=re.A)
snappy_youtube_regex = re.compile('<lite-youtube videoid="(.+?)" params="autoplay=1', flags=re.A)

View File

@ -467,7 +467,7 @@ def sanitize(sanitized, golden=True, limit_pings=0, showmore=True, count_marseys
sanitized = audio_sub_regex.sub(r'\1<audio controls preload="none" src="\2"></audio>', sanitized)
if count_marseys:
for marsey in g.db.query(Marsey).filter(Marsey.submitter_id==None, Marsey.name.in_(marseys_used)).all():
for marsey in g.db.query(Emoji).filter(Emoji.kind=="Marsey", Emoji.submitter_id==None, Emoji.name.in_(marseys_used)).all():
marsey.count += 1
g.db.add(marsey)
@ -559,7 +559,7 @@ def filter_emojis_only(title, golden=True, count_marseys=False, graceful=False,
title = render_emoji(title, emoji_regex3, golden, marseys_used)
if count_marseys:
for marsey in g.db.query(Marsey).filter(Marsey.submitter_id==None, Marsey.name.in_(marseys_used)).all():
for marsey in g.db.query(Emoji).filter(Emoji.kind=="Marsey", Emoji.submitter_id==None, Emoji.name.in_(marseys_used)).all():
marsey.count += 1
g.db.add(marsey)

View File

@ -8,7 +8,7 @@ from files.classes.user import User
from files.classes.submission import Submission
from files.classes.comment import Comment
from files.classes.votes import Vote, CommentVote
from files.classes.marsey import Marsey
from files.classes.emoji import *
from files.classes.award import AwardRelationship
from files.helpers.config.const import *
@ -105,7 +105,7 @@ def stats(site=None):
stats = {
"time": int(time.time()),
"marseys": "{:,}".format(g.db.query(Marsey).filter(Marsey.submitter_id==None).count()),
"marseys": "{:,}".format(g.db.query(Emoji).filter(Emoji.kind=="Marsey", Emoji.submitter_id==None).count()),
"users": "{:,}".format(g.db.query(User).count()),
"private users": "{:,}".format(g.db.query(User).filter_by(is_private=True).count()),
"banned users": "{:,}".format(g.db.query(User).filter(User.is_banned != None).count()),

View File

@ -1,7 +1,7 @@
from os import path, rename
from shutil import copyfile, move
from files.classes.marsey import Marsey
from files.classes.emoji import *
from files.classes.hats import Hat, HatDef
from files.classes.mod_logs import ModAction
from files.helpers.cloudflare import purge_files_in_cache
@ -12,28 +12,28 @@ from files.helpers.useractions import *
from files.routes.wrappers import *
from files.__main__ import app, cache, limiter
ASSET_TYPES = (Marsey, HatDef)
ASSET_TYPES = (Emoji, HatDef)
@app.get("/submit/marseys")
@app.get("/submit/emojis")
@limiter.limit(DEFAULT_RATELIMIT)
@limiter.limit(DEFAULT_RATELIMIT, key_func=get_ID)
@auth_required
def submit_marseys(v:User):
def submit_emojis(v:User):
if v.admin_level >= PERMS['VIEW_PENDING_SUBMITTED_MARSEYS']:
marseys = g.db.query(Marsey).filter(Marsey.submitter_id != None)
marseys = g.db.query(Emoji).filter(Emoji.submitter_id != None)
else:
marseys = g.db.query(Marsey).filter(Marsey.submitter_id == v.id)
marseys = g.db.query(Emoji).filter(Emoji.submitter_id == v.id)
marseys = marseys.order_by(Marsey.created_utc.desc()).all()
marseys = marseys.order_by(Emoji.created_utc.desc()).all()
for marsey in marseys:
marsey.author = g.db.query(User.username).filter_by(id=marsey.author_id).one()[0]
marsey.submitter = g.db.query(User.username).filter_by(id=marsey.submitter_id).one()[0]
return render_template("submit_marseys.html", v=v, marseys=marseys)
return render_template("submit_emojis.html", v=v, marseys=marseys, kinds=EMOJIS_KINDS, msg=get_msg(), error=get_error())
@app.post("/submit/marseys")
@app.post("/submit/emojis")
@limiter.limit('1/second', scope=rpath)
@limiter.limit(DEFAULT_RATELIMIT)
@limiter.limit(DEFAULT_RATELIMIT, key_func=get_ID)
@ -43,15 +43,13 @@ def submit_marsey(v:User):
name = request.values.get('name', '').lower().strip()
tags = request.values.get('tags', '').lower().strip()
username = request.values.get('author', '').lower().strip()
kind = request.values.get('kind', '').strip()
if kind not in EMOJIS_KINDS:
abort(400, "Invalid emoji kind!")
def error(error):
if v.admin_level >= PERMS['VIEW_PENDING_SUBMITTED_MARSEYS']: marseys = g.db.query(Marsey).filter(Marsey.submitter_id != None)
else: marseys = g.db.query(Marsey).filter(Marsey.submitter_id == v.id)
marseys = marseys.order_by(Marsey.created_utc.desc()).all()
for marsey in marseys:
marsey.author = g.db.query(User.username).filter_by(id=marsey.author_id).one()[0]
marsey.submitter = g.db.query(User.username).filter_by(id=marsey.submitter_id).one()[0]
return render_template("submit_marseys.html", v=v, marseys=marseys, error=error, name=name, tags=tags, username=username, file=file), 400
return redirect(f"/submit/emojis?error={error}")
if g.is_tor:
return error("Image uploads are not allowed through TOR!")
@ -62,9 +60,9 @@ def submit_marsey(v:User):
if not marsey_regex.fullmatch(name):
return error("Invalid name!")
existing = g.db.query(Marsey.name).filter_by(name=name).one_or_none()
existing = g.db.query(Emoji.name).filter_by(name=name).one_or_none()
if existing:
return error("Someone already submitted a marsey with this name!")
return error("Someone already submitted an emoji with this name!")
if not tags_regex.fullmatch(tags):
return error("Invalid tags!")
@ -80,19 +78,10 @@ def submit_marsey(v:User):
copyfile(highquality, filename)
process_image(filename, v, resize=200, trim=True)
marsey = Marsey(name=name, author_id=author.id, tags=tags, count=0, submitter_id=v.id)
marsey = Emoji(name=name, kind=kind, author_id=author.id, tags=tags, count=0, submitter_id=v.id)
g.db.add(marsey)
if v.admin_level >= PERMS['VIEW_PENDING_SUBMITTED_MARSEYS']: marseys = g.db.query(Marsey).filter(Marsey.submitter_id != None)
else: marseys = g.db.query(Marsey).filter(Marsey.submitter_id == v.id)
marseys = marseys.order_by(Marsey.created_utc.desc()).all()
for marsey in marseys:
marsey.author = g.db.query(User.username).filter_by(id=marsey.author_id).one()[0]
marsey.submitter = g.db.query(User.username).filter_by(id=marsey.submitter_id).one()[0]
return render_template("submit_marseys.html", v=v, marseys=marseys, msg=f"'{name}' submitted successfully!")
return redirect(f"/submit/emojis?msg='{name}' submitted successfully!")
def verify_permissions_and_get_asset(cls, asset_type:str, v:User, name:str, make_lower=False):
if cls not in ASSET_TYPES: raise Exception("not a valid asset type")
@ -107,13 +96,13 @@ def verify_permissions_and_get_asset(cls, asset_type:str, v:User, name:str, make
abort(404, f"This {asset} '{name}' doesn't exist!")
return asset
@app.post("/admin/approve/marsey/<name>")
@app.post("/admin/approve/emoji/<name>")
@limiter.limit('1/second', scope=rpath)
@limiter.limit(DEFAULT_RATELIMIT)
@limiter.limit(DEFAULT_RATELIMIT, key_func=get_ID)
@admin_level_required(PERMS['MODERATE_PENDING_SUBMITTED_ASSETS'])
def approve_marsey(v, name):
marsey = verify_permissions_and_get_asset(Marsey, "marsey", v, name, True)
marsey = verify_permissions_and_get_asset(Emoji, "marsey", v, name, True)
tags = request.values.get('tags').lower().strip()
if not tags:
abort(400, "You need to include tags!")
@ -122,19 +111,27 @@ def approve_marsey(v, name):
if not new_name:
abort(400, "You need to include name!")
new_kind = request.values.get('kind').strip()
if not new_kind:
abort(400, "You need to include kind!")
if not marsey_regex.fullmatch(new_name):
abort(400, "Invalid name!")
if not tags_regex.fullmatch(tags):
abort(400, "Invalid tags!")
if new_kind not in EMOJIS_KINDS:
abort(400, "Invalid kind!")
marsey.name = new_name
marsey.kind = new_kind
marsey.tags = tags
g.db.add(marsey)
author = get_account(marsey.author_id)
all_by_author = g.db.query(Marsey).filter_by(author_id=author.id).count()
all_by_author = g.db.query(Emoji).filter_by(author_id=author.id).count()
if all_by_author >= 99:
badge_grant(badge_id=143, user=author)
@ -142,9 +139,12 @@ def approve_marsey(v, name):
badge_grant(badge_id=16, user=author)
else:
badge_grant(badge_id=17, user=author)
purge_files_in_cache(f"https://{SITE}/e/{marsey.name}/webp")
cache.delete(EMOJIS_CACHE_KEY)
cache.delete(MARSEYS_CACHE_KEY)
if marsey.kind == "Marsey":
cache.delete(MARSEYS_CACHE_KEY)
purge_files_in_cache([f"https://{SITE}/e/{marsey.name}/webp", f"https://{SITE}/emojis.csv"])
move(f"/asset_submissions/marseys/{name}.webp", f"files/assets/images/emojis/{marsey.name}.webp")
highquality = f"/asset_submissions/marseys/{name}"
@ -156,11 +156,11 @@ def approve_marsey(v, name):
g.db.add(author)
if v.id != author.id:
msg = f"@{v.username} (a site admin) has approved a marsey you made: :{marsey.name}:\n\nYou have received 250 coins as a reward!"
msg = f"@{v.username} (a site admin) has approved an emoji you made: :{marsey.name}:\n\nYou have received 250 coins as a reward!"
send_repeatable_notification(author.id, msg)
if v.id != marsey.submitter_id and author.id != marsey.submitter_id:
msg = f"@{v.username} (a site admin) has approved a marsey you submitted: :{marsey.name}:"
msg = f"@{v.username} (a site admin) has approved an emoji you submitted: :{marsey.name}:"
send_repeatable_notification(marsey.submitter_id, msg)
marsey.submitter_id = None
@ -209,13 +209,13 @@ def remove_asset(cls, type_name:str, v:User, name:str) -> dict[str, str]:
return {"message": f"'{name}' removed!"}
@app.post("/remove/marsey/<name>")
@app.post("/remove/emoji/<name>")
@limiter.limit('1/second', scope=rpath)
@limiter.limit(DEFAULT_RATELIMIT)
@limiter.limit(DEFAULT_RATELIMIT, key_func=get_ID)
@auth_required
def remove_marsey(v:User, name):
return remove_asset(Marsey, "marsey", v, name)
return remove_asset(Emoji, "marsey", v, name)
@app.get("/submit/hats")
@limiter.limit(DEFAULT_RATELIMIT)
@ -225,7 +225,8 @@ def submit_hats(v:User):
if v.admin_level >= PERMS['VIEW_PENDING_SUBMITTED_HATS']: hats = g.db.query(HatDef).filter(HatDef.submitter_id != None)
else: hats = g.db.query(HatDef).filter(HatDef.submitter_id == v.id)
hats = hats.order_by(HatDef.created_utc.desc()).all()
return render_template("submit_hats.html", v=v, hats=hats)
return render_template("submit_hats.html", v=v, hats=hats, msg=get_msg(), error=get_error())
@app.post("/submit/hats")
@ -239,10 +240,7 @@ def submit_hat(v:User):
username = request.values.get('author', '').strip()
def error(error):
if v.admin_level >= PERMS['VIEW_PENDING_SUBMITTED_HATS']: hats = g.db.query(HatDef).filter(HatDef.submitter_id != None)
else: hats = g.db.query(HatDef).filter(HatDef.submitter_id == v.id)
hats = hats.order_by(HatDef.created_utc.desc()).all()
return render_template("submit_hats.html", v=v, hats=hats, error=error, name=name, description=description, username=username), 400
return redirect(f"/submit/hats?error={error}")
if g.is_tor:
return error("Image uploads are not allowed through TOR!")
@ -282,14 +280,8 @@ def submit_hat(v:User):
hat = HatDef(name=name, author_id=author.id, description=description, price=price, submitter_id=v.id)
g.db.add(hat)
g.db.flush()
if v.admin_level >= PERMS['VIEW_PENDING_SUBMITTED_HATS']: hats = g.db.query(HatDef).filter(HatDef.submitter_id != None)
else: hats = g.db.query(HatDef).filter(HatDef.submitter_id == v.id)
hats = hats.order_by(HatDef.created_utc.desc()).all()
return render_template("submit_hats.html", v=v, hats=hats, msg=f"'{name}' submitted successfully!")
return redirect(f"/submit/hats?msg='{name}' submitted successfully!")
@app.post("/admin/approve/hat/<name>")
@ -372,7 +364,7 @@ def approve_hat(v, name):
def remove_hat(v:User, name):
return remove_asset(HatDef, 'hat', v, name)
@app.get("/admin/update/marseys")
@app.get("/admin/update/emojis")
@limiter.limit(DEFAULT_RATELIMIT)
@limiter.limit(DEFAULT_RATELIMIT, key_func=get_ID)
@admin_level_required(PERMS['UPDATE_ASSETS'])
@ -381,17 +373,17 @@ def update_marseys(v):
tags = None
error = None
if name:
marsey = g.db.get(Marsey, name)
marsey = g.db.get(Emoji, name)
if marsey:
tags = marsey.tags or ''
else:
name = ''
tags = ''
error = "A marsey with this name doesn't exist!"
error = "An emoji with this name doesn't exist!"
return render_template("admin/update_assets.html", v=v, error=error, name=name, tags=tags, type="Marsey")
@app.post("/admin/update/marseys")
@app.post("/admin/update/emojis")
@limiter.limit('1/second', scope=rpath)
@limiter.limit(DEFAULT_RATELIMIT)
@limiter.limit(DEFAULT_RATELIMIT, key_func=get_ID)
@ -404,9 +396,11 @@ def update_marsey(v):
def error(error):
return render_template("admin/update_assets.html", v=v, error=error, name=name, tags=tags, type="Marsey")
existing = g.db.get(Marsey, name)
existing = g.db.get(Emoji, name)
if not existing:
return error("A marsey with this name doesn't exist!")
return error("An emoji with this name doesn't exist!")
updated = False
if file:
if g.is_tor:
@ -429,11 +423,17 @@ def update_marsey(v):
copyfile(new_path, filename)
process_image(filename, v, resize=200, trim=True)
purge_files_in_cache([f"https://{SITE}/e/{name}.webp", f"https://{SITE}/assets/images/emojis/{name}.webp", f"https://{SITE}/asset_submissions/marseys/original/{name}.{format}"])
updated = True
if tags and existing.tags != tags and tags != "none":
if not tags_regex.fullmatch(tags):
abort(400, "Invalid tags!")
existing.tags += f" {tags}"
g.db.add(existing)
elif not file:
updated = True
if not updated:
return error("You need to actually update something!")
ma = ModAction(

View File

@ -41,6 +41,15 @@ def reddit_post(subreddit, v, path):
return redirect(f'https://{reddit}/{post_id}')
@cache.cached(key_prefix=MARSEYS_CACHE_KEY)
def get_marseys(db:scoped_session):
if not FEATURES['MARSEYS']: return []
marseys = []
for marsey, author in db.query(Emoji, User).join(User, Emoji.author_id == User.id).filter(Emoji.kind == "Marsey", Emoji.submitter_id == None).order_by(Emoji.count.desc()):
marsey.author = author.username if FEATURES['ASSET_SUBMISSIONS'] else None
marseys.append(marsey)
return marseys
@app.get("/marseys")
@limiter.limit(DEFAULT_RATELIMIT)
@limiter.limit(DEFAULT_RATELIMIT, key_func=get_ID)
@ -64,25 +73,13 @@ def marseys(v:User):
@app.get("/emojis.csv")
@limiter.limit(DEFAULT_RATELIMIT)
def emoji_list():
return get_emojis(g.db)
@cache.cached(timeout=86400, key_prefix=MARSEYS_CACHE_KEY)
def get_marseys(db:scoped_session):
if not FEATURES['MARSEYS']: return []
marseys = []
for marsey, author in db.query(Marsey, User).join(User, Marsey.author_id == User.id).filter(Marsey.submitter_id == None).order_by(Marsey.count.desc()):
marsey.author = author.username if FEATURES['ASSET_SUBMISSIONS'] else None
setattr(marsey, "class", "Marsey")
marseys.append(marsey)
return marseys
@cache.cached(timeout=600, key_prefix=EMOJIS_CACHE_KEY)
def get_emojis(db:scoped_session):
emojis = [m.json() for m in get_marseys(db)]
for src in EMOJI_SRCS:
with open(src, "r", encoding="utf-8") as f:
emojis = emojis + json.load(f)
return emojis
for marsey, author in g.db.query(Emoji, User).join(User, Emoji.author_id == User.id).filter(Emoji.submitter_id == None).order_by(Emoji.count.desc()):
marsey.author = author.username if FEATURES['ASSET_SUBMISSIONS'] else None
marseys.append(marsey.json())
return marseys
@app.get('/sidebar')
@limiter.limit(DEFAULT_RATELIMIT)

View File

@ -412,7 +412,7 @@ def leaderboard(v:User):
if SITE == 'rdrama.net':
leaderboards.append(Leaderboard("Designed hats", "designed hats", "designed-hats", "Designed Hats", None, Leaderboard.get_hat_lb, User.designed_hats, v, None, g.db, None))
leaderboards.append(Leaderboard("Marseys", "Marseys made", "marseys", "Marseys", None, Leaderboard.get_badge_marsey_lb, Marsey.author_id, v, None, g.db, None))
leaderboards.append(Leaderboard("Marseys", "Marseys made", "marseys", "Marseys", None, Leaderboard.get_badge_marsey_lb, Emoji.author_id, v, None, g.db, None))
return render_template("leaderboard.html", v=v, leaderboards=leaderboards)

View File

@ -24,11 +24,11 @@
{% if SITE_NAME == 'rDrama' %}
{% if v.admin_level >= PERMS['MODERATE_PENDING_SUBMITTED_ASSETS'] %}
<li><a href="/submit/marseys">Approve or Reject Marseys</a></li>
<li><a href="/submit/emojis">Approve or Reject Emojis</a></li>
<li><a href="/submit/hats">Approve or Reject Hats</a></li>
{% endif %}
{% if v.admin_level >= PERMS['UPDATE_ASSETS'] %}
<li><a href="/admin/update/marseys">Update Marseys</a></li>
<li><a href="/admin/update/emojis">Update Emojis</a></li>
<li><a href="/admin/update/hats">Update Hats</a></li>
{% endif %}
{% endif %}

View File

@ -20,22 +20,22 @@
'/post/18459',
),
(
'Submit Marseys',
'For original Marseys.',
'fa-cat', '#ffa500',
'/submit/marseys',
),
(
'Update Marseys',
'Ask for a marsey to be updated with a better version.',
'fa-cat', '#ffa500',
'/post/103085',
),
(
'Submit Other Emojis',
'For non-Marsey Emojis.',
'Submit Emojis',
'Submit new emojis for the site.',
'fa-smile-beam', '#ffa500',
'/post/16583',
'/submit/emojis',
),
(
'Submit Hats',
'Submit a Hat to be added.',
'fa-hat-cowboy', '#7c603e',
'/submit/hats',
),
(
'Update Emojis or Hats',
'Ask for an emoji or a hat to be updated with a better version.',
'fa-smile-beam', '#ffa500',
'/post/103085',
),
(
'Submit Sidebar Art',
@ -56,17 +56,11 @@
'/post/33652',
),
(
'Marsey Commissions',
'Request a Marsey to be made.',
'Emoji Commissions',
'Request a Emoji to be made.',
'fa-coins', '#ffd700',
'/post/37677',
),
(
'Submit Hats',
'Submit a Hat to be added.',
'fa-hat-cowboy', '#7c603e',
'/submit/hats',
),
(
'Submit Redbubble Designs',
'Submit a design to be added to our redbubble shop.',

View File

@ -30,12 +30,12 @@
<div class="body w-lg-100">
<div class="input-group mb2">
<select autocomplete="off" id='theme' class="form-control setting_select" form="profile-settings" name="theme" data-nonce="{{g.nonce}}" data-reload="1">
{% for entry in THEMES %}
<option value="{{entry}}" {% if v.theme==entry %} selected {% endif %}>
{{entry}}
</option>
{% endfor %}
</select>
{% for entry in THEMES %}
<option value="{{entry}}" {% if v.theme==entry %} selected {% endif %}>
{{entry}}
</option>
{% endfor %}
</select>
</div>
</div>
</div>

View File

@ -9,7 +9,7 @@
<div class="settings-section rounded">
<div class="d-lg-flex">
<div class="body w-lg-100">
<form action="/submit/marseys" method="post" enctype="multipart/form-data">
<form action="/submit/emojis" method="post" enctype="multipart/form-data">
<input hidden name="formkey" value="{{v|formkey}}">
<div id="image-upload-block">
@ -22,8 +22,19 @@
</label>
</div>
<label class="mt-3" for="kind">Kind</label>
<div class="input-group mb2">
<select autocomplete="off" id='kind' class="form-control" name="kind">
{% for entry in kinds %}
<option value="{{entry}}">
{{entry}}
</option>
{% endfor %}
</select>
</div>
<label class="mt-3" for="name">Name</label>
<input autocomplete="off" type="text" id="name" class="form-control" name="name" maxlength="30" pattern='[Mm][Aa][Rr][Ss][Ee][Yy][a-zA-Z0-9]{1,24}' placeholder="Required" value="{{name}}" required>
<input autocomplete="off" type="text" id="name" class="form-control" name="name" maxlength="30" pattern='[a-zA-Z0-9]{1,30}' placeholder="Required" value="{{name}}" required>
<label class="mt-3" for="author">Author</label>
<input autocomplete="off" type="text" id="author" class="form-control" name="author" maxlength="30" pattern='[a-zA-Z0-9_\-]{3,30}' placeholder="Required" value="{{username}}" required>
@ -42,7 +53,7 @@
</div>
</div>
<script defer src="{{'js/submit_marseys.js' | asset}}"></script>
<script defer src="{{'js/submit_emojis.js' | asset}}"></script>
<h2 class="mt-5 mx-4">Pending Approval</h2>
<div class="row mt-5 mx-4">
@ -57,6 +68,17 @@
<div><label class="mt-3">Image</label></div>
<img loading="lazy" src="/asset_submissions/marseys/{{marsey.name}}.webp?s={{range(1, 10000000)|random}}" style="max-width:50%;border:5px white solid">
<div><label class="mt-3" for="{{marsey.name}}-kind">Kind</label></div>
<div class="input-group mb2">
<select autocomplete="off" id='{{marsey.name}}-kind' class="form-control" name="kind">
{% for entry in kinds %}
<option value="{{entry}}" {% if marsey.kind==entry %}selected{% endif %}>
{{entry}}
</option>
{% endfor %}
</select>
</div>
<div><label class="mt-3" for="{{marsey.name}}-submitter">Submitter</label></div>
<input autocomplete="off" type="text" id="{{marsey.name}}-submitter" class="form-control" maxlength="30" value="{{marsey.submitter}}" readonly>

View File

@ -0,0 +1,996 @@
alter table marseys rename to emojis;
alter table emojis add column kind varchar(15) not null default 'Marsey';
alter table emojis alter column kind drop default;
create index emoji_kind on public.emojis using btree (kind);
INSERT INTO public.emojis (name, author_id, kind, tags, created_utc) VALUES
('a', 2, 'Marsey Alphabet', 'letter', NULL),
('b', 2, 'Marsey Alphabet', 'letter', NULL),
('c', 2, 'Marsey Alphabet', 'letter', NULL),
('d', 2, 'Marsey Alphabet', 'letter', NULL),
('e', 2, 'Marsey Alphabet', 'letter', NULL),
('f', 2, 'Marsey Alphabet', 'letter', NULL),
('g', 2, 'Marsey Alphabet', 'letter', NULL),
('h', 2, 'Marsey Alphabet', 'letter', NULL),
('i', 2, 'Marsey Alphabet', 'letter', NULL),
('j', 2, 'Marsey Alphabet', 'letter', NULL),
('k', 2, 'Marsey Alphabet', 'letter', NULL),
('l', 2, 'Marsey Alphabet', 'letter', NULL),
('m', 2, 'Marsey Alphabet', 'letter', NULL),
('n', 2, 'Marsey Alphabet', 'letter', NULL),
('o', 2, 'Marsey Alphabet', 'letter', NULL),
('p', 2, 'Marsey Alphabet', 'letter', NULL),
('q', 2, 'Marsey Alphabet', 'letter', NULL),
('r', 2, 'Marsey Alphabet', 'letter', NULL),
('s', 2, 'Marsey Alphabet', 'letter', NULL),
('t', 2, 'Marsey Alphabet', 'letter', NULL),
('u', 2, 'Marsey Alphabet', 'letter', NULL),
('v', 2, 'Marsey Alphabet', 'letter', NULL),
('w', 2, 'Marsey Alphabet', 'letter', NULL),
('x', 2, 'Marsey Alphabet', 'letter', NULL),
('y', 2, 'Marsey Alphabet', 'letter', NULL),
('z', 2, 'Marsey Alphabet', 'letter', NULL),
('0', 2, 'Marsey Alphabet', 'number', NULL),
('1', 2, 'Marsey Alphabet', 'letter', NULL),
('2', 2, 'Marsey Alphabet', 'number', NULL),
('3', 2, 'Marsey Alphabet', 'number', NULL),
('4', 2, 'Marsey Alphabet', 'number', NULL),
('5', 2, 'Marsey Alphabet', 'number', NULL),
('6', 2, 'Marsey Alphabet', 'number', NULL),
('7', 2, 'Marsey Alphabet', 'number', NULL),
('8', 2, 'Marsey Alphabet', 'number', NULL),
('9', 2, 'Marsey Alphabet', 'number', NULL),
('ialt', 2, 'Marsey Alphabet', 'letter', NULL),
('0alt', 2, 'Marsey Alphabet', 'number', NULL),
('ccedilla', 2, 'Marsey Alphabet', 'letter', NULL),
('space', 2, 'Marsey Alphabet', 'letter', NULL),
('comma', 2, 'Marsey Alphabet', 'letter', NULL),
('period', 2, 'Marsey Alphabet', '. dot', NULL),
('questionmark', 2, 'Marsey Alphabet', '?', NULL),
('exclamationpoint', 2, 'Marsey Alphabet', '!', NULL),
('at', 2, 'Marsey Alphabet', '@', NULL),
('pound', 2, 'Marsey Alphabet', '# hashtag octothorpe', NULL),
('percent', 2, 'Marsey Alphabet', '%', NULL),
('caret', 2, 'Marsey Alphabet', '^', NULL),
('ampersand', 2, 'Marsey Alphabet', '& and', NULL),
('asterisk', 2, 'Marsey Alphabet', '* times', NULL),
('paren', 2, 'Marsey Alphabet', '( )', NULL),
('brace', 2, 'Marsey Alphabet', '{ } curly bracket', NULL),
('equals', 2, 'Marsey Alphabet', '=', NULL),
('equals2', 2, 'Marsey Alphabet', '=', NULL),
('plus', 2, 'Marsey Alphabet', '+', NULL),
('plus2', 2, 'Marsey Alphabet', '+', NULL),
('times', 2, 'Marsey Alphabet', '* cross product', NULL),
('dash', 2, 'Marsey Alphabet', '- hyphen minus', NULL),
('emdash', 2, 'Marsey Alphabet', '- —', NULL),
('underscore', 2, 'Marsey Alphabet', '_', NULL),
('colon', 2, 'Marsey Alphabet', ':', NULL),
('apostrophe', 2, 'Marsey Alphabet', '''', NULL),
('quotation', 2, 'Marsey Alphabet', '"', NULL),
('slash', 2, 'Marsey Alphabet', '/ \\ division', NULL),
('vert', 2, 'Marsey Alphabet', '| pipe vbar bar', NULL),
('tilde', 2, 'Marsey Alphabet', '~ similar approx', NULL),
('angle', 2, 'Marsey Alphabet', '< > gt lt', NULL),
('leq', 2, 'Marsey Alphabet', '≤ ≥ lte gte less greater', NULL),
('simeq', 2, 'Marsey Alphabet', '≃ similar approx', NULL),
('angle2', 2, 'Marsey Alphabet', '⟨ ⟩ bra ket angle bracket', NULL),
('dagger', 2, 'Marsey Alphabet', '† dagger conjugate transpose footnote', NULL),
('ddagger', 2, 'Marsey Alphabet', '‡ dagger footnote', NULL),
('alpha', 2, 'Marsey Alphabet', 'α', NULL),
('beta', 2, 'Marsey Alphabet', 'β', NULL),
('gamma', 2, 'Marsey Alphabet', 'γ', NULL),
('delta', 2, 'Marsey Alphabet', 'δ', NULL),
('epsilon', 2, 'Marsey Alphabet', 'ε', NULL),
('zeta', 2, 'Marsey Alphabet', 'ζ', NULL),
('eta', 2, 'Marsey Alphabet', 'η', NULL),
('theta', 2, 'Marsey Alphabet', 'θ', NULL),
('iota', 2, 'Marsey Alphabet', 'ι', NULL),
('kappa', 2, 'Marsey Alphabet', 'κ', NULL),
('lambda', 2, 'Marsey Alphabet', 'λ', NULL),
('mu', 2, 'Marsey Alphabet', 'μ', NULL),
('nu', 2, 'Marsey Alphabet', 'ν', NULL),
('xi', 2, 'Marsey Alphabet', 'ξ', NULL),
('pi', 2, 'Marsey Alphabet', 'π', NULL),
('rho', 2, 'Marsey Alphabet', 'ρ', NULL),
('sigma', 2, 'Marsey Alphabet', 'σ', NULL),
('tau', 2, 'Marsey Alphabet', 'τ', NULL),
('phi', 2, 'Marsey Alphabet', 'ϕ', NULL),
('chi', 2, 'Marsey Alphabet', 'χ', NULL),
('psi', 2, 'Marsey Alphabet', 'ψ', NULL),
('omega', 2, 'Marsey Alphabet', 'ω', NULL),
('varphi', 2, 'Marsey Alphabet', 'φ', NULL),
('gammacap', 2, 'Marsey Alphabet', 'Γ', NULL),
('deltacap', 2, 'Marsey Alphabet', 'Δ', NULL),
('lambdacap', 2, 'Marsey Alphabet', 'Λ', NULL),
('picap', 2, 'Marsey Alphabet', 'Π', NULL),
('sigmacap', 2, 'Marsey Alphabet', 'Σ', NULL),
('phicap', 2, 'Marsey Alphabet', 'Φ', NULL),
('psicap', 2, 'Marsey Alphabet', 'Ψ', NULL),
('omegacap', 2, 'Marsey Alphabet', 'Ω', NULL),
('aleph', 2, 'Marsey Alphabet', 'ℵ cardinal infinite', NULL),
('bbbc', 2, 'Marsey Alphabet', ' complex blackboard', NULL),
('bbbn', 2, 'Marsey Alphabet', ' naturals blackboard', NULL),
('bbbq', 2, 'Marsey Alphabet', ' rationals blackboard', NULL),
('bbbr', 2, 'Marsey Alphabet', ' reals blackboard', NULL),
('bbbz', 2, 'Marsey Alphabet', ' integers blackboard', NULL),
('infty', 2, 'Marsey Alphabet', '∞ infinite infinity', NULL),
('hbar', 2, 'Marsey Alphabet', 'ħ planck constant quantum', NULL),
('integral', 2, 'Marsey Alphabet', '', NULL),
('partial', 2, 'Marsey Alphabet', '', NULL),
('nabla', 2, 'Marsey Alphabet', '∇ del', NULL),
('propto', 2, 'Marsey Alphabet', '∝ proportional', NULL),
('forall', 2, 'Marsey Alphabet', '', NULL),
('therefore', 2, 'Marsey Alphabet', '∴ thus', NULL),
('box', 2, 'Marsey Alphabet', '☐ qed halmos tombstone square', NULL),
('to', 2, 'Marsey Alphabet', '→ arrow function limit', NULL),
('implies', 2, 'Marsey Alphabet', '⟹ ⇒ arrow', NULL),
('vdash', 2, 'Marsey Alphabet', '⊢ tack turnstile tee yields proves', NULL),
('models', 2, 'Marsey Alphabet', '⊧ turnstile entails', NULL),
('neg', 2, 'Marsey Alphabet', '¬ not negation logical', NULL),
('land', 2, 'Marsey Alphabet', '∧ and logical', NULL),
('lor', 2, 'Marsey Alphabet', ' or logical', NULL),
('emptyset', 2, 'Marsey Alphabet', '∅ null zero', NULL),
('in', 2, 'Marsey Alphabet', '∈ ∋ membership set', NULL),
('subset', 2, 'Marsey Alphabet', '', NULL),
('subsetneq', 2, 'Marsey Alphabet', '', NULL),
('cap', 2, 'Marsey Alphabet', '∩ intersection set', NULL),
('cup', 2, 'Marsey Alphabet', ' union set', NULL),
('oplus', 2, 'Marsey Alphabet', '⊕ xor circled sum', NULL),
('otimes', 2, 'Marsey Alphabet', '⊗ tensor circled product', NULL),
('trianglelefteq', 2, 'Marsey Alphabet', '', NULL),
('marseyflagmaryland', 2, 'Marsey Flags', 'maryland crab bad driver', NULL),
('marseyflagcalifornia', 2, 'Marsey Flags', 'california', NULL),
('marseyflagtexas', 2, 'Marsey Flags', 'texas cowboy yee haw', NULL),
('marseyflageu', 2, 'Marsey Flags', 'eu European', NULL),
('marseyflagafrica', 2, 'Marsey Flags', 'africa african BIPOC', NULL),
('marseyflagafghanistan', 2, 'Marsey Flags', 'afghanistan muslim jihadi taliban', NULL),
('marseyflagalbania', 2, 'Marsey Flags', 'albania balkans cool flag', NULL),
('marseyflagalgeria', 2, 'Marsey Flags', 'algeria africa', NULL),
('marseyflagandorra', 2, 'Marsey Flags', 'andorra europe', NULL),
('marseyflagangola', 2, 'Marsey Flags', 'angola africa', NULL),
('marseyflagantarctica', 2, 'Marsey Flags', 'antarctica cold penguins', NULL),
('marseyflagantiguaandbarbuda', 2, 'Marsey Flags', 'antigua barbuda indies island', NULL),
('marseyflagargentina', 2, 'Marsey Flags', 'argentina south america sun', NULL),
('marseyflagarmenia', 2, 'Marsey Flags', 'armenia west asia', NULL),
('marseyflagaustralia', 2, 'Marsey Flags', 'australia aussie', NULL),
('marseyflagaustria', 2, 'Marsey Flags', 'austria europe hitler', NULL),
('marseyflagazerbaijan', 2, 'Marsey Flags', 'azerbaijan eastern europe west asia', NULL),
('marseyflagbahamas', 2, 'Marsey Flags', 'bahamas north america island', NULL),
('marseyflagbahrain', 2, 'Marsey Flags', 'bahrain west asia island', NULL),
('marseyflagbangladesh', 2, 'Marsey Flags', 'bangladesh asia', NULL),
('marseyflagbarbados', 2, 'Marsey Flags', 'barbados island indies', NULL),
('marseyflagbelarus', 2, 'Marsey Flags', 'belarus eastern europe', NULL),
('marseyflagbelgium', 2, 'Marsey Flags', 'belgium europe waffles', NULL),
('marseyflagbosnia', 2, 'Marsey Flags', 'bosnia herzegovina eastern europe balkans', NULL),
('marseyflagbrazil', 2, 'Marsey Flags', 'brazil south america numbero uno', NULL),
('marseyflagbulgaria', 2, 'Marsey Flags', 'bulgeria eastern europe', NULL),
('marseyflagcanada', 2, 'Marsey Flags', 'canada rake canuck north america leaf', NULL),
('marseyflagchile', 2, 'Marsey Flags', 'chile south america', NULL),
('marseyflagchina', 2, 'Marsey Flags', 'china asia', NULL),
('marseyflagcolombia', 2, 'Marsey Flags', 'columbia south america', NULL),
('marseyflagcyprus', 2, 'Marsey Flags', 'cyprus europe', NULL),
('marseyflagdenmark', 2, 'Marsey Flags', 'denmark europe', NULL),
('marseyflagegypt', 2, 'Marsey Flags', 'egypt africa aevann pyramid giza', NULL),
('marseyflagelsalvador', 2, 'Marsey Flags', 'salvador south america', NULL),
('marseyflagestonia', 2, 'Marsey Flags', 'estonia europe baltic', NULL),
('marseyflagfinland', 2, 'Marsey Flags', 'finland europe scandinavian', NULL),
('marseyflagfrance', 2, 'Marsey Flags', 'france europe', NULL),
('marseyflaggeorgia', 2, 'Marsey Flags', 'georgia eastern europe western asia stalin', NULL),
('marseyflaggermany', 2, 'Marsey Flags', 'donger kraut deutschland', NULL),
('marseyflaggreece', 2, 'Marsey Flags', 'greece balkans eastern europe', NULL),
('marseyflaghungary', 2, 'Marsey Flags', 'hungary eastern europe', NULL),
('marseyflagindia', 2, 'Marsey Flags', 'india asia bhrat', NULL),
('marseyflagindonesia', 2, 'Marsey Flags', 'indonesia southeast asia', NULL),
('marseyflagiran', 2, 'Marsey Flags', 'iran muslim middle east', NULL),
('marseyflagiraq', 2, 'Marsey Flags', 'iraq muslim middle east', NULL),
('marseyflagireland', 2, 'Marsey Flags', 'ireland europe car bomb', NULL),
('marseyflagitaly', 2, 'Marsey Flags', 'italy europe pasta', NULL),
('marseyflagjapan', 2, 'Marsey Flags', 'Japan Asia', NULL),
('marseyflagjordan', 2, 'Marsey Flags', 'jordan muslim middle east almonds', NULL),
('marseyflagkazakhstan', 2, 'Marsey Flags', 'kazakhstan central asia cool flag', NULL),
('marseyflagkenya', 2, 'Marsey Flags', 'kenya africa', NULL),
('marseyflaglebanon', 2, 'Marsey Flags', 'lebanon hezbollah middle east muslim', NULL),
('marseyflagmexico', 2, 'Marsey Flags', 'mexico north america taco ole', NULL),
('marseyflagmorocco', 2, 'Marsey Flags', 'morocco africa', NULL),
('marseyflagnetherlands', 2, 'Marsey Flags', 'netherlands dyke europe', NULL),
('marseyflagnewzealand', 2, 'Marsey Flags', 'new zealand oceania kiwi', NULL),
('marseyflagniger', 2, 'Marsey Flags', 'niger africa BIPOC', NULL),
('marseyflagnigeria', 2, 'Marsey Flags', 'nigeria africa', NULL),
('marseyflagnorthkorea', 2, 'Marsey Flags', 'north korea asia best korea', NULL),
('marseyflagnorway', 2, 'Marsey Flags', 'norway europe scandinavian', NULL),
('marseyflagpakistan', 2, 'Marsey Flags', 'pakistan asia', NULL),
('marseyflagpalau', 2, 'Marsey Flags', 'palau oceania obese', NULL),
('marseyflagpalestine', 2, 'Marsey Flags', 'palestine middle east muslim', NULL),
('marseyflagperu', 2, 'Marsey Flags', 'peru south america incan', NULL),
('marseyflagphillipines', 2, 'Marsey Flags', 'philippines southeast asia jolliebee', NULL),
('marseyflagpoland', 2, 'Marsey Flags', 'poland eastern europe europe', NULL),
('marseyflagportugal', 2, 'Marsey Flags', 'portugal europe eastern europe', NULL),
('marseyflagqatar', 2, 'Marsey Flags', 'qatar middle east muslim', NULL),
('marseyflagromania', 2, 'Marsey Flags', 'romania europe eastern europe vampire pickpocket', NULL),
('marseyflagrussia', 2, 'Marsey Flags', 'russia europe eastern europe vatnik', NULL),
('marseyflagsaudiarabia', 2, 'Marsey Flags', 'saudi arabia middle east muslim', NULL),
('marseyflagserbia', 2, 'Marsey Flags', 'serbia europe southeast asia', NULL),
('marseyflagsouthafrica', 2, 'Marsey Flags', 'south africa africa', NULL),
('marseyflagsouthkorea', 2, 'Marsey Flags', 'south korea asia worst korea', NULL),
('marseyflagspain', 2, 'Marsey Flags', 'spain europe', NULL),
('marseyflagsweden', 2, 'Marsey Flags', 'sweden europe scandinavian ikea', NULL),
('marseyflagswitzerland', 2, 'Marsey Flags', 'switzerland europe gold neutral chocolate', NULL),
('marseyflagsyria', 2, 'Marsey Flags', 'syria middle east muslim', NULL),
('marseyflagtaiwan', 2, 'Marsey Flags', 'taiwan china asia', NULL),
('marseyflagtajikistan', 2, 'Marsey Flags', 'tajikistan central asia cool flag', NULL),
('marseyflagthailand', 2, 'Marsey Flags', 'thailand southeast asia', NULL),
('marseyflagturkey', 2, 'Marsey Flags', 'turkey europe', NULL),
('marseyflagtuvalu', 2, 'Marsey Flags', 'tuvalu oceania obese', NULL),
('marseyflaguae', 2, 'Marsey Flags', 'uae united arab emirates middle east muslim', NULL),
('marseyflaguk', 2, 'Marsey Flags', 'uk england scotland wales bong northern ireland terf island europe', NULL),
('marseyflagukraine', 2, 'Marsey Flags', 'ukraine eastern europe zelensky', NULL),
('marseyflagus', 2, 'Marsey Flags', 'us united states united states of america america burger north america', NULL),
('marseyflagvatican', 2, 'Marsey Flags', 'vatican pope europe catholic holy', NULL),
('marseyflagvietnam', 2, 'Marsey Flags', 'vietnam southeast asia', NULL),
('patyl', 2, 'Platy', 'quper platypus mersya wombiezolf doodle', NULL),
('platyaboriginal', 2, 'Platy', 'platypus boomerang indigenous native gascan', NULL),
('platyanime', 2, 'Platy', 'platypus rice chopsticks waifu kawaii', NULL),
('platybanana', 2, 'Platy', 'platypus fruit monkey', NULL),
('platybomb', 2, 'Platy', 'platypus explosive explosion terrorist boom', NULL),
('platybussy', 2, 'Platy', 'platypus dude lmao butthole', NULL),
('platyhandbanana', 2, 'Platy', 'platypus fruit doodle angry', NULL),
('platyperrytheplatypus', 2, 'Platy', 'platypus phineas ferb agent espionage cartoon', NULL),
('platysun', 2, 'Platy', 'platypus teletubbies smile shine baby', NULL),
('platysun2', 2, 'Platy', 'platypus angry anger fire seethe seething', NULL),
('platytrans', 2, 'Platy', 'platypus :marseytrain: train :marseytrain: rights flag valid', NULL),
('platyfuckyou', 2, 'Platy', 'platypus middle finger angry gesture', NULL),
('plarsy', 2, 'Platy', 'platypus marsey mutt inbred doodle ugly', NULL),
('platyabused', 2, 'Platy', 'platypus domestic scared flinching beaten fight', NULL),
('platyblizzard', 2, 'Platy', 'platypus cold freezing freeze snow winter chill', NULL),
('platyboxer', 2, 'Platy', 'platypus boxing fighter ring gloves punch', NULL),
('platydevil', 2, 'Platy', 'platypus demon pitchfork satan fiend shaitan', NULL),
('platyfear', 2, 'Platy', 'platypus scared scary frightened horrified coward terror', NULL),
('platygirlmagic', 2, 'Platy', 'platypus rainbow wand fairy pixie spell', NULL),
('platygolong', 2, 'Platy', 'platypus egg space **idontgetthereferenceaevannhelp**', NULL),
('platyhaes', 2, 'Platy', 'platypus donuts cupcakes fat sugar sweet healthy', NULL),
('platyking', 2, 'Platy', 'platypus king kang throne crown royal noble', NULL),
('platylove', 2, 'Platy', 'platypus heart hug kiss embrace like', NULL),
('platyneet', 2, 'Platy', 'platypus unemployed lazy lonely bed hiding', NULL),
('platyold', 2, 'Platy', 'platypus elder ancient grandpa boomer', NULL),
('platypatience', 2, 'Platy', 'platypus waiting watch time clock', NULL),
('platypopcorn', 2, 'Platy', 'platypus drama television tv watching slouching bored', NULL),
('platyrich', 2, 'Platy', 'platypus money dollars wealthy landlord cool', NULL),
('platysarcasm', 2, 'Platy', 'platypus sarcastic srd subredditdrama', NULL),
('platysilly', 2, 'Platy', 'platypus cheeky tongue insult funny face', NULL),
('platysleeping', 2, 'Platy', 'platypus yawn bed resting lazy snore', NULL),
('platythink', 2, 'Platy', 'platypus thunk hmm confused idea wondering considering', NULL),
('platytired', 2, 'Platy', 'platypus restless insomnia deprived awake tired', NULL),
('platytuxedomask', 2, 'Platy', 'platypus sailor moon mamoru chiba roses cape', NULL),
('platyblush', 2, 'Platy', 'platypus shy flattered redden cheeks', NULL),
('platybruh', 2, 'Platy', 'platypus brah doubt suspicious', NULL),
('platycaveman', 2, 'Platy', 'platypus grug primitive troglodyte stoneage', NULL),
('platycheer', 2, 'Platy', 'platypus encourage motivate cheerup celebrate', NULL),
('platydown', 2, 'Platy', 'platypus depressed giveup sad gloomy unhappy', NULL),
('platyeyes', 2, 'Platy', 'platypus serious squint closeup doubt', NULL),
('platyheart', 2, 'Platy', 'platypus love like hug', NULL),
('platylol', 2, 'Platy', 'platypus laugh lmao rofl funny', NULL),
('platymicdrop', 2, 'Platy', 'platypus microphone owned destroyed', NULL),
('platynooo', 2, 'Platy', 'platypus crying kneeling sad scream', NULL),
('platysalute', 2, 'Platy', 'platypus soldier respect army navy', NULL),
('platyseethe', 2, 'Platy', 'platypus angry anger fire seethe seething saiyan', NULL),
('platythumbsup', 2, 'Platy', 'platypus approve good nice', NULL),
('platywave', 2, 'Platy', 'platypus hello hi bye waving', NULL),
('platykys', 2, 'Platy', 'platypus kill yourself suicide hate', NULL),
('platydinosaur', 2, 'Platy', 'platypus fossil reptile cdace', NULL),
('wolfpicrew', 2, 'Wolf', 'trans picrew ugly calarts', NULL),
('wolfglowie', 2, 'Wolf', 'dramarama fbi federal agent police detective cop officer lurking', NULL),
('wolfbootlicker', 2, 'Wolf', 'dramarama', NULL),
('wolfbrainlet', 2, 'Wolf', 'retard stupid idiot', NULL),
('wolfrofl', 2, 'Wolf', 'dramarama laughing rolling', NULL),
('wolfheart', 2, 'Wolf', 'love like cute valentine boyfriend', NULL),
('wombiezolf', 2, 'Wolf', 'dramarama cute', NULL),
('wolfsal', 2, 'Wolf', 'two weeks shark femboy user', NULL),
('wolfdramanomicon', 2, 'Wolf', 'dramanomicon', NULL),
('wolfamogus', 2, 'Wolf', 'amogus sus stonetoss', NULL),
('wolfmarine', 2, 'Wolf', 'marine', NULL),
('wolfromulusremus', 2, 'Wolf', 'romulusremus', NULL),
('wolfrope', 2, 'Wolf', 'rope watch late', NULL),
('wolftinfoil', 2, 'Wolf', 'tinfoil', NULL),
('wolfmarseymask', 2, 'Wolf', 'marseymask', NULL),
('wolfputin', 2, 'Wolf', 'putin', NULL),
('wolfdrama', 2, 'Wolf', 'drama', NULL),
('wolfcumjar', 2, 'Wolf', 'cumjar', NULL),
('wolflgbt', 2, 'Wolf', 'lgbt', NULL),
('wolfmarseyhead', 2, 'Wolf', 'marseyhead', NULL),
('wolfnoir', 2, 'Wolf', 'noir', NULL),
('wolfsherifssmoking', 2, 'Wolf', 'sherifssmoking', NULL),
('wolftrans', 2, 'Wolf', 'trans', NULL),
('wolfvaporwave', 2, 'Wolf', 'vaporwave', NULL),
('wolfangry', 2, 'Wolf', 'angry', NULL),
('wolfdinosaur', 2, 'Wolf', 'rawr dinosaur', NULL),
('wolfbrains', 2, 'Wolf', 'author": "anton-d brains', NULL),
('wolfcry', 2, 'Wolf', 'author": "anton-d cry', NULL),
('wolfdead', 2, 'Wolf', 'author": "anton-d dead', NULL),
('wolfdevilish', 2, 'Wolf', 'author": "anton-d devilish', NULL),
('wolffacepalm', 2, 'Wolf', 'author": "anton-d facepalm bat', NULL),
('wolfhappy', 2, 'Wolf', 'author": "anton-d happy', NULL),
('wolfidea', 2, 'Wolf', 'author": "anton-d idea', NULL),
('wolfkoala', 2, 'Wolf', 'author": "anton-d koala', NULL),
('wolflaugh', 2, 'Wolf', 'author": "anton-d laugh', NULL),
('wolflove', 2, 'Wolf', 'author": "anton-d love brain', NULL),
('wolfmeditate', 2, 'Wolf', 'author": "anton-d meditate', NULL),
('wolfphone', 2, 'Wolf', 'author": "anton-d phone', NULL),
('wolfrainbow', 2, 'Wolf', 'author": "anton-d rainbow', NULL),
('wolfroses', 2, 'Wolf', 'author": "anton-d roses', NULL),
('wolfsad', 2, 'Wolf', 'author": "anton-d sad howl wail', NULL),
('wolfsfear', 2, 'Wolf', 'author": "anton-d fear flying guillotine scout knife cleaver', NULL),
('wolfsleep', 2, 'Wolf', 'author": "anton-d sleep', NULL),
('wolftear', 2, 'Wolf', 'author": "anton-d tear', NULL),
('wolfthink', 2, 'Wolf', 'author": "anton-d think arrow bow', NULL),
('wolfthumbsup', 2, 'Wolf', 'author": "anton-d thumbsup positive', NULL),
('wolfupsidedown', 2, 'Wolf', 'author": "anton-d upsidedown head', NULL),
('wolfvictory', 2, 'Wolf', 'author": "anton-d victory rip dead gravestone stone', NULL),
('wolfwave', 2, 'Wolf', 'author": "anton-d wave salute', NULL),
('wolfwink', 2, 'Wolf', 'author": "anton-d wink joke', NULL),
('taythumbsup', 2, 'Tay', 'taylor swift approval approve animated good job like positive good nice yes agree', NULL),
('taycrying', 2, 'Tay', 'taylor swift sad hysterical ellen', NULL),
('taysneer', 2, 'Tay', 'sneer', NULL),
('tayvape', 2, 'Tay', 'vape', NULL),
('taylove', 2, 'Tay', 'love', NULL),
('tayaaa', 2, 'Tay', 'aaa', NULL),
('tayadmire', 2, 'Tay', 'admire', NULL),
('taycat', 2, 'Tay', 'cat', NULL),
('taycelebrate', 2, 'Tay', 'celebrate', NULL),
('taychefkiss', 2, 'Tay', 'chefkiss', NULL),
('taychristmas', 2, 'Tay', 'christmas', NULL),
('tayclap', 2, 'Tay', 'clap', NULL),
('taycold', 2, 'Tay', 'cold', NULL),
('taycrown', 2, 'Tay', 'crown', NULL),
('tayflex', 2, 'Tay', 'flex', NULL),
('tayflirt', 2, 'Tay', 'flirt', NULL),
('taygrimacing', 2, 'Tay', 'grimacing', NULL),
('tayhappy', 2, 'Tay', 'happy', NULL),
('tayheart', 2, 'Tay', 'heart', NULL),
('tayhmm', 2, 'Tay', 'hmm', NULL),
('tayhuh', 2, 'Tay', 'huh', NULL),
('tayhyperdab', 2, 'Tay', 'hyperdab', NULL),
('tayjammin', 2, 'Tay', 'jammin', NULL),
('taylaugh', 2, 'Tay', 'laugh', NULL),
('taymindblown', 2, 'Tay', 'mindblown', NULL),
('tayno', 2, 'Tay', 'no', NULL),
('taynod', 2, 'Tay', 'nod', NULL),
('taypeace', 2, 'Tay', 'peace', NULL),
('taypray', 2, 'Tay', 'pray', NULL),
('tayrun', 2, 'Tay', 'run', NULL),
('tayscrunch', 2, 'Tay', 'scrunch', NULL),
('tayshake', 2, 'Tay', 'shake', NULL),
('tayshrug', 2, 'Tay', 'shrug', NULL),
('taysilly', 2, 'Tay', 'silly', NULL),
('tayslide', 2, 'Tay', 'slide', NULL),
('taysmart', 2, 'Tay', 'smart', NULL),
('taystop', 2, 'Tay', 'stop', NULL),
('taytantrum', 2, 'Tay', 'tantrum', NULL),
('taytea', 2, 'Tay', 'tea', NULL),
('taythink', 2, 'Tay', 'think', NULL),
('tayvibin', 2, 'Tay', 'vibin', NULL),
('taywhat', 2, 'Tay', 'what', NULL),
('taywine', 2, 'Tay', 'wine', NULL),
('taywine2', 2, 'Tay', 'wine2', NULL),
('taywink', 2, 'Tay', 'wink', NULL),
('tayyes', 2, 'Tay', 'yes', NULL),
('postalsmiley', 2, 'Classic', 'postal game devil evil smiley', NULL),
('grouphug', 2, 'Classic', 'group hug hug cute positive emoticon', NULL),
('flowers', 2, 'Classic', 'flowers cute emoticon bouquet animated', NULL),
('scootlgbt', 2, 'Classic', 'lgbt gay lesbian bi trans flag animated emoticon', NULL),
('idhitit', 2, 'Classic', 'banana sign dance funny animated', NULL),
('2thumbsup', 2, 'Classic', 'thumbs up emoticon animated smiley good job like', NULL),
('aliendj', 2, 'Classic', 'alien dj alien dj music animated extraterrestrial cool', NULL),
('ambulance', 2, 'Classic', 'ambulance vehicle animated hospital medical care emt paramedic', NULL),
('angry', 2, 'Classic', 'angry animated emoticon mad upset enraged red', NULL),
('angrywhip', 2, 'Classic', 'emoticon animated whip angry master', NULL),
('argue', 2, 'Classic', 'argue animated emoticon fight disagree debate', NULL),
('aroused', 2, 'Classic', 'aroused horny emoticon animated turned on uncomfortable', NULL),
('ashamed', 2, 'Classic', 'ashamed animated emoticon embarrassed guilty sheepish', NULL),
('badass', 2, 'Classic', 'badass cool guns shooting animated', NULL),
('banana', 2, 'Classic', 'banana dancing dancing banana funny animated', NULL),
('band', 2, 'Classic', 'band emoticon animated music guitar microphone drum', NULL),
('banghead', 2, 'Classic', 'bang head emoticon animated angry frustrated brick wall upset mad aggravated displeased', NULL),
('batman', 2, 'Classic', 'batman bruce wayne super hero capeshit animated', NULL),
('bigeyes', 2, 'Classic', 'big eyes emoticon stare looking booba', NULL),
('bite', 2, 'Classic', 'bite feral emoticon animated teeth ravenous insane', NULL),
('blind', 2, 'Classic', 'blind emoticon animated cant see', NULL),
('blowkiss', 2, 'Classic', 'blow kiss animated emoticon kiss hearts love', NULL),
('blush', 2, 'Classic', 'blush animated emoticon embarrassed shy', NULL),
('bong', 2, 'Classic', 'bong emoticon animated drugs weed', NULL),
('bounce', 2, 'Classic', 'bounce emoticon animated jump bouncy', NULL),
('bow', 2, 'Classic', 'bow emoticon animated prostrate bow down', NULL),
('breakheart', 2, 'Classic', 'break heart animated emoticon heartbroken heartbreak love', NULL),
('bs', 2, 'Classic', 'bs emoticon animated bull shit bullshit disbelief flag', NULL),
('cartwheel', 2, 'Classic', 'cartwheel emoticon animated gymnastics', NULL),
('cat', 2, 'Classic', 'cat animated cute itch sleep wake up', NULL),
('celebrate', 2, 'Classic', 'celebrate emoticon party', NULL),
('chainsaw', 2, 'Classic', 'chainsaw animated emoticon blood gore murder power tool', NULL),
('cheers', 2, 'Classic', 'cheers emoticon animated toast beer alcohol celebration', NULL),
('clap', 2, 'Classic', 'clap emoticon animated happy excited cheering', NULL),
('cold', 2, 'Classic', 'cold emoticon animated shivering freezing bundled up sign scarf', NULL),
('confused', 2, 'Classic', 'confused animated emoticon perplexed', NULL),
('crazyeyes', 2, 'Classic', 'crazy eyes animated emoticon insane crazy bpd', NULL),
('cry', 2, 'Classic', 'cry animated emoticon sad sob', NULL),
('cthulhu', 2, 'Classic', 'cthulhu animated lovecraft old one', NULL),
('cute', 2, 'Classic', 'cute animated bunny rabbit jumping dancing bouncing', NULL),
('laughing', 2, 'Classic', 'laughing animated emoticon funny smiling smug', NULL),
('daydream', 2, 'Classic', 'daydream animated emoticon wistful dream thinking', NULL),
('ddr', 2, 'Classic', 'ddr animated emoticon dancing dance firework celebration', NULL),
('deadpool', 2, 'Classic', 'deadpool animated marvel superhero capeshit', NULL),
('devilsmile', 2, 'Classic', 'devilsmile animated emoticon evil demonic fire', NULL),
('diddle', 2, 'Classic', 'diddle animated emoticon shifty suspicious', NULL),
('die', 2, 'Classic', 'die animated emoticon dead', NULL),
('distress', 2, 'Classic', 'distress emoticon', NULL),
('disturbing', 2, 'Classic', 'disturbing emoticon gross troubling', NULL),
('dizzy', 2, 'Classic', 'dizzy animated emoticon', NULL),
('domo', 2, 'Classic', 'domo animated', NULL),
('doughboy', 2, 'Classic', 'doughboy animated pillsbury jumping', NULL),
('drink', 2, 'Classic', 'drink animated emoticon beer alcohol bottoms up imbibe', NULL),
('drool', 2, 'Classic', 'drool emoticon retard retarded stupid idiot', NULL),
('dudeweedlmao', 2, 'Classic', 'dudeweedlmao animated emoticon weed drugs', NULL),
('edward', 2, 'Classic', 'edward emoticon animated scissor', NULL),
('electro', 2, 'Classic', 'electro animated emoticon shock shocking electricity', NULL),
('elephant', 2, 'Classic', 'elephant animated dancing pink', NULL),
('embarrassed', 2, 'Classic', 'embarrassed animated emoticon shy sheepish', NULL),
('emo', 2, 'Classic', 'emo animated emoticon edgy cutting blood', NULL),
('emo2', 2, 'Classic', 'emo animated emoticon sad glasses crying', NULL),
('evil', 2, 'Classic', 'evil emoticon scary', NULL),
('evilclown', 2, 'Classic', 'evil clown animated emoticon scary evil clown chainsaw blood', NULL),
('evilgrin', 2, 'Classic', 'evil grin emoticon evil smile teeth', NULL),
('facepalm', 2, 'Classic', 'facepalm animated emoticon stupid seriously', NULL),
('fap', 2, 'Classic', 'fap animated emoticon coomer', NULL),
('flamethrower', 2, 'Classic', 'animated emoticon flamethrower fire kill', NULL),
('flipbird', 2, 'Classic', 'animated emoticon fuck off middle finger', NULL),
('flirt', 2, 'Classic', 'flirt animated emoticon', NULL),
('frown', 2, 'Classic', 'frown emoticon sad upset', NULL),
('gasp', 2, 'Classic', 'gasp animated emoticon shocked', NULL),
('glomp', 2, 'Classic', 'glomp animated emoticon hug', NULL),
('go', 2, 'Classic', 'go animated emoticon leave', NULL),
('gooby', 2, 'Classic', 'gooby emoticon laugh funny', NULL),
('grr', 2, 'Classic', 'grr emoticon mad upset disgruntled', NULL),
('gtfo', 2, 'Classic', 'gtfo emoticon leave point sign', NULL),
('guitar', 2, 'Classic', 'guitar animated emoticon music instrument rock', NULL),
('haha', 2, 'Classic', 'haha animated emoticon laugh funny', NULL),
('handshake', 2, 'Classic', 'handshake animated emoticon deal agree', NULL),
('happydance', 2, 'Classic', 'animated emoticon happy dance joyful glee', NULL),
('headbang', 2, 'Classic', 'headbang animated emoticon rocking music', NULL),
('heart', 2, 'Classic', 'heart love', NULL),
('heartbeat', 2, 'Classic', 'heartbeat animated heart love', NULL),
('hearts', 2, 'Classic', 'hearts animated heart love', NULL),
('highfive', 2, 'Classic', 'high-five animated emoticon up top', NULL),
('hmm', 2, 'Classic', 'hmm animated emoticon think notice contemplate', NULL),
('hmph', 2, 'Classic', 'hmph animated emoticon indignant', NULL),
('holdhands', 2, 'Classic', 'hold hands animated emoticon love', NULL),
('horny', 2, 'Classic', 'lick owo sex hot animated emoticon pervert', NULL),
('hug', 2, 'Classic', 'hug animated emoticon snuggle', NULL),
('hugging', 2, 'Classic', 'hugging animated emoticon hug', NULL),
('hugs', 2, 'Classic', 'hugs animated emoticon hug', NULL),
('hump', 2, 'Classic', 'hump animated emoticon sex horny', NULL),
('humpbed', 2, 'Classic', 'animated emoticon hump bed sex horny', NULL),
('hysterical', 2, 'Classic', 'hysterical animated emoticon crazy', NULL),
('ily', 2, 'Classic', 'ily animated emoticon love heart kiss', NULL),
('inlove', 2, 'Classic', 'animated emoticon love heart', NULL),
('jason', 2, 'Classic', 'jason animated horror chainsaw', NULL),
('jawdrop', 2, 'Classic', 'jawdrop animated emoticon awooga astounded surprised', NULL),
('jedi', 2, 'Classic', 'jedi animated emoticon star wars lightsaber', NULL),
('jester', 2, 'Classic', 'jester animated emoticon clown laugh smug', NULL),
('kaboom', 2, 'Classic', 'kaboom emoticons animated explode fracture', NULL),
('kick', 2, 'Classic', 'kick animated emoticon fight fall', NULL),
('kiss', 2, 'Classic', 'kiss animated emoticon love', NULL),
('kitty', 2, 'Classic', 'kitty animated cat kitten', NULL),
('laughchair', 2, 'Classic', 'animated emoticon laugh chair fall', NULL),
('lick', 2, 'Classic', 'animated lick emoticon', NULL),
('link', 2, 'Classic', 'link animated legend of zelda vidya nintendo', NULL),
('lol', 2, 'Classic', 'lol animated emoticon laugh funny', NULL),
('lolbeat', 2, 'Classic', 'animated emoticon lol beat fight sign', NULL),
('loving', 2, 'Classic', 'loving animated emoticon love couple hearts', NULL),
('makeout', 2, 'Classic', 'makeout animated emoticon kiss', NULL),
('medal', 2, 'Classic', 'medal animated emoticon award winner', NULL),
('megaman', 2, 'Classic', 'megaman animated vidya nintendo', NULL),
('megamanguitar', 2, 'Classic', 'megaman animated vidya nintendo guitar music rock', NULL),
('meow', 2, 'Classic', 'meow emoticon owo furry uwu cat face', NULL),
('metime', 2, 'Classic', 'fap animated coomer jack off horny', NULL),
('mooning', 2, 'Classic', 'mooning animated emoticon ass butt', NULL),
('mummy', 2, 'Classic', 'mummy animated monster horror pyramids egypt', NULL),
('na', 2, 'Classic', 'na animated emoticon furry raspberry mock', NULL),
('nauseous', 2, 'Classic', 'nauseous emoticon sick ill green', NULL),
('nervous', 2, 'Classic', 'nervous animated emoticon scared worried nail biting', NULL),
('ninja', 2, 'Classic', 'ninja animated emoticon japan', NULL),
('nod', 2, 'Classic', 'nod animated emoticon agree yes', NULL),
('nono', 2, 'Classic', 'no animated emoticon disagree finger wag', NULL),
('omg', 2, 'Classic', 'omg animated emoticon shocked disbelief', NULL),
('onfire', 2, 'Classic', 'fire animated emoticon ablaze', NULL),
('ooo', 2, 'Classic', 'ooo animated emoticon spooky ghost floating', NULL),
('orly', 2, 'Classic', 'orly seagull meme', NULL),
('tongueout', 2, 'Classic', 'tongue emoticon blep', NULL),
('paddle', 2, 'Classic', 'paddle animated emoticon spank bdsm', NULL),
('panda', 2, 'Classic', 'panda animated bear china', NULL),
('pandabutt', 2, 'Classic', 'panda animated bear butt shake china', NULL),
('paranoid', 2, 'Classic', 'paranoid animated emoticon shifty suspicious', NULL),
('party', 2, 'Classic', 'party animated emoticon balloon', NULL),
('patting', 2, 'Classic', 'patting animated emoticon comfort', NULL),
('peek', 2, 'Classic', 'peek animated emoticon look wall', NULL),
('pikachu', 2, 'Classic', 'pikachu animated pokemon electric vidya nintendo', NULL),
('pimp', 2, 'Classic', 'pimp animated emoticon hat cigar smoking', NULL),
('plzdie', 2, 'Classic', 'die emoticon disagree sign', NULL),
('poke', 2, 'Classic', 'poke animated emoticon stick', NULL),
('popcorn', 2, 'Classic', 'popcorn animated emoticon food', NULL),
('pout', 2, 'Classic', 'pout animated emoticon lip', NULL),
('probe', 2, 'Classic', 'probe animated emoticon alien monster extraterrestrial ', NULL),
('puke', 2, 'Classic', 'puke animated emoticon sick ill vomit throw up', NULL),
('punch', 2, 'Classic', 'punch animated emoticon fight fist hit', NULL),
('quote', 2, 'Classic', 'quote animated emoticon fingers', NULL),
('raccoon', 2, 'Classic', 'raccoon animated', NULL),
('roar', 2, 'Classic', 'roar animated emoticon yell scream', NULL),
('rofl', 2, 'Classic', 'rofl laugh rolling roll animated emoticon', NULL),
('roflmao', 2, 'Classic', 'roflmao animated emoticon laughing', NULL),
('rolleyes', 2, 'Classic', 'eye roll animated emoticon annoying', NULL),
('sad', 2, 'Classic', 'sad animated emoticon', NULL),
('sadeyes', 2, 'Classic', 'sad emoticon eyes big eyes', NULL),
('sadhug', 2, 'Classic', 'sad animated emoticon hug support', NULL),
('samurai', 2, 'Classic', 'samurai animated emoticon bushido katana japan', NULL),
('sarcasm', 2, 'Classic', 'sarcasm animated emoticon flip off sarcastic', NULL),
('scoot', 2, 'Classic', 'scoot animated emoticon cool', NULL),
('scream', 2, 'Classic', 'scream animated emoticon movie horror knife murder kill', NULL),
('shmoopy', 2, 'Classic', 'eyebrows animated emoticon raise eyebrows', NULL),
('shrug', 2, 'Classic', 'shrug animated emoticon', NULL),
('skull', 2, 'Classic', 'skull animated bones skeleton pirate', NULL),
('slap', 2, 'Classic', 'slap animated emoticon hit fight', NULL),
('slapfight', 2, 'Classic', 'fight animated emoticon slap hit', NULL),
('sleepy', 2, 'Classic', 'sleepy animated emoticon tired bedtime pillow', NULL),
('smackfish', 2, 'Classic', 'fish animated emoticon slap hit fight monty python cornobbling', NULL),
('smackhead', 2, 'Classic', 'smack animated emoticon facepalm', NULL),
('smh', 2, 'Classic', 'smh animated emoticon shake head facepalm', NULL),
('smile', 2, 'Classic', 'smile emoticon', NULL),
('smoke', 2, 'Classic', 'smoke animated emoticon cigarette lighter tobacco', NULL),
('sonic', 2, 'Classic', 'sonic animated vidya sega hedgehog cwc', NULL),
('spank', 2, 'Classic', 'spank animated emoticon bdsm german', NULL),
('sparta', 2, 'Classic', 'sparta animated emoticon movie 300 snyder', NULL),
('sperm', 2, 'Classic', 'sperm animated emoticon', NULL),
('spiderman', 2, 'Classic', 'spiderman animated superhero peter parker capeshit', NULL),
('stab', 2, 'Classic', 'stab animated emoticon kill murder knife england', NULL),
('star', 2, 'Classic', 'star animated smile', NULL),
('stare', 2, 'Classic', 'stare emoticon look watch', NULL),
('stfu', 2, 'Classic', 'stfu animated emoticon shut up quiet angry enraged sign', NULL),
('suicide', 2, 'Classic', 'suicide animated emoticon gun blood kys', NULL),
('surprisehug', 2, 'Classic', 'surprise animated emoticon hug love hearts', NULL),
('suspicious', 2, 'Classic', 'suspicious emoticon suspecting', NULL),
('sweat', 2, 'Classic', 'sweat animated emoticon nervous', NULL),
('swordfight', 2, 'Classic', 'sword animated emoticon fight fencing engarde', NULL),
('taco', 2, 'Classic', 'taco animated mexico food', NULL),
('talk2hand', 2, 'Classic', 'hand animated emoticon ignore disagree', NULL),
('tantrum', 2, 'Classic', 'tantrum animated emoticon fit crying', NULL),
('teehee', 2, 'Classic', 'teehee animated emoticon laugh smug', NULL),
('thinking', 2, 'Classic', 'thinking animated emoticon thunk chin scratch', NULL),
('threesome', 2, 'Classic', 'threesome animated emoticon sex circlejerk', NULL),
('throw', 2, 'Classic', 'throw animated emoticon lob fight hurl fling', NULL),
('throwaway', 2, 'Classic', 'throw animated emoticon annoyed', NULL),
('thumbup', 2, 'Classic', 'thumbs up emoticon good agree', NULL),
('thumbdown', 2, 'Classic', 'thumbs down emoticon bad disagree', NULL),
('tickle', 2, 'Classic', 'tickle animated emoticon nefarious', NULL),
('typing', 2, 'Classic', 'typing animated emoticon writing programming', NULL),
('uhuh', 2, 'Classic', 'uhuh animated emoticon sure shifty', NULL),
('vampbat', 2, 'Classic', 'bat animated emoticon vampire monster horror dracula transformation', NULL),
('viking', 2, 'Classic', 'viking animated emoticon axe historical', NULL),
('violin', 2, 'Classic', 'violin animated emoticon music annoyed instrument', NULL),
('vulgar', 2, 'Classic', 'vulgar animated emoticon swear cursing angry mad enraged fuck shit bitch', NULL),
('wah', 2, 'Classic', 'wah emoticon despair sad', NULL),
('wat', 2, 'Classic', 'wat emoticon what confused surprised', NULL),
('whip', 2, 'Classic', 'whip animated emoticon bdsm', NULL),
('whipping', 2, 'Classic', 'whip animated emoticon bdsm', NULL),
('wink', 2, 'Classic', 'wink emoticon winking secret', NULL),
('witch', 2, 'Classic', 'witch animated magic broom fly monster', NULL),
('wizard', 2, 'Classic', 'wizard animated magic staff gandalf', NULL),
('woah', 2, 'Classic', 'woah emoticon stare disbelief', NULL),
('worm', 2, 'Classic', 'worm animated insect bug dirt wiggle', NULL),
('woo', 2, 'Classic', 'woo animated emoticon cheering cheer excited', NULL),
('work', 2, 'Classic', 'work animated emoticon asia salaryman business computer paperwork', NULL),
('worship', 2, 'Classic', 'worship animated emoticon prostrate bow pray', NULL),
('wow', 2, 'Classic', 'wow emoticon animated shocking shocked disbelief', NULL),
('xd', 2, 'Classic', 'xd emoticon lmao lol laugh', NULL),
('yay', 2, 'Classic', 'yay animated emoticon excited celebrate celebration happy bounce jump', NULL),
('zzz', 2, 'Classic', 'zzz animated emoticon sleep asleep tired sleepy sleeping', NULL),
('pedobear', 2, 'Rage', 'pedo bear', NULL),
('trolldespair', 2, 'Rage', 'trollface despair scarred', NULL),
('clueless', 2, 'Rage', 'clueless doesnt know', NULL),
('troll', 2, 'Rage', 'trollface', NULL),
('bitchplease', 2, 'Rage', 'bitch laughing', NULL),
('spit', 2, 'Rage', 'spit disbelief amazed unexpected', NULL),
('challengeaccepted', 2, 'Rage', 'challenge accept', NULL),
('contentiouscereal', 2, 'Rage', 'argue disagree', NULL),
('cryingatcuteness', 2, 'Rage', 'crying omg', NULL),
('derp', 2, 'Rage', 'stupid derp', NULL),
('derpcornsyrup', 2, 'Rage', 'corn syrup', NULL),
('derpcrying', 2, 'Rage', '', NULL),
('derpcute', 2, 'Rage', '', NULL),
('derpdumb', 2, 'Rage', '', NULL),
('derpeuphoria', 2, 'Rage', '', NULL),
('derpinahd', 2, 'Rage', '', NULL),
('derpinapokerface', 2, 'Rage', '', NULL),
('derpinasnickering', 2, 'Rage', '', NULL),
('derpprocessing', 2, 'Rage', '', NULL),
('derprealization', 2, 'Rage', '', NULL),
('derpsnickering', 2, 'Rage', '', NULL),
('derptalking', 2, 'Rage', '', NULL),
('derpthinking', 2, 'Rage', '', NULL),
('derpthumbsup', 2, 'Rage', 'thumbsup yes positive', NULL),
('derpunimpressed', 2, 'Rage', '', NULL),
('derpwhy', 2, 'Rage', 'why question', NULL),
('donotwant', 2, 'Rage', 'bad computer disgust', NULL),
('epicfacefeatures', 2, 'Rage', 'epic face face smiley', NULL),
('fancywithwine', 2, 'Rage', 'fancy sophisticated wine monocle alcohol', NULL),
('fffffffuuuuuuuuuuuu', 2, 'Rage', 'fuck angry enraged mad screaming yelling', NULL),
('flipthetable', 2, 'Rage', 'table table flip angry mad enraged', NULL),
('foreveralone', 2, 'Rage', 'alone lonely', NULL),
('foreveralonehappy', 2, 'Rage', 'alone lonely happy', NULL),
('hewillnever', 2, 'Rage', 'cereal cereal guy disbelief', NULL),
('idontknow', 2, 'Rage', 'idk shrug dont know', NULL),
('interuptedreading', 2, 'Rage', '', NULL),
('iseewhatyoudidthere', 2, 'Rage', 'see notice', NULL),
('killherkillher', 2, 'Rage', 'troll crazy', NULL),
('ledesire', 2, 'Rage', '', NULL),
('leexcited', 2, 'Rage', 'excited', NULL),
('legenius', 2, 'Rage', 'genius smart', NULL),
('lelolidk', 2, 'Rage', 'idk shrug', NULL),
('lemiddlefinger', 2, 'Rage', 'flip off fuck you', NULL),
('lemindblown', 2, 'Rage', 'blown woah', NULL),
('leokay', 2, 'Rage', 'ok okay sad disappointed', NULL),
('lepanicrunning', 2, 'Rage', 'run panic escape running', NULL),
('lepokerface', 2, 'Rage', 'deadpan meh expressionless', NULL),
('lepokerface2', 2, 'Rage', 'deadpan expressionless face meh', NULL),
('lerageface', 2, 'Rage', 'angry upset mad enraged', NULL),
('leseriousface', 2, 'Rage', 'serious', NULL),
('likeaboss', 2, 'Rage', 'cool boss', NULL),
('lolface', 2, 'Rage', 'lol laughing', NULL),
('longwhiskers', 2, 'Rage', 'thinking staring computer', NULL),
('manymiddlefingers', 2, 'Rage', 'flip off fuck you', NULL),
('megusta', 2, 'Rage', 'positive', NULL),
('motherfucker', 2, 'Rage', 'trollface fancy', NULL),
('motherofgod', 2, 'Rage', 'disbelief sunglasses', NULL),
('mysides', 2, 'Rage', 'laughing', NULL),
('ohgodwhy', 2, 'Rage', 'upset disgusted', NULL),
('pervertedspiderman', 2, 'Rage', 'spiderman pervert movie', NULL),
('picard', 2, 'Rage', 'picard facepalm movie star trek', NULL),
('ragestrangle', 2, 'Rage', 'strangle', NULL),
('rukiddingme', 2, 'Rage', 'seriously disappointed', NULL),
('tfwyougettrolled', 2, 'Rage', 'trollface', NULL),
('trollolol', 2, 'Rage', 'trollface', NULL),
('truestorybro', 2, 'Rage', 'wine alcohol toast', NULL),
('xallthey', 2, 'Rage', 'meme', NULL),
('yuno', 2, 'Rage', 'angry seethe upset mad enraged', NULL),
('antichrist', 2, 'Rage', 'trollface cursed', NULL),
('antichristfffuuuu', 2, 'Rage', 'cursed', NULL),
('bluehelmet', 2, 'Rage', 'freeze surrounded un meme', NULL),
('usarentfree', 2, 'Wojak', 'wojack america seethe cope', NULL),
('bardfinnrentfreerecursive', 2, 'Wojak', 'penny oaken seethe cope liberal ahs powermod', NULL),
('npcangry', 2, 'Wojak', 'npc angry normie upset', NULL),
('russiarentfree', 2, 'Wojak', 'wojack rent free russia cry seethe cope', NULL),
('cunt', 2, 'Wojak', 'aussie australian', NULL),
('soyjakfat', 2, 'Wojak', 'obese wingcuck', NULL),
('chudtantrum', 2, 'Wojak', '', NULL),
('chadcryguy', 2, 'Wojak', 'cry sad tear chad', NULL),
('chadpostal2', 2, 'Wojak', 'postal game shooting', NULL),
('penisrentfree', 2, 'Wojak', 'cock peepee gay pipe balls nuts', NULL),
('chadjewrentfree', 2, 'Wojak', 'chad jew', NULL),
('afroblackjak', 2, 'Wojak', 'black afro BIPOC', NULL),
('altgirlblackjack', 2, 'Wojak', 'black woman tiktok', NULL),
('antifajak', 2, 'Wojak', 'antifa fascist woke', NULL),
('bigsmilesoyjak', 2, 'Wojak', 'smile consume capeshit vidya', NULL),
('blackfemboy', 2, 'Wojak', 'black femboy gay', NULL),
('blacksoyjak', 2, 'Wojak', 'black soyjack BIPOC', NULL),
('brainletchadmask', 2, 'Wojak', 'brainlet chad mask cope', NULL),
('bruce', 2, 'Wojak', 'aussie australian', NULL),
('chadagent', 2, 'Wojak', 'chad fbi agent glowie cia atf', NULL),
('chadpostal', 2, 'Wojak', 'chad postal vidya', NULL),
('chadblack2', 2, 'Wojak', 'black chad', NULL),
('chadsnoo', 2, 'Wojak', 'snoo chad reddit', NULL),
('daddysgirl', 2, 'Wojak', 'woman only fans onlyfans', NULL),
('directlypointingsoyjak', 2, 'Wojak', 'pointing soyjak youre cringe', NULL),
('feelsguy', 2, 'Wojak', 'feels tfw neutral', NULL),
('hijabwojak', 2, 'Wojak', 'woman hijab muslim', NULL),
('hoodieguyblackjak', 2, 'Wojak', 'black hoodie', NULL),
('marseyblackjak', 2, 'Wojak', 'black woman furry cat girl catgirl marsey', NULL),
('momblackjak', 2, 'Wojak', 'black woman mom mother', NULL),
('obesedaddysgirl', 2, 'Wojak', 'fat fatty obese landwhale woman onlyfans', NULL),
('obesetradwife', 2, 'Wojak', 'fat fatty landwhale trad wife tradwife blonde', NULL),
('pinkgirlblackjak', 2, 'Wojak', 'black woman hoops pink', NULL),
('purplegirlblackjak', 2, 'Wojak', 'black purple woman', NULL),
('sadwomanjak', 2, 'Wojak', 'sad tfw woman', NULL),
('smugblackjak', 2, 'Wojak', 'black smug superior', NULL),
('sportygirlblackjak', 2, 'Wojak', 'black woman sporty athletic', NULL),
('tradwife', 2, 'Wojak', 'trad wife blonde', NULL),
('wavyhairblackjack', 2, 'Wojak', 'black woman twitter wavy', NULL),
('zoomertears', 2, 'Wojak', 'zoomer sad crying cry cope seethe', NULL),
('purerage', 2, 'Wojak', 'rage upset angry enraged seethe red', NULL),
('naziseethe', 2, 'Wojak', 'nazi seethe fascist upset angry mad enraged', NULL),
('holdupjak', 2, 'Wojak', 'wait weird freaked out hold up', NULL),
('ethottalking', 2, 'Wojak', 'woman thot onlyfans talking upset', NULL),
('chadwomanasian', 2, 'Wojak', 'asian china woman queen', NULL),
('chadwomanblack', 2, 'Wojak', 'black woman queen', NULL),
('chadwomanlatinx', 2, 'Wojak', 'latinX woman queen', NULL),
('chadwomannordic', 2, 'Wojak', 'nordic mayo woman queen', NULL),
('trumpjaktalking', 2, 'Wojak', 'trump maga red hat cope talking', NULL),
('rdramajanny', 2, 'Wojak', '', NULL),
('soyreddit', 2, 'Wojak', 'soy reddit', NULL),
('soysnoo', 2, 'Wojak', 'soy reddit snoo', NULL),
('doomerboy', 2, 'Wojak', 'doomer sad depressed', NULL),
('npcsupport', 2, 'Wojak', 'npc agree support facebook flags', NULL),
('npcoppse', 2, 'Wojak', 'npc oppose contrarian', NULL),
('grugthink', 2, 'Wojak', 'grug think caveman', NULL),
('soyconsoomer', 2, 'Wojak', '', NULL),
('soyjaktalking', 2, 'Wojak', '', NULL),
('soyquack', 2, 'Wojak', '', NULL),
('tradboy', 2, 'Wojak', 'trad man blonde femboy', NULL),
('sciencejak', 2, 'Wojak', 'science trust', NULL),
('soyjakanimeglasses', 2, 'Wojak', 'anime glasses', NULL),
('soymad', 2, 'Wojak', 'mad rage', NULL),
('boomerportrait', 2, 'Wojak', 'boomer', NULL),
('soycry', 2, 'Wojak', '', NULL),
('punchjak', 2, 'Wojak', 'punch hit slap smug', NULL),
('seethejak', 2, 'Wojak', 'mad rage', NULL),
('chadyes', 2, 'Wojak', 'chad yes agree', NULL),
('chadno', 2, 'Wojak', 'no negative', NULL),
('abusivewife', 2, 'Wojak', 'bardfinn', NULL),
('ancap', 2, 'Wojak', 'pedo lib', NULL),
('klanjak', 2, 'Wojak', 'kkk klan seethe', NULL),
('bardfinn', 2, 'Wojak', 'bardfinn coomer tranny troon steve', NULL),
('bloomer', 2, 'Wojak', 'bloomer hopeful naïve', NULL),
('boomer', 2, 'Wojak', 'boomer old sunglasses', NULL),
('boomermonster', 2, 'Wojak', 'boomer old sunglasses energy drink monster', NULL),
('brainletbush', 2, 'Wojak', 'brainlet bush 911 twin towers retard retarded', NULL),
('brainletcaved', 2, 'Wojak', 'brainlet cave retard retarded', NULL),
('brainletchair', 2, 'Wojak', 'brainlet chair smug enlightened', NULL),
('brainletchest', 2, 'Wojak', 'brainlet chest retard retarded', NULL),
('brainletmaga', 2, 'Wojak', 'maga trump brainlet retard retarded', NULL),
('brainletpit', 2, 'Wojak', 'brainlet pit hole retard retarded', NULL),
('chad', 2, 'Wojak', 'original', NULL),
('chadarab', 2, 'Wojak', 'chad arab', NULL),
('chadasian', 2, 'Wojak', 'chad asian', NULL),
('chadblack', 2, 'Wojak', 'black chad', NULL),
('chadcambodian', 2, 'Wojak', 'chad cambodian', NULL),
('chadjesus', 2, 'Wojak', '', NULL),
('chadjew', 2, 'Wojak', '', NULL),
('chadjihadi', 2, 'Wojak', 'jihad muslism islam', NULL),
('chadlatino', 2, 'Wojak', 'latinx', NULL),
('chadlibleft', 2, 'Wojak', '', NULL),
('chadnordic', 2, 'Wojak', 'nordic nazi', NULL),
('chadmediterranean', 2, 'Wojak', 'chad mediterranean', NULL),
('chadsikh', 2, 'Wojak', 'sikh indian', NULL),
('chadusa', 2, 'Wojak', 'usa america freedom', NULL),
('chadsoy', 2, 'Wojak', 'soy', NULL),
('chadsoylent', 2, 'Wojak', 'soy soylent', NULL),
('coomer', 2, 'Wojak', 'coom degenerate', NULL),
('doomer', 2, 'Wojak', 'doomer sad depressed smoking', NULL),
('doomerfront', 2, 'Wojak', 'doomer sad depressed smoking', NULL),
('doomergirl', 2, 'Wojak', 'woman doomer depressed', NULL),
('ethot', 2, 'Wojak', 'woman onlyfans', NULL),
('fatbrain', 2, 'Wojak', 'fat fatty brain smart genius', NULL),
('fatpriest', 2, 'Wojak', 'priest jesus', NULL),
('femboy', 2, 'Wojak', 'female bussy', NULL),
('gogetter', 2, 'Wojak', 'motivated', NULL),
('grug', 2, 'Wojak', 'caveman', NULL),
('monke', 2, 'Wojak', 'monkey chad ape', NULL),
('nazijak', 2, 'Wojak', 'nazi fascist', NULL),
('npc', 2, 'Wojak', 'npc normie', NULL),
('npcfront', 2, 'Wojak', 'npc normie', NULL),
('npcmaga', 2, 'Wojak', 'trump maga npc fat', NULL),
('chadbaby', 2, 'Wojak', 'chad baby', NULL),
('chadstalin', 2, 'Wojak', 'chad stalin communism ussr georgia', NULL),
('chudette', 2, 'Wojak', 'chud woman blonde', NULL),
('chudgrug', 2, 'Wojak', 'chud grug caveman', NULL),
('chudnazi', 2, 'Wojak', 'chud nazi', NULL),
('chudsmug', 2, 'Wojak', 'chud smug', NULL),
('chudglassesglow', 2, 'Wojak', 'chud glasses anime', NULL),
('soy4dchess', 2, 'Wojak', 'soy maga Q trump chess pawn', NULL),
('soyjaktantrum', 2, 'Wojak', 'soy tantrum fit crying seething animated', NULL),
('psychojak', 2, 'Wojak', 'psycho creepy cursed', NULL),
('ragejak', 2, 'Wojak', 'mad', NULL),
('ragemask', 2, 'Wojak', 'mad', NULL),
('ramonajak', 2, 'Wojak', 'woman ice tea twitter', NULL),
('soyjackwow', 2, 'Wojak', 'wow surprise', NULL),
('soyjak', 2, 'Wojak', 'soy', NULL),
('soyjakfront', 2, 'Wojak', 'soy', NULL),
('soyjakhipster', 2, 'Wojak', '', NULL),
('soyjakmaga', 2, 'Wojak', 'maga israel nazi', NULL),
('soyjakyell', 2, 'Wojak', '', NULL),
('tomboy', 2, 'Wojak', 'trans', NULL),
('zoomer', 2, 'Wojak', 'zoomie gen z', NULL),
('zoomersoy', 2, 'Wojak', 'soyjak', NULL),
('asianenbyjak', 2, 'Wojak', 'asian asia enby nonbinary tranny troon androgynous', NULL),
('asiangirl', 2, 'Wojak', 'asian woman asa', NULL),
('asiantwinkjak', 2, 'Wojak', 'asian twink gay', NULL),
('bobateagirl', 2, 'Wojak', 'asian woman boba', NULL),
('chadasian2', 2, 'Wojak', 'chad asian', NULL),
('chadindianheadset', 2, 'Wojak', 'chad indian headset microphone headphones', NULL),
('chinesenobleman', 2, 'Wojak', 'asian china chinese qin shang zhou han qing sui tang liao song yuan ming', NULL),
('chinesepolitician', 2, 'Wojak', 'chinese politician', NULL),
('chinesesoldierjak', 2, 'Wojak', 'chinese asian ccp solider gun military', NULL),
('greendesigirl', 2, 'Wojak', 'woman indian desi green', NULL),
('imperialjapanesesoldier', 2, 'Wojak', 'japanese asian imperial banzai solider wwii', NULL),
('indiandoomergirl', 2, 'Wojak', 'woman indian doomer depressed', NULL),
('kimjojongjak', 2, 'Wojak', 'woman korean asian', NULL),
('kimonogirl', 2, 'Wojak', 'woman asian japanese japan kimono', NULL),
('maojak', 2, 'Wojak', 'mao china chinese communism famine', NULL),
('mongoljak', 2, 'Wojak', 'mongol mongolia genghis asian throat singing', NULL),
('scaryasianwife', 2, 'Wojak', 'asian woman wife wok discipline', NULL),
('shorthairasiangirl', 2, 'Wojak', 'asian woman', NULL),
('singaporeansoldierjak', 2, 'Wojak', 'singapore solider gas mask military', NULL),
('suprisedasianwife', 2, 'Wojak', 'surprised asian woman wife', NULL),
('tiawanesesoldierjak', 2, 'Wojak', 'taiwan china solider military gun', NULL),
('witheredricefarmer', 2, 'Wojak', 'rice farmer tired old decrepit', NULL),
('yakuzajak', 2, 'Wojak', 'japan japanese yakuza tattoo mafia crime', NULL),
('smokey', 2, 'Misc', 'wpd watchpeopledie poweruser', NULL),
('aniki', 2, 'Misc', 'gay porn lgbt white mayo actor sexy', NULL),
('blackwomanspeaking', 2, 'Misc', 'penny listen learn talking nigress nigger bipoc', NULL),
('stoningshit', 2, 'Misc', 'muslim stoning animated downvote throw toss poop flinging', NULL),
('stoninggarlic', 2, 'Misc', 'muslim stoning animated vampire downvote throw toss', NULL),
('drafts', 2, 'Misc', 'that should''ve shouldve have stayed in the boo thathoeoverthere thot girl cringe reaction gif animated', NULL),
('capytalking', 2, 'Misc', 'capy soy aevann', NULL),
('gigachadcapy', 2, 'Misc', 'aevann giga chad capy', NULL),
('maid', 2, 'Misc', 'canada leaf suicide keep yourself safe noose anime kys kill yourself', NULL),
('grillcastyes', 2, 'Misc', 'podcast chad', NULL),
('ivoted', 2, 'Misc', 'democracy spider', NULL),
('hapyday', 2, 'Misc', 'happyday wholesome smile', NULL),
('froth', 2, 'Misc', 'froth seethe angry ugh frothing sneed', NULL),
('chadyescapy', 2, 'Misc', 'capy aevann', NULL),
('chadnocapy', 2, 'Misc', 'capy aevann', NULL),
('capygitcommit', 2, 'Misc', 'capy aevann', NULL),
('capyantischizo', 2, 'Misc', 'schizocel aevann', NULL),
('capysneedboat', 2, 'Misc', 'capy aevann', NULL),
('chadbasedcapy', 2, 'Misc', 'capy aevann', NULL),
('chadcopecapy', 2, 'Misc', 'capy aevann', NULL),
('chaddilatecapy', 2, 'Misc', 'capy aevann', NULL),
('chaddonekingcapy', 2, 'Misc', 'capy aevann done king', NULL),
('chaddonequeencapy', 2, 'Misc', 'capy aevann done queen', NULL),
('chadfixedkingcapy', 2, 'Misc', 'capy aevann fixed king', NULL),
('chadfixedqueencapy', 2, 'Misc', 'capy aevann fixed queen', NULL),
('chadokcapy', 2, 'Misc', 'capy aevann', NULL),
('chadseethecapy', 2, 'Misc', 'capy aevann', NULL),
('chadsneedcapy', 2, 'Misc', 'capy aevann', NULL),
('chadthankskingcapy', 2, 'Misc', 'capy aevann thanks king', NULL),
('chadthanksqueencapy', 2, 'Misc', 'capy aevann thanks queen', NULL),
('chadnoproblemkingcapy', 2, 'Misc', 'capy aevann no problem king np', NULL),
('chadnoproblemqueencapy', 2, 'Misc', 'capy aevann no problem queen np', NULL),
('chadstevejobs', 2, 'Misc', 'chad steve jobs apple', NULL),
('chadmusk', 2, 'Misc', 'chad elon musk tesla spacex', NULL),
('dinoyes', 2, 'Misc', 'chad yes dino dinosaur trex', NULL),
('dinono', 2, 'Misc', 'dino chad no dinosaur trex', NULL),
('dinoconfused', 2, 'Misc', 'dino dinosaur confused', NULL),
('breadmarsey', 2, 'Misc', 'bread marsey cat food', NULL),
('breadcapy', 2, 'Misc', 'bread capy food', NULL),
('marseymummified', 2, 'Misc', 'marsey mummy', NULL),
('sharkmarsey', 2, 'Misc', 'shark marsey irl', NULL),
('snootrollface', 2, 'Misc', 'snoo reddit trollface', NULL),
('snoojoy', 2, 'Misc', 'snoo reddit joy happy animated', NULL),
('snooblowkiss', 2, 'Misc', 'snoo reddit kiss love heart', NULL),
('snoosurprise', 2, 'Misc', 'snoo surprised reddit animated', NULL),
('snooupvote', 2, 'Misc', 'snoo reddit upvote animated', NULL),
('snoothumbsup', 2, 'Misc', 'snoo reddit thumbs up agree good animated', NULL),
('brooksannoyed', 2, 'Misc', 'darrell suv waukesha retard idiot annoyed irritated mask suit black', NULL),
('brookslaugh', 2, 'Misc', 'brooks laugh funny gif', NULL),
('brookscringe', 2, 'Misc', 'brooks cringe', NULL),
('brooksjustright', 2, 'Misc', 'brooks good right', NULL),
('brookskiss', 2, 'Misc', 'brooks kiss love', NULL),
('brooksbailiffunamused', 2, 'Misc', 'brooks bailiff unamused annoyed', NULL),
('opperblink', 2, 'Misc', 'sue opper darrell brooks prosecutor district attorney da annoyed irritated waukesha', NULL),
('gimp', 2, 'Misc', 'art pepper brush', NULL),
('taddance', 2, 'Misc', 'terry davis templeos dance', NULL),
('realisticelephant', 2, 'Misc', 'terry davis templeos', NULL),
('sher', 2, 'Misc', 'pat patting animated', NULL),
('xdoubt', 2, 'Misc', 'doubt x press vidya', NULL),
('gigachadjesus', 2, 'Misc', 'chad jesus christ', NULL),
('yotsubafish', 2, 'Misc', 'woman fish anime', NULL),
('yotsubalol', 2, 'Misc', 'anime woman lol', NULL),
('sigmatalking', 2, 'Misc', 'Patrick Bateman talking meme', NULL),
('peoplewhoannoy', 2, 'Misc', 'annoy south park animated', NULL),
('pepedrum', 2, 'Misc', 'football soccer', NULL),
('zoroarkconfused', 2, 'Misc', 'confused furry', NULL),
('zoroarkhappy', 2, 'Misc', 'happy furry', NULL),
('zoroarkpout', 2, 'Misc', 'pout furry', NULL),
('zoroarksleepy', 2, 'Misc', 'sleepy furry', NULL),
('casanovanova', 2, 'Misc', 'indian man', NULL),
('deuxwaifu', 2, 'Misc', 'french woman bread wife', NULL),
('flairlessmong', 2, 'Misc', 'flairless mong reddit', NULL),
('hardislife', 2, 'Misc', 'feet woman', NULL),
('ben10', 2, 'Misc', 'masterlolz cartoon', NULL),
('redditgigachad', 2, 'Misc', 'chad gigachad', NULL),
('rfybear', 2, 'Misc', 'bear animal', NULL),
('etika', 2, 'Misc', 'black streamer nft dead', NULL),
('sneed', 2, 'Misc', 'letters dancing animated', NULL),
('sneedcat', 2, 'Misc', 'sneed cat dancing whip gif', NULL),
('retardedchildren', 2, 'Misc', 'retarded children helped stamp', NULL),
('bruh', 2, 'Misc', 'emoticon', NULL),
('autism', 2, 'Misc', 'letters dancing animated', NULL),
('doot', 2, 'Misc', 'skull skeleton trumpet music animated', NULL),
('mussolini', 2, 'Misc', 'italy italian fascist', NULL),
('kylieface', 2, 'Misc', 'kyle rittenhouse', NULL),
('queenyes', 2, 'Misc', 'black woman queen', NULL),
('wholesomeseal', 2, 'Misc', 'seal reddit award', NULL),
('gigachadglow', 2, 'Misc', 'chad glow fbi', NULL),
('gigachadorthodox', 2, 'Misc', 'chad orthodox', NULL),
('gigachad', 2, 'Misc', '', NULL),
('gigachad2', 2, 'Misc', '', NULL),
('gigachad3', 2, 'Misc', '', NULL),
('gigachad4', 2, 'Misc', '', NULL),
('onerat', 2, 'Misc', 'rat animal animated', NULL),
('bitchhaditcomin', 2, 'Misc', 'comic', NULL),
('duckdance', 2, 'Misc', 'duck bird shuka hololive dance hat animated', NULL),
('stoning', 2, 'Misc', 'muslim stoning animated', NULL),
('stoningpills', 2, 'Misc', 'muslim pills stoning meds animated', NULL),
('stoningupvotes', 2, 'Misc', 'muslim throw stoning upvotes animated', NULL),
('stoningdownvotes', 2, 'Misc', 'muslim stoning throw downvotes animated', NULL),
('stoningbans', 2, 'Misc', 'muslim stoning bans throw animated', NULL),
('stoningunbans', 2, 'Misc', 'muslim stoning guns bans throw animated', NULL),
('stoningpins', 2, 'Misc', 'muslim stoning throw pins animated', NULL),
('stoningunpins', 2, 'Misc', 'muslim stoning throw unpins animated', NULL),
('srdinepoppy', 2, 'Misc', 'poppy popcorn reddit srdine subredditdrama', NULL),
('gunt', 2, 'Misc', 'animated blob lump dancing', NULL),
('sneedbuddy', 2, 'Misc', 'cat sneed irl kitty', NULL),
('chuckbuddy', 2, 'Misc', 'invert chuck cat irl', NULL),
('mallocbuddy', 2, 'Misc', 'cat irl', NULL),
('soren', 2, 'Misc', 'soren assimilation', NULL),
('upsoren', 2, 'Misc', 'upvote soren', NULL),
('downdonger', 2, 'Misc', 'downvote donger', NULL),
('reposthorse', 2, 'Misc', 'chud mlp horse cartoon', NULL),
('russia', 2, 'Misc', 'flag russia vatnik', NULL),
('niger', 2, 'Misc', 'niger flag', NULL),
('lgbt', 2, 'Misc', 'bi gay lesbian flag', NULL),
('pride2022', 2, 'Misc', 'bait lgbt flag', NULL),
('animesexual', 2, 'Misc', 'mogai anime flag', NULL),
('blacknation', 2, 'Misc', 'black flag', NULL),
('blm', 2, 'Misc', 'flag', NULL),
('blueline', 2, 'Misc', 'police cops bootlicker flag', NULL),
('dreamgender', 2, 'Misc', 'mogai dream flag', NULL),
('fatpride', 2, 'Misc', 'fat flag', NULL),
('incelpride', 2, 'Misc', 'incel misogynist tranny flag', NULL),
('israel', 2, 'Misc', 'jews kike', NULL),
('kazakhstan', 2, 'Misc', 'kazakhstan flag', NULL),
('landlordlove', 2, 'Misc', 'bait landlord flag', NULL),
('scalperpride', 2, 'Misc', 'bait scalper flag', NULL),
('superstraight', 2, 'Misc', 'transmisia', NULL),
('trans', 2, 'Misc', 'tranny troon train flag', NULL),
('translord', 2, 'Misc', 'tranny troon flag', NULL),
('transracial', 2, 'Misc', 'bait race flag', NULL),
('usa', 2, 'Misc', 'america', NULL),
('sharkybodybuilder', 2, 'Misc', 'furry', NULL),
('sharkyglow', 2, 'Misc', 'shark sunglasses fbi cia', NULL),
('sharkylove', 2, 'Misc', 'shark love heart', NULL),
('sharkysad', 2, 'Misc', 'shark sad cry', NULL),
('sharkythink', 2, 'Misc', 'shark think', NULL),
('sharkymegalodon', 2, 'Misc', 'shark megalodon prehistoric', NULL),
('sharkydinosaur', 2, 'Misc', 'shark dinosaur costume', NULL),
('tracenote', 2, 'Misc', 'trace fox note', NULL),
('tracelove', 2, 'Misc', 'trace love heart', NULL),
('traceberk', 2, 'Misc', 'trace laugh', NULL),
('tracesmug', 2, 'Misc', 'trace smug', NULL),
('tracemad', 2, 'Misc', 'trace mad', NULL),
('tracesad', 2, 'Misc', 'trace sad', NULL),
('parrot', 2, 'Misc', 'dance bird animated', NULL),
('parrotaccessible', 2, 'Misc', 'dance parrot wheelchair animated', NULL),
('parrotcongaparty', 2, 'Misc', 'parrot dancing sunglasses animated', NULL),
('parrotcop', 2, 'Misc', 'parrot cop police dancing animated', NULL),
('parrotevil', 2, 'Misc', 'parrot evil dancing satan hell devil animated', NULL),
('parrotgithub', 2, 'Misc', 'parrot github dancing animated', NULL),
('parrothmm', 2, 'Misc', 'parrot hmm thinking dancing animated', NULL),
('parrothypno', 2, 'Misc', 'parrot hypnotic dancing animated', NULL),
('parrotimposter', 2, 'Misc', 'parrot amogus among us imposter sus dancing animated', NULL),
('parrotisrael', 2, 'Misc', 'parrot isreal jewish dancing animated', NULL),
('parrotkazakhstan', 2, 'Misc', 'kazakhstan parrot dancing animated', NULL),
('parrotmergetrain', 2, 'Misc', 'parrot headache dancing animated', NULL),
('parrotmoonwalking', 2, 'Misc', 'parrot moon dancing animated', NULL),
('parrotportalblue', 2, 'Misc', 'parrot portal vidya dancing animated', NULL),
('parrotportalorange', 2, 'Misc', 'parrot portal vidya dancing animated', NULL),
('parrotpumpkin', 2, 'Misc', 'parrot pumpkin witch halloween dancing animated', NULL),
('parrotrevolution', 2, 'Misc', 'parrot revolution 1776 yankee dancing animated', NULL),
('parrotrip', 2, 'Misc', 'parrot rip dead animated', NULL),
('parrotscience', 2, 'Misc', 'parrot science lab coat beaker dancing animated', NULL),
('parrotshort', 2, 'Misc', 'parrot short manlet', NULL),
('parrotsleeping', 2, 'Misc', 'parrot sleeping animated', NULL),
('parrotslow', 2, 'Misc', 'parrot slow dancing animated', NULL),
('parrottrans', 2, 'Misc', 'parrot trans tranny troon dancing animated', NULL),
('parrotultrafast', 2, 'Misc', 'parrot fast epilepsy dancing animated', NULL),
('parrotunitedstatesofamerica', 2, 'Misc', 'parrot usa burger dancing animated', NULL),
('parrotwitnessprotection', 2, 'Misc', 'parrot censored pixelated dancing animated', NULL),
('parrotzombie', 2, 'Misc', 'parrot zombie undead bloody monster dancing animated', NULL),
('dasrite', 2, 'Misc', 'black israelite hotep thats thas right jewish bipoc nigger', NULL);