Skip to content

ๅผ•่จ€ โ€‹

ๅœจๆ•ฐๅญ—ๆ—ถไปฃ๏ผŒ่Šๅคฉๅทฒ็ปๆˆไธบๆˆ‘ไปฌ็”Ÿๆดป็š„ไธ€้ƒจๅˆ†๏ผŒ่€ŒEmoji่กจๆƒ…ๅˆ™ๆ˜ฏๆˆ‘ไปฌ่กจ่พพๆƒ…ๆ„Ÿๅ’Œๆƒ…็ปช็š„้‡่ฆๆ–นๅผไน‹ไธ€ใ€‚ๆ‰€ไปฅ๏ผŒไธบไป€ไนˆไธๆŠŠ่ฟ™ไบ›ๅฏ็ˆฑ็š„ๅฐๅ›พๆ ‡่žๅ…ฅไฝ ็š„่Šๅคฉๅฎคใ€้กน็›ฎไธญๅ‘ข๐Ÿ˜๐Ÿคฉ๏ผŸ

็บฟไธŠไฝ“้ชŒ โ€‹

่Šๅคฉๅฎคๆญๅปบๅ‚่€ƒ๏ผšๅณๆ—ถ้€š่ฎฏ่ฝปๆพๅฎž็Žฐ๏ผšWebSocketใ€Vue 3 ๅ’Œ Node.js ็ผ”้€ ็š„ๅคšไบบๅฎžๆ—ถไบคๆตๅนณๅฐ

ไฝ“้ชŒๅœฐๅ€โœ๏ผšxioayi
ๆ•ˆๆžœๅฆ‚ไธ‹ emoji.gif

ๆ•ดไฝ“ๅฎž็Žฐๆ€่ทฏ โ€‹

  • ็‰ฉๆ–™็š„่Žทๅ–(emoji)
  • ๅฐ่ฃ…ไธ€ไธชemoji็ป„ไปถ(ๆœ€่ฟ‘ไฝฟ็”จใ€่กจๆƒ…ๅˆ†็ฑป)
  • ็ป†่Š‚ๅค„็†(ๅฆ‚ๅ…‰ๆ ‡ๅค„ๆ’ๅ…ฅ๏ผŒ้€‰ๆ‹ฉๅŽๆ’ๅ…ฅ็ญ‰)
  • ๅœจ่Šๅคฉๅฎคๅ…ทไฝ“ไฝฟ็”จ(้€‰ๆ‹ฉ่กจๆƒ…ใ€ๆ’ๅ…ฅ่พ“ๅ…ฅๆก†ใ€้กต้ขๅฑ•็คบ)

็‰ฉๆ–™่Žทๅ– โ€‹

ไธ‹้ข่ฟ™ไธคไธช็ฝ‘็ซ™้ƒฝๆ˜ฏๅฏไปฅๅ…่ดน่Žทๅ–็š„๏ผŒcopyๅ–œๆฌข็š„่กจๆƒ… yyds๏ผ๏ผ๏ผ ๐Ÿ˜€,๐Ÿ˜„,๐Ÿ˜,๐Ÿ˜†,๐Ÿ˜…,๐Ÿคฃ,๐Ÿ˜‚

  1. ็ฌฆๅทๅคงๅ…จ
  2. emojiall

ๅฐ่ฃ…ไธ€ไธชemoji็ป„ไปถ โ€‹

ๅค„็†emoji่กจๆƒ… โ€‹

  • ่ฟ™้‡Œ้œ€่ฆๅฐ่ฃ…ไธ€ไธช่พ…ๅŠฉๅ‡ฝๆ•ฐๆฅๅธฎๆˆ‘ไปฌ่ฝฌๆˆๆ•ฐ็ป„่ฟ›่กŒๅญ˜ๅ‚จ
typescript
/**
 * 
 * @param inputs ๅ‚ๆ•ฐไธ€ไธชๆˆ–ๅคšไธชๅญ—็ฌฆไธฒ
 * @returns ่ฟ”ๅ›žไบŒ็ปดๆ•ฐ็ป„
 */
function splitEmoji(...inputs: string[]): string[][] {
  const emojiRegex: RegExp = /\p{Emoji}/u;
  const emojiArrays: string[][] = [];

  inputs.forEach((input) => {
    const emojiArray: string[] = [];
    for (const char of input) {
      if (emojiRegex.test(char)) {
        emojiArray.push(char);
      }
    }
    emojiArrays.push(emojiArray);
  });

  return emojiArrays;
}

ๅฐ่ฃ…emoji็ป„ไปถ โ€‹

  1. ๆ‹ฟๅˆฐๅค„็†ๅฅฝ็š„emojiๆ•ฐๆฎ**{type:xxx,value:['๐Ÿ‰','๐ŸŠ','๐Ÿ‹','๐ŸŒ']}**
  2. ๆ นๆฎprops.all ๅˆคๆ–ญ่ฆๅฑ•็คบ็š„็ฑปๅˆซ๏ผŒๅนถ่ฟ›่กŒๆธฒๆŸ“
  3. ๅค„็†ไบคไบ’๏ผš็‚นๅ‡ปๆŸไธ€่กจๆƒ…๏ผŒๅฐฑๆŠŠๅฎƒไผ ็ป™็ˆถ็ป„ไปถ๏ผŒๅนถ่ฎกๅ…ฅๆœ€่ฟ‘ไฝฟ็”จๅˆ—่กจ
vue
<template>
  <div class="emoji">
    <div v-if="emoji.historyList?.length">
      <p>ๆœ€่ฟ‘ไฝฟ็”จ</p>
      <ul class="history" :class="emoji.historyList?.length ? 'historyShow' : ''">
        <li v-for="(item, index) in [...new Set(emoji.historyList)]" :key="index" @click.stop="chooseEmojiDefault(item)"
          v-html="item"></li>
      </ul>
    </div>
    <div v-for="items in emojiObj" :key="items.name">
      <template v-if="items.name && items.value?.length">
        <p>{{ items.name }}</p>
        <ul class="default">
          <li v-for="(item, index) in items.value" :key="index" @click.stop="chooseEmojiDefault(item)" v-html="item"></li>
        </ul>
      </template>
    </div>
  </div>
</template>

<script lang="ts" setup>
import { ref, reactive } from "vue";
import { getAllTypeEmojis } from './utils'

const emit = defineEmits(["emojiHandle"]);
const props = defineProps({
  all: {
    type: Boolean,
    default: false
  }
})

const res = getAllTypeEmojis()
const emojiObj = ref({})

if (props.all) {
  emojiObj.value = res
} else {
  emojiObj.value = {
    defEmojis: res.defEmojis
  }
}
const emoji = reactive({
  chooseItem: "",
  historyList: [],
  allEmoji: emojiObj.value,
});
const chooseEmojiDefault = (item: string) => {
  emoji.chooseItem = item;
  emoji.historyList.unshift(item);
  emit("emojiHandle", item);
  return item;
};
</script>

<style lang="less" scoped>
</style>

่Šๅคฉๅฎคไธญไฝฟ็”จ่กจๆƒ… โ€‹

่ฟ™้‡Œๆœ‰ไธคไธชๅ…ณ้”ฎ็‚น๏ผšๆ’ๅ…ฅไฝ็ฝฎ่ฎฐๅฝ•ใ€ๆ’ๅ…ฅๅญ—็ฌฆไธฒๆ‹ผๆŽฅ

  • ๆ’ๅ…ฅไฝ็ฝฎๅณๅ…‰ๆ ‡ๆ‰€ไฝ็ฝฎ
  • ๅญ—็ฌฆไธฒๆ‹ผๆŽฅ๏ผšๆˆชๅ–ๅ…‰ๆ ‡ๅ‰ๅญ—็ฌฆ+่กจๆƒ…+ๅ…‰ๆ ‡ๅŽๅญ—็ฌฆ

inputไธญๅ…‰ๆ ‡ไฝ็ฝฎ็š„่Žทๅ– โ€‹

  • domๆœ‰ไธคไธชๅฑžๆ€ง๏ผšselectionEndๅ’ŒselectionStart ๅˆ†ๅˆซไปฃ่กจๅ…‰ๆ ‡่ตทๅง‹ไฝ็ฝฎ
  • ่ฎฐๅฝ•ๅ…‰ๆ ‡็ป“ๆŸไฝ็ฝฎ๏ผŒ็ญ‰ไธ‹้€‰ๆ‹ฉไบ†ๅฅฝๆ’ๅ…ฅ ๅ…‰ๆ ‡ๅฑ•็คบไฝ็ฝฎ.gif
javascript
/**
 * ่Žทๅ–ๅ…‰ๆ ‡็š„่ตทๅง‹ไฝ็ฝฎ
 */
const selectEmoji = () => {
  const Textarea = document.querySelector(".message-input");
  console.log(Textarea?.selectionStart,Textarea?.selectionEnd)
};

้€‰ๆ‹ฉ่กจๆƒ…ๅค„็† โ€‹

  1. ๆ‹ฟๅˆฐ้€‰ๆ‹ฉ่กจๆƒ…
  2. ๆ’ๅ…ฅๅนถๆ‹ผๆŽฅๅญ—็ฌฆไธฒ๏ผš ๆˆชๅ–ๅ…‰ๆ ‡ๅ‰ๅญ—็ฌฆ+่กจๆƒ…+ๅ…‰ๆ ‡ๅŽๅญ—็ฌฆ ่กจๆƒ…ๆ’ๅ…ฅ.gif
javascript
/**
 * ้€‰ๆ‹ฉ่กจๆƒ…๏ผŒๅนถๆŠŠ่กจๆƒ…ๆ’ๅ…ฅ่พ“ๅ…ฅๆก†
 * @param {*} item ้€‰ๆ‹ฉ็š„่กจๆƒ…
 */
const emojiHandle = (item) => {
  const msg = message.value;
  if (!cursor.value) {
    message.value += item;
  } else {
    message.value = msg.slice(0, cursor.value) + item + msg.slice(cursor.value);
  }
};

ๅฎŒๆ•ดไปฃ็  โ€‹

ไป“ๅบ“ๅœฐๅ€xiaoyi1255image.png

  • emoji็ป„ไปถไธ€ๅ…ฑไธ‰ไธชๆ–‡ไปถ๏ผš utils.tsใ€emojis.jsใ€index.vue
  • test.vue ไฝฟ็”จ็คบไพ‹
  1. utils.ts
typescript
import {
  defEmojis,
  allEmojis,
  expressionEmojis,
  animalEmojis,
  personEmojis,
  guestrueEmojis,
  publicEmojis,
  twelveEmojis,
} from './emojis'

/**
 * 
 * @param inputs ๅ‚ๆ•ฐไธ€ไธชๆˆ–ๅคšไธชๅญ—็ฌฆไธฒ
 * @returns ่ฟ”ๅ›žไบŒ็ปดๆ•ฐ็ป„
 */
function splitEmoji(...inputs: string[]): string[][] {
  const emojiRegex: RegExp = /\p{Emoji}/u;
  const emojiArrays: string[][] = [];

  inputs.forEach((input) => {
    const emojiArray: string[] = [];
    for (const char of input) {
      if (emojiRegex.test(char)) {
        emojiArray.push(char);
      }
    }
    emojiArrays.push(emojiArray);
  });

  return [...new Set(emojiArrays)];
}

/**
 * 
 * @returns ่กจๆƒ…ๅฏน่ฑก allEmojis,expressionEmojis,animalEmojis,personEmojis,guestrueEmojis,publicEmojis,twelveEmojis
 */
const getAllTypeEmojis = () => {
  const emojiArr = splitEmoji(allEmojis,expressionEmojis,animalEmojis,personEmojis,guestrueEmojis,publicEmojis,twelveEmojis,defEmojis)
  
  const emojiObj = {
    defEmojis: {name:"้ป˜่ฎค่กจๆƒ…", value:emojiArr[7]},
    guestrueEmojis: {name:"ๆ‰‹ๅŠฟ่กจๆƒ…", value:emojiArr[4]},
    publicEmojis: {name:"ๅ…ฌๅ…ฑ่กจๆƒ…", value:emojiArr[5]},
    expressionEmojis: {name:"่„ธ้ƒจ่กจๆƒ…", value:emojiArr[1]},
    animalEmojis: {name:"ๅŠจ็‰ฉ่กจๆƒ…", value:emojiArr[2]},
    personEmojis: {name:"ไบบ็‰ฉ่กจๆƒ…", value:emojiArr[3]},
    twelveEmojis: {name: "12็”Ÿ่‚–", value: emojiArr[6]},
    allEmojis: {name:"ๆ‰€ๆœ‰่กจๆƒ…", value:emojiArr[0]},
  }
  return emojiObj

}
const emojiMap = {
  defEmojis: '้ป˜่ฎค่กจๆƒ…',
  allEmojis: 'ๆ‰€ๆœ‰่กจๆƒ…',
  expressionEmojis: '่„ธ้ƒจ่กจๆƒ…',
  animalEmojis: 'ๅŠจ็‰ฉ่กจๆƒ…',
  personEmojis: "ไบบ็‰ฉ่กจๆƒ…",
  guestrueEmojis: 'ๆ‰‹ๅŠฟ่กจๆƒ…',
  publicEmojis: 'ๅ…ฌๅ…ฑ่กจๆƒ…',
  twelveEmojis: '12็”Ÿ่‚–',
}
export {
  getAllTypeEmojis,
  emojiMap
}
  1. emojis.js
javascript
/**
 * ่ฟ™้‡Œๅญ˜ๆ”พๆ‰€ไปฅEmoji็‰ฉๆ–™
 */
// ้ป˜่ฎค
const defEmojis = "๐Ÿ˜€,๐Ÿ˜„,๐Ÿ˜,๐Ÿ˜†,๐Ÿ˜…,๐Ÿคฃ,๐Ÿ˜‚,๐Ÿ™‚,๐Ÿ™ƒ,๐Ÿ˜‰,๐Ÿ˜Š,๐Ÿ˜‡,๐Ÿ˜•,๐Ÿ˜Ÿ,๐Ÿ™,โ˜น,๐Ÿ˜ฎ,๐Ÿ˜ฏ,๐Ÿ˜ฒ,๐Ÿ˜ณ,๐Ÿฅบ,๐Ÿ˜ฆ,๐Ÿ˜ง,๐Ÿ˜จ,๐Ÿ˜ฐ,๐Ÿ˜ฅ,๐Ÿ˜ข,๐Ÿ˜ญ,๐Ÿ˜ฑ,๐Ÿ˜–,๐Ÿ˜ฃ,๐Ÿ˜ž,๐Ÿ˜“,๐Ÿ˜ฉ,๐Ÿ˜ซ,๐Ÿฅฑ,๐Ÿ˜ค,๐Ÿ˜ก,๐Ÿ˜ ,๐Ÿคฌ,๐Ÿ˜ˆ,๐Ÿ‘ฟ,๐Ÿ’€,โ˜ ,๐Ÿ’ฉ,๐Ÿคก,๐Ÿ‘น,๐Ÿ‘บ,๐Ÿ‘ป,๐Ÿ‘ฝ,๐Ÿ‘พ,๐Ÿค–,๐Ÿ˜บ,๐Ÿ˜ธ,๐Ÿ˜น,๐Ÿ˜ป,๐Ÿ˜ผ,๐Ÿ˜ฝ,๐Ÿ™€,๐Ÿ˜ฟ,๐Ÿ˜พ,๐Ÿ™ˆ,๐Ÿ™‰,๐Ÿ™Š,๐Ÿ’Œ,๐Ÿ’˜,๐Ÿ’,๐Ÿ’–,๐Ÿ’—,๐Ÿ’“,๐Ÿ’ž,๐Ÿ’•,๐Ÿ’Ÿ,โฃ,๐Ÿ’”,โค๏ธโ€๐Ÿ”ฅ,โค๏ธโ€๐Ÿฉน,โค,๐Ÿงก,๐Ÿ’จ,๐Ÿ’ฆ,๐Ÿ’ซ,๐Ÿ’‹,๐Ÿ’ฏ,โคโ€๐Ÿฉน,โคโ€๐Ÿ”ฅ,๐Ÿฅต,๐Ÿคง,๐Ÿคฎ,๐Ÿคข,๐Ÿค•,๐Ÿค’,๐Ÿ˜ท,๐Ÿ˜ด,๐Ÿคค,๐Ÿคฏ,๐Ÿค ,๐Ÿฅณ,๐Ÿฅธ,๐Ÿ˜Ž,๐Ÿค“,๐Ÿง,๐Ÿ˜’,๐Ÿ˜,๐Ÿคญ,๐Ÿ˜˜,๐Ÿคฉ,๐Ÿ˜,๐Ÿฅฐ,๐Ÿ‘โ€๐Ÿ—จ,๐Ÿ’ค,๐Ÿ’ญ,๐Ÿ—ฏ,๐Ÿ—จ,๐Ÿ‘๏ธโ€๐Ÿ—จ๏ธ,โ˜บ,๐Ÿ˜š,๐Ÿ˜™,๐Ÿฅฒ,๐Ÿ˜‹,๐Ÿ˜›,๐Ÿ˜œ,๐Ÿคช,๐Ÿ˜,๐ŸงŽโ€โ™€๏ธ,๐ŸงŽโ€โžก๏ธ,๐Ÿ‘จ๐Ÿฟโ€๐Ÿฆผโ€โžก๏ธ,๐Ÿ’ƒ๐Ÿป,๐Ÿ‡๐Ÿป,๐Ÿคธ๐Ÿผโ€โ™€,๐Ÿ‹๐Ÿพโ€โ™‚๏ธ,๐Ÿšต๐Ÿฝโ€โ™‚,๐Ÿ›Œ๐Ÿพ,๐ŸคŸ,๐Ÿ™Ž๐Ÿผโ€โ™‚๏ธ,๐Ÿฆ,๐Ÿด,๐Ÿ—,๐ŸŽ,๐Ÿบ,๐Ÿป,๐Ÿฆ‡,๐Ÿฆƒ,๐Ÿข,๐ŸฆŽ,๐Ÿ,๐Ÿ‰,๐Ÿฆ‚,๐Ÿ‰,๐Ÿจ".replaceAll(',', '')

// ๅ…จ้ƒจ
const allEmojis = "๐Ÿ‡๐Ÿˆ๐Ÿ‰๐ŸŠ๐Ÿ‹๐ŸŒ๐Ÿ๐Ÿฅญ๐ŸŽ๐Ÿ๐Ÿ๐Ÿ‘๐Ÿ’๐Ÿ“๐Ÿซ๐Ÿฅ๐Ÿ…๐Ÿซ’๐Ÿฅฅ๐Ÿฅ‘๐Ÿ†๐Ÿฅ”๐Ÿฅ•๐ŸŒฝ๐ŸŒถ๏ธ๐Ÿซ‘๐Ÿฅ’๐Ÿฅฌ๐Ÿฅฆ๐Ÿง„๐Ÿง…๐Ÿ„๐Ÿฅœ๐ŸŒฐ๐Ÿž๐Ÿฅ๐Ÿฅ–๐Ÿซ“๐Ÿฅจ๐Ÿฅฏ๐Ÿฅž๐Ÿง‡๐Ÿง€๐Ÿ–๐Ÿ—๐Ÿฅฉ๐Ÿฅ“๐Ÿ”๐ŸŸ๐Ÿ•๐ŸŒญ๐Ÿฅช๐ŸŒฎ๐ŸŒฏ๐Ÿซ”๐Ÿฅ™๐Ÿง†๐Ÿฅš๐Ÿณ๐Ÿฅ˜๐Ÿฒ๐Ÿซ•๐Ÿฅฃ๐Ÿฅ—๐Ÿฟ๐Ÿงˆ๐Ÿง‚๐Ÿฅซ๐Ÿฑ๐Ÿ˜๐Ÿ™๐Ÿš๐Ÿ›๐Ÿœ๐Ÿ๐Ÿ ๐Ÿข๐Ÿฃ๐Ÿค๐Ÿฅ๐Ÿฅฎ๐Ÿก๐ŸฅŸ๐Ÿฅ ๐Ÿฅก๐Ÿฆช๐Ÿฆ๐Ÿง๐Ÿจ๐Ÿฉ๐Ÿช๐ŸŽ‚๐Ÿฐ๐Ÿง๐Ÿฅง๐Ÿซ๐Ÿฌ๐Ÿญ๐Ÿฎ๐Ÿฏ๐Ÿผ๐Ÿฅ›โ˜•๐Ÿซ–๐Ÿต๐Ÿถ๐Ÿพ๐Ÿท๐Ÿธ๐Ÿน๐Ÿบ๐Ÿป๐Ÿฅ‚๐Ÿฅƒ๐Ÿฅค๐Ÿง‹๐Ÿงƒ๐Ÿง‰๐ŸงŠ๐Ÿฅข๐Ÿฝ๏ธ๐Ÿด๐Ÿฅ„๐Ÿšฃ๐Ÿ—พ๐Ÿ”๏ธโ›ฐ๏ธ๐ŸŒ‹๐Ÿ—ป๐Ÿ•๏ธ๐Ÿ–๏ธ๐Ÿœ๏ธ๐Ÿ๏ธ๐Ÿž๏ธ๐ŸŸ๏ธ๐Ÿ›๏ธ๐Ÿ—๏ธ๐Ÿ›–๐Ÿ˜๏ธ๐Ÿš๏ธ๐Ÿ ๐Ÿก๐Ÿข๐Ÿฃ๐Ÿค๐Ÿฅ๐Ÿฆ๐Ÿจ๐Ÿฉ๐Ÿช๐Ÿซ๐Ÿฌ๐Ÿญ๐Ÿฏ๐Ÿฐ๐Ÿ’’๐Ÿ—ผ๐Ÿ—ฝโ›ช๐Ÿ•Œ๐Ÿ›•๐Ÿ•โ›ฉ๏ธ๐Ÿ•‹โ›ฒโ›บ๐ŸŒ๐ŸŒƒ๐Ÿ™๏ธ๐ŸŒ„๐ŸŒ…๐ŸŒ†๐ŸŒ‡๐ŸŒ‰๐ŸŽ ๐ŸŽก๐ŸŽข๐Ÿš‚๐Ÿšƒ๐Ÿš„๐Ÿš…๐Ÿš†๐Ÿš‡๐Ÿšˆ๐Ÿš‰๐ŸšŠ๐Ÿš๐Ÿšž๐Ÿš‹๐ŸšŒ๐Ÿš๐ŸšŽ๐Ÿš๐Ÿš‘๐Ÿš’๐Ÿš“๐Ÿš”๐Ÿš•๐Ÿš–๐Ÿš—๐Ÿš˜๐Ÿš™๐Ÿ›ป๐Ÿšš๐Ÿš›๐Ÿšœ๐ŸŽ๏ธ๐Ÿ๏ธ๐Ÿ›ต๐Ÿ›บ๐Ÿšฒ๐Ÿ›ด๐Ÿš๐Ÿ›ฃ๏ธ๐Ÿ›ค๏ธโ›ฝ๐Ÿšจ๐Ÿšฅ๐Ÿšฆ๐Ÿšงโš“โ›ต๐Ÿšค๐Ÿ›ณ๏ธโ›ด๏ธ๐Ÿ›ฅ๏ธ๐Ÿšขโœˆ๏ธ๐Ÿ›ฉ๏ธ๐Ÿ›ซ๐Ÿ›ฌ๐Ÿช‚๐Ÿ’บ๐Ÿš๐ŸšŸ๐Ÿš ๐Ÿšก๐Ÿ›ฐ๏ธ๐Ÿš€๐Ÿ›ธ๐Ÿช๐ŸŒ ๐ŸŒŒโ›ฑ๏ธ๐ŸŽ†๐ŸŽ‡๐ŸŽ‘๐Ÿ’ด๐Ÿ’ต๐Ÿ’ถ๐Ÿ’ท๐Ÿ—ฟ๐Ÿ›‚๐Ÿ›ƒ๐Ÿ›„๐Ÿ›…๐Ÿ™ˆ๐Ÿ™‰๐Ÿ™Š๐Ÿ’ฅ๐Ÿ’ซ๐Ÿ’ฆ๐Ÿ’จ๐Ÿต๐Ÿ’๐Ÿฆ๐Ÿฆง๐Ÿถ๐Ÿ•๐Ÿฆฎ๐Ÿ•โ€๐Ÿฆบ๐Ÿฉ๐Ÿบ๐ŸฆŠ๐Ÿฆ๐Ÿฑ๐Ÿˆ๐Ÿˆโ€โฌ›๐Ÿฆ๐Ÿฏ๐Ÿ…๐Ÿ†๐Ÿด๐ŸŽ๐Ÿฆ„๐Ÿฆ“๐ŸฆŒ๐Ÿฆฌ๐Ÿฎ๐Ÿ‚๐Ÿƒ๐Ÿ„๐Ÿท๐Ÿ–๐Ÿ—๐Ÿฝ๐Ÿ๐Ÿ‘๐Ÿ๐Ÿช๐Ÿซ๐Ÿฆ™๐Ÿฆ’๐Ÿ˜๐Ÿฆฃ๐Ÿฆ๐Ÿฆ›๐Ÿญ๐Ÿ๐Ÿ€๐Ÿน๐Ÿฐ๐Ÿ‡๐Ÿฟ๏ธ๐Ÿฆซ๐Ÿฆ”๐Ÿฆ‡๐Ÿป๐Ÿปโ€โ„๏ธ๐Ÿจ๐Ÿผ๐Ÿฆฅ๐Ÿฆฆ๐Ÿฆจ๐Ÿฆ˜๐Ÿฆก๐Ÿพ๐Ÿฆƒ๐Ÿ”๐Ÿ“๐Ÿฃ๐Ÿค๐Ÿฅ๐Ÿฆ๐Ÿง๐Ÿ•Š๏ธ๐Ÿฆ…๐Ÿฆ†๐Ÿฆข๐Ÿฆ‰๐Ÿฆค๐Ÿชถ๐Ÿฆฉ๐Ÿฆš๐Ÿฆœ๐Ÿธ๐ŸŠ๐Ÿข๐ŸฆŽ๐Ÿ๐Ÿฒ๐Ÿ‰๐Ÿฆ•๐Ÿฆ–๐Ÿณ๐Ÿ‹๐Ÿฌ๐Ÿฆญ๐ŸŸ๐Ÿ ๐Ÿก๐Ÿฆˆ๐Ÿ™๐Ÿš๐ŸŒ๐Ÿฆ‹๐Ÿ›๐Ÿœ๐Ÿ๐Ÿชฒ๐Ÿž๐Ÿฆ—๐Ÿชณ๐Ÿ•ท๏ธ๐Ÿ•ธ๏ธ๐Ÿฆ‚๐ŸฆŸ๐Ÿชฐ๐Ÿชฑ๐Ÿฆ ๐Ÿ’๐ŸŒธ๐Ÿ’ฎ๐Ÿต๏ธ๐ŸŒน๐Ÿฅ€๐ŸŒบ๐ŸŒป๐ŸŒผ๐ŸŒท๐ŸŒฑ๐Ÿชด๐ŸŒฒ๐ŸŒณ๐ŸŒด๐ŸŒต๐ŸŒพ๐ŸŒฟโ˜˜๏ธ๐Ÿ€๐Ÿ๐Ÿ‚๐Ÿƒ๐Ÿ„๐ŸŒฐ๐Ÿฆ€๐Ÿฆž๐Ÿฆ๐Ÿฆ‘๐ŸŒ๐ŸŒŽ๐ŸŒ๐ŸŒ๐Ÿชจ๐ŸŒ‘๐ŸŒ’๐ŸŒ“๐ŸŒ”๐ŸŒ•๐ŸŒ–๐ŸŒ—๐ŸŒ˜๐ŸŒ™๐ŸŒš๐ŸŒ›๐ŸŒœโ˜€๏ธ๐ŸŒ๐ŸŒžโญ๐ŸŒŸ๐ŸŒ โ˜๏ธโ›…โ›ˆ๏ธ๐ŸŒค๏ธ๐ŸŒฅ๏ธ๐ŸŒฆ๏ธ๐ŸŒง๏ธ๐ŸŒจ๏ธ๐ŸŒฉ๏ธ๐ŸŒช๏ธ๐ŸŒซ๏ธ๐ŸŒฌ๏ธ๐ŸŒˆโ˜‚๏ธโ˜”โšกโ„๏ธโ˜ƒ๏ธโ›„โ˜„๏ธ๐Ÿ”ฅ๐Ÿ’ง๐ŸŒŠ๐ŸŽ„โœจ๐ŸŽ‹๐ŸŽ๐Ÿ˜€๐Ÿ˜ƒ๐Ÿ˜„๐Ÿ˜๐Ÿ˜†๐Ÿ˜…๐Ÿคฃ๐Ÿ˜‚๐Ÿ™‚๐Ÿ™ƒ๐Ÿ˜‰๐Ÿ˜Š๐Ÿ˜‡๐Ÿฅฐ๐Ÿ˜๐Ÿคฉ๐Ÿ˜˜๐Ÿ˜—โ˜บ๏ธ๐Ÿ˜š๐Ÿ˜™๐Ÿฅฒ๐Ÿ˜‹๐Ÿ˜›๐Ÿ˜œ๐Ÿคช๐Ÿ˜๐Ÿค‘๐Ÿค—๐Ÿคญ๐Ÿคซ๐Ÿค”๐Ÿค๐Ÿคจ๐Ÿ˜๐Ÿ˜‘๐Ÿ˜ถ๐Ÿ˜๐Ÿ˜’๐Ÿ™„๐Ÿ˜ฌ๐Ÿคฅ๐Ÿ˜Œ๐Ÿ˜”๐Ÿ˜ช๐Ÿคค๐Ÿ˜ด๐Ÿ˜ท๐Ÿค’๐Ÿค•๐Ÿคข๐Ÿคฎ๐Ÿคง๐Ÿฅต๐Ÿฅถ๐Ÿฅด๐Ÿ˜ต๐Ÿคฏ๐Ÿค ๐Ÿฅณ๐Ÿฅธ๐Ÿ˜Ž๐Ÿค“๐Ÿง๐Ÿ˜•๐Ÿ˜Ÿ๐Ÿ™โ˜น๏ธ๐Ÿ˜ฎ๐Ÿ˜ฏ๐Ÿ˜ฒ๐Ÿ˜ณ๐Ÿฅบ๐Ÿ˜ฆ๐Ÿ˜ง๐Ÿ˜จ๐Ÿ˜ฐ๐Ÿ˜ฅ๐Ÿ˜ข๐Ÿ˜ญ๐Ÿ˜ฑ๐Ÿ˜–๐Ÿ˜ฃ๐Ÿ˜ž๐Ÿ˜“๐Ÿ˜ฉ๐Ÿ˜ซ๐Ÿฅฑ๐Ÿ˜ค๐Ÿ˜ก๐Ÿ˜ ๐Ÿคฌ๐Ÿ˜ˆ๐Ÿ‘ฟ๐Ÿ’€โ˜ ๏ธ๐Ÿ’ฉ๐Ÿคก๐Ÿ‘น๐Ÿ‘บ๐Ÿ‘ป๐Ÿ‘ฝ๐Ÿ‘พ๐Ÿค–๐Ÿ˜บ๐Ÿ˜ธ๐Ÿ˜น๐Ÿ˜ป๐Ÿ˜ผ๐Ÿ˜ฝ๐Ÿ™€๐Ÿ˜ฟ๐Ÿ˜พ๐Ÿ’‹๐Ÿ‘‹๐Ÿคš๐Ÿ–๏ธโœ‹๐Ÿ––๐Ÿ‘Œ๐ŸคŒ๐ŸคโœŒ๏ธ๐Ÿคž๐ŸคŸ๐Ÿค˜๐Ÿค™๐Ÿ‘ˆ๐Ÿ‘‰๐Ÿ‘†๐Ÿ–•๐Ÿ‘‡โ˜๏ธ๐Ÿ‘๐Ÿ‘ŽโœŠ๐Ÿ‘Š๐Ÿค›๐Ÿคœ๐Ÿ‘๐Ÿ™Œ๐Ÿ‘๐Ÿคฒ๐Ÿค๐Ÿ™โœ๏ธ๐Ÿ’…๐Ÿคณ๐Ÿ’ช๐Ÿฆพ๐Ÿฆฟ๐Ÿฆต๐Ÿฆถ๐Ÿ‘‚๐Ÿฆป๐Ÿ‘ƒ๐Ÿง ๐Ÿซ€๐Ÿซ๐Ÿฆท๐Ÿฆด๐Ÿ‘€๐Ÿ‘๏ธ๐Ÿ‘…๐Ÿ‘„๐Ÿ‘ถ๐Ÿง’๐Ÿ‘ฆ๐Ÿ‘ง๐Ÿง‘๐Ÿ‘ฑ๐Ÿ‘จ๐Ÿง”๐Ÿ‘จโ€๐Ÿฆฐ๐Ÿ‘จโ€๐Ÿฆฑ๐Ÿ‘จโ€๐Ÿฆณ๐Ÿ‘จโ€๐Ÿฆฒ๐Ÿ‘ฉ๐Ÿ‘ฉโ€๐Ÿฆฐ๐Ÿง‘โ€๐Ÿฆฐ๐Ÿ‘ฉโ€๐Ÿฆฑ๐Ÿง‘โ€๐Ÿฆฑ๐Ÿ‘ฉโ€๐Ÿฆณ๐Ÿง‘โ€๐Ÿฆณ๐Ÿ‘ฉโ€๐Ÿฆฒ๐Ÿง‘โ€๐Ÿฆฒ๐Ÿ‘ฑโ€โ™€๏ธ๐Ÿ‘ฑโ€โ™‚๏ธ๐Ÿง“๐Ÿ‘ด๐Ÿ‘ต๐Ÿ™๐Ÿ™โ€โ™‚๏ธ๐Ÿ™โ€โ™€๏ธ๐Ÿ™Ž๐Ÿ™Žโ€โ™‚๏ธ๐Ÿ™Žโ€โ™€๏ธ๐Ÿ™…๐Ÿ™…โ€โ™‚๏ธ๐Ÿ™…โ€โ™€๏ธ๐Ÿ™†๐Ÿ™†โ€โ™‚๏ธ๐Ÿ™†โ€โ™€๏ธ๐Ÿ’๐Ÿ’โ€โ™‚๏ธ๐Ÿ’โ€โ™€๏ธ๐Ÿ™‹๐Ÿ™‹โ€โ™‚๏ธ๐Ÿ™‹โ€โ™€๏ธ๐Ÿง๐Ÿงโ€โ™‚๏ธ๐Ÿงโ€โ™€๏ธ๐Ÿ™‡๐Ÿ™‡โ€โ™‚๏ธ๐Ÿ™‡โ€โ™€๏ธ๐Ÿคฆ๐Ÿคฆโ€โ™‚๏ธ๐Ÿคฆโ€โ™€๏ธ๐Ÿคท๐Ÿคทโ€โ™‚๏ธ๐Ÿคทโ€โ™€๏ธ๐Ÿง‘โ€โš•๏ธ๐Ÿ‘จโ€โš•๏ธ๐Ÿ‘ฉโ€โš•๏ธ๐Ÿง‘โ€๐ŸŽ“๐Ÿ‘จโ€๐ŸŽ“๐Ÿ‘ฉโ€๐ŸŽ“๐Ÿง‘โ€๐Ÿซ๐Ÿ‘จโ€๐Ÿซ๐Ÿ‘ฉโ€๐Ÿซ๐Ÿง‘โ€โš–๏ธ๐Ÿ‘จโ€โš–๏ธ๐Ÿ‘ฉโ€โš–๏ธ๐Ÿง‘โ€๐ŸŒพ๐Ÿ‘จโ€๐ŸŒพ๐Ÿ‘ฉโ€๐ŸŒพ๐Ÿง‘โ€๐Ÿณ๐Ÿ‘จโ€๐Ÿณ๐Ÿ‘ฉโ€๐Ÿณ๐Ÿง‘โ€๐Ÿ”ง๐Ÿ‘จโ€๐Ÿ”ง๐Ÿ‘ฉโ€๐Ÿ”ง๐Ÿง‘โ€๐Ÿญ๐Ÿ‘จโ€๐Ÿญ๐Ÿ‘ฉโ€๐Ÿญ๐Ÿง‘โ€๐Ÿ’ผ๐Ÿ‘จโ€๐Ÿ’ผ๐Ÿ‘ฉโ€๐Ÿ’ผ๐Ÿง‘โ€๐Ÿ”ฌ๐Ÿ‘จโ€๐Ÿ”ฌ๐Ÿ‘ฉโ€๐Ÿ”ฌ๐Ÿง‘โ€๐Ÿ’ป๐Ÿ‘จโ€๐Ÿ’ป๐Ÿ‘ฉโ€๐Ÿ’ป๐Ÿง‘โ€๐ŸŽค๐Ÿ‘จโ€๐ŸŽค๐Ÿ‘ฉโ€๐ŸŽค๐Ÿง‘โ€๐ŸŽจ๐Ÿ‘จโ€๐ŸŽจ๐Ÿ‘ฉโ€๐ŸŽจ๐Ÿง‘โ€โœˆ๏ธ๐Ÿ‘จโ€โœˆ๏ธ๐Ÿ‘ฉโ€โœˆ๏ธ๐Ÿง‘โ€๐Ÿš€๐Ÿ‘จโ€๐Ÿš€๐Ÿ‘ฉโ€๐Ÿš€๐Ÿง‘โ€๐Ÿš’๐Ÿ‘จโ€๐Ÿš’๐Ÿ‘ฉโ€๐Ÿš’๐Ÿ‘ฎ๐Ÿ‘ฎโ€โ™‚๏ธ๐Ÿ‘ฎโ€โ™€๏ธ๐Ÿ•ต๏ธ๐Ÿ•ต๏ธโ€โ™‚๏ธ๐Ÿ•ต๏ธโ€โ™€๏ธ๐Ÿ’‚๐Ÿ’‚โ€โ™‚๏ธ๐Ÿ’‚โ€โ™€๏ธ๐Ÿฅท๐Ÿ‘ท๐Ÿ‘ทโ€โ™‚๏ธ๐Ÿ‘ทโ€โ™€๏ธ๐Ÿคด๐Ÿ‘ธ๐Ÿ‘ณ๐Ÿ‘ณโ€โ™‚๏ธ๐Ÿ‘ณโ€โ™€๏ธ๐Ÿ‘ฒ๐Ÿง•๐Ÿคต๐Ÿคตโ€โ™‚๏ธ๐Ÿคตโ€โ™€๏ธ๐Ÿ‘ฐ๐Ÿ‘ฐโ€โ™‚๏ธ๐Ÿ‘ฐโ€โ™€๏ธ๐Ÿคฐ๐Ÿคฑ๐Ÿ‘ฉโ€๐Ÿผ๐Ÿ‘จโ€๐Ÿผ๐Ÿง‘โ€๐Ÿผ๐Ÿ‘ผ๐ŸŽ…๐Ÿคถ๐Ÿง‘โ€๐ŸŽ„๐Ÿฆธ๐Ÿฆธโ€โ™‚๏ธ๐Ÿฆธโ€โ™€๏ธ๐Ÿฆน๐Ÿฆนโ€โ™‚๏ธ๐Ÿฆนโ€โ™€๏ธ๐Ÿง™๐Ÿง™โ€โ™‚๏ธ๐Ÿง™โ€โ™€๏ธ๐Ÿงš๐Ÿงšโ€โ™‚๏ธ๐Ÿงšโ€โ™€๏ธ๐Ÿง›๐Ÿง›โ€โ™‚๏ธ๐Ÿง›โ€โ™€๏ธ๐Ÿงœ๐Ÿงœโ€โ™‚๏ธ๐Ÿงœโ€โ™€๏ธ๐Ÿง๐Ÿงโ€โ™‚๏ธ๐Ÿงโ€โ™€๏ธ๐Ÿงž๐Ÿงžโ€โ™‚๏ธ๐Ÿงžโ€โ™€๏ธ๐ŸงŸ๐ŸงŸโ€โ™‚๏ธ๐ŸงŸโ€โ™€๏ธ๐Ÿ’†๐Ÿ’†โ€โ™‚๏ธ๐Ÿ’†โ€โ™€๏ธ๐Ÿ’‡๐Ÿ’‡โ€โ™‚๏ธ๐Ÿ’‡โ€โ™€๏ธ๐Ÿšถ๐Ÿšถโ€โ™‚๏ธ๐Ÿšถโ€โ™€๏ธ๐Ÿง๐Ÿงโ€โ™‚๏ธ๐Ÿงโ€โ™€๏ธ๐ŸงŽ๐ŸงŽโ€โ™‚๏ธ๐ŸงŽโ€โ™€๏ธ๐Ÿง‘โ€๐Ÿฆฏ๐Ÿ‘จโ€๐Ÿฆฏ๐Ÿ‘ฉโ€๐Ÿฆฏ๐Ÿง‘โ€๐Ÿฆผ๐Ÿ‘จโ€๐Ÿฆผ๐Ÿ‘ฉโ€๐Ÿฆผ๐Ÿง‘โ€๐Ÿฆฝ๐Ÿ‘จโ€๐Ÿฆฝ๐Ÿ‘ฉโ€๐Ÿฆฝ๐Ÿƒ๐Ÿƒโ€โ™‚๏ธ๐Ÿƒโ€โ™€๏ธ๐Ÿ’ƒ๐Ÿ•บ๐Ÿ•ด๏ธ๐Ÿ‘ฏ๐Ÿ‘ฏโ€โ™‚๏ธ๐Ÿ‘ฏโ€โ™€๏ธ๐Ÿง–๐Ÿง–โ€โ™‚๏ธ๐Ÿง–โ€โ™€๏ธ๐Ÿง˜๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘๐Ÿ‘ญ๐Ÿ‘ซ๐Ÿ‘ฌ๐Ÿ’๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿ’‘๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ๐Ÿ‘ช๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง๐Ÿ‘ฉโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ง๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง๐Ÿ—ฃ๏ธ๐Ÿ‘ค๐Ÿ‘ฅ๐Ÿซ‚๐Ÿ‘ฃ๐Ÿงณ๐ŸŒ‚โ˜‚๏ธ๐ŸŽƒ๐Ÿงต๐Ÿงถ๐Ÿ‘“๐Ÿ•ถ๏ธ๐Ÿฅฝ๐Ÿฅผ๐Ÿฆบ๐Ÿ‘”๐Ÿ‘•๐Ÿ‘–๐Ÿงฃ๐Ÿงค๐Ÿงฅ๐Ÿงฆ๐Ÿ‘—๐Ÿ‘˜๐Ÿฅป๐Ÿฉฑ๐Ÿฉฒ๐Ÿฉณ๐Ÿ‘™๐Ÿ‘š๐Ÿ‘›๐Ÿ‘œ๐Ÿ‘๐ŸŽ’๐Ÿฉด๐Ÿ‘ž๐Ÿ‘Ÿ๐Ÿฅพ๐Ÿฅฟ๐Ÿ‘ ๐Ÿ‘ก๐Ÿฉฐ๐Ÿ‘ข๐Ÿ‘‘๐Ÿ‘’๐ŸŽฉ๐ŸŽ“๐Ÿงข๐Ÿช–โ›‘๏ธ๐Ÿ’„๐Ÿ’๐Ÿ’ผ๐Ÿฉธ๐Ÿ’Œ๐Ÿ•ณ๏ธ๐Ÿ’ฃ๐Ÿ›€๐Ÿ›Œ๐Ÿ”ช๐Ÿบ๐Ÿ—บ๏ธ๐Ÿงญ๐Ÿงฑ๐Ÿ’ˆ๐Ÿฆฝ๐Ÿฆผ๐Ÿ›ข๏ธ๐Ÿ›Ž๏ธ๐ŸงณโŒ›โณโŒšโฐโฑ๏ธโฒ๏ธ๐Ÿ•ฐ๏ธ๐ŸŒก๏ธโ›ฑ๏ธ๐Ÿงจ๐ŸŽˆ๐ŸŽ‰๐ŸŽŠ๐ŸŽŽ๐ŸŽ๐ŸŽ๐Ÿงง๐ŸŽ€๐ŸŽ๐Ÿคฟ๐Ÿช€๐Ÿช๐Ÿ”ฎ๐Ÿช„๐Ÿงฟ๐Ÿ•น๏ธ๐Ÿงธ๐Ÿช…๐Ÿช†๐Ÿ–ผ๏ธ๐Ÿงต๐Ÿชก๐Ÿงถ๐Ÿชข๐Ÿ›๏ธ๐Ÿ“ฟ๐Ÿ’Ž๐Ÿ“ฏ๐ŸŽ™๏ธ๐ŸŽš๏ธ๐ŸŽ›๏ธ๐Ÿ“ป๐Ÿช•๐Ÿ“ฑ๐Ÿ“ฒโ˜Ž๏ธ๐Ÿ“ž๐Ÿ“Ÿ๐Ÿ“ ๐Ÿ”‹๐Ÿ”Œ๐Ÿ’ป๐Ÿ–ฅ๏ธ๐Ÿ–จ๏ธโŒจ๏ธ๐Ÿ–ฑ๏ธ๐Ÿ–ฒ๏ธ๐Ÿ’ฝ๐Ÿ’พ๐Ÿ’ฟ๐Ÿ“€๐Ÿงฎ๐ŸŽฅ๐ŸŽž๏ธ๐Ÿ“ฝ๏ธ๐Ÿ“บ๐Ÿ“ท๐Ÿ“ธ๐Ÿ“น๐Ÿ“ผ๐Ÿ”๐Ÿ”Ž๐Ÿ•ฏ๏ธ๐Ÿ’ก๐Ÿ”ฆ๐Ÿฎ๐Ÿช”๐Ÿ“”๐Ÿ“•๐Ÿ“–๐Ÿ“—๐Ÿ“˜๐Ÿ“™๐Ÿ“š๐Ÿ““๐Ÿ“’๐Ÿ“ƒ๐Ÿ“œ๐Ÿ“„๐Ÿ“ฐ๐Ÿ—ž๏ธ๐Ÿ“‘๐Ÿ”–๐Ÿท๏ธ๐Ÿ’ฐ๐Ÿช™๐Ÿ’ด๐Ÿ’ต๐Ÿ’ถ๐Ÿ’ท๐Ÿ’ธ๐Ÿ’ณ๐Ÿงพโœ‰๏ธ๐Ÿ“ง๐Ÿ“จ๐Ÿ“ฉ๐Ÿ“ค๐Ÿ“ฅ๐Ÿ“ฆ๐Ÿ“ซ๐Ÿ“ช๐Ÿ“ฌ๐Ÿ“ญ๐Ÿ“ฎ๐Ÿ—ณ๏ธโœ๏ธโœ’๏ธ๐Ÿ–‹๏ธ๐Ÿ–Š๏ธ๐Ÿ–Œ๏ธ๐Ÿ–๏ธ๐Ÿ“๐Ÿ“๐Ÿ“‚๐Ÿ—‚๏ธ๐Ÿ“…๐Ÿ“†๐Ÿ—’๏ธ๐Ÿ—“๏ธ๐Ÿ“‡๐Ÿ“ˆ๐Ÿ“‰๐Ÿ“Š๐Ÿ“‹๐Ÿ“Œ๐Ÿ“๐Ÿ“Ž๐Ÿ–‡๏ธ๐Ÿ“๐Ÿ“โœ‚๏ธ๐Ÿ—ƒ๏ธ๐Ÿ—„๏ธ๐Ÿ—‘๏ธ๐Ÿ”’๐Ÿ”“๐Ÿ”๐Ÿ”๐Ÿ”‘๐Ÿ—๏ธ๐Ÿ”จ๐Ÿช“โ›๏ธโš’๏ธ๐Ÿ› ๏ธ๐Ÿ—ก๏ธโš”๏ธ๐Ÿ”ซ๐Ÿชƒ๐Ÿ›ก๏ธ๐Ÿชš๐Ÿ”ง๐Ÿช›๐Ÿ”ฉโš™๏ธ๐Ÿ—œ๏ธโš–๏ธ๐Ÿฆฏ๐Ÿ”—โ›“๏ธ๐Ÿช๐Ÿงฐ๐Ÿงฒ๐Ÿชœโš—๏ธ๐Ÿงช๐Ÿงซ๐Ÿงฌ๐Ÿ”ฌ๐Ÿ”ญ๐Ÿ“ก๐Ÿ’‰๐Ÿฉธ๐Ÿ’Š๐Ÿฉน๐Ÿฉบ๐Ÿšช๐Ÿชž๐ŸชŸ๐Ÿ›๏ธ๐Ÿ›‹๏ธ๐Ÿช‘๐Ÿšฝ๐Ÿช ๐Ÿšฟ๐Ÿ›๐Ÿชค๐Ÿช’๐Ÿงด๐Ÿงท๐Ÿงน๐Ÿงบ๐Ÿงป๐Ÿชฃ๐Ÿงผ๐Ÿชฅ๐Ÿงฝ๐Ÿงฏ๐Ÿ›’๐Ÿšฌโšฐ๏ธ๐Ÿชฆโšฑ๏ธ๐Ÿ—ฟ๐Ÿชง๐Ÿšฐ๐Ÿ•ด๏ธ๐Ÿง—๐Ÿง—โ€โ™‚๏ธ๐Ÿง—โ€โ™€๏ธ๐Ÿคบ๐Ÿ‡โ›ท๏ธ๐Ÿ‚๐ŸŒ๏ธ๐ŸŒ๏ธโ€โ™‚๏ธ๐ŸŒ๏ธโ€โ™€๏ธ๐Ÿ„๐Ÿ„โ€โ™‚๏ธ๐Ÿ„โ€โ™€๏ธ๐Ÿšฃ๐Ÿšฃโ€โ™‚๏ธ๐Ÿšฃโ€โ™€๏ธ๐ŸŠ๐ŸŠโ€โ™‚๏ธ๐ŸŠโ€โ™€๏ธโ›น๏ธโ›น๏ธโ€โ™‚๏ธโ›น๏ธโ€โ™€๏ธ๐Ÿ‹๏ธ๐Ÿ‹๏ธโ€โ™‚๏ธ๐Ÿ‹๏ธโ€โ™€๏ธ๐Ÿšด๐Ÿšดโ€โ™‚๏ธ๐Ÿšดโ€โ™€๏ธ๐Ÿšต๐Ÿšตโ€โ™‚๏ธ๐Ÿšตโ€โ™€๏ธ๐Ÿคธ๐Ÿคธโ€โ™‚๏ธ๐Ÿคธโ€โ™€๏ธ๐Ÿคผ๐Ÿคผโ€โ™‚๏ธ๐Ÿคผโ€โ™€๏ธ๐Ÿคฝ๐Ÿคฝโ€โ™‚๏ธ๐Ÿคฝโ€โ™€๏ธ๐Ÿคพ๐Ÿคพโ€โ™‚๏ธ๐Ÿคพโ€โ™€๏ธ๐Ÿคน๐Ÿคนโ€โ™‚๏ธ๐Ÿคนโ€โ™€๏ธ๐Ÿง˜๐Ÿง˜โ€โ™‚๏ธ๐Ÿง˜โ€โ™€๏ธ๐ŸŽช๐Ÿ›น๐Ÿ›ผ๐Ÿ›ถ๐ŸŽ—๏ธ๐ŸŽŸ๏ธ๐ŸŽซ๐ŸŽ–๏ธ๐Ÿ†๐Ÿ…๐Ÿฅ‡๐Ÿฅˆ๐Ÿฅ‰โšฝโšพ๐ŸฅŽ๐Ÿ€๐Ÿ๐Ÿˆ๐Ÿ‰๐ŸŽพ๐Ÿฅ๐ŸŽณ๐Ÿ๐Ÿ‘๐Ÿ’๐Ÿฅ๐Ÿ“๐Ÿธ๐ŸฅŠ๐Ÿฅ‹๐Ÿฅ…โ›ณโ›ธ๏ธ๐ŸŽฃ๐ŸŽฝ๐ŸŽฟ๐Ÿ›ท๐ŸฅŒ๐ŸŽฏ๐ŸŽฑ๐ŸŽฎ๐ŸŽฐ๐ŸŽฒ๐Ÿงฉโ™Ÿ๏ธ๐ŸŽญ๐ŸŽจ๐Ÿงต๐Ÿงถ๐ŸŽผ๐ŸŽค๐ŸŽง๐ŸŽท๐Ÿช—๐ŸŽธ๐ŸŽน๐ŸŽบ๐ŸŽป๐Ÿฅ๐Ÿช˜๐ŸŽฌ๐Ÿน๐Ÿ’˜๐Ÿ’๐Ÿ’–๐Ÿ’—๐Ÿ’“๐Ÿ’ž๐Ÿ’•๐Ÿ’Ÿโฃ๏ธ๐Ÿ’”โค๏ธ๐Ÿงก๐Ÿ’›๐Ÿ’š๐Ÿ’™๐Ÿ’œ๐ŸคŽ๐Ÿ–ค๐Ÿค๐Ÿ’ฏ๐Ÿ’ข๐Ÿ’ฌ๐Ÿ‘๏ธโ€๐Ÿ—จ๏ธ๐Ÿ—จ๏ธ๐Ÿ—ฏ๏ธ๐Ÿ’ญ๐Ÿ’ค๐Ÿ’ฎโ™จ๏ธ๐Ÿ’ˆ๐Ÿ›‘๐Ÿ•›๐Ÿ•ง๐Ÿ•๐Ÿ•œ๐Ÿ•‘๐Ÿ•๐Ÿ•’๐Ÿ•ž๐Ÿ•“๐Ÿ•Ÿ๐Ÿ•”๐Ÿ• ๐Ÿ••๐Ÿ•ก๐Ÿ•–๐Ÿ•ข๐Ÿ•—๐Ÿ•ฃ๐Ÿ•˜๐Ÿ•ค๐Ÿ•™๐Ÿ•ฅ๐Ÿ•š๐Ÿ•ฆ๐ŸŒ€โ™ ๏ธโ™ฅ๏ธโ™ฆ๏ธโ™ฃ๏ธ๐Ÿƒ๐Ÿ€„๐ŸŽด๐Ÿ”‡๐Ÿ”ˆ๐Ÿ”‰๐Ÿ”Š๐Ÿ“ข๐Ÿ“ฃ๐Ÿ“ฏ๐Ÿ””๐Ÿ”•๐ŸŽต๐ŸŽถ๐Ÿ’น๐Ÿ›—๐Ÿง๐Ÿšฎ๐Ÿšฐโ™ฟ๐Ÿšน๐Ÿšบ๐Ÿšป๐Ÿšผ๐Ÿšพโš ๏ธ๐Ÿšธโ›”๐Ÿšซ๐Ÿšณ๐Ÿšญ๐Ÿšฏ๐Ÿšฑ๐Ÿšท๐Ÿ“ต๐Ÿ”žโ˜ข๏ธโ˜ฃ๏ธโฌ†๏ธโ†—๏ธโžก๏ธโ†˜๏ธโฌ‡๏ธโ†™๏ธโฌ…๏ธโ†–๏ธโ†•๏ธโ†”๏ธโ†ฉ๏ธโ†ช๏ธโคด๏ธโคต๏ธ๐Ÿ”ƒ๐Ÿ”„๐Ÿ”™๐Ÿ”š๐Ÿ”›๐Ÿ”œ๐Ÿ”๐Ÿ›โš›๏ธ๐Ÿ•‰๏ธโœก๏ธโ˜ธ๏ธโ˜ฏ๏ธโœ๏ธโ˜ฆ๏ธโ˜ช๏ธโ˜ฎ๏ธ๐Ÿ•Ž๐Ÿ”ฏโ™ˆโ™‰โ™Šโ™‹โ™Œโ™โ™Žโ™โ™โ™‘โ™’โ™“โ›Ž๐Ÿ”€๐Ÿ”๐Ÿ”‚โ–ถ๏ธโฉโญ๏ธโฏ๏ธโ—€๏ธโชโฎ๏ธ๐Ÿ”ผโซ๐Ÿ”ฝโฌโธ๏ธโน๏ธโบ๏ธโ๏ธ๐ŸŽฆ๐Ÿ”…๐Ÿ”†๐Ÿ“ถ๐Ÿ“ณ๐Ÿ“ดโ™€๏ธโ™‚๏ธโœ–๏ธโž•โž–โž—โ™พ๏ธโ€ผ๏ธโ‰๏ธโ“โ”โ•โ—ใ€ฐ๏ธ๐Ÿ’ฑ๐Ÿ’ฒโš•๏ธโ™ป๏ธโšœ๏ธ๐Ÿ”ฑ๐Ÿ“›๐Ÿ”ฐโญ•โœ…โ˜‘๏ธโœ”๏ธโŒโŽโžฐโžฟ ใ€ฝ๏ธโœณ๏ธโœด๏ธโ‡๏ธยฉ๏ธยฎ๏ธโ„ข๏ธ#๏ธโƒฃ*๏ธโƒฃ0๏ธโƒฃ1๏ธโƒฃ2๏ธโƒฃ3๏ธโƒฃ4๏ธโƒฃ5๏ธโƒฃ6๏ธโƒฃ7๏ธโƒฃ8๏ธโƒฃ9๏ธโƒฃ๐Ÿ”Ÿ๐Ÿ” ๐Ÿ”ก๐Ÿ”ข๐Ÿ”ฃ๐Ÿ”ค๐Ÿ…ฐ๏ธ๐Ÿ†Ž๐Ÿ…ฑ๏ธ๐Ÿ†‘๐Ÿ†’๐Ÿ†“โ„น๏ธ๐Ÿ†”โ“‚๏ธ๐Ÿ†•๐Ÿ†–๐Ÿ…พ๏ธ๐Ÿ†—๐Ÿ…ฟ๏ธ๐Ÿ†˜๐Ÿ†™๐Ÿ†š๐Ÿˆ๐Ÿˆ‚๏ธ๐Ÿˆท๏ธ๐Ÿˆถ๐Ÿˆฏ๐Ÿ‰๐Ÿˆน๐Ÿˆš๐Ÿˆฒ๐Ÿ‰‘๐Ÿˆธ๐Ÿˆด๐ŸˆณใŠ—๏ธใŠ™๏ธ๐Ÿˆบ๐Ÿˆต๐Ÿ”ด๐ŸŸ ๐ŸŸก๐ŸŸข๐Ÿ”ต๐ŸŸฃ๐ŸŸคโšซโšช๐ŸŸฅ๐ŸŸง๐ŸŸจ๐ŸŸฉ๐ŸŸฆ๐ŸŸช๐ŸŸซโฌ›โฌœโ—ผ๏ธโ—ป๏ธโ—พโ—ฝโ–ช๏ธโ–ซ๏ธ๐Ÿ”ถ๐Ÿ”ท๐Ÿ”ธ๐Ÿ”น๐Ÿ”บ๐Ÿ”ป๐Ÿ’ ๐Ÿ”˜๐Ÿ”ณ๐Ÿ”ฒ๐Ÿ๐Ÿšฉ๐ŸŽŒ๐Ÿด๐Ÿณ๏ธ๐Ÿณ๏ธโ€๐ŸŒˆ๐Ÿณ๏ธโ€โšง๏ธ"

// ่กจๆƒ…
const expressionEmojis = '๐Ÿ˜€๐Ÿ˜ƒ๐Ÿ˜„๐Ÿ˜๐Ÿ˜†๐Ÿ˜…๐Ÿคฃ๐Ÿ˜‚๐Ÿ™‚๐Ÿ™ƒ๐Ÿ˜‰๐Ÿ˜Š๐Ÿ˜‡๐Ÿฅฐ๐Ÿ˜๐Ÿคฉ๐Ÿ˜˜๐Ÿ˜—โ˜บ๏ธ๐Ÿ˜š๐Ÿ˜™๐Ÿฅฒ๐Ÿ˜‹๐Ÿ˜›๐Ÿ˜œ๐Ÿคช๐Ÿ˜๐Ÿค‘๐Ÿค—๐Ÿคญ๐Ÿคซ๐Ÿค”๐Ÿค๐Ÿคจ๐Ÿ˜๐Ÿ˜‘๐Ÿ˜ถ๐Ÿ˜๐Ÿ˜’๐Ÿ™„๐Ÿ˜ฌ๐Ÿคฅ๐Ÿ˜Œ๐Ÿ˜”๐Ÿ˜ช๐Ÿคค๐Ÿ˜ด๐Ÿ˜ท๐Ÿค’๐Ÿค•๐Ÿคข๐Ÿคฎ๐Ÿคง๐Ÿฅต๐Ÿฅถ๐Ÿฅด๐Ÿ˜ต๐Ÿคฏ๐Ÿค ๐Ÿฅณ๐Ÿฅธ๐Ÿ˜Ž๐Ÿค“๐Ÿง๐Ÿ˜•๐Ÿ˜Ÿ๐Ÿ™โ˜น๏ธ๐Ÿ˜ฎ๐Ÿ˜ฏ๐Ÿ˜ฒ๐Ÿ˜ณ๐Ÿฅบ๐Ÿ˜ฆ๐Ÿ˜ง๐Ÿ˜จ๐Ÿ˜ฐ๐Ÿ˜ฅ๐Ÿ˜ข๐Ÿ˜ญ๐Ÿ˜ฑ๐Ÿ˜–๐Ÿ˜ฃ๐Ÿ˜ž๐Ÿ˜“๐Ÿ˜ฉ๐Ÿ˜ซ๐Ÿฅฑ๐Ÿ˜ค๐Ÿ˜ก๐Ÿ˜ ๐Ÿคฌ๐Ÿ˜ˆ๐Ÿ‘ฟ๐Ÿ’€โ˜ ๏ธ๐Ÿ’ฉ๐Ÿคก๐Ÿ‘น๐Ÿ‘บ๐Ÿ‘ป'

// ๅฐๅŠจ็‰ฉ
const animalEmojis = "๐Ÿ™Š๐Ÿ’ฅ๐Ÿ’ซ๐Ÿ’ฆ๐Ÿ’จ๐Ÿต๐Ÿ’๐Ÿฆ๐Ÿฆง๐Ÿถ๐Ÿ•๐Ÿฆฎ๐Ÿ•โ€๐Ÿฆบ๐Ÿฉ๐Ÿบ๐ŸฆŠ๐Ÿฆ๐Ÿฑ๐Ÿˆ๐Ÿˆโ€โฌ›๐Ÿฆ๐Ÿฏ๐Ÿ…๐Ÿ†๐Ÿด๐ŸŽ๐Ÿฆ„๐Ÿฆ“๐ŸฆŒ๐Ÿฆฌ๐Ÿฎ๐Ÿ‚๐Ÿƒ๐Ÿ„๐Ÿท๐Ÿ–๐Ÿ—๐Ÿฝ๐Ÿ๐Ÿ‘๐Ÿ๐Ÿช๐Ÿซ๐Ÿฆ™๐Ÿฆ’๐Ÿ˜๐Ÿฆฃ๐Ÿฆ๐Ÿฆ›๐Ÿญ๐Ÿ๐Ÿ€๐Ÿน๐Ÿฐ๐Ÿ‡๐Ÿฟ๏ธ๐Ÿฆซ๐Ÿฆ”๐Ÿฆ‡๐Ÿป๐Ÿปโ€โ„๏ธ๐Ÿจ๐Ÿผ๐Ÿฆฅ๐Ÿฆฆ๐Ÿฆจ๐Ÿฆ˜๐Ÿฆก๐Ÿพ๐Ÿฆƒ๐Ÿ”๐Ÿ“๐Ÿฃ๐Ÿค๐Ÿฅ๐Ÿฆ๐Ÿง๐Ÿ•Š๏ธ๐Ÿฆ…๐Ÿฆ†๐Ÿฆข๐Ÿฆ‰๐Ÿฆค๐Ÿชถ๐Ÿฆฉ๐Ÿฆš๐Ÿฆœ๐Ÿธ๐ŸŠ๐Ÿข๐ŸฆŽ๐Ÿ๐Ÿฒ๐Ÿ‰๐Ÿฆ•๐Ÿฆ–๐Ÿณ๐Ÿ‹๐Ÿฌ๐Ÿฆญ๐ŸŸ๐Ÿ ๐Ÿก๐Ÿฆˆ๐Ÿ™๐Ÿš๐ŸŒ๐Ÿฆ‹๐Ÿ›๐Ÿœ๐Ÿ๐Ÿชฒ๐Ÿž๐Ÿฆ—๐Ÿชณ๐Ÿ•ท๏ธ๐Ÿ•ธ๏ธ๐Ÿฆ‚๐ŸฆŸ๐Ÿชฐ๐Ÿชฑ๐Ÿฆ ๐Ÿ’๐ŸŒธ๐Ÿ’ฎ๐Ÿต๏ธ๐ŸŒน๐Ÿฅ€๐ŸŒบ๐ŸŒป๐ŸŒผ๐ŸŒท๐ŸŒฑ๐Ÿชด๐ŸŒฒ๐ŸŒณ๐ŸŒด๐ŸŒต๐ŸŒพ๐ŸŒฟโ˜˜๏ธ๐Ÿ€๐Ÿ๐Ÿ‚๐Ÿƒ๐Ÿ„๐ŸŒฐ๐Ÿฆ€๐Ÿฆž๐Ÿฆ๐Ÿฆ‘"

// ไบบ็‰ฉ
const personEmojis = "๐Ÿ‘ถ๐Ÿง’๐Ÿ‘ฆ๐Ÿ‘ง๐Ÿง‘๐Ÿ‘ฑ๐Ÿ‘จ๐Ÿง”๐Ÿ‘จโ€๐Ÿฆฐ๐Ÿ‘จโ€๐Ÿฆฑ๐Ÿ‘จโ€๐Ÿฆณ๐Ÿ‘จโ€๐Ÿฆฒ๐Ÿ‘ฉ๐Ÿ‘ฉโ€๐Ÿฆฐ๐Ÿง‘โ€๐Ÿฆฐ๐Ÿ‘ฉโ€๐Ÿฆฑ๐Ÿง‘โ€๐Ÿฆฑ๐Ÿ‘ฉโ€๐Ÿฆณ๐Ÿง‘โ€๐Ÿฆณ๐Ÿ‘ฉโ€๐Ÿฆฒ๐Ÿง‘โ€๐Ÿฆฒ๐Ÿ‘ฑโ€โ™€๏ธ๐Ÿ‘ฑโ€โ™‚๏ธ๐Ÿง“๐Ÿ‘ด๐Ÿ‘ต๐Ÿ™๐Ÿ™โ€โ™‚๏ธ๐Ÿ™โ€โ™€๏ธ๐Ÿ™Ž๐Ÿ™Žโ€โ™‚๏ธ๐Ÿ™Žโ€โ™€๏ธ๐Ÿ™…๐Ÿ™…โ€โ™‚๏ธ๐Ÿ™…โ€โ™€๏ธ๐Ÿ™†๐Ÿ™†โ€โ™‚๏ธ๐Ÿ™†โ€โ™€๏ธ๐Ÿ’๐Ÿ’โ€โ™‚๏ธ๐Ÿ’โ€โ™€๏ธ๐Ÿ™‹๐Ÿ™‹โ€โ™‚๏ธ๐Ÿ™‹โ€โ™€๏ธ๐Ÿง๐Ÿงโ€โ™‚๏ธ๐Ÿงโ€โ™€๏ธ๐Ÿ™‡๐Ÿ™‡โ€โ™‚๏ธ๐Ÿ™‡โ€โ™€๏ธ๐Ÿคฆ๐Ÿคฆโ€โ™‚๏ธ๐Ÿคฆโ€โ™€๏ธ๐Ÿคท๐Ÿคทโ€โ™‚๏ธ๐Ÿคทโ€โ™€๏ธ๐Ÿง‘โ€โš•๏ธ๐Ÿ‘จโ€โš•๏ธ๐Ÿ‘ฉโ€โš•๏ธ๐Ÿง‘โ€๐ŸŽ“๐Ÿ‘จโ€๐ŸŽ“๐Ÿ‘ฉโ€๐ŸŽ“๐Ÿง‘โ€๐Ÿซ๐Ÿ‘จโ€๐Ÿซ๐Ÿ‘ฉโ€๐Ÿซ๐Ÿง‘โ€โš–๏ธ๐Ÿ‘จโ€โš–๏ธ๐Ÿ‘ฉโ€โš–๏ธ๐Ÿง‘โ€๐ŸŒพ๐Ÿ‘จโ€๐ŸŒพ๐Ÿ‘ฉโ€๐ŸŒพ๐Ÿง‘โ€๐Ÿณ๐Ÿ‘จโ€๐Ÿณ๐Ÿ‘ฉโ€๐Ÿณ๐Ÿง‘โ€๐Ÿ”ง๐Ÿ‘จโ€๐Ÿ”ง๐Ÿ‘ฉโ€๐Ÿ”ง๐Ÿง‘โ€๐Ÿญ๐Ÿ‘จโ€๐Ÿญ๐Ÿ‘ฉโ€๐Ÿญ๐Ÿง‘โ€๐Ÿ’ผ๐Ÿ‘จโ€๐Ÿ’ผ๐Ÿ‘ฉโ€๐Ÿ’ผ๐Ÿง‘โ€๐Ÿ”ฌ๐Ÿ‘จโ€๐Ÿ”ฌ๐Ÿ‘ฉโ€๐Ÿ”ฌ๐Ÿง‘โ€๐Ÿ’ป๐Ÿ‘จโ€๐Ÿ’ป๐Ÿ‘ฉโ€๐Ÿ’ป๐Ÿง‘โ€๐ŸŽค๐Ÿ‘จโ€๐ŸŽค๐Ÿ‘ฉโ€๐ŸŽค๐Ÿง‘โ€๐ŸŽจ๐Ÿ‘จโ€๐ŸŽจ๐Ÿ‘ฉโ€๐ŸŽจ๐Ÿง‘โ€โœˆ๏ธ๐Ÿ‘จโ€โœˆ๏ธ๐Ÿ‘ฉโ€โœˆ๏ธ๐Ÿง‘โ€๐Ÿš€๐Ÿ‘จโ€๐Ÿš€๐Ÿ‘ฉโ€๐Ÿš€๐Ÿง‘โ€๐Ÿš’๐Ÿ‘จโ€๐Ÿš’๐Ÿ‘ฉโ€๐Ÿš’๐Ÿ‘ฎ๐Ÿ‘ฎโ€โ™‚๏ธ๐Ÿ‘ฎโ€โ™€๏ธ๐Ÿ•ต๏ธ๐Ÿ•ต๏ธโ€โ™‚๏ธ๐Ÿ•ต๏ธโ€โ™€๏ธ๐Ÿ’‚๐Ÿ’‚โ€โ™‚๏ธ๐Ÿ’‚โ€โ™€๏ธ๐Ÿฅท๐Ÿ‘ท๐Ÿ‘ทโ€โ™‚๏ธ๐Ÿ‘ทโ€โ™€๏ธ๐Ÿคด๐Ÿ‘ธ๐Ÿ‘ณ๐Ÿ‘ณโ€โ™‚๏ธ๐Ÿ‘ณโ€โ™€๏ธ๐Ÿ‘ฒ๐Ÿง•๐Ÿคต๐Ÿคตโ€โ™‚๏ธ๐Ÿคตโ€โ™€๏ธ๐Ÿ‘ฐ๐Ÿ‘ฐโ€โ™‚๏ธ๐Ÿ‘ฐโ€โ™€๏ธ๐Ÿคฐ๐Ÿคฑ๐Ÿ‘ฉโ€๐Ÿผ๐Ÿ‘จโ€๐Ÿผ๐Ÿง‘โ€๐Ÿผ๐Ÿ‘ผ๐ŸŽ…๐Ÿคถ๐Ÿง‘โ€๐ŸŽ„๐Ÿฆธ๐Ÿฆธโ€โ™‚๏ธ๐Ÿฆธโ€โ™€๏ธ๐Ÿฆน๐Ÿฆนโ€โ™‚๏ธ๐Ÿฆนโ€โ™€๏ธ๐Ÿง™๐Ÿง™โ€โ™‚๏ธ๐Ÿง™โ€โ™€๏ธ๐Ÿงš๐Ÿงšโ€โ™‚๏ธ๐Ÿงšโ€โ™€๏ธ๐Ÿง›๐Ÿง›โ€โ™‚๏ธ๐Ÿง›โ€โ™€๏ธ๐Ÿงœ๐Ÿงœโ€โ™‚๏ธ๐Ÿงœโ€โ™€๏ธ๐Ÿง๐Ÿงโ€โ™‚๏ธ๐Ÿงโ€โ™€๏ธ๐Ÿงž๐Ÿงžโ€โ™‚๏ธ๐Ÿงžโ€โ™€๏ธ๐ŸงŸ๐ŸงŸโ€โ™‚๏ธ๐ŸงŸโ€โ™€๏ธ๐Ÿ’†๐Ÿ’†โ€โ™‚๏ธ๐Ÿ’†โ€โ™€๏ธ๐Ÿ’‡๐Ÿ’‡โ€โ™‚๏ธ๐Ÿ’‡โ€โ™€๏ธ๐Ÿšถ๐Ÿšถโ€โ™‚๏ธ๐Ÿšถโ€โ™€๏ธ๐Ÿง๐Ÿงโ€โ™‚๏ธ๐Ÿงโ€โ™€๏ธ๐ŸงŽ๐ŸงŽโ€โ™‚๏ธ๐ŸงŽโ€โ™€๏ธ๐Ÿง‘โ€๐Ÿฆฏ๐Ÿ‘จโ€๐Ÿฆฏ๐Ÿ‘ฉโ€๐Ÿฆฏ๐Ÿ‘จโ€๐Ÿฆผ๐Ÿง‘โ€๐Ÿฆฝ๐Ÿ‘จโ€๐Ÿฆฝ๐Ÿ‘ฉโ€๐Ÿฆฝ๐Ÿƒ๐Ÿƒโ€โ™‚๏ธ๐Ÿƒโ€โ™€๏ธ๐Ÿ’ƒ๐Ÿ•บ๐Ÿ•ด๏ธ๐Ÿ‘ฏ๐Ÿ‘ฏโ€โ™‚๏ธ๐Ÿ‘ฏโ€โ™€๏ธ๐Ÿง–๐Ÿง–โ€โ™‚๏ธ๐Ÿง–โ€โ™€๏ธ๐Ÿง˜๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘๐Ÿ‘ญ๐Ÿ‘ซ๐Ÿ‘ฌ"

// ๆ‰‹ๅŠฟ
const guestrueEmojis = "๐Ÿ’ช๐Ÿ‘ˆ๐Ÿ‘‰โ˜๐Ÿ‘†๐Ÿ‘‡โœŒโœ‹๐Ÿ‘Œ๐Ÿ‘๐Ÿ‘ŽโœŠ๐Ÿ‘Š๐Ÿ‘‹๐Ÿ‘๐Ÿ‘โœ"

// ๅ…ฌๅ…ฑ
const publicEmojis = "โ™ป๐Ÿง๐Ÿšฎ๐Ÿšฐโ™ฟ๐Ÿšน๐Ÿšบ๐Ÿšป๐Ÿšผ๐Ÿšพโš ๐Ÿšธโ›”๐Ÿšซ๐Ÿšณ๐Ÿšญ๐Ÿšฏ๐Ÿšฑ๐Ÿšท๐Ÿ”ž๐Ÿ’ˆ"

// ็”Ÿ่‚–
const twelveEmojis = "๐Ÿ๐Ÿ‚๐Ÿ…๐Ÿ‡๐Ÿ‰๐Ÿ๐ŸŽ๐Ÿ๐Ÿ’๐Ÿ“๐Ÿ•๐Ÿ–"

export {
  defEmojis,
  allEmojis,
  expressionEmojis,
  animalEmojis,
  personEmojis,
  guestrueEmojis,
  publicEmojis,
  twelveEmojis,
}

  1. index.vue
vue
<template>
  <div class="emoji">
    <div v-if="emoji.historyList?.length">
      <p>ๆœ€่ฟ‘ไฝฟ็”จ</p>
      <ul class="history" :class="emoji.historyList?.length ? 'historyShow' : ''">
        <li v-for="(item, index) in [...new Set(emoji.historyList)]" :key="index" @click.stop="chooseEmojiDefault(item)"
          v-html="item"></li>
      </ul>
    </div>
    <div v-for="items in emojiObj" :key="items.name">
      <template v-if="items.name && items.value?.length">
        <p>{{ items.name }}</p>
        <ul class="default">
          <li v-for="(item, index) in items.value" :key="index" @click.stop="chooseEmojiDefault(item)" v-html="item"></li>
        </ul>
      </template>
    </div>
  </div>
</template>
<script lang="ts" setup>
import { ref, reactive } from "vue";
import { getAllTypeEmojis } from './utils'

const emit = defineEmits(["emojiHandle"]);
const props = defineProps({
  all: {
    type: Boolean,
    default: false
  }
})

const res = getAllTypeEmojis()
console.log(res)
const emojiObj = ref({})

if (props.all) {
  emojiObj.value = res
} else {
  emojiObj.value = {
    defEmojis: res.defEmojis
  }
}
const emoji = reactive({
  chooseItem: "",
  historyList: [],
  allEmoji: emojiObj.value,
});
const chooseEmojiDefault = (item: string) => {
  emoji.chooseItem = item;
  emoji.historyList.unshift(item);
  emit("emojiHandle", item);
  return item;
};
</script>

<style lang="less" scoped>
.history::-webkit-scrollbar,
.default::-webkit-scrollbar {
  display: none;
}

.emoji {
  text-align: left;
  width: 70vw;
  max-height: 20vh;
  background: #fff;
  overflow-y: auto;


  p {
    font-size: 14px;
    padding: 1vh;
  }

  .history,
  .default {
    width: 100%;
    height: 20vh;
    overflow-y: auto;

    li {
      display: inline-block;
      padding: 1vh;
      font-size: 26px;
      width: 32px;
      height: 32px;
      line-height: 1;
      overflow: hidden;
      cursor: pointer;
    }

    li:hover {
      background-color: #ececec;
    }
  }

  .history {
    height: 0;
    width: 100%;
    position: relative;
    transition: all 2.5s;
  }

  .historyShow {
    height: 40px;
  }
}

@media screen and (max-width: 800px) {
  .emoji {
    width: 80vw;
  }
}
</style>


  1. test.vue ไฝฟ็”จ็คบไพ‹
vue
<template>
  <smile-outlined
    style="font-size: 22px; margin: 0 2vh"
    @click="selectEmoji"
  />
  <Popover v-model:open="visible" title="" placement="top">
    <template #content>
      <div>
        <Emoji @emojiHandle="emojiHandle" :all="false" />
      </div>
    </template>
  </Popover>
  <Textarea
    :maxlength="100"
    @pressEnter="sendMessage"
    class="message-input"
    v-model:value.trim="message"
    placeholder="ๅ›ž่ฝฆๅ‘้€ๆถˆๆฏ..."
  />
</template>

<script setup>
import Emoji from "@/components/emoji/index.vue";
import { SmileOutlined } from "@ant-design/icons-vue";
import {  Textarea, Popover } from "ant-design-vue";

const cursor = ref(0);
const message = ref('')
const visible = ref(false)
// ๅ‘้€ๆถˆๆฏ
const sendMessage = () => {}

/**
 * ็‚นๅ‡ปๅฑ•็คบ่กจๆƒ…
 */
const selectEmoji = () => {
  const Textarea = document.querySelector(".message-input");
  cursor.value = Textarea?.selectionEnd;
  visible.value = !visible.value;
};
/**
 * ้€‰ๆ‹ฉ่กจๆƒ…๏ผŒๅนถๆŠŠ่กจๆƒ…ๆ’ๅ…ฅ่พ“ๅ…ฅๆก†
 * @param {*} item ้€‰ๆ‹ฉ็š„่กจๆƒ…
 */
const emojiHandle = (item) => {
  const msg = message.value;
  if (!cursor.value) {
    message.value += item;
  } else {
    message.value = msg.slice(0, cursor.value) + item + msg.slice(cursor.value);
  }
};
</script>

ๆ€ป็ป“ โ€‹

  • ๆ•ดไฝ“ๅฎž็Žฐ่ตทๆฅๆŒบ็ฎ€ๅ•็š„๏ผŒๆฒกๆœ‰่ธฉไป€ไนˆๅ‘
  • ๆœ€่ฟ‘ไฝฟ็”จ็›ฎๅ‰ๆ˜ฏๅญ˜ๅœจๅ˜้‡็š„๏ผŒๅˆทๆ–ฐๅฐฑๆฒกไบ†๏ผˆๅŽๆœŸ่€ƒ่™‘ๅผ•ๅ…ฅ่ง’่‰ฒ๏ผŒๅญ˜ๅ…ฅๆ•ฐๆฎๅบ“๏ผ‰
  • ่กจๆƒ…ๅŒ…็ป„ไปถ็ฎ€ๆ˜“็‰ˆๅทฒ็ปๅฐ่ฃ…ไบ†ๅฅฝไบ†๏ผŒ้œ€่ฆ็š„ๅฐไผ™ไผด่‡ชๅ–~

็ป“่ฏญ๏ผš โ€‹

ๅฆ‚ๆžœๆœฌๆ–‡ๅฏนไฝ ๆœ‰ๆ”ถ่Žท๏ผŒ้บป็ƒฆๅŠจๅŠจๅ‘่ดข็š„ๅฐๆ‰‹๏ผŒ็‚น็‚นๅ…ณๆณจใ€็‚น็‚น่ตž๏ผ๏ผ๏ผ๐Ÿ™Š๐Ÿ™Š๐Ÿ™Š

ๅฆ‚ๆžœๆœ‰ไธๅฏนใ€ๅฏไปฅไผ˜ๅŒ–็š„ๅœฐๆ–นๆฌข่ฟŽๅœจ่ฏ„่ฎบๅŒบๆŒ‡ๅ‡บ๏ผŒ่ฐข่ฐข๐Ÿ˜‚๐Ÿ˜‚