Class: RageFlip::Emote
- Inherits:
-
Object
- Object
- RageFlip::Emote
- Defined in:
- lib/rage_flip/emote.rb
Constant Summary collapse
- EMOTES =
{ # Custom ASCII Art and Text Emotes "disapproval" => "(ಠ_ಠ)", "bugeyes" => "(⊙_◎)", "dogshrug" => '¯\_🐶_/¯', "facepalm" => "(-‸ლ)", "flip" => "(╯°□°)╯︵ ┻━┻", "fu" => "t(-__-t)", "heresatable" => "┬─┬ ノ( ゜-゜ノ)", "javaflip" => "(╯°□°)╯︵ ┻ɐʌɐɾ┻", "kungfuhamster" => " ()__()\n / o o\\ ;\n |'=Y=';-/\n { \\ / }\n mmm mmm ", "omw" => "On my way!", "rage" => "ಠ益ಠ", "rageflip" => "(ノಠ益ಠ)ノ彡┻━┻", "rockhand" => '\m/ (>_<) \m/', "shrug" => '¯\_(ツ)_/¯', "shrugtable" => '┻━┻ ︵ ¯\(ツ)/¯ ︵ ┻━┻', "unsee" => "♨_♨", "yuno" => "ლ(ಠ益ಠლ)", # Keyboard Shortcuts "cmd-" => "⌘-", "cmd" => "⌘", "command" => "⌘", "cntl" => "⌃", "optn" => "⌥", "option" => "⌥", "shft" => "⇧", "shift" => "⇧", # Smileys & People "grin" => "😀", "smiley" => "😃", "smile" => "😄", "grinning" => "😁", "laughing" => "😆", "sweat_smile" => "😅", "rofl" => "🤣", "joy" => "😂", "slightsmile" => "🙂", "upsidedown" => "🙃", "meltingface" => "🫠", "wink" => "😉", "blush" => "😊", "innocent" => "😇", "hearteyessmile" => "🥰", "hearteyes" => "😍", "starstruck" => "🤩", "kissing" => "😗", "kissingheart" => "😘", "relaxed" => "☺️", "kissingclosedeyes" => "😚", "kissingsmile" => "😙", "yum" => "😋", "tongueout" => "😛", "tonguewink" => "😜", "zany" => "🤪", "tongueclosedeyes" => "😝", "moneymouth" => "🤑", "hugs" => "🤗", "handovermouth" => "🤭", "shush" => "🫢", "thinking" => "🤔", "salute" => "🫡", "zipper" => "🤐", "raisedeyebrow" => "🤨", "neutral" => "😐", "expressionless" => "😑", "nomouth" => "😶", "dottedline" => "🫥", "cloudface" => "😶🌫️", "smirk" => "😏", "unamused" => "😒", "eyeroll" => "🙄", "grimace" => "😬", "cringe" => "😬", "lyingface" => "🤥", "shakingface" => "🫨", "relieved" => "😌", "pensive" => "😔", "sleepy" => "😪", "drool" => "🤤", "sleeping" => "😴", "mask" => "😷", "sick" => "🤒", "bandage" => "🤕", "nauseated" => "🤢", "vomit" => "🤮", "sneeze" => "🤧", "hot" => "🥵", "cold" => "🥶", "woozy" => "🥴", "dizzy" => "😵", "spiraleyes" => "😵💫", "explodinghead" => "🤯", "cowboy" => "🤠", "party" => "🥳", "disguised" => "🥸", "sunglasses" => "😎", "nerd" => "🤓", "monocle" => "🧐", "confused" => "😕", "faceexhaling" => "😮💨", "worried" => "😟", "slightfrown" => "🙁", "frown" => "☹️", "openmouth" => "😮", "hushed" => "😯", "astonished" => "😲", "flushed" => "😳", "pleading" => "🥺", "holdingbacktears" => "🥹", "frowning" => "😦", "anguished" => "😧", "fearful" => "😨", "anxious" => "😰", "sad" => "😥", "cry" => "😢", "sob" => "😭", "scream" => "😱", "omg" => "😱", "confounded" => "😖", "persevere" => "😣", "disappointed" => "😞", "sweat" => "😓", "weary" => "😩", "tired" => "😫", "yawning" => "🥱", "triumph" => "😤", "pout" => "😡", "angry" => "😠", "cursing" => "🤬", "smiling_imp" => "😈", "imp" => "👿", "skull" => "💀", "crossbones" => "☠️", "clown" => "🤡", "poop" => "💩", "ghost" => "👻", "alien" => "👽", "alienmonster" => "👾", "robot" => "🤖", "smilingcat" => "😺", "grincat" => "😸", "joycat" => "😹", "heartcat" => "😻", "smirkcat" => "😼", "kissingcat" => "😽", "screamcat" => "🙀", "omgcat" => "🙀", "cryingcat" => "😿", "poutcat" => "😾", "heart" => "❤️", "orange_heart" => "🧡", "yellow_heart" => "💛", "green_heart" => "💚", "blue_heart" => "💙", "purple_heart" => "💜", "brown_heart" => "🤎", "black_heart" => "🖤", "grey_heart" => "🩶", "white_heart" => "🤍", "pinkheart" => "🩷", "lightheart" => "🩵", "broken_heart" => "💔", "heartexclamation" => "❣️", "twohearts" => "💕", "revolvingheart" => "💞", "heartbeat" => "💓", "growingheart" => "💗", "sparklingheart" => "💖", "heartarrow" => "💘", "loveeyes" => "😍", "kiss" => "💋", "envelope" => "💌", "cupid" => "💘", "bouquet" => "💐", "fire" => "🔥", "heartfire" => "❤️🔥", "mendingeart" => "❤️🩹", "sparkles" => "✨", "star" => "⭐", "dizzystar" => "💫", "sweat_drops" => "💦", "dash" => "💨", "boom" => "💥", "wave" => "👋", "raisedback" => "🤚", "splayed" => "🖐️", "hand" => "✋", "vulcan" => "🖖", "rightwardshand" => "🫱", "leftwardshand" => "🫲", "palmdown" => "🫳", "palmup" => "🫴", "leftwardspush" => "🫷", "rightwardspush" => "🫸", "okhand" => "👌", "pinched" => "🤌", "pinching" => "🤏", "v" => "✌️", "crossed" => "🤞", "indexpoint" => "🫰", "iloveyou" => "🤟", "metal" => "🤘", "callme" => "🤙", "pointleft" => "👈", "pointright" => "👉", "pointup" => "👆", "middlefinger" => "🖕", "pointdown" => "👇", "pointup2" => "☝️", "indexleft" => "🫵", "thumbsup" => "👍", "thumbsdown" => "👎", "fist" => "✊", "facepunch" => "👊", "leftfist" => "🤛", "rightfist" => "🤜", "clap" => "👏", "raisehands" => "🙌", "hearthand" => "🫶", "openhands" => "👐", "palmsup" => "🤲", "handshake" => "🤝", "pray" => "🙏", "writing" => "✍️", "nails" => "💅", "selfie" => "🤳", "muscle" => "💪", "mechanicalarm" => "🦾", "mechanicalleg" => "🦿", "leg" => "🦵", "foot" => "🦶", "ear" => "👂", "earwithhearing" => "🦻", "nose" => "👃", "brain" => "🧠", "anatomicalheart" => "🫀", "lungs" => "🫁", "tooth" => "🦷", "bone" => "🦴", "eyes" => "👀", "eye" => "👁️", "tongue" => "👅", "lips" => "👄", "bitinglip" => "🫦", # Animals & Nature "monkey" => "🐵", "monkeyface" => "🐒", "gorilla" => "🦍", "orangutan" => "🦧", "dog" => "🐶", "dogface" => "🐕", "guidedog" => "🦮", "servicedog" => "🐕🦺", "poodle" => "🐩", "wolf" => "🐺", "fox" => "🦊", "raccoon" => "🦝", "cat" => "🐱", "catface" => "🐈", "blackcat" => "🐈⬛", "lion" => "🦁", "tiger" => "🐯", "tigerface" => "🐅", "leopard" => "🐆", "horse" => "🐴", "moose" => "🫎", "donkey" => "🫏", "horseface" => "🐎", "unicorn" => "🦄", "zebra" => "🦓", "deer" => "🦌", "bison" => "🦬", "cow" => "🐮", "ox" => "🐂", "waterbuffalo" => "🐃", "cowface" => "🐄", "pig" => "🐷", "pigface" => "🐖", "boar" => "🐗", "piglips" => "🐽", "ram" => "🐏", "sheep" => "🐑", "goat" => "🐐", "camel" => "🐪", "twohump" => "🐫", "llama" => "🦙", "giraffe" => "🦒", "elephant" => "🐘", "mammoth" => "🦣", "rhino" => "🦏", "hippo" => "🦛", "mouse" => "🐭", "mouseface" => "🐁", "rat" => "🐀", "hamster" => "🐹", "rabbit" => "🐰", "rabbitface" => "🐇", "chipmunk" => "🐿️", "beaver" => "🦫", "hedgehog" => "🦔", "bat" => "🦇", "bear" => "🐻", "polarbear" => "🐻❄️", "koala" => "🐨", "panda" => "🐼", "sloth" => "🦥", "otter" => "🦦", "skunk" => "🦨", "kangaroo" => "🦘", "badger" => "🦡", "pawprints" => "🐾", "turkeybird" => "🦃", "chicken" => "🐔", "rooster" => "🐓", "hatchingchick" => "🐣", "babychick" => "🐤", "chick" => "🐥", "bird" => "🐦", "penguin" => "🐧", "dove" => "🕊️", "eagle" => "🦅", "duck" => "🦆", "swan" => "🦢", "owl" => "🦉", "dodo" => "🦤", "feather" => "🪶", "flamingo" => "🦩", "peacock" => "🦚", "parrot" => "🦜", "wing" => "🪽", "blackbird" => "🐦⬛", "goose" => "🪿", "frog" => "🐸", "crocodile" => "🐊", "turtle" => "🐢", "lizard" => "🦎", "snake" => "🐍", "dragon" => "🐲", "dragonface" => "🐉", "sauropod" => "🦕", "trex" => "🦖", "whale" => "🐳", "whaleface" => "🐋", "dolphin" => "🐬", "seal" => "🦭", "fish" => "🐟", "tropicalfish" => "🐠", "blowfish" => "🐡", "shark" => "🦈", "octopus" => "🐙", "shell" => "🐚", "coral" => "🪸", "jellyfish" => "🪼", "snail" => "🐌", "butterfly" => "🦋", "bug" => "🐛", "ant" => "🐜", "bee" => "🐝", "beetle" => "🪲", "ladybug" => "🐞", "cricketbug" => "🦗", "cockroach" => "🪳", "spider" => "🕷️", "web" => "🕸️", "scorpion" => "🦂", "mosquito" => "🦟", "fly" => "🪰", "worm" => "🪱", "microbe" => "🦠", "flowers" => "💐", "cherryblossom" => "🌸", "whiteblossom" => "💮", "lotusflower" => "🪷", "rosetteflower" => "🏵️", "rose" => "🌹", "wilted" => "🥀", "hibiscus" => "🌺", "sunflower" => "🌻", "blossom" => "🌼", "tulip" => "🌷", "hyacinth" => "🪻", "seedling" => "🌱", "potplant" => "🪴", "tree" => "🌲", "deciduoustree" => "🌳", "palm" => "🌴", "cactus" => "🌵", "grain" => "🌾", "herb" => "🌿", "shamrock" => "☘️", "clover" => "🍀", "maple" => "🍁", "fallenleaf" => "🍂", "leaves" => "🍃", "emptyness" => "🪹", "eggsnest" => "🪺", "mushroom" => "🍄", # Combined/Custom Emotes "bullshit" => "🐄💩", "catshit" => "🐱💩", "dogshit" => "🐶💩", "pandashit" => "🐼💩", "horseshit" => "🐴💩", "koalashit" => "🐨💩", "batshit" => "🦇💩", "shboatload" => "💩🚢", "noevil" => "🙈🙉🙊", # Food & Drink "grapes" => "🍇", "melon" => "🍈", "watermelon" => "🍉", "tangerine" => "🍊", "lemon" => "🍋", "banana" => "🍌", "pineapple" => "🍍", "mango" => "🥭", "apple" => "🍎", "greenapple" => "🍏", "pear" => "🍐", "peach" => "🍑", "cherries" => "🍒", "strawberry" => "🍓", "blueberries" => "🫐", "kiwi" => "🥝", "tomato" => "🍅", "olive" => "🫒", "coconut" => "🥥", "avocado" => "🥑", "eggplant" => "🍆", "potato" => "🥔", "carrot" => "🥕", "corn" => "🌽", "hotpepper" => "🌶️", "bellpepper" => "🫑", "cucumber" => "🥒", "leafy" => "🥬", "broccoli" => "🥦", "garlic" => "🧄", "onion" => "🧅", "peanuts" => "🥜", "beans" => "🫘", "chestnut" => "🌰", "ginger" => "🫚", "peas" => "🫛", "bread" => "🍞", "croissant" => "🥐", "baguette" => "🥖", "flatbread" => "🫓", "pretzel" => "🥨", "bagel" => "🥯", "pancakes" => "🥞", "waffle" => "🧇", "cheese" => "🧀", "meat" => "🍖", "poultryleg" => "🍗", "cutmeat" => "🥩", "bacon" => "🥓", "hamburger" => "🍔", "fries" => "🍟", "pizza" => "🍕", "hotdog" => "🌭", "sandwich" => "🥪", "taco" => "🌮", "burrito" => "🌯", "tamale" => "🫔", "stuffedflatbread" => "🥙", "falafel" => "🧆", "egg" => "🥚", "cooking" => "🍳", "paella" => "🥘", "fondue" => "🫕", "pot" => "🍲", "bowl" => "🥣", "salad" => "🥗", "popcorn" => "🍿", "butter" => "🧈", "salt" => "🧂", "cannedstuff" => "🥫", "bento" => "🍱", "ricecrackers" => "🍘", "riceball" => "🍙", "rice" => "🍚", "curry" => "🍛", "ramen" => "🍜", "spaghetti" => "🍝", "sweetpotato" => "🍠", "oden" => "🍢", "sushi" => "🍣", "friedshrimp" => "🍤", "fishcake" => "🍥", "mooncake" => "🥮", "dango" => "🍡", "dumpling" => "🥟", "fortunecookie" => "🥠", "takeout" => "🥡", "crab" => "🦀", "lobster" => "🦞", "shrimp" => "🦐", "squid" => "🦑", "oyster" => "🦪", "icecream" => "🍦", "shavice" => "🍧", "softice" => "🍨", "doughnut" => "🍩", "cookie" => "🍪", "birthdaycake" => "🎂", "shortcake" => "🍰", "cupcake" => "🧁", "pie" => "🥧", "chocbar" => "🍫", "candy" => "🍬", "lollipop" => "🍭", "custard" => "🍮", "honeypot" => "🍯", "babybottle" => "🍼", "milk" => "🥛", "coffee" => "☕", "teapot" => "🫖", "tea" => "🍵", "sake" => "🍶", "champagne" => "🍾", "wine" => "🍷", "cocktail" => "🍸", "tropical" => "🍹", "beer" => "🍺", "beers" => "🍻", "clinking" => "🥂", "tumbler" => "🥃", "pouringdrink" => "🫗", "cupstraw" => "🥤", "beverage" => "🧋", "mate" => "🧉", "icecube" => "🧊", "chopsticks" => "🥢", "platefork" => "🍽️", "forkknife" => "🍴", "spoon" => "🥄", "knife" => "🔪", "jar" => "🫙", "amphora" => "🏺", # Activity "soccer" => "⚽", "basketball" => "🏀", "football" => "🏈", "baseball" => "⚾", "softball" => "🥎", "tennis" => "🎾", "volleyball" => "🏐", "rugby" => "🏉", "frisbee" => "🥏", "8ball" => "🎱", "pingpong" => "🏓", "badminton" => "🏸", "hockeystick" => "🏒", "fieldhockey" => "🏑", "lacrosse" => "🥍", "cricket" => "🏏", "goal" => "🥅", "golfclub" => "⛳", "boomerang" => "🪃", "archery" => "🏹", "fishingpole" => "🎣", "divingmask" => "🤿", "boxingglove" => "🥊", "karate" => "🥋", "running" => "🏃", "walking" => "🚶", "standingperson" => "🧍", "kneelingperson" => "🧎", "wheelchair" => "🦽", "motorizedwheelchair" => "🦼", "dancer" => "💃", "dancing" => "🕺", "suit" => "🕴️", "couple" => "👫", "twomen" => "👬", "twowomen" => "👭", "personwhitecane" => "🧑🦯", "personmotorized" => "🧑🦽", "personmanual" => "🧑🦼", "runners" => "🏃♀️", "skier" => "⛷️", "snowboarder" => "🏂", "climber" => "🧗", "fencer" => "🤺", "horseracing" => "🏇", "skater" => "⛸️", "lifter" => "🏋️", "biker" => "🚴", "mountainbiker" => "🚵", "cartwheel" => "🤸", "wrestlers" => "🤼", "waterpolo" => "🤽", "handball" => "🤾", "juggling" => "🤹", "lotus" => "🧘", "bath" => "🛀", "bed" => "🛌", "trophy" => "🏆", "medal" => "🏅", "goldmedal" => "🥇", "silvermedal" => "🥈", "bronzemedal" => "🥉", "sportsmedal" => "🏅", "rosette" => "🏵️", "ribbon" => "🎀", "ticket" => "🎫", "tickets" => "🎟️", "performingarts" => "🎭", "art" => "🎨", "circus" => "🎪", "microphone" => "🎤", "headphones" => "🎧", "musicalnotes" => "🎶", "keyboard" => "🎹", "saxophone" => "🎷", "accordion" => "🪗", "guitar" => "🎸", "violin" => "🎻", "trumpet" => "🎺", "drum" => "🥁", "longdrum" => "🪘", "maracas" => "🪇", "flute" => "🪈", "clapboard" => "🎬", "bowtie" => "🎗️", "videogame" => "🎮", "dart" => "🎯", "dice" => "🎲", "puzzle" => "🧩", "teddybear" => "🧸", "pinata" => "🪅", "mirrorball" => "🪩", "nestingdolls" => "🪆", "spadessuit" => "♠️", "heartssuit" => "♥️", "diamondssuit" => "♦️", "clubssuit" => "♣️", "chessmono" => "♟️", "joker" => "🃏", "mahjong" => "🀄", "flowercard" => "🎴", # Travel & Places "globe" => "🌍", "globeamericas" => "🌎", "globeasia" => "🌏", "globemeridians" => "🌐", "worldmap" => "🗺️", "japanmap" => "🗾", "compass" => "🧭", "mountain" => "⛰️", "mountainsnow" => "🏔️", "volcano" => "🌋", "mountfuji" => "🗻", "camping" => "🏕️", "beachumbrella" => "🏖️", "desert" => "🏜️", "desertisland" => "🏝️", "nationalpark" => "🏞️", "stadium" => "🏟️", "classicalbuilding" => "🏛️", "buildingconstruction" => "🏗️", "brick" => "🧱", "rock" => "🪨", "wood" => "🪵", "hut" => "🛖", "houses" => "🏘️", "derelict" => "🏚️", "house" => "🏠", "garden" => "🏡", "officebuilding" => "🏢", "japanpost" => "🏣", "postoffice" => "🏤", "hospital" => "🏥", "bank" => "🏦", "hotel" => "🏨", "lovehotel" => "🏩", "store" => "🏪", "school" => "🏫", "department" => "🏬", "factory" => "🏭", "castle" => "🏯", "wedding" => "💒", "tower" => "🗼", "liberty" => "🗽", "church" => "⛪", "mosque" => "🕌", "hindu" => "🛕", "synagogue" => "🕍", "shinto" => "⛩️", "kaaba" => "🕋", "fountain" => "⛲", "tent" => "⛺", "foggy" => "🌁", "nightstars" => "🌃", "citysunrise" => "🌇", "citysunset" => "🌆", "cityscape" => "🏙️", "bridge" => "🌉", "hotsprings" => "♨️", "carousel" => "🎠", "playgroundslide" => "🛝", "ferriswheel" => "🎡", "rollercoaster" => "🎢", "barberpole" => "💈", "tents" => "🎪", "locomotive" => "🚂", "railcar" => "🚃", "highspeed" => "🚄", "bullet" => "🚅", "train" => "🚆", "metro" => "🚇", "lightrail" => "🚈", "station" => "🚉", "tram" => "🚊", "monorail" => "🚝", "mountainrail" => "🚞", "tramcar" => "🚋", "bus" => "🚌", "oncomingbus" => "🚍", "trolleybus" => "🚎", "minibus" => "🚐", "ambulance" => "🚑", "fireengine" => "🚒", "policecar" => "🚓", "oncomingpolice" => "🚔", "taxi" => "🚕", "oncomingtaxi" => "🚖", "car" => "🚗", "oncomingcar" => "🚘", "suv" => "🚙", "deliverytruck" => "🚚", "articulatedlorry" => "🚛", "tractor" => "🚜", "racingcar" => "🏎️", "motorcycle" => "🏍️", "motorscooter" => "🛵", "manualwheelchair" => "🦽", "motorwheelchair" => "🦼", "autorigshaw" => "🛺", "bicycle" => "🚲", "kickscooter" => "🛴", "skateboard" => "🛹", "rollerblades" => "🛼", "busstop" => "🚏", "motorway" => "🛣️", "railwaytrack" => "🛤️", "oildrum" => "🛢️", "fuelpump" => "⛽", "wheel" => "🛞", "policelights" => "🚨", "horizontallight" => "🚥", "verticallight" => "🚦", "stopsign" => "🛑", "construction" => "🚧", "anchor" => "⚓", "ringbuoy" => "🛟", "sailboat" => "⛵", "canoe" => "🛶", "speedboat" => "🚤", "ferry" => "⛴️", "motorboat" => "🛥️", "ship" => "🚢", "airplane" => "✈️", "smallplane" => "🛩️", "departure" => "🛫", "arrival" => "🛬", "parachute" => "🪂", "seat" => "💺", "helicopter" => "🚁", "suspensionrail" => "🚟", "cablecar" => "🚠", "gondola" => "🚡", "satellite" => "🛰️", "rocket" => "🚀", "flyingsaucer" => "🛸", "bellhop" => "🛎️", "luggage" => "🧳", "hourglass" => "⌛", "hourglassflowing" => "⏳", "watch" => "⌚", "alarmclock" => "⏰", "stopwatch" => "⏱️", "timerclock" => "⏲️", "mantelclock" => "🕰️", "twelve" => "🕐", "twelvethirty" => "🕧", "one" => "🕑", "onethirty" => "🕜", "two" => "🕒", "twothirty" => "🕝", "three" => "🕒", "threethirty" => "🕞", "four" => "🕓", "fourthirty" => "🕟", "five" => "🕔", "fivethirty" => "🕠", "six" => "🕕", "sixthirty" => "🕡", "seven" => "🕖", "seventhirty" => "🕢", "eight" => "🕗", "eightthirty" => "🕣", "nine" => "🕘", "ninethirty" => "🕤", "ten" => "🕙", "tenthirty" => "🕥", "eleven" => "🕚", "eleventhirty" => "🕦", "newmoon" => "🌑", "waxingcrescent" => "🌒", "firstquarter" => "🌓", "waxinggibbous" => "🌔", "fullmoon" => "🌕", "waninggibbous" => "🌖", "lastquarter" => "🌗", "waningcrescent" => "🌘", "crescentmoon" => "🌙", "newmoonface" => "🌚", "firstquarterface" => "🌛", "lastquarterface" => "🌜", "thermometer" => "🌡️", "sun" => "☀️", "fullmoonface" => "🌝", "sunwithface" => "🌞", "ringedplanet" => "🪐", "starsvg" => "⭐", "glowingstar" => "🌟", "shootingstar" => "🌠", "milkyway" => "🌌", "cloud" => "☁️", "sunbehindcloud" => "⛅", "cloudsun" => "🌤️", "cloudrain" => "🌧️", "cloudsnow" => "🌨️", "cloudlightning" => "🌩️", "cloudtornado" => "🌪️", "fog" => "🌫️", "windface" => "🌬️", "cyclone" => "🌀", "rainbow" => "🌈", "closedumbrella" => "🌂", "umbrella" => "☂️", "umbrellarain" => "☔", "umbrellaground" => "⛱️", "bolt" => "⚡", "snowflake" => "❄️", "snowman" => "☃️", "snowmanballs" => "⛄", "comet" => "☄️", "droplet" => "💧", "ocean" => "🌊", # Objects "eyeglasses" => "👓", "darkglasses" => "🕶️", "goggles" => "🥽", "labcoat" => "🥼", "safetyvest" => "🦺", "necktie" => "👔", "tshirt" => "👕", "jeans" => "👖", "scarf" => "🧣", "gloves" => "🧤", "coat" => "🧥", "socks" => "🧦", "dress" => "👗", "kimono" => "👘", "sari" => "🥻", "onepieceswimsuit" => "🩱", "briefs" => "🩲", "shorts" => "🩳", "bikini" => "👙", "blouse" => "👚", "foldedhands" => "👐", "purse" => "👛", "handbag" => "👜", "clutchbag" => "👝", "shoppingbags" => "🛍️", "backpack" => "🎒", "thongsandal" => "🩴", "shoe" => "👞", "runningshoe" => "👟", "hikingboot" => "🥾", "flatsandal" => "🥿", "highheeledsandal" => "👡", "heels" => "👠", "boot" => "👢", "balletshoes" => "🩰", "crown" => "👑", "tophat" => "🎩", "gradcap" => "🎓", "billedcap" => "🧢", "militaryhelmet" => "🪖", "rescueworkerhelmet" => "⛑️", "prayerbeads" => "📿", "lipstick" => "💄", "ring" => "💍", "gem" => "💎", "mutedspeaker" => "🔇", "speaker" => "🔈", "mediumspeaker" => "🔉", "loudspeaker" => "📢", "megaphone" => "📣", "postalhorn" => "📯", "bell" => "🔔", "nobell" => "🔕", "musicscore" => "🎼", "musicalnote" => "🎵", "studiomicrophone" => "🎙️", "levelslider" => "🎚️", "controlknobs" => "🎛️", "radio" => "📻", "banjo" => "🪕", "mobilephone" => "📱", "phonearrow" => "📲", "telephone" => "☎️", "pager" => "📟", "fax" => "📠", "battery" => "🔋", "lowbattery" => "🪫", "electricplug" => "🔌", "computer" => "💻", "desktop" => "🖥️", "printer" => "🖨️", "keyboardobj" => "⌨️", "computermouse" => "🖱️", "trackball" => "🖲️", "disk" => "💽", "floppy" => "💾", "cd" => "💿", "dvd" => "📀", "abacus" => "🧮", "moviecamera" => "🎥", "filmframes" => "🎞️", "projector" => "📽️", "televisin" => "📺", "cameraphoto" => "📷", "camerawithflash" => "📸", "videocamera" => "📹", "vhs" => "📼", "mag" => "🔍", "magleft" => "🔎", "candle" => "🕯️", "bulb" => "💡", "flashlight" => "🔦", "lantern" => "🏮", "diyalamp" => "🪔", "notebookdecorative" => "📔", "closedbook" => "📕", "openbook" => "📖", "greenbook" => "📗", "bluebook" => "📘", "orangebook" => "📙", "books" => "📚", "notebook" => "📓", "ledger" => "📒", "pagewithcurl" => "📃", "scroll" => "📜", "pagebookmark" => "📄", "newspaper" => "📰", "rollednewspaper" => "🗞️", "bookmarktabs" => "📑", "bookmark" => "🔖", "label" => "🏷️", "moneybag" => "💰", "coin" => "🪙", "yen" => "💴", "dollar" => "💵", "euro" => "💶", "pound" => "💷", "moneywings" => "💸", "creditcard" => "💳", "receipt" => "🧾", "chartincrease" => "📈", "chartdecrease" => "📉", "envelopearrow" => "📧", "email" => "📧", "incomingenvelope" => "📨", "envelopearrowdown" => "📩", "outboxtray" => "📤", "inboxtray" => "📥", "parcel" => "📦", "mailbox" => "📫", "mailboxclosed" => "📪", "mailboxflag" => "📬", "mailboxnoflag" => "📭", "postbox" => "📮", "ballotbox" => "🗳️", "pencil" => "✏️", "blacknib" => "✒️", "fountainpen" => "🖋️", "pen" => "🖊️", "paintbrush" => "🖌️", "crayon" => "🖍️", "memo" => "📝", "briefcase" => "💼", "filefolder" => "📁", "openfolder" => "📂", "dividers" => "🗂️", "calendar" => "📅", "tearoffcalendar" => "📆", "spiralnotebook" => "🗒️", "spiralcalendar" => "🗓️", "cardindex" => "📇", "chartincreasing" => "📈", "chartdecreasing" => "📉", "bargraph" => "📊", "clipboard" => "📋", "pushpin" => "📌", "roundpin" => "📍", "paperclip" => "📎", "linkedpaperclips" => "🖇️", "straightruler" => "📏", "triangularruler" => "📐", "scissors" => "✂️", "cardfilebox" => "🗃️", "filing" => "🗄️", "wastebasket" => "🗑️", "locked" => "🔒", "unlocked" => "🔓", "lockedwithpen" => "🔏", "lockedwithkey" => "🔐", "key" => "🔑", "oldkey" => "🗝️", "hammer" => "🔨", "axe" => "🪓", "pick" => "⛏️", "hammerandpick" => "⚒️", "hammerwrench" => "🛠️", "dagger" => "🗡️", "swords" => "⚔️", "pistol" => "🔫", "boomerangobj" => "🪃", "bowwitharrow" => "🏹", "shield" => "🛡️", "carpentrysaw" => "🪚", "wrench" => "🔧", "screwdriver" => "🪛", "nutandbolt" => "🔩", "gear" => "⚙️", "clamp" => "🗜️", "balancescale" => "⚖️", "whitecane" => "🦯", "link" => "🔗", "chains" => "⛓️", "hook" => "🪝", "toolbox" => "🧰", "magnet" => "🧲", "ladder" => "🪜", "alembic" => "⚗️", "testtube" => "🧪", "petridish" => "🧫", "dna" => "🧬", "microscope" => "🔬", "telescope" => "🔭", "satelliteantenna" => "📡", "syringe" => "💉", "dropofblood" => "🩸", "pill" => "💊", "adhesivebandage" => "🩹", "crutch" => "🩼", "stethoscope" => "🩺", "xray" => "🩻", "door" => "🚪", "elevator" => "🛗", "mirror" => "🪞", "window" => "🪟", "sofaandlamp" => "🛋️", "chair" => "🪑", "toilet" => "🚽", "plunger" => "🪠", "shower" => "🚿", "bathtub" => "🛁", "mousetrap" => "🪤", "razor" => "🪒", "lotionbottle" => "🧴", "safetypin" => "🧷", "broom" => "🧹", "basket" => "🧺", "rollofpaper" => "🧻", "bucket" => "🪣", "soap" => "🧼", "bubbles" => "🫧", "toothbrush" => "🪥", "sponge" => "🧽", "fireextinguisher" => "🧯", "shoppingcart" => "🛒", "cigarette" => "🚬", "coffin" => "⚰️", "headstone" => "🪦", "funeralurn" => "⚱️", "nazaramulet" => "🧿", "hamsa" => "🪬", "moai" => "🗿", "placard" => "🪧", "identificationcard" => "🪪", # Symbols "atm" => "🏧", "litersign" => "🚮", "potablewater" => "🚰", "wheelchairsymbol" => "♿", "mensroom" => "🚹", "womensroom" => "🚺", "restroom" => "🚻", "babysymbol" => "🚼", "wc" => "🚾", "passportcontrol" => "🛂", "customs" => "🛃", "baggageclaim" => "🛄", "leftluggage" => "🛅", "warning" => "⚠️", "childcrossing" => "🚸", "noentry" => "⛔", "prohibited" => "🚫", "nobicycles" => "🚳", "nosmoking" => "🚭", "nolittering" => "🚯", "nonpotable" => "🚱", "nopedestrians" => "🚷", "nophone" => "📵", "eighteenplus" => "🔞", "up" => "⬆️", "upright" => "↗️", "right" => "➡️", "downright" => "↘️", "down" => "⬇️", "downleft" => "↙️", "left" => "⬅️", "upleft" => "↖️", "updown" => "↕️", "leftright" => "↔️", "leftcurve" => "↩️", "rightcurve" => "↪️", "rightarrowcurving" => "⤴️", "leftarrowcurving" => "⤵️", "clockwise" => "🔃", "counterclockwise" => "🔄", "back" => "🔙", "end" => "🔚", "on" => "🔛", "soon" => "🔜", "top" => "🔝", "placeofreligion" => "🛐", "om" => "🕉️", "starofdavid" => "✡️", "wheelofdharma" => "☸️", "yinyang" => "☯️", "latincross" => "✝️", "orthodoxcross" => "☦️", "starandcrescent" => "☪️", "peaceandlove" => "☮️", "menorah" => "🕎", "sixpointedstar" => "🔯", "khanda" => "🪯", "aries" => "♈", "taurus" => "♉", "gemini" => "♊", "cancer" => "♋", "leo" => "♌", "virgo" => "♍", "libra" => "♎", "scorpius" => "♏", "sagittarius" => "♐", "capricorn" => "♑", "aquarius" => "♒", "pisces" => "♓", "ophiuchus" => "⛎", "shuffletracks" => "🔀", "repeat" => "🔁", "repeatone" => "🔂", "playbtn" => "▶️", "fastforward" => "⏩", "nexttrack" => "⏭️", "playorpause" => "⏯️", "reverse" => "◀️", "rewind" => "⏪", "lasttrack" => "⏮️", "upbutton" => "🔼", "fastup" => "⏫", "downbutton" => "🔽", "fastdown" => "⏬", "pausebutton" => "⏸️", "stopbutton" => "⏹️", "recordbutton" => "⏺️", "ejectbutton" => "⏏️", "cinema" => "🎦", "lowbrightness" => "🔅", "highbrightness" => "🔆", "signalstrength" => "📶", "wireless" => "📳", "vibration" => "📳", "phoneoff" => "📴", "female" => "♀️", "male" => "♂️", "transgender" => "⚧️", "multiply" => "✖️", "plus" => "➕", "minus" => "➖", "divide" => "➗", "heavyequals" => "🟰", "infinity" => "♾️", "bangbang" => "‼️", "interrobang" => "⁉️", "question" => "❓", "greyquestion" => "❔", "exclamation" => "❗", "greyexclamation" => "❕", "wavy" => "〰️", "currencyexchange" => "💱", "heavydollar" => "💲", "medicalymbol" => "⚕️", "recycle" => "♻️", "fleurdelis" => "⚜️", "trident" => "🔱", "namebadge" => "📛", "beginner" => "🔰", "hollowredcircle" => "⭕", "checkmark" => "✅", "checkmarkbox" => "☑️", "checkmarkbtn" => "✔️", "crossmark" => "❌", "crossbtn" => "❎", "curlloop" => "➰", "doublecurl" => "➿", "partalt" => "〽️", "eightspoke" => "✳️", "eightpointedstar" => "✴️", "sparkle" => "❇️", "copyright" => "©️", "registered" => "®️", "trademark" => "™️", "keycap" => "#️⃣", "keycapzero" => "0️⃣", "keycapone" => "1️⃣", "keycaptwo" => "2️⃣", "keycapthree" => "3️⃣", "keycapfour" => "4️⃣", "keycapfive" => "5️⃣", "keycapsix" => "6️⃣", "keycapseven" => "7️⃣", "keycapeight" => "8️⃣", "keycapnine" => "9️⃣", "keycapten" => "🔟", "hundredpoints" => "💯", "inputlatinuppercase" => "🔠", "inputlatinlowercase" => "🔡", "inputnumbers" => "🔢", "inputsymbols" => "🔣", "inputlatinletters" => "🔤", "ablood" => "🅰️", "abblood" => "🆎", "bblood" => "🅱️", "cl" => "🆑", "cool" => "🆒", "free" => "🆓", "information" => "ℹ️", "id" => "🆔", "circledm" => "Ⓜ️", "new" => "🆕", "ng" => "🆖", "oblood" => "🅾️", "ok" => "🆗", "parking" => "🅿️", "sos" => "🆘", "upexclamation" => "🆙", "vs" => "🆚", "kana" => "🈁", "pointingup" => "🈂️", "u5272" => "🈷️", "u5408" => "🈴", "u55b6" => "🈺", "u6307" => "🈯", "u6708" => "🈷️", "u6709" => "🈶", "u6e80" => "🈵", "u7121" => "🈚", "u7533" => "🈸", "u7981" => "🈲", "u7a7a" => "🈳", "accept" => "🉑", "redsquare" => "🟥", "orangesquare" => "🟧", "yellowsquare" => "🟨", "greensquare" => "🟩", "bluesquare" => "🟦", "purplesquare" => "🟪", "brownsquare" => "🟫", "blacklargesquare" => "⬛", "whitelargesquare" => "⬜", "blackmediumsquare" => "◼️", "whitemediumsquare" => "◻️", "blackmedimsmallesquare" => "◾", "whitemediusmallesquare" => "◽", "blacksmallsquare" => "▪️", "whitesmallsquare" => "▫️", "largeorgdiamond" => "🔶", "largebluediamond" => "🔷", "smallorgdiamond" => "🔸", "smallbluediamond" => "🔹", "redtriup" => "🔺", "redtridown" => "🔻", "diamondorange" => "💠", "radiobtn" => "🔘", "whitesqbtn" => "🔳", "blacksqbtn" => "🔲", "chequeredflag" => "🏁", "triangularflag" => "🚩", "crossedflags" => "🎌", "blackflag" => "🏴", "whiteflag" => "🏳️", "rainbowflag" => "🏳️🌈", "transgenderflag" => "🏳️⚧️", "pirateflag" => "🏴☠️", # Flags "ascensionisland" => "🇦🇨", "andorra" => "🇦🇩", "uae" => "🇦🇪", "afghanistan" => "🇦🇫", "antiguabarbuda" => "🇦🇬", "anguilla" => "🇦🇮", "albania" => "🇦🇱", "armenia" => "🇦🇲", "angola" => "🇦🇴", "antarctica" => "🇦🇶", "argentina" => "🇦🇷", "americansamoa" => "🇦🇸", "austria" => "🇦🇹", "australia" => "🇦🇺", "aruba" => "🇦🇼", "alandislands" => "🇦🇽", "azerbaijan" => "🇦🇿", "bosniaherz" => "🇧🇦", "barbados" => "🇧🇧", "bangladesh" => "🇧🇩", "belgium" => "🇧🇪", "burkinafaso" => "🇧🇫", "bulgaria" => "🇧🇬", "bahrain" => "🇧🇭", "burundi" => "🇧🇮", "benin" => "🇧🇯", "stbarts" => "🇧🇱", "bermuda" => "🇧🇲", "brunei" => "🇧🇳", "bolivia" => "🇧🇴", "caribnetherlands" => "🇧🇶", "brazil" => "🇧🇷", "bahamas" => "🇧🇸", "bhutan" => "🇧🇹", "bouvetisland" => "🇧🇻", "botswana" => "🇧🇼", "belarus" => "🇧🇾", "belize" => "🇧🇿", "canada" => "🇨🇦", "cocosislands" => "🇨🇨", "congokinshasa" => "🇨🇩", "centralafrican" => "🇨🇫", "congobrazzaville" => "🇨🇬", "switzerland" => "🇨🇭", "ivorycoast" => "🇨🇮", "cookislands" => "🇨🇰", "chile" => "🇨🇱", "cameroon" => "🇨🇲", "china" => "🇨🇳", "colombia" => "🇨🇴", "clipperton" => "🇨🇵", "costarica" => "🇨🇷", "cuba" => "🇨🇺", "capeverde" => "🇨🇻", "curacao" => "🇨🇼", "christmasisland" => "🇨🇽", "cyprus" => "🇨🇾", "czechia" => "🇨🇿", "germany" => "🇩🇪", "diegogarcia" => "🇩🇬", "djibouti" => "🇩🇯", "denmark" => "🇩🇰", "dominica" => "🇩🇲", "dominicanrep" => "🇩🇴", "algeria" => "🇩🇿", "ceutamelilla" => "🇪🇦", "ecuador" => "🇪🇨", "estonia" => "🇪🇪", "egypt" => "🇪🇬", "westernsahara" => "🇪🇭", "eritrea" => "🇪🇷", "spain" => "🇪🇸", "ethiopia" => "🇪🇹", "eu" => "🇪🇺", "finland" => "🇫🇮", "fiji" => "🇫🇯", "falklands" => "🇫🇰", "micronesia" => "🇫🇲", "faroeislands" => "🇫🇴", "france" => "🇫🇷", "gabon" => "🇬🇦", "uk" => "🇬🇧", "grenada" => "🇬🇩", "georgia" => "🇬🇪", "frenchguiana" => "🇬🇫", "guernsey" => "🇬🇬", "ghana" => "🇬🇭", "gibraltar" => "🇬🇮", "greenland" => "🇬🇱", "gambia" => "🇬🇲", "guinea" => "🇬🇳", "guadeloupe" => "🇬🇵", "equatorialguinea" => "🇬🇶", "greece" => "🇬🇷", "southgeorgia" => "🇬🇸", "guatemala" => "🇬🇹", "guam" => "🇬🇺", "guineabissau" => "🇬🇼", "guyana" => "🇬🇾", "hongkong" => "🇭🇰", "heardmcdonald" => "🇭🇲", "honduras" => "🇭🇳", "croatia" => "🇭🇷", "haiti" => "🇭🇹", "hungary" => "🇭🇺", "canaryislands" => "🇮🇨", "indonesia" => "🇮🇩", "ireland" => "🇮🇪", "israel" => "🇮🇱", "isleofman" => "🇮🇲", "india" => "🇮🇳", "britishindianocean" => "🇮🇴", "iraq" => "🇮🇶", "iran" => "🇮🇷", "iceland" => "🇮🇸", "italy" => "🇮🇹", "jersey" => "🇯🇪", "jamaica" => "🇯🇲", "jordan" => "🇯🇴", "japan" => "🇯🇵", "kenya" => "🇰🇪", "kyrgyzstan" => "🇰🇬", "cambodia" => "🇰🇭", "kiribati" => "🇰🇮", "comoros" => "🇰🇲", "stkittsnevis" => "🇰🇳", "northkorea" => "🇰🇵", "southkorea" => "🇰🇷", "kuwait" => "🇰🇼", "caymanislands" => "🇰🇾", "kazakhstan" => "🇰🇿", "laos" => "🇱🇦", "lebanon" => "🇱🇧", "stlucia" => "🇱🇨", "liechtenstein" => "🇱🇮", "srilanka" => "🇱🇰", "liberia" => "🇱🇷", "lesotho" => "🇱🇸", "lithuania" => "🇱🇹", "luxembourg" => "🇱🇺", "latvia" => "🇱🇻", "libya" => "🇱🇾", "morocco" => "🇲🇦", "monaco" => "🇲🇨", "moldova" => "🇲🇩", "montenegro" => "🇲🇪", "stmartin" => "🇲🇫", "madagascar" => "🇲🇬", "marshallislands" => "🇲🇭", "macedonia" => "🇲🇰", "mali" => "🇲🇱", "myanmar" => "🇲🇲", "mongolia" => "🇲🇳", "macau" => "🇲🇴", "northernmariana" => "🇲🇵", "martinique" => "🇲🇶", "mauritania" => "🇲🇷", "montserrat" => "🇲🇸", "malta" => "🇲🇹", "mauritius" => "🇲🇺", "maldives" => "🇲🇻", "malawi" => "🇲🇼", "mexico" => "🇲🇽", "malaysia" => "🇲🇾", "mozambique" => "🇲🇿", "namibia" => "🇳🇦", "newcaledonia" => "🇳🇨", "niger" => "🇳🇪", "norfolkisland" => "🇳🇫", "nigeria" => "🇳🇬", "nicaragua" => "🇳🇮", "netherlands" => "🇳🇱", "norway" => "🇳🇴", "nepal" => "🇳🇵", "nauru" => "🇳🇷", "niue" => "🇳🇺", "newzealand" => "🇳🇿", "oman" => "🇴🇲", "panama" => "🇵🇦", "peru" => "🇵🇪", "frenchpolynesia" => "🇵🇫", "papuanewguinea" => "🇵🇬", "philippines" => "🇵🇭", "pakistan" => "🇵🇰", "poland" => "🇵🇱", "stpierremiq" => "🇵🇲", "pitcairnislands" => "🇵🇳", "puertorico" => "🇵🇷", "palestinianterritories" => "🇵🇸", "portugal" => "🇵🇹", "palau" => "🇵🇼", "paraguay" => "🇵🇾", "qatar" => "🇶🇦", "reunion" => "🇷🇪", "romania" => "🇷🇴", "serbia" => "🇷🇸", "russia" => "🇷🇺", "rwanda" => "🇷🇼", "saudiarabia" => "🇸🇦", "solomonislands" => "🇸🇧", "seychelles" => "🇸🇨", "sudan" => "🇸🇩", "sweden" => "🇸🇪", "singapore" => "🇸🇬", "sthelena" => "🇸🇭", "slovenia" => "🇸🇮", "svalbardjanmayen" => "🇸🇯", "slovakia" => "🇸🇰", "sierraleone" => "🇸🇱", "sanmarino" => "🇸🇲", "senegal" => "🇸🇳", "somalia" => "🇸🇴", "suriname" => "🇸🇷", "southsudan" => "🇸🇸", "saotomeprincipe" => "🇸🇹", "elsalvador" => "🇸🇻", "sintmaarten" => "🇸🇽", "syria" => "🇸🇾", "eswatini" => "🇸🇿", "tristanda" => "🇹🇦", "turkscaicos" => "🇹🇨", "chad" => "🇹🇩", "frenchsouthern" => "🇹🇫", "togo" => "🇹🇬", "thailand" => "🇹🇭", "tajikistan" => "🇹🇯", "tokelau" => "🇹🇰", "timorleste" => "🇹🇱", "turkmenistan" => "🇹🇲", "tunisia" => "🇹🇳", "tonga" => "🇹🇴", "turkey" => "🇹🇷", "trinidadtobago" => "🇹🇹", "tuvalu" => "🇹🇻", "taiwan" => "🇹🇼", "tanzania" => "🇹🇿", "ukraine" => "🇺🇦", "uganda" => "🇺🇬", "usoutlyingislands" => "🇺🇲", "un" => "🇺🇳", "us" => "🇺🇸", "uruguay" => "🇺🇾", "uzbekistan" => "🇺🇿", "vaticancity" => "🇻🇦", "stvincentgren" => "🇻🇨", "venezuela" => "🇻🇪", "britishvirginislands" => "🇻🇬", "usvirginislands" => "🇻🇮", "vietnam" => "🇻🇳", "vanuatu" => "🇻🇺", "wallisfutuna" => "🇼🇫", "samoa" => "🇼🇸", "kosovo" => "🇽🇰", "yemen" => "🇾🇪", "mayotte" => "🇾🇹", "southafrica" => "🇿🇦", "zambia" => "🇿🇲", "zimbabwe" => "🇿🇼", "england" => "🏴", "scotland" => "🏴", "wales" => "🏴" }.freeze
- CATEGORIES =
Category definitions - maps category names to emote ranges
{ "custom" => { description: "Custom ASCII Art and Text Emotes", emotes: ["disapproval", "bugeyes", "dogshrug", "facepalm", "flip", "fu", "heresatable", "javaflip", "kungfuhamster", "omw", "rage", "rageflip", "rockhand", "shrug", "shrugtable", "unsee", "yuno"] }, "keyboard" => { description: "Keyboard Shortcuts", emotes: ["cmd-", "cmd", "command", "cntl", "optn", "option", "shft", "shift"] }, "smileys" => { description: "Smileys & People", emotes: EMOTES.keys.select { |k| ["grin", "smiley", "smile", "grinning", "laughing", "sweat_smile", "rofl", "joy", "slightsmile", "upsidedown", "meltingface", "wink", "blush", "innocent", "hearteyessmile", "hearteyes", "starstruck", "kissing", "kissingheart", "relaxed", "kissingclosedeyes", "kissingsmile", "yum", "tongueout", "tonguewink", "zany", "tongueclosedeyes", "moneymouth", "hugs", "handovermouth", "shush", "thinking", "salute", "zipper", "raisedeyebrow", "neutral", "expressionless", "nomouth", "dottedline", "cloudface", "smirk", "unamused", "eyeroll", "grimace", "cringe", "lyingface", "shakingface", "relieved", "pensive", "sleepy", "drool", "sleeping", "mask", "sick", "bandage", "nauseated", "vomit", "sneeze", "hot", "cold", "woozy", "dizzy", "spiraleyes", "explodinghead", "cowboy", "party", "disguised", "sunglasses", "nerd", "monocle", "confused", "faceexhaling", "worried", "slightfrown", "frown", "openmouth", "hushed", "astonished", "flushed", "pleading", "holdingbacktears", "frowning", "anguished", "fearful", "anxious", "sad", "cry", "sob", "scream", "omg", "confounded", "persevere", "disappointed", "sweat", "weary", "tired", "yawning", "triumph", "pout", "angry", "cursing", "smiling_imp", "imp", "skull", "crossbones", "clown", "poop", "ghost", "alien", "alienmonster", "robot", "smilingcat", "grincat", "joycat", "heartcat", "smirkcat", "kissingcat", "screamcat", "omgcat", "cryingcat", "poutcat", "heart", "orange_heart", "yellow_heart", "green_heart", "blue_heart", "purple_heart", "brown_heart", "black_heart", "grey_heart", "white_heart", "pinkheart", "lightheart", "broken_heart", "heartexclamation", "twohearts", "revolvingheart", "heartbeat", "growingheart", "sparklingheart", "heartarrow", "loveeyes", "kiss", "envelope", "cupid", "bouquet", "fire", "heartfire", "mendingeart", "sparkles", "star", "dizzystar", "sweat_drops", "dash", "boom", "wave", "raisedback", "splayed", "hand", "vulcan", "rightwardshand", "leftwardshand", "palmdown", "palmup", "leftwardspush", "rightwardspush", "okhand", "pinched", "pinching", "v", "crossed", "indexpoint", "iloveyou", "metal", "callme", "pointleft", "pointright", "pointup", "middlefinger", "pointdown", "pointup2", "indexleft", "thumbsup", "thumbsdown", "fist", "facepunch", "leftfist", "rightfist", "clap", "raisehands", "hearthand", "openhands", "palmsup", "handshake", "pray", "writing", "nails", "selfie", "muscle", "mechanicalarm", "mechanicalleg", "leg", "foot", "ear", "earwithhearing", "nose", "brain", "anatomicalheart", "lungs", "tooth", "bone", "eyes", "eye", "tongue", "lips", "bitinglip"].include?(k) } }, "animals" => { description: "Animals & Nature", emotes: EMOTES.keys.select { |k| k.start_with?("monkey", "gorilla", "orangutan", "dog", "guide", "service", "poodle", "wolf", "fox", "raccoon", "cat", "black", "lion", "tiger", "leopard", "horse", "moose", "donkey", "unicorn", "zebra", "deer", "bison", "cow", "ox", "water", "pig", "boar", "ram", "sheep", "goat", "camel", "two", "llama", "giraffe", "elephant", "mammoth", "rhino", "hippo", "mouse", "rat", "hamster", "rabbit", "chipmunk", "beaver", "hedgehog", "bat", "bear", "polar", "koala", "panda", "sloth", "otter", "skunk", "kangaroo", "badger", "paw", "turkey", "chicken", "rooster", "hatching", "baby", "chick", "bird", "penguin", "dove", "eagle", "duck", "swan", "owl", "dodo", "feather", "flamingo", "peacock", "parrot", "wing", "goose", "frog", "crocodile", "turtle", "lizard", "snake", "dragon", "sauropod", "trex", "whale", "dolphin", "seal", "fish", "tropical", "blow", "shark", "octopus", "shell", "coral", "jelly", "snail", "butterfly", "bug", "ant", "bee", "beetle", "lady", "cricket", "cockroach", "spider", "web", "scorpion", "mosquito", "fly", "worm", "microbe", "flowers", "cherry", "white", "lotus", "rosette", "rose", "wilted", "hibiscus", "sunflower", "blossom", "tulip", "hyacinth", "seedling", "pot", "tree", "deciduous", "palm", "cactus", "grain", "herb", "shamrock", "clover", "maple", "fallen", "leaves", "empty", "eggs", "mushroom") || ["turkeybird", "monkey", "monkeyface", "gorilla", "orangutan", "dog", "dogface", "guidedog", "servicedog", "poodle", "wolf", "fox", "raccoon", "cat", "catface", "blackcat", "lion", "tiger", "tigerface", "leopard", "horse", "moose", "donkey", "horseface", "unicorn", "zebra", "deer", "bison", "cow", "ox", "waterbuffalo", "cowface", "pig", "pigface", "boar", "piglips", "ram", "sheep", "goat", "camel", "twohump", "llama", "giraffe", "elephant", "mammoth", "rhino", "hippo", "mouse", "mouseface", "rat", "hamster", "rabbit", "rabbitface", "chipmunk", "beaver", "hedgehog", "bat", "bear", "polarbear", "koala", "panda", "sloth", "otter", "skunk", "kangaroo", "badger", "pawprints", "turkey", "chicken", "rooster", "hatchingchick", "babychick", "chick", "bird", "penguin", "dove", "eagle", "duck", "swan", "owl", "dodo", "feather", "flamingo", "peacock", "parrot", "wing", "blackbird", "goose", "frog", "crocodile", "turtle", "lizard", "snake", "dragon", "dragonface", "sauropod", "trex", "whale", "whaleface", "dolphin", "seal", "fish", "tropicalfish", "blowfish", "shark", "octopus", "shell", "coral", "jellyfish", "snail", "butterfly", "bug", "ant", "bee", "beetle", "ladybug", "cricketbug", "cockroach", "spider", "web", "scorpion", "mosquito", "fly", "worm", "microbe", "flowers", "cherryblossom", "whiteblossom", "lotusflower", "rosetteflower", "rose", "wilted", "hibiscus", "sunflower", "blossom", "tulip", "hyacinth", "seedling", "potplant", "tree", "deciduoustree", "palm", "cactus", "grain", "herb", "shamrock", "clover", "maple", "fallenleaf", "leaves", "emptyness", "eggsnest", "mushroom"].include?(k) } }, "combined" => { description: "Combined/Custom Emotes", emotes: ["bullshit", "catshit", "dogshit", "pandashit", "horseshit", "koalashit", "batshit", "shboatload", "noevil"] }, "food" => { description: "Food & Drink", emotes: ["grapes", "melon", "watermelon", "tangerine", "lemon", "banana", "pineapple", "mango", "apple", "greenapple", "pear", "peach", "cherries", "strawberry", "blueberries", "kiwi", "tomato", "olive", "coconut", "avocado", "eggplant", "potato", "carrot", "corn", "hotpepper", "bellpepper", "cucumber", "leafy", "broccoli", "garlic", "onion", "peanuts", "beans", "chestnut", "ginger", "peas", "bread", "croissant", "baguette", "flatbread", "pretzel", "bagel", "pancakes", "waffle", "cheese", "meat", "poultryleg", "cutmeat", "bacon", "hamburger", "fries", "pizza", "hotdog", "sandwich", "taco", "burrito", "tamale", "stuffedflatbread", "falafel", "egg", "cooking", "paella", "fondue", "pot", "bowl", "salad", "popcorn", "butter", "salt", "cannedstuff", "bento", "ricecrackers", "riceball", "rice", "curry", "ramen", "spaghetti", "sweetpotato", "oden", "sushi", "friedshrimp", "fishcake", "mooncake", "dango", "dumpling", "fortunecookie", "takeout", "crab", "lobster", "shrimp", "squid", "oyster", "icecream", "shavice", "softice", "doughnut", "cookie", "birthdaycake", "shortcake", "cupcake", "pie", "chocbar", "candy", "lollipop", "custard", "honeypot", "babybottle", "milk", "coffee", "teapot", "tea", "sake", "champagne", "wine", "cocktail", "tropical", "beer", "beers", "clinking", "tumbler", "pouringdrink", "cupstraw", "beverage", "mate", "icecube", "chopsticks", "platefork", "forkknife", "spoon", "knife", "jar", "amphora"] }, "activity" => { description: "Activity", emotes: ["soccer", "basketball", "football", "baseball", "softball", "tennis", "volleyball", "rugby", "frisbee", "8ball", "pingpong", "badminton", "hockeystick", "fieldhockey", "lacrosse", "cricket", "goal", "golfclub", "boomerang", "archery", "fishingpole", "divingmask", "boxingglove", "karate", "running", "walking", "standingperson", "kneelingperson", "wheelchair", "motorizedwheelchair", "dancer", "dancing", "suit", "couple", "twomen", "twowomen", "personwhitecane", "personmotorized", "personmanual", "runners", "skier", "snowboarder", "climber", "fencer", "horseracing", "skater", "lifter", "biker", "mountainbiker", "cartwheel", "wrestlers", "waterpolo", "handball", "juggling", "lotus", "bath", "bed", "trophy", "medal", "goldmedal", "silvermedal", "bronzemedal", "sportsmedal", "rosette", "ribbon", "ticket", "tickets", "performingarts", "art", "circus", "microphone", "headphones", "musicalnotes", "keyboard", "saxophone", "accordion", "guitar", "violin", "trumpet", "drum", "longdrum", "maracas", "flute", "clapboard", "bowtie", "videogame", "dart", "dice", "puzzle", "teddybear", "pinata", "mirrorball", "nestingdolls", "spadessuit", "heartssuit", "diamondssuit", "clubssuit", "chessmono", "joker", "mahjong", "flowercard"] }, "travel" => { description: "Travel & Places", emotes: ["globe", "globeamericas", "globeasia", "globemeridians", "worldmap", "japanmap", "compass", "mountain", "mountainsnow", "volcano", "mountfuji", "camping", "beachumbrella", "desert", "desertisland", "nationalpark", "stadium", "classicalbuilding", "buildingconstruction", "brick", "rock", "wood", "hut", "houses", "derelict", "house", "garden", "officebuilding", "japanpost", "postoffice", "hospital", "bank", "hotel", "lovehotel", "store", "school", "department", "factory", "castle", "wedding", "tower", "liberty", "church", "mosque", "hindu", "synagogue", "shinto", "kaaba", "fountain", "tent", "foggy", "nightstars", "citysunrise", "citysunset", "cityscape", "bridge", "hotsprings", "carousel", "playgroundslide", "ferriswheel", "rollercoaster", "barberpole", "tents", "locomotive", "railcar", "highspeed", "bullet", "train", "metro", "lightrail", "station", "tram", "monorail", "mountainrail", "tramcar", "bus", "oncomingbus", "trolleybus", "minibus", "ambulance", "fireengine", "policecar", "oncomingpolice", "taxi", "oncomingtaxi", "car", "oncomingcar", "suv", "deliverytruck", "articulatedlorry", "tractor", "racingcar", "motorcycle", "motorscooter", "manualwheelchair", "motorwheelchair", "autorigshaw", "bicycle", "kickscooter", "skateboard", "rollerblades", "busstop", "motorway", "railwaytrack", "oildrum", "fuelpump", "wheel", "policelights", "horizontallight", "verticallight", "stopsign", "construction", "anchor", "ringbuoy", "sailboat", "canoe", "speedboat", "ferry", "motorboat", "ship", "airplane", "smallplane", "departure", "arrival", "parachute", "seat", "helicopter", "suspensionrail", "cablecar", "gondola", "satellite", "rocket", "flyingsaucer", "bellhop", "luggage", "hourglass", "hourglassflowing", "watch", "alarmclock", "stopwatch", "timerclock", "mantelclock", "twelve", "twelvethirty", "one", "onethirty", "two", "twothirty", "three", "threethirty", "four", "fourthirty", "five", "fivethirty", "six", "sixthirty", "seven", "seventhirty", "eight", "eightthirty", "nine", "ninethirty", "ten", "tenthirty", "eleven", "eleventhirty", "newmoon", "waxingcrescent", "firstquarter", "waxinggibbous", "fullmoon", "waninggibbous", "lastquarter", "waningcrescent", "crescentmoon", "newmoonface", "firstquarterface", "lastquarterface", "thermometer", "sun", "fullmoonface", "sunwithface", "ringedplanet", "starsvg", "glowingstar", "shootingstar", "milkyway", "cloud", "sunbehindcloud", "cloudsun", "cloudrain", "cloudsnow", "cloudlightning", "cloudtornado", "fog", "windface", "cyclone", "rainbow", "closedumbrella", "umbrella", "umbrellarain", "umbrellaground", "bolt", "snowflake", "snowman", "snowmanballs", "comet", "droplet", "ocean"] }, "objects" => { description: "Objects", emotes: ["eyeglasses", "darkglasses", "goggles", "labcoat", "safetyvest", "necktie", "tshirt", "jeans", "scarf", "gloves", "coat", "socks", "dress", "kimono", "sari", "onepieceswimsuit", "briefs", "shorts", "bikini", "foldedhands", "purse", "handbag", "clutchbag", "shoppingbags", "backpack", "thongsandal", "shoe", "runningshoe", "hikingboot", "flatsandal", "highheeledsandal", "heels", "boot", "balletshoes", "crown", "tophat", "gradcap", "billedcap", "militaryhelmet", "rescueworkerhelmet", "prayerbeads", "lipstick", "ring", "gem", "mutedspeaker", "speaker", "mediumspeaker", "loudspeaker", "megaphone", "postalhorn", "bell", "nobell", "musicscore", "musicalnote", "studiomicrophone", "levelslider", "controlknobs", "radio", "banjo", "mobilephone", "phonearrow", "telephone", "pager", "fax", "battery", "lowbattery", "electricplug", "computer", "desktop", "printer", "keyboardobj", "computermouse", "trackball", "disk", "floppy", "cd", "dvd", "abacus", "moviecamera", "filmframes", "projector", "televisin", "cameraphoto", "camerawithflash", "videocamera", "vhs", "mag", "magleft", "candle", "bulb", "flashlight", "lantern", "diyalamp", "notebookdecorative", "closedbook", "openbook", "greenbook", "bluebook", "orangebook", "books", "notebook", "ledger", "pagewithcurl", "scroll", "pagebookmark", "newspaper", "rollednewspaper", "bookmarktabs", "bookmark", "label", "moneybag", "coin", "yen", "dollar", "euro", "pound", "moneywings", "creditcard", "receipt", "chartincrease", "chartdecrease", "envelopearrow", "email", "incomingenvelope", "envelopearrowdown", "outboxtray", "inboxtray", "parcel", "mailbox", "mailboxclosed", "mailboxflag", "mailboxnoflag", "postbox", "ballotbox", "pencil", "blacknib", "fountainpen", "pen", "paintbrush", "crayon", "memo", "briefcase", "filefolder", "openfolder", "dividers", "calendar", "tearoffcalendar", "spiralnotebook", "spiralcalendar", "cardindex", "chartincreasing", "chartdecreasing", "bargraph", "clipboard", "pushpin", "roundpin", "paperclip", "linkedpaperclips", "straightruler", "triangularruler", "scissors", "cardfilebox", "filing", "wastebasket", "locked", "unlocked", "lockedwithpen", "lockedwithkey", "key", "oldkey", "hammer", "axe", "pick", "hammerandpick", "hammerwrench", "dagger", "swords", "pistol", "boomerangobj", "bowwitharrow", "shield", "carpentrysaw", "wrench", "screwdriver", "nutandbolt", "gear", "clamp", "balancescale", "whitecane", "link", "chains", "hook", "toolbox", "magnet", "ladder", "alembic", "testtube", "petridish", "dna", "microscope", "telescope", "satelliteantenna", "syringe", "dropofblood", "pill", "adhesivebandage", "crutch", "stethoscope", "xray", "door", "elevator", "mirror", "window", "sofaandlamp", "chair", "toilet", "plunger", "shower", "bathtub", "mousetrap", "razor", "lotionbottle", "safetypin", "broom", "basket", "rollofpaper", "bucket", "soap", "bubbles", "toothbrush", "sponge", "fireextinguisher", "shoppingcart", "cigarette", "coffin", "headstone", "funeralurn", "nazaramulet", "hamsa", "moai", "placard", "identificationcard"] }, "symbols" => { description: "Symbols", emotes: ["atm", "litersign", "potablewater", "wheelchairsymbol", "mensroom", "womensroom", "restroom", "babysymbol", "wc", "passportcontrol", "customs", "baggageclaim", "leftluggage", "warning", "childcrossing", "noentry", "prohibited", "nobicycles", "nosmoking", "nolittering", "nonpotable", "nopedestrians", "nophone", "eighteenplus", "up", "upright", "right", "downright", "down", "downleft", "left", "upleft", "updown", "leftright", "leftcurve", "rightcurve", "rightarrowcurving", "leftarrowcurving", "clockwise", "counterclockwise", "back", "end", "on", "soon", "top", "placeofreligion", "om", "starofdavid", "wheelofdharma", "yinyang", "latincross", "orthodoxcross", "starandcrescent", "peaceandlove", "menorah", "sixpointedstar", "khanda", "aries", "taurus", "gemini", "cancer", "leo", "virgo", "libra", "scorpius", "sagittarius", "capricorn", "aquarius", "pisces", "ophiuchus", "shuffletracks", "repeat", "repeatone", "playbtn", "fastforward", "nexttrack", "playorpause", "reverse", "rewind", "lasttrack", "upbutton", "fastup", "downbutton", "fastdown", "pausebutton", "stopbutton", "recordbutton", "ejectbutton", "cinema", "lowbrightness", "highbrightness", "signalstrength", "wireless", "vibration", "phoneoff", "female", "male", "transgender", "multiply", "plus", "minus", "divide", "heavyequals", "infinity", "bangbang", "interrobang", "question", "greyquestion", "exclamation", "greyexclamation", "wavy", "currencyexchange", "heavydollar", "medicalymbol", "recycle", "fleurdelis", "trident", "namebadge", "beginner", "hollowredcircle", "checkmark", "checkmarkbox", "checkmarkbtn", "crossmark", "crossbtn", "curlloop", "doublecurl", "partalt", "eightspoke", "eightpointedstar", "sparkle", "copyright", "registered", "trademark", "keycap", "keycapzero", "keycapone", "keycaptwo", "keycapthree", "keycapfour", "keycapfive", "keycapsix", "keycapseven", "keycapeight", "keycapnine", "keycapten", "hundredpoints", "inputlatinuppercase", "inputlatinlowercase", "inputnumbers", "inputsymbols", "inputlatinletters", "ablood", "abblood", "bblood", "cl", "cool", "free", "information", "id", "circledm", "new", "ng", "oblood", "ok", "parking", "sos", "upexclamation", "vs", "kana", "pointingup", "u5272", "u5408", "u55b6", "u6307", "u6708", "u6709", "u6e80", "u7121", "u7533", "u7981", "u7a7a", "accept", "redsquare", "orangesquare", "yellowsquare", "greensquare", "bluesquare", "purplesquare", "brownsquare", "blacklargesquare", "whitelargesquare", "blackmediumsquare", "whitemediumsquare", "blackmedimsmallesquare", "whitemediusmallesquare", "blacksmallsquare", "whitesmallsquare", "largeorgdiamond", "largebluediamond", "smallorgdiamond", "smallbluediamond", "redtriup", "redtridown", "diamondorange", "radiobtn", "whitesqbtn", "blacksqbtn", "chequeredflag", "triangularflag", "crossedflags", "blackflag", "whiteflag", "rainbowflag", "transgenderflag", "pirateflag"] }, "flags" => { description: "Flags", emotes: ["ascensionisland", "andorra", "uae", "afghanistan", "antiguabarbuda", "anguilla", "albania", "armenia", "angola", "antarctica", "argentina", "americansamoa", "austria", "australia", "aruba", "alandislands", "azerbaijan", "bosniaherz", "barbados", "bangladesh", "belgium", "burkinafaso", "bulgaria", "bahrain", "burundi", "benin", "stbarts", "bermuda", "brunei", "bolivia", "caribnetherlands", "brazil", "bahamas", "bhutan", "bouvetisland", "botswana", "belarus", "belize", "canada", "cocosislands", "congokinshasa", "centralafrican", "congobrazzaville", "switzerland", "ivorycoast", "cookislands", "chile", "cameroon", "china", "colombia", "clipperton", "costarica", "cuba", "capeverde", "curacao", "christmasisland", "cyprus", "czechia", "germany", "diegogarcia", "djibouti", "denmark", "dominica", "dominicanrep", "algeria", "ceutamelilla", "ecuador", "estonia", "egypt", "westernsahara", "eritrea", "spain", "ethiopia", "eu", "finland", "fiji", "falklands", "micronesia", "faroeislands", "france", "gabon", "uk", "grenada", "georgia", "frenchguiana", "guernsey", "ghana", "gibraltar", "greenland", "gambia", "guinea", "guadeloupe", "equatorialguinea", "greece", "southgeorgia", "guatemala", "guam", "guineabissau", "guyana", "hongkong", "heardmcdonald", "honduras", "croatia", "haiti", "hungary", "canaryislands", "indonesia", "ireland", "israel", "isleofman", "india", "britishindianocean", "iraq", "iran", "iceland", "italy", "jersey", "jamaica", "jordan", "japan", "kenya", "kyrgyzstan", "cambodia", "kiribati", "comoros", "stkittsnevis", "northkorea", "southkorea", "kuwait", "caymanislands", "kazakhstan", "laos", "lebanon", "stlucia", "liechtenstein", "srilanka", "liberia", "lesotho", "lithuania", "luxembourg", "latvia", "libya", "morocco", "monaco", "moldova", "montenegro", "stmartin", "madagascar", "marshallislands", "macedonia", "mali", "myanmar", "mongolia", "macau", "northernmariana", "martinique", "mauritania", "montserrat", "malta", "mauritius", "maldives", "malawi", "mexico", "malaysia", "mozambique", "namibia", "newcaledonia", "niger", "norfolkisland", "nigeria", "nicaragua", "netherlands", "norway", "nepal", "nauru", "niue", "newzealand", "oman", "panama", "peru", "frenchpolynesia", "papuanewguinea", "philippines", "pakistan", "poland", "stpierremiq", "pitcairnislands", "puertorico", "palestinianterritories", "portugal", "palau", "paraguay", "qatar", "reunion", "romania", "serbia", "russia", "rwanda", "saudiarabia", "solomonislands", "seychelles", "sudan", "sweden", "singapore", "sthelena", "slovenia", "svalbardjanmayen", "slovakia", "sierraleone", "sanmarino", "senegal", "somalia", "suriname", "southsudan", "saotomeprincipe", "elsalvador", "sintmaarten", "syria", "eswatini", "tristanda", "turkscaicos", "chad", "frenchsouthern", "togo", "thailand", "tajikistan", "tokelau", "timorleste", "turkmenistan", "tunisia", "tonga", "turkey", "trinidadtobago", "tuvalu", "taiwan", "tanzania", "ukraine", "uganda", "usoutlyingislands", "un", "us", "uruguay", "uzbekistan", "vaticancity", "stvincentgren", "venezuela", "britishvirginislands", "usvirginislands", "vietnam", "vanuatu", "wallisfutuna", "samoa", "kosovo", "yemen", "mayotte", "southafrica", "zambia", "zimbabwe", "england", "scotland", "wales"] } }.freeze
- CONFIG_DIR =
File.("~/.config/rage_flip")
- JSON_CONFIG_FILE =
File.join(CONFIG_DIR, "emote.json")
- YAML_CONFIG_FILE =
File.join(CONFIG_DIR, "emote.yml")
Class Method Summary collapse
- .all_emotes ⇒ Object
-
.category_names ⇒ Object
Get all category names.
- .custom_config_path ⇒ Object
-
.emoji_only?(value) ⇒ Boolean
Check if an emote value contains only emoji (no ASCII art or text).
-
.emoji_only_emotes ⇒ Object
Get all emoji-only emotes.
- .emote_exists?(name) ⇒ Boolean
- .emote_names ⇒ Object
-
.find_emote_combination(name, start = 0, memo = {}) ⇒ Object
Find a valid combination of emoji-only emotes that match the compound name.
-
.get_category_emotes(category_name) ⇒ Object
Get emotes for a specific category.
- .init_custom_config ⇒ Object
-
.list_categories ⇒ Object
List all categories with their descriptions.
-
.list_category(category_name) ⇒ Object
List emotes in a specific category.
- .list_custom_emotes ⇒ Object
- .list_emotes ⇒ Object
- .load_custom_emotes ⇒ Object
- .process(emote_name) ⇒ Object
- .refresh_emotes ⇒ Object
-
.show_help ⇒ Object
Show help text.
-
.split_compound_emote(compound_name) ⇒ Object
Try to split a compound emote name into parts Returns an array of emote values if successful, nil otherwise.
Class Method Details
.all_emotes ⇒ Object
1907 1908 1909 |
# File 'lib/rage_flip/emote.rb', line 1907 def self.all_emotes @all_emotes ||= EMOTES.merge(load_custom_emotes) end |
.category_names ⇒ Object
Get all category names
2059 2060 2061 |
# File 'lib/rage_flip/emote.rb', line 2059 def self.category_names CATEGORIES.keys end |
.custom_config_path ⇒ Object
1881 1882 1883 1884 1885 |
# File 'lib/rage_flip/emote.rb', line 1881 def self.custom_config_path return JSON_CONFIG_FILE if File.exist?(JSON_CONFIG_FILE) return YAML_CONFIG_FILE if File.exist?(YAML_CONFIG_FILE) nil end |
.emoji_only?(value) ⇒ Boolean
Check if an emote value contains only emoji (no ASCII art or text)
1917 1918 1919 1920 1921 |
# File 'lib/rage_flip/emote.rb', line 1917 def self.emoji_only?(value) # Remove all emoji and see if anything is left (besides spaces) # This regex matches emoji characters value.gsub(/[\p{Emoji}\p{Emoji_Presentation}\p{Emoji_Modifier}\p{Emoji_Component}]/, '').strip.empty? end |
.emoji_only_emotes ⇒ Object
Get all emoji-only emotes
1924 1925 1926 |
# File 'lib/rage_flip/emote.rb', line 1924 def self.emoji_only_emotes @emoji_only_emotes ||= all_emotes.select { |name, value| emoji_only?(value) } end |
.emote_exists?(name) ⇒ Boolean
2050 2051 2052 |
# File 'lib/rage_flip/emote.rb', line 2050 def self.emote_exists?(name) all_emotes.key?(name.downcase) end |
.emote_names ⇒ Object
2054 2055 2056 |
# File 'lib/rage_flip/emote.rb', line 2054 def self.emote_names all_emotes.keys end |
.find_emote_combination(name, start = 0, memo = {}) ⇒ Object
Find a valid combination of emoji-only emotes that match the compound name
1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 |
# File 'lib/rage_flip/emote.rb', line 1944 def self.find_emote_combination(name, start = 0, memo = {}) return [] if start >= name.length return memo[[name, start]] if memo.key?([name, start]) # Try each emoji-only emote starting at this position emoji_only_emotes.each do |emote_name, emote_value| next unless name[start..-1].start_with?(emote_name) rest_start = start + emote_name.length if rest_start >= name.length # We've matched the entire string memo[[name, start]] = [emote_value] return [emote_value] end # Try to match the rest rest = find_emote_combination(name, rest_start, memo) if rest result = [emote_value] + rest memo[[name, start]] = result return result end end memo[[name, start]] = nil nil end |
.get_category_emotes(category_name) ⇒ Object
Get emotes for a specific category
2079 2080 2081 2082 2083 2084 2085 2086 |
# File 'lib/rage_flip/emote.rb', line 2079 def self.get_category_emotes(category_name) category = CATEGORIES[category_name.downcase] return [] unless category emotes = category[:emotes] # Filter to only include emotes that actually exist emotes.select { |name| EMOTES.key?(name) } end |
.init_custom_config ⇒ Object
2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 |
# File 'lib/rage_flip/emote.rb', line 2028 def self.init_custom_config FileUtils.mkdir_p(CONFIG_DIR) unless Dir.exist?(CONFIG_DIR) if File.exist?(JSON_CONFIG_FILE) || File.exist?(YAML_CONFIG_FILE) existing_file = File.exist?(JSON_CONFIG_FILE) ? JSON_CONFIG_FILE : YAML_CONFIG_FILE return "Custom emote config already exists: #{existing_file}" end # Create a sample JSON config file sample_config = { "example" => "This is an example custom emote", "heart" => "❤️", "wave" => "👋" } File.write(JSON_CONFIG_FILE, JSON.pretty_generate(sample_config)) refresh_emotes "Custom emote config initialized: #{JSON_CONFIG_FILE}\n" + "Edit this file to add your custom emotes, then use 'emote list-custom' to see them." end |
.list_categories ⇒ Object
List all categories with their descriptions
2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 |
# File 'lib/rage_flip/emote.rb', line 2064 def self.list_categories output = ["Available categories:", ""] max_name_length = CATEGORIES.keys.map(&:length).max CATEGORIES.each do |name, info| count = get_category_emotes(name).length output << " #{name.ljust(max_name_length + 2)} - #{info[:description]} (#{count} emotes)" end output << "" output << "Use 'emote category <name>' to see emotes in a specific category" output.join("\n") end |
.list_category(category_name) ⇒ Object
List emotes in a specific category
2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 |
# File 'lib/rage_flip/emote.rb', line 2089 def self.list_category(category_name) category_name = category_name.downcase category = CATEGORIES[category_name] unless category return "Unknown category: #{category_name}\n\n" + list_categories end emotes = get_category_emotes(category_name) if emotes.empty? return "No emotes found in category: #{category_name}" end output = ["#{category[:description]}:", ""] # Sort emotes by name for better organization sorted_emotes = emotes.sort.map { |name| [name, EMOTES[name]] } # Calculate max name length for better alignment max_name_length = sorted_emotes.map { |name, _| name.length }.max sorted_emotes.each do |name, emote| output << " #{name.ljust(max_name_length + 2)} - #{emote}" end output.join("\n") end |
.list_custom_emotes ⇒ Object
2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 |
# File 'lib/rage_flip/emote.rb', line 2001 def self.list_custom_emotes custom_emotes = load_custom_emotes if custom_emotes.empty? return "No custom emotes found. Use 'emote init-custom' to create a custom emote config file." end output = ["Custom emotes:"] # Sort emotes by name for better organization sorted_emotes = custom_emotes.sort_by { |name, _| name } # Calculate max name length for better alignment max_name_length = sorted_emotes.map { |name, _| name.length }.max sorted_emotes.each do |name, emote| output << " #{name.ljust(max_name_length + 2)} - #{emote}" end config_path = custom_config_path if config_path output << "" output << "Config file: #{config_path}" end output.join("\n") end |
.list_emotes ⇒ Object
1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 |
# File 'lib/rage_flip/emote.rb', line 1987 def self.list_emotes output = ["Available emotes:"] # Sort emotes by name for better organization sorted_emotes = all_emotes.sort_by { |name, _| name } # Calculate max name length for better alignment max_name_length = sorted_emotes.map { |name, _| name.length }.max sorted_emotes.each do |name, emote| output << " #{name.ljust(max_name_length + 2)} - #{emote}" end output.join("\n") end |
.load_custom_emotes ⇒ Object
1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 |
# File 'lib/rage_flip/emote.rb', line 1887 def self.load_custom_emotes config_path = custom_config_path return {} unless config_path begin content = File.read(config_path) case File.extname(config_path) when '.json' JSON.parse(content) when '.yml', '.yaml' YAML.safe_load(content) || {} else {} end rescue => e puts "Warning: Failed to load custom emotes from #{config_path}: #{e.}" {} end end |
.process(emote_name) ⇒ Object
1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 |
# File 'lib/rage_flip/emote.rb', line 1972 def self.process(emote_name) emote_name = emote_name.downcase # First check if it exists as-is if all_emotes.key?(emote_name) return all_emotes[emote_name] end # Try to split as compound emote compound_result = split_compound_emote(emote_name) return compound_result.join('') if compound_result nil end |
.refresh_emotes ⇒ Object
1911 1912 1913 1914 |
# File 'lib/rage_flip/emote.rb', line 1911 def self.refresh_emotes @all_emotes = nil @emoji_only_emotes = nil end |
.show_help ⇒ Object
Show help text
2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 |
# File 'lib/rage_flip/emote.rb', line 2118 def self.show_help <<~HELP Usage: emote [command] [arguments] Commands: emote - List all available emotes emote list - List all available emotes emote categories - List all emote categories emote category <name> - List emotes in a specific category emote list-custom - List custom emotes emote init-custom - Initialize custom emote config file emote help - Show this help message emote <name> [<name>...] - Output one or more emotes (copies to clipboard) Examples: emote smile - Output 😄 emote pizza beer - Output 🍕🍺 emote categories - Show all categories emote category food - Show all food emotes Categories: custom, keyboard, smileys, animals, combined, food, activity, travel, objects, symbols, flags Compound Emotes: You can combine emoji-only emotes by using hyphens or concatenating names: emote cat-poop - Output 🐱💩 emote catpoop - Output 🐱💩 HELP end |
.split_compound_emote(compound_name) ⇒ Object
Try to split a compound emote name into parts Returns an array of emote values if successful, nil otherwise
1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 |
# File 'lib/rage_flip/emote.rb', line 1930 def self.split_compound_emote(compound_name) # First try splitting by hyphen if compound_name.include?('-') parts = compound_name.split('-') results = parts.map { |part| all_emotes[part] } return results if results.all? && results.all? { |r| emoji_only?(r) } end # Try to find a combination of emoji-only emotes without separator # Use dynamic programming to find valid splits return find_emote_combination(compound_name) end |