diff --git a/app/http/endpoints/manage/panelcreate.go b/app/http/endpoints/manage/panelcreate.go
new file mode 100644
index 0000000..4a19194
--- /dev/null
+++ b/app/http/endpoints/manage/panelcreate.go
@@ -0,0 +1,192 @@
+package manage
+
+import (
+ "fmt"
+ "github.com/TicketsBot/GoPanel/cache"
+ "github.com/TicketsBot/GoPanel/config"
+ "github.com/TicketsBot/GoPanel/database/table"
+ "github.com/TicketsBot/GoPanel/utils"
+ "github.com/TicketsBot/GoPanel/utils/discord/objects"
+ "github.com/gin-gonic/contrib/sessions"
+ "github.com/gin-gonic/gin"
+ "strconv"
+ "strings"
+)
+
+func PanelCreateHandler(ctx *gin.Context) {
+ store := sessions.Default(ctx)
+ if store == nil {
+ return
+ }
+ defer store.Save()
+
+ if utils.IsLoggedIn(store) {
+ userIdStr := store.Get("userid").(string)
+ userId, err := utils.GetUserId(store)
+ if err != nil {
+ ctx.String(500, err.Error())
+ return
+ }
+
+ // Verify the guild exists
+ guildIdStr := ctx.Param("id")
+ guildId, err := strconv.ParseInt(guildIdStr, 10, 64)
+ if err != nil {
+ ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page
+ return
+ }
+
+ // Get object for selected guild
+ var guild objects.Guild
+ for _, g := range table.GetGuilds(userIdStr) {
+ if g.Id == guildIdStr {
+ guild = g
+ break
+ }
+ }
+
+ // Verify the user has permissions to be here
+ if !utils.Contains(config.Conf.Admins, userIdStr) && !guild.Owner && !table.IsAdmin(guildId, userId) {
+ ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 403 Page
+ return
+ }
+
+ // Get CSRF token
+ csrfCorrect := ctx.PostForm("csrf") == store.Get("csrf").(string)
+ if !csrfCorrect {
+ ctx.Redirect(302, "/")
+ return
+ }
+
+ // Get if the guild is premium
+ premiumChan := make(chan bool)
+ go utils.IsPremiumGuild(store, guildIdStr, premiumChan)
+ premium := <-premiumChan
+
+ // Check the user hasn't met their panel quota
+ if !premium {
+ panels := make(chan []table.Panel)
+ go table.GetPanelsByGuild(guildId, panels)
+ if len(<-panels) > 1 {
+ ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?metQuota=true", guildId))
+ return
+ }
+ }
+
+ // Validate title
+ title := ctx.PostForm("title")
+ if len(title) == 0 || len(title) > 255 {
+ ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?validTitle=false", guildId))
+ return
+ }
+
+ // Validate content
+ content := ctx.PostForm("content")
+ if len(content) == 0 || len(content) > 1024 {
+ ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?validContent=false", guildId))
+ return
+ }
+
+ // Validate colour
+ panelColourHex := ctx.PostForm("colour")
+ panelColour, err := strconv.ParseUint(panelColourHex, 16, 32)
+ if err != nil {
+ ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?validColour=false", guildId))
+ return
+ }
+
+ // Validate channel
+ channelIdStr := ctx.PostForm("channel")
+ channelId, err := strconv.ParseInt(channelIdStr, 10, 64); if err != nil {
+ ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?validChannel=false", guildId))
+ return
+ }
+
+ validChannel := make(chan bool)
+ go validateChannel(guildId, channelId, validChannel)
+ if !<-validChannel {
+ ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?validChannel=false", guildId))
+ return
+ }
+
+ // Validate category
+ categoryStr := ctx.PostForm("category")
+ categoryId, err := strconv.ParseInt(categoryStr, 10, 64); if err != nil {
+ ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?validCategory=false", guildId))
+ return
+ }
+
+ validCategory := make(chan bool)
+ go validateCategory(guildId, categoryId, validChannel)
+ if !<-validCategory {
+ ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?validCategory=false", guildId))
+ return
+ }
+
+ // Validate reaction emote
+ reaction := strings.ToLower(ctx.PostForm("reaction"))
+ if len(title) == 0 || len(title) > 32 {
+ ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?validReaction=false", guildId))
+ return
+ }
+ reaction = strings.Replace(reaction, ":", "", -1)
+
+ emoji := utils.GetEmojiByName(reaction)
+ if emoji == "" {
+ ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?validReaction=false", guildId))
+ return
+ }
+
+ settings := table.Panel{
+ ChannelId: channelId,
+ GuildId: guildId,
+ Title: title,
+ Content: content,
+ Colour: int(panelColour),
+ TargetCategory: categoryId,
+ ReactionEmote: emoji,
+ }
+
+ go cache.Client.PublishPanelCreate(settings)
+
+ ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels?created=true", guildId))
+ } else {
+ ctx.Redirect(302, "/login")
+ }
+}
+
+func validateChannel(guildId, channelId int64, res chan bool) {
+ // Get channels from DB
+ channelsChan := make(chan []table.Channel)
+ go table.GetCachedChannelsByGuild(guildId, channelsChan)
+ channels := <-channelsChan
+
+ // Compare channel IDs
+ validChannel := false
+ for _, guildChannel := range channels {
+ if guildChannel.ChannelId == channelId {
+ validChannel = true
+ break
+ }
+ }
+
+ res <- validChannel
+}
+
+func validateCategory(guildId, categoryId int64, res chan bool) {
+ // Get channels from DB
+ categoriesChan := make(chan []table.Channel)
+ go table.GetCategories(guildId, categoriesChan)
+ categories := <-categoriesChan
+
+ // Compare channel IDs
+ validCategory := false
+ for _, category := range categories {
+ if category.ChannelId == categoryId {
+ validCategory = true
+ break
+ }
+ }
+
+ res <- validCategory
+}
diff --git a/app/http/endpoints/manage/paneldelete.go b/app/http/endpoints/manage/paneldelete.go
new file mode 100644
index 0000000..adc135e
--- /dev/null
+++ b/app/http/endpoints/manage/paneldelete.go
@@ -0,0 +1,71 @@
+package manage
+
+import (
+ "fmt"
+ "github.com/TicketsBot/GoPanel/config"
+ "github.com/TicketsBot/GoPanel/database/table"
+ "github.com/TicketsBot/GoPanel/utils"
+ "github.com/TicketsBot/GoPanel/utils/discord/objects"
+ "github.com/gin-gonic/contrib/sessions"
+ "github.com/gin-gonic/gin"
+ "strconv"
+)
+
+func PanelDeleteHandler(ctx *gin.Context) {
+ store := sessions.Default(ctx)
+ if store == nil {
+ return
+ }
+ defer store.Save()
+
+ if utils.IsLoggedIn(store) {
+ userIdStr := store.Get("userid").(string)
+ userId, err := utils.GetUserId(store)
+ if err != nil {
+ ctx.String(500, err.Error())
+ return
+ }
+
+ // Verify the guild exists
+ guildIdStr := ctx.Param("id")
+ guildId, err := strconv.ParseInt(guildIdStr, 10, 64)
+ if err != nil {
+ ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page
+ return
+ }
+
+ messageIdStr := ctx.Param("msg")
+ messageId, err := strconv.ParseInt(messageIdStr, 10, 64); if err != nil {
+ ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels", guildId))
+ return
+ }
+
+ // Get object for selected guild
+ var guild objects.Guild
+ for _, g := range table.GetGuilds(userIdStr) {
+ if g.Id == guildIdStr {
+ guild = g
+ break
+ }
+ }
+
+ // Verify the user has permissions to be here
+ if !utils.Contains(config.Conf.Admins, userIdStr) && !guild.Owner && !table.IsAdmin(guildId, userId) {
+ ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 403 Page
+ return
+ }
+
+ // Get CSRF token
+ csrfCorrect := ctx.Query("csrf") == store.Get("csrf").(string)
+ if !csrfCorrect {
+ ctx.Redirect(302, "/")
+ return
+ }
+
+ go table.DeletePanel(messageId)
+
+ ctx.Redirect(302, fmt.Sprintf("/manage/%d/panels", guildId))
+ } else {
+ ctx.Redirect(302, "/login")
+ }
+}
diff --git a/app/http/endpoints/manage/panels.go b/app/http/endpoints/manage/panels.go
new file mode 100644
index 0000000..2b6f5a5
--- /dev/null
+++ b/app/http/endpoints/manage/panels.go
@@ -0,0 +1,144 @@
+package manage
+
+import (
+ "github.com/TicketsBot/GoPanel/config"
+ "github.com/TicketsBot/GoPanel/database/table"
+ "github.com/TicketsBot/GoPanel/utils"
+ "github.com/TicketsBot/GoPanel/utils/discord/objects"
+ "github.com/gin-gonic/contrib/sessions"
+ "github.com/gin-gonic/gin"
+ "strconv"
+)
+
+type wrappedPanel struct {
+ MessageId int64
+ ChannelName string
+ Title string
+ Content string
+ CategoryName string
+}
+
+func PanelHandler(ctx *gin.Context) {
+ store := sessions.Default(ctx)
+ if store == nil {
+ return
+ }
+ defer store.Save()
+
+ if utils.IsLoggedIn(store) {
+ userIdStr := store.Get("userid").(string)
+ userId, err := utils.GetUserId(store)
+ if err != nil {
+ ctx.String(500, err.Error())
+ return
+ }
+
+ // Verify the guild exists
+ guildIdStr := ctx.Param("id")
+ guildId, err := strconv.ParseInt(guildIdStr, 10, 64)
+ if err != nil {
+ ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page
+ return
+ }
+
+ // Get object for selected guild
+ var guild objects.Guild
+ for _, g := range table.GetGuilds(userIdStr) {
+ if g.Id == guildIdStr {
+ guild = g
+ break
+ }
+ }
+
+ // Verify the user has permissions to be here
+ if !utils.Contains(config.Conf.Admins, userIdStr) && !guild.Owner && !table.IsAdmin(guildId, userId) {
+ ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 403 Page
+ return
+ }
+
+ // Get active panels
+ panelChan := make(chan []table.Panel)
+ go table.GetPanelsByGuild(guildId, panelChan)
+ panels := <-panelChan
+
+ // Get channels
+ channelsChan := make(chan []table.Channel)
+ go table.GetCachedChannelsByGuild(guildId, channelsChan)
+ channels := <-channelsChan
+
+ // Get default panel settings
+ settings := table.GetPanelSettings(guildId)
+
+ // Convert to wrapped panels
+ wrappedPanels := make([]wrappedPanel, 0)
+ for _, panel := range panels {
+ wrapper := wrappedPanel{
+ MessageId: panel.MessageId,
+ Title: panel.Title,
+ Content: panel.Content,
+ CategoryName: "",
+ }
+
+ if panel.Title == "" {
+ wrapper.Title = settings.Title
+ }
+ if panel.Content == "" {
+ wrapper.Content = settings.Content
+ }
+
+ // Get channel name & category name
+ for _, guildChannel := range channels {
+ if guildChannel.ChannelId == panel.ChannelId {
+ wrapper.ChannelName = guildChannel.Name
+ } else if guildChannel.ChannelId == panel.TargetCategory {
+ wrapper.CategoryName = guildChannel.Name
+ }
+ }
+
+ wrappedPanels = append(wrappedPanels, wrapper)
+ }
+
+ // Format channels to be text channels only
+ channelMap := make(map[int64]string)
+ for _, channel := range channels {
+ if channel.Type == 0 {
+ channelMap[channel.ChannelId] = channel.Name
+ }
+ }
+
+ // Get categories & format
+ categories := make(map[int64]string)
+ for _, channel := range channels {
+ if channel.Type == 4 {
+ categories[channel.ChannelId] = channel.Name
+ }
+ }
+
+ // Get is premium
+ isPremiumChan := make(chan bool)
+ go utils.IsPremiumGuild(store, guildIdStr, isPremiumChan)
+ isPremium := <-isPremiumChan
+
+ ctx.HTML(200, "manage/panels", gin.H{
+ "name": store.Get("name").(string),
+ "guildId": guildIdStr,
+ "csrf": store.Get("csrf").(string),
+ "avatar": store.Get("avatar").(string),
+ "baseUrl": config.Conf.Server.BaseUrl,
+ "panelcount": len(panels),
+ "premium": isPremium,
+ "panels": wrappedPanels,
+ "channels": channelMap,
+ "categories": categories,
+
+ "validTitle": ctx.Query("validTitle") != "true",
+ "validContent": ctx.Query("validContent") != "false",
+ "validColour": ctx.Query("validColour") != "false",
+ "validChannel": ctx.Query("validChannel") != "false",
+ "validCategory": ctx.Query("validCategory") != "false",
+ "validReaction": ctx.Query("validReaction") != "false",
+ "created": ctx.Query("created") == "true",
+ "metQuota": ctx.Query("metQuota") == "true",
+ })
+ }
+}
diff --git a/app/http/endpoints/manage/settings.go b/app/http/endpoints/manage/settings.go
index 9e75abe..f17f6ca 100644
--- a/app/http/endpoints/manage/settings.go
+++ b/app/http/endpoints/manage/settings.go
@@ -69,8 +69,8 @@ func SettingsHandler(ctx *gin.Context) {
// Archive channel
// Create a list of IDs
var channelIds []string
- for _, c := range guild.Channels {
- channelIds = append(channelIds, c.Id)
+ for _, c := range channels {
+ channelIds = append(channelIds, strconv.Itoa(int(c.ChannelId)))
}
panelSettings := table.GetPanelSettings(guildId)
diff --git a/app/http/endpoints/manage/updatesettings.go b/app/http/endpoints/manage/updatesettings.go
index b359983..87d1615 100644
--- a/app/http/endpoints/manage/updatesettings.go
+++ b/app/http/endpoints/manage/updatesettings.go
@@ -67,7 +67,7 @@ func UpdateSettingsHandler(ctx *gin.Context) {
// Get welcome message
welcomeMessageValid := false
welcomeMessage := ctx.PostForm("welcomeMessage")
- if welcomeMessage != "" && len(welcomeMessage) > 1000 {
+ if welcomeMessage != "" && len(welcomeMessage) < 1000 {
table.UpdateWelcomeMessage(guildId, welcomeMessage)
welcomeMessageValid = true
}
@@ -139,7 +139,7 @@ func UpdateSettingsHandler(ctx *gin.Context) {
// Get panel colour
panelColourHex := ctx.PostForm("panelcolour")
- if panelColourHex == "" {
+ if panelColourHex != "" {
panelColour, err := strconv.ParseUint(panelColourHex, 16, 32)
if err == nil {
table.UpdatePanelColour(guildId, int(panelColour))
@@ -150,7 +150,7 @@ func UpdateSettingsHandler(ctx *gin.Context) {
usersCanClose := ctx.PostForm("userscanclose") == "on"
table.SetUserCanClose(guildId, usersCanClose)
- ctx.Redirect(302, fmt.Sprintf("/manage/%d/settings?validPrefix=%t&validWelcomeMessage=%t&ticketLimitValid=%t", guildId, prefixValid, welcomeMessageValid, ticketLimitValid))
+ ctx.Redirect(302, fmt.Sprintf("/manage/%d/settings?validPrefix=%t&validWelcomeMessage=%t&validTicketLimit=%t", guildId, prefixValid, welcomeMessageValid, ticketLimitValid))
} else {
ctx.Redirect(302, "/login")
}
diff --git a/app/http/server.go b/app/http/server.go
index 78a07b8..e532070 100644
--- a/app/http/server.go
+++ b/app/http/server.go
@@ -49,6 +49,10 @@ func StartServer() {
router.GET("/manage/:id/blacklist", manage.BlacklistHandler)
router.GET("/manage/:id/blacklist/remove/:user", manage.BlacklistRemoveHandler)
+ router.GET("/manage/:id/panels", manage.PanelHandler)
+ router.POST("/manage/:id/panels/create", manage.PanelCreateHandler)
+ router.GET("/manage/:id/panels/delete/:msg", manage.PanelDeleteHandler)
+
router.GET("/manage/:id/tickets", manage.TicketListHandler)
router.GET("/manage/:id/tickets/view/:uuid", manage.TicketViewHandler)
router.POST("/manage/:id/tickets/view/:uuid", manage.SendMessage)
@@ -69,6 +73,7 @@ func createRenderer() multitemplate.Renderer {
r = addManageTemplate(r, "settings")
r = addManageTemplate(r, "ticketlist")
r = addManageTemplate(r, "ticketview")
+ r = addManageTemplate(r, "panels")
return r
}
diff --git a/cache/panelcreate.go b/cache/panelcreate.go
new file mode 100644
index 0000000..dc08137
--- /dev/null
+++ b/cache/panelcreate.go
@@ -0,0 +1,17 @@
+package cache
+
+import (
+ "encoding/json"
+ "github.com/TicketsBot/GoPanel/database/table"
+ "github.com/apex/log"
+)
+
+func (c *RedisClient) PublishPanelCreate(settings table.Panel) {
+ encoded, err := json.Marshal(settings); if err != nil {
+ log.Error(err.Error())
+ return
+ }
+
+ c.Publish("tickets:panel:create", string(encoded))
+}
+
diff --git a/cmd/panel/main.go b/cmd/panel/main.go
index 4578464..acde42e 100644
--- a/cmd/panel/main.go
+++ b/cmd/panel/main.go
@@ -1,22 +1,35 @@
package main
import (
+ crypto_rand "crypto/rand"
+ "encoding/binary"
"fmt"
"github.com/TicketsBot/GoPanel/app/http"
"github.com/TicketsBot/GoPanel/app/http/endpoints/manage"
"github.com/TicketsBot/GoPanel/cache"
"github.com/TicketsBot/GoPanel/config"
"github.com/TicketsBot/GoPanel/database"
+ "github.com/TicketsBot/GoPanel/utils"
+ "github.com/TicketsBot/TicketsGo/sentry"
"math/rand"
"time"
)
func main() {
- rand.Seed(time.Now().UnixNano() % 3497)
+ var b [8]byte
+ _, err := crypto_rand.Read(b[:])
+ if err == nil {
+ rand.Seed(int64(binary.LittleEndian.Uint64(b[:])))
+ } else {
+ sentry.Error(err)
+ rand.Seed(time.Now().UnixNano())
+ }
config.LoadConfig()
database.ConnectToDatabase()
+ utils.LoadEmoji()
+
cache.Client = cache.NewRedisClient()
go Listen(cache.Client)
diff --git a/database/table/panels.go b/database/table/panels.go
new file mode 100644
index 0000000..ae0c775
--- /dev/null
+++ b/database/table/panels.go
@@ -0,0 +1,51 @@
+package table
+
+import (
+ "github.com/TicketsBot/GoPanel/database"
+)
+
+type Panel struct {
+ MessageId int64 `gorm:"column:MESSAGEID"`
+ ChannelId int64 `gorm:"column:CHANNELID"`
+ GuildId int64 `gorm:"column:GUILDID"` // Might be useful in the future so we store it
+
+ Title string `gorm:"column:TITLE;type:VARCHAR(255)"`
+ Content string `gorm:"column:CONTENT;type:TEXT"`
+ Colour int `gorm:"column:COLOUR`
+ TargetCategory int64 `gorm:"column:TARGETCATEGORY"`
+ ReactionEmote string `gorm:"column:REACTIONEMOTE;type:VARCHAR(32)"`
+}
+
+func (Panel) TableName() string {
+ return "panels"
+}
+
+func AddPanel(messageId, channelId, guildId int64, title, content string, colour int, targetCategory int64, reactionEmote string) {
+ database.Database.Create(&Panel{
+ MessageId: messageId,
+ ChannelId: channelId,
+ GuildId: guildId,
+
+ Title: title,
+ Content: content,
+ Colour: colour,
+ TargetCategory: targetCategory,
+ ReactionEmote: reactionEmote,
+ })
+}
+
+func IsPanel(messageId int64, ch chan bool) {
+ var count int
+ database.Database.Table(Panel{}.TableName()).Where(Panel{MessageId: messageId}).Count(&count)
+ ch <- count > 0
+}
+
+func GetPanelsByGuild(guildId int64, ch chan []Panel) {
+ var panels []Panel
+ database.Database.Where(Panel{GuildId: guildId}).Find(&panels)
+ ch <- panels
+}
+
+func DeletePanel(msgId int64) {
+ database.Database.Where(Panel{MessageId: msgId}).Delete(Panel{})
+}
diff --git a/emojis.json b/emojis.json
new file mode 100644
index 0000000..e3164c1
--- /dev/null
+++ b/emojis.json
@@ -0,0 +1,1939 @@
+{
+ "100": "๐ฏ",
+ "1234": "๐ข",
+ "grinning": "๐",
+ "smiley": "๐",
+ "smile": "๐",
+ "grin": "๐",
+ "laughing": "๐",
+ "satisfied": "๐",
+ "sweat_smile": "๐
",
+ "joy": "๐",
+ "rofl": "๐คฃ",
+ "rolling_on_the_floor_laughing": "๐คฃ",
+ "relaxed": "โบ๏ธ",
+ "blush": "๐",
+ "innocent": "๐",
+ "slight_smile": "๐",
+ "slightly_smiling_face": "๐",
+ "upside_down": "๐",
+ "upside_down_face": "๐",
+ "wink": "๐",
+ "relieved": "๐",
+ "heart_eyes": "๐",
+ "smiling_face_with_3_hearts": "๐ฅฐ",
+ "kissing_heart": "๐",
+ "kissing": "๐",
+ "kissing_smiling_eyes": "๐",
+ "kissing_closed_eyes": "๐",
+ "yum": "๐",
+ "stuck_out_tongue": "๐",
+ "stuck_out_tongue_closed_eyes": "๐",
+ "stuck_out_tongue_winking_eye": "๐",
+ "zany_face": "๐คช",
+ "face_with_raised_eyebrow": "๐คจ",
+ "face_with_monocle": "๐ง",
+ "nerd": "๐ค",
+ "nerd_face": "๐ค",
+ "sunglasses": "๐",
+ "star_struck": "๐คฉ",
+ "partying_face": "๐ฅณ",
+ "smirk": "๐",
+ "unamused": "๐",
+ "disappointed": "๐",
+ "pensive": "๐",
+ "worried": "๐",
+ "confused": "๐",
+ "slight_frown": "๐",
+ "slightly_frowning_face": "๐",
+ "frowning2": "โน๏ธ",
+ "white_frowning_face": "โน๏ธ",
+ "persevere": "๐ฃ",
+ "confounded": "๐",
+ "tired_face": "๐ซ",
+ "weary": "๐ฉ",
+ "pleading_face": "๐ฅบ",
+ "cry": "๐ข",
+ "sob": "๐ญ",
+ "triumph": "๐ค",
+ "angry": "๐ ",
+ "rage": "๐ก",
+ "face_with_symbols_over_mouth": "๐คฌ",
+ "exploding_head": "๐คฏ",
+ "flushed": "๐ณ",
+ "hot_face": "๐ฅต",
+ "cold_face": "๐ฅถ",
+ "scream": "๐ฑ",
+ "fearful": "๐จ",
+ "cold_sweat": "๐ฐ",
+ "disappointed_relieved": "๐ฅ",
+ "sweat": "๐",
+ "hugging": "๐ค",
+ "hugging_face": "๐ค",
+ "thinking": "๐ค",
+ "thinking_face": "๐ค",
+ "face_with_hand_over_mouth": "๐คญ",
+ "yawning_face": "๐ฅฑ",
+ "shushing_face": "๐คซ",
+ "lying_face": "๐คฅ",
+ "liar": "๐คฅ",
+ "no_mouth": "๐ถ",
+ "neutral_face": "๐",
+ "expressionless": "๐",
+ "grimacing": "๐ฌ",
+ "rolling_eyes": "๐",
+ "face_with_rolling_eyes": "๐",
+ "hushed": "๐ฏ",
+ "frowning": "๐ฆ",
+ "anguished": "๐ง",
+ "open_mouth": "๐ฎ",
+ "astonished": "๐ฒ",
+ "sleeping": "๐ด",
+ "drooling_face": "๐คค",
+ "drool": "๐คค",
+ "sleepy": "๐ช",
+ "dizzy_face": "๐ต",
+ "zipper_mouth": "๐ค",
+ "zipper_mouth_face": "๐ค",
+ "woozy_face": "๐ฅด",
+ "nauseated_face": "๐คข",
+ "sick": "๐คข",
+ "face_vomiting": "๐คฎ",
+ "sneezing_face": "๐คง",
+ "sneeze": "๐คง",
+ "mask": "๐ท",
+ "thermometer_face": "๐ค",
+ "face_with_thermometer": "๐ค",
+ "head_bandage": "๐ค",
+ "face_with_head_bandage": "๐ค",
+ "money_mouth": "๐ค",
+ "money_mouth_face": "๐ค",
+ "cowboy": "๐ค ",
+ "face_with_cowboy_hat": "๐ค ",
+ "smiling_imp": "๐",
+ "imp": "๐ฟ",
+ "japanese_ogre": "๐น",
+ "japanese_goblin": "๐บ",
+ "clown": "๐คก",
+ "clown_face": "๐คก",
+ "poop": "๐ฉ",
+ "shit": "๐ฉ",
+ "hankey": "๐ฉ",
+ "poo": "๐ฉ",
+ "ghost": "๐ป",
+ "skull": "๐",
+ "skeleton": "๐",
+ "skull_crossbones": "โ ๏ธ",
+ "skull_and_crossbones": "โ ๏ธ",
+ "alien": "๐ฝ",
+ "space_invader": "๐พ",
+ "robot": "๐ค",
+ "robot_face": "๐ค",
+ "jack_o_lantern": "๐",
+ "smiley_cat": "๐บ",
+ "smile_cat": "๐ธ",
+ "joy_cat": "๐น",
+ "heart_eyes_cat": "๐ป",
+ "smirk_cat": "๐ผ",
+ "kissing_cat": "๐ฝ",
+ "scream_cat": "๐",
+ "crying_cat_face": "๐ฟ",
+ "pouting_cat": "๐พ",
+ "palms_up_together": "๐คฒ",
+ "open_hands": "๐",
+ "raised_hands": "๐",
+ "clap": "๐",
+ "handshake": "๐ค",
+ "shaking_hands": "๐ค",
+ "thumbsup": "๐",
+ "+1": "๐",
+ "thumbup": "๐",
+ "thumbsdown": "๐",
+ "-1": "๐",
+ "thumbdown": "๐",
+ "punch": "๐",
+ "fist": "โ",
+ "left_facing_fist": "๐ค",
+ "left_fist": "๐ค",
+ "right_facing_fist": "๐ค",
+ "right_fist": "๐ค",
+ "fingers_crossed": "๐ค",
+ "hand_with_index_and_middle_finger_crossed": "๐ค",
+ "v": "โ๏ธ",
+ "love_you_gesture": "๐ค",
+ "metal": "๐ค",
+ "sign_of_the_horns": "๐ค",
+ "ok_hand": "๐",
+ "pinching_hand": "๐ค",
+ "point_left": "๐",
+ "point_right": "๐",
+ "point_up_2": "๐",
+ "point_down": "๐",
+ "point_up": "โ๏ธ",
+ "raised_hand": "โ",
+ "raised_back_of_hand": "๐ค",
+ "back_of_hand": "๐ค",
+ "hand_splayed": "๐๏ธ",
+ "raised_hand_with_fingers_splayed": "๐๏ธ",
+ "vulcan": "๐",
+ "raised_hand_with_part_between_middle_and_ring_fingers": "๐",
+ "wave": "๐",
+ "call_me": "๐ค",
+ "call_me_hand": "๐ค",
+ "muscle": "๐ช",
+ "mechanical_arm": "๐ฆพ",
+ "middle_finger": "๐",
+ "reversed_hand_with_middle_finger_extended": "๐",
+ "writing_hand": "โ๏ธ",
+ "pray": "๐",
+ "foot": "๐ฆถ",
+ "leg": "๐ฆต",
+ "mechanical_leg": "๐ฆฟ",
+ "lipstick": "๐",
+ "kiss": "๐",
+ "lips": "๐",
+ "tooth": "๐ฆท",
+ "bone": "๐ฆด",
+ "tongue": "๐
",
+ "ear": "๐",
+ "ear_with_hearing_aid": "๐ฆป",
+ "nose": "๐",
+ "footprints": "๐ฃ",
+ "eye": "๐๏ธ",
+ "eyes": "๐",
+ "brain": "๐ง ",
+ "speaking_head": "๐ฃ๏ธ",
+ "speaking_head_in_silhouette": "๐ฃ๏ธ",
+ "bust_in_silhouette": "๐ค",
+ "busts_in_silhouette": "๐ฅ",
+ "baby": "๐ถ",
+ "girl": "๐ง",
+ "child": "๐ง",
+ "boy": "๐ฆ",
+ "woman": "๐ฉ",
+ "adult": "๐ง",
+ "man": "๐จ",
+ "woman_curly_haired": "๐ฉโ๐ฆฑ",
+ "man_curly_haired": "๐จโ๐ฆฑ",
+ "woman_red_haired": "๐ฉโ๐ฆฐ",
+ "man_red_haired": "๐จโ๐ฆฐ",
+ "blond_haired_woman": "๐ฑโโ๏ธ",
+ "blond_haired_person": "๐ฑ",
+ "person_with_blond_hair": "๐ฑ",
+ "blond_haired_man": "๐ฑโโ๏ธ",
+ "woman_white_haired": "๐ฉโ๐ฆณ",
+ "man_white_haired": "๐จโ๐ฆณ",
+ "woman_bald": "๐ฉโ๐ฆฒ",
+ "man_bald": "๐จโ๐ฆฒ",
+ "bearded_person": "๐ง",
+ "older_woman": "๐ต",
+ "grandma": "๐ต",
+ "older_adult": "๐ง",
+ "older_man": "๐ด",
+ "man_with_chinese_cap": "๐ฒ",
+ "man_with_gua_pi_mao": "๐ฒ",
+ "person_wearing_turban": "๐ณ",
+ "man_with_turban": "๐ณ",
+ "woman_wearing_turban": "๐ณโโ๏ธ",
+ "man_wearing_turban": "๐ณโโ๏ธ",
+ "woman_with_headscarf": "๐ง",
+ "police_officer": "๐ฎ",
+ "cop": "๐ฎ",
+ "woman_police_officer": "๐ฎโโ๏ธ",
+ "man_police_officer": "๐ฎโโ๏ธ",
+ "construction_worker": "๐ท",
+ "woman_construction_worker": "๐ทโโ๏ธ",
+ "man_construction_worker": "๐ทโโ๏ธ",
+ "guard": "๐",
+ "guardsman": "๐",
+ "woman_guard": "๐โโ๏ธ",
+ "man_guard": "๐โโ๏ธ",
+ "detective": "๐ต๏ธ",
+ "spy": "๐ต๏ธ",
+ "sleuth_or_spy": "๐ต๏ธ",
+ "woman_detective": "๐ต๏ธโโ๏ธ",
+ "man_detective": "๐ต๏ธโโ๏ธ",
+ "woman_health_worker": "๐ฉโโ๏ธ",
+ "man_health_worker": "๐จโโ๏ธ",
+ "woman_farmer": "๐ฉโ๐พ",
+ "man_farmer": "๐จโ๐พ",
+ "woman_cook": "๐ฉโ๐ณ",
+ "man_cook": "๐จโ๐ณ",
+ "woman_student": "๐ฉโ๐",
+ "man_student": "๐จโ๐",
+ "woman_singer": "๐ฉโ๐ค",
+ "man_singer": "๐จโ๐ค",
+ "woman_teacher": "๐ฉโ๐ซ",
+ "man_teacher": "๐จโ๐ซ",
+ "woman_factory_worker": "๐ฉโ๐ญ",
+ "man_factory_worker": "๐จโ๐ญ",
+ "woman_technologist": "๐ฉโ๐ป",
+ "man_technologist": "๐จโ๐ป",
+ "woman_office_worker": "๐ฉโ๐ผ",
+ "man_office_worker": "๐จโ๐ผ",
+ "woman_mechanic": "๐ฉโ๐ง",
+ "man_mechanic": "๐จโ๐ง",
+ "woman_scientist": "๐ฉโ๐ฌ",
+ "man_scientist": "๐จโ๐ฌ",
+ "woman_artist": "๐ฉโ๐จ",
+ "man_artist": "๐จโ๐จ",
+ "woman_firefighter": "๐ฉโ๐",
+ "man_firefighter": "๐จโ๐",
+ "woman_pilot": "๐ฉโโ๏ธ",
+ "man_pilot": "๐จโโ๏ธ",
+ "woman_astronaut": "๐ฉโ๐",
+ "man_astronaut": "๐จโ๐",
+ "woman_judge": "๐ฉโโ๏ธ",
+ "man_judge": "๐จโโ๏ธ",
+ "bride_with_veil": "๐ฐ",
+ "man_in_tuxedo": "๐คต",
+ "princess": "๐ธ",
+ "prince": "๐คด",
+ "superhero": "๐ฆธ",
+ "woman_superhero": "๐ฆธโโ๏ธ",
+ "man_superhero": "๐ฆธโโ๏ธ",
+ "supervillain": "๐ฆน",
+ "woman_supervillain": "๐ฆนโโ๏ธ",
+ "man_supervillain": "๐ฆนโโ๏ธ",
+ "mrs_claus": "๐คถ",
+ "mother_christmas": "๐คถ",
+ "santa": "๐
",
+ "mage": "๐ง",
+ "woman_mage": "๐งโโ๏ธ",
+ "man_mage": "๐งโโ๏ธ",
+ "elf": "๐ง",
+ "woman_elf": "๐งโโ๏ธ",
+ "man_elf": "๐งโโ๏ธ",
+ "vampire": "๐ง",
+ "woman_vampire": "๐งโโ๏ธ",
+ "man_vampire": "๐งโโ๏ธ",
+ "zombie": "๐ง",
+ "woman_zombie": "๐งโโ๏ธ",
+ "man_zombie": "๐งโโ๏ธ",
+ "genie": "๐ง",
+ "woman_genie": "๐งโโ๏ธ",
+ "man_genie": "๐งโโ๏ธ",
+ "merperson": "๐ง",
+ "mermaid": "๐งโโ๏ธ",
+ "merman": "๐งโโ๏ธ",
+ "fairy": "๐ง",
+ "woman_fairy": "๐งโโ๏ธ",
+ "man_fairy": "๐งโโ๏ธ",
+ "angel": "๐ผ",
+ "pregnant_woman": "๐คฐ",
+ "expecting_woman": "๐คฐ",
+ "breast_feeding": "๐คฑ",
+ "person_bowing": "๐",
+ "bow": "๐",
+ "woman_bowing": "๐โโ๏ธ",
+ "man_bowing": "๐โโ๏ธ",
+ "person_tipping_hand": "๐",
+ "information_desk_person": "๐",
+ "woman_tipping_hand": "๐โโ๏ธ",
+ "man_tipping_hand": "๐โโ๏ธ",
+ "person_gesturing_no": "๐
",
+ "no_good": "๐
",
+ "woman_gesturing_no": "๐
โโ๏ธ",
+ "man_gesturing_no": "๐
โโ๏ธ",
+ "person_gesturing_ok": "๐",
+ "ok_woman": "๐",
+ "woman_gesturing_ok": "๐โโ๏ธ",
+ "man_gesturing_ok": "๐โโ๏ธ",
+ "person_raising_hand": "๐",
+ "raising_hand": "๐",
+ "woman_raising_hand": "๐โโ๏ธ",
+ "man_raising_hand": "๐โโ๏ธ",
+ "deaf_person": "๐ง",
+ "deaf_woman": "๐งโโ๏ธ",
+ "deaf_man": "๐งโโ๏ธ",
+ "person_facepalming": "๐คฆ",
+ "face_palm": "๐คฆ",
+ "facepalm": "๐คฆ",
+ "woman_facepalming": "๐คฆโโ๏ธ",
+ "man_facepalming": "๐คฆโโ๏ธ",
+ "person_shrugging": "๐คท",
+ "shrug": "๐คท",
+ "woman_shrugging": "๐คทโโ๏ธ",
+ "man_shrugging": "๐คทโโ๏ธ",
+ "person_pouting": "๐",
+ "person_with_pouting_face": "๐",
+ "woman_pouting": "๐โโ๏ธ",
+ "man_pouting": "๐โโ๏ธ",
+ "person_frowning": "๐",
+ "woman_frowning": "๐โโ๏ธ",
+ "man_frowning": "๐โโ๏ธ",
+ "person_getting_haircut": "๐",
+ "haircut": "๐",
+ "woman_getting_haircut": "๐โโ๏ธ",
+ "man_getting_haircut": "๐โโ๏ธ",
+ "person_getting_massage": "๐",
+ "massage": "๐",
+ "woman_getting_face_massage": "๐โโ๏ธ",
+ "man_getting_face_massage": "๐โโ๏ธ",
+ "person_in_steamy_room": "๐ง",
+ "woman_in_steamy_room": "๐งโโ๏ธ",
+ "man_in_steamy_room": "๐งโโ๏ธ",
+ "nail_care": "๐
",
+ "selfie": "๐คณ",
+ "dancer": "๐",
+ "man_dancing": "๐บ",
+ "male_dancer": "๐บ",
+ "people_with_bunny_ears_partying": "๐ฏ",
+ "dancers": "๐ฏ",
+ "women_with_bunny_ears_partying": "๐ฏโโ๏ธ",
+ "men_with_bunny_ears_partying": "๐ฏโโ๏ธ",
+ "levitate": "๐ด๏ธ",
+ "man_in_business_suit_levitating": "๐ด๏ธ",
+ "person_walking": "๐ถ",
+ "walking": "๐ถ",
+ "woman_walking": "๐ถโโ๏ธ",
+ "man_walking": "๐ถโโ๏ธ",
+ "person_running": "๐",
+ "runner": "๐",
+ "woman_running": "๐โโ๏ธ",
+ "man_running": "๐โโ๏ธ",
+ "person_standing": "๐ง",
+ "woman_standing": "๐งโโ๏ธ",
+ "man_standing": "๐งโโ๏ธ",
+ "person_kneeling": "๐ง",
+ "woman_kneeling": "๐งโโ๏ธ",
+ "man_kneeling": "๐งโโ๏ธ",
+ "woman_with_probing_cane": "๐ฉโ๐ฆฏ",
+ "man_with_probing_cane": "๐จโ๐ฆฏ",
+ "woman_in_motorized_wheelchair": "๐ฉโ๐ฆผ",
+ "man_in_motorized_wheelchair": "๐จโ๐ฆผ",
+ "woman_in_manual_wheelchair": "๐ฉโ๐ฆฝ",
+ "man_in_manual_wheelchair": "๐จโ๐ฆฝ",
+ "people_holding_hands": "๐งโ๐คโ๐ง",
+ "couple": "๐ซ",
+ "two_women_holding_hands": "๐ญ",
+ "two_men_holding_hands": "๐ฌ",
+ "couple_with_heart": "๐",
+ "couple_with_heart_woman_man": "๐ฉโโค๏ธโ๐จ",
+ "couple_ww": "๐ฉโโค๏ธโ๐ฉ",
+ "couple_with_heart_ww": "๐ฉโโค๏ธโ๐ฉ",
+ "couple_mm": "๐จโโค๏ธโ๐จ",
+ "couple_with_heart_mm": "๐จโโค๏ธโ๐จ",
+ "couplekiss": "๐",
+ "kiss_woman_man": "๐ฉโโค๏ธโ๐โ๐จ",
+ "kiss_ww": "๐ฉโโค๏ธโ๐โ๐ฉ",
+ "couplekiss_ww": "๐ฉโโค๏ธโ๐โ๐ฉ",
+ "kiss_mm": "๐จโโค๏ธโ๐โ๐จ",
+ "couplekiss_mm": "๐จโโค๏ธโ๐โ๐จ",
+ "family": "๐ช",
+ "family_man_woman_boy": "๐จโ๐ฉโ๐ฆ",
+ "family_mwg": "๐จโ๐ฉโ๐ง",
+ "family_mwgb": "๐จโ๐ฉโ๐งโ๐ฆ",
+ "family_mwbb": "๐จโ๐ฉโ๐ฆโ๐ฆ",
+ "family_mwgg": "๐จโ๐ฉโ๐งโ๐ง",
+ "family_wwb": "๐ฉโ๐ฉโ๐ฆ",
+ "family_wwg": "๐ฉโ๐ฉโ๐ง",
+ "family_wwgb": "๐ฉโ๐ฉโ๐งโ๐ฆ",
+ "family_wwbb": "๐ฉโ๐ฉโ๐ฆโ๐ฆ",
+ "family_wwgg": "๐ฉโ๐ฉโ๐งโ๐ง",
+ "family_mmb": "๐จโ๐จโ๐ฆ",
+ "family_mmg": "๐จโ๐จโ๐ง",
+ "family_mmgb": "๐จโ๐จโ๐งโ๐ฆ",
+ "family_mmbb": "๐จโ๐จโ๐ฆโ๐ฆ",
+ "family_mmgg": "๐จโ๐จโ๐งโ๐ง",
+ "family_woman_boy": "๐ฉโ๐ฆ",
+ "family_woman_girl": "๐ฉโ๐ง",
+ "family_woman_girl_boy": "๐ฉโ๐งโ๐ฆ",
+ "family_woman_boy_boy": "๐ฉโ๐ฆโ๐ฆ",
+ "family_woman_girl_girl": "๐ฉโ๐งโ๐ง",
+ "family_man_boy": "๐จโ๐ฆ",
+ "family_man_girl": "๐จโ๐ง",
+ "family_man_girl_boy": "๐จโ๐งโ๐ฆ",
+ "family_man_boy_boy": "๐จโ๐ฆโ๐ฆ",
+ "family_man_girl_girl": "๐จโ๐งโ๐ง",
+ "yarn": "๐งถ",
+ "thread": "๐งต",
+ "coat": "๐งฅ",
+ "lab_coat": "๐ฅผ",
+ "safety_vest": "๐ฆบ",
+ "womans_clothes": "๐",
+ "shirt": "๐",
+ "jeans": "๐",
+ "shorts": "๐ฉณ",
+ "necktie": "๐",
+ "dress": "๐",
+ "bikini": "๐",
+ "one_piece_swimsuit": "๐ฉฑ",
+ "kimono": "๐",
+ "sari": "๐ฅป",
+ "womans_flat_shoe": "๐ฅฟ",
+ "high_heel": "๐ ",
+ "sandal": "๐ก",
+ "boot": "๐ข",
+ "ballet_shoes": "๐ฉฐ",
+ "mans_shoe": "๐",
+ "athletic_shoe": "๐",
+ "hiking_boot": "๐ฅพ",
+ "briefs": "๐ฉฒ",
+ "socks": "๐งฆ",
+ "gloves": "๐งค",
+ "scarf": "๐งฃ",
+ "tophat": "๐ฉ",
+ "billed_cap": "๐งข",
+ "womans_hat": "๐",
+ "mortar_board": "๐",
+ "helmet_with_cross": "โ๏ธ",
+ "helmet_with_white_cross": "โ๏ธ",
+ "crown": "๐",
+ "ring": "๐",
+ "pouch": "๐",
+ "purse": "๐",
+ "handbag": "๐",
+ "briefcase": "๐ผ",
+ "school_satchel": "๐",
+ "luggage": "๐งณ",
+ "eyeglasses": "๐",
+ "dark_sunglasses": "๐ถ๏ธ",
+ "goggles": "๐ฅฝ",
+ "diving_mask": "๐คฟ",
+ "closed_umbrella": "๐",
+ "dog": "๐ถ",
+ "cat": "๐ฑ",
+ "mouse": "๐ญ",
+ "hamster": "๐น",
+ "rabbit": "๐ฐ",
+ "fox": "๐ฆ",
+ "fox_face": "๐ฆ",
+ "bear": "๐ป",
+ "panda_face": "๐ผ",
+ "koala": "๐จ",
+ "tiger": "๐ฏ",
+ "lion_face": "๐ฆ",
+ "lion": "๐ฆ",
+ "cow": "๐ฎ",
+ "pig": "๐ท",
+ "pig_nose": "๐ฝ",
+ "frog": "๐ธ",
+ "monkey_face": "๐ต",
+ "see_no_evil": "๐",
+ "hear_no_evil": "๐",
+ "speak_no_evil": "๐",
+ "monkey": "๐",
+ "chicken": "๐",
+ "penguin": "๐ง",
+ "bird": "๐ฆ",
+ "baby_chick": "๐ค",
+ "hatching_chick": "๐ฃ",
+ "hatched_chick": "๐ฅ",
+ "duck": "๐ฆ",
+ "eagle": "๐ฆ
",
+ "owl": "๐ฆ",
+ "bat": "๐ฆ",
+ "wolf": "๐บ",
+ "boar": "๐",
+ "horse": "๐ด",
+ "unicorn": "๐ฆ",
+ "unicorn_face": "๐ฆ",
+ "bee": "๐",
+ "bug": "๐",
+ "butterfly": "๐ฆ",
+ "snail": "๐",
+ "shell": "๐",
+ "beetle": "๐",
+ "ant": "๐",
+ "mosquito": "๐ฆ",
+ "cricket": "๐ฆ",
+ "spider": "๐ท๏ธ",
+ "spider_web": "๐ธ๏ธ",
+ "scorpion": "๐ฆ",
+ "turtle": "๐ข",
+ "snake": "๐",
+ "lizard": "๐ฆ",
+ "t_rex": "๐ฆ",
+ "sauropod": "๐ฆ",
+ "octopus": "๐",
+ "squid": "๐ฆ",
+ "shrimp": "๐ฆ",
+ "lobster": "๐ฆ",
+ "oyster": "๐ฆช",
+ "crab": "๐ฆ",
+ "blowfish": "๐ก",
+ "tropical_fish": "๐ ",
+ "fish": "๐",
+ "dolphin": "๐ฌ",
+ "whale": "๐ณ",
+ "whale2": "๐",
+ "shark": "๐ฆ",
+ "crocodile": "๐",
+ "tiger2": "๐
",
+ "leopard": "๐",
+ "zebra": "๐ฆ",
+ "gorilla": "๐ฆ",
+ "orangutan": "๐ฆง",
+ "elephant": "๐",
+ "hippopotamus": "๐ฆ",
+ "rhino": "๐ฆ",
+ "rhinoceros": "๐ฆ",
+ "dromedary_camel": "๐ช",
+ "camel": "๐ซ",
+ "giraffe": "๐ฆ",
+ "kangaroo": "๐ฆ",
+ "water_buffalo": "๐",
+ "ox": "๐",
+ "cow2": "๐",
+ "racehorse": "๐",
+ "pig2": "๐",
+ "ram": "๐",
+ "llama": "๐ฆ",
+ "sheep": "๐",
+ "goat": "๐",
+ "deer": "๐ฆ",
+ "dog2": "๐",
+ "guide_dog": "๐ฆฎ",
+ "service_dog": "๐โ๐ฆบ",
+ "poodle": "๐ฉ",
+ "cat2": "๐",
+ "rooster": "๐",
+ "turkey": "๐ฆ",
+ "peacock": "๐ฆ",
+ "parrot": "๐ฆ",
+ "swan": "๐ฆข",
+ "flamingo": "๐ฆฉ",
+ "dove": "๐๏ธ",
+ "dove_of_peace": "๐๏ธ",
+ "rabbit2": "๐",
+ "sloth": "๐ฆฅ",
+ "otter": "๐ฆฆ",
+ "skunk": "๐ฆจ",
+ "raccoon": "๐ฆ",
+ "badger": "๐ฆก",
+ "mouse2": "๐",
+ "rat": "๐",
+ "chipmunk": "๐ฟ๏ธ",
+ "hedgehog": "๐ฆ",
+ "feet": "๐พ",
+ "paw_prints": "๐พ",
+ "dragon": "๐",
+ "dragon_face": "๐ฒ",
+ "cactus": "๐ต",
+ "christmas_tree": "๐",
+ "evergreen_tree": "๐ฒ",
+ "deciduous_tree": "๐ณ",
+ "palm_tree": "๐ด",
+ "seedling": "๐ฑ",
+ "herb": "๐ฟ",
+ "shamrock": "โ๏ธ",
+ "four_leaf_clover": "๐",
+ "bamboo": "๐",
+ "tanabata_tree": "๐",
+ "leaves": "๐",
+ "fallen_leaf": "๐",
+ "maple_leaf": "๐",
+ "mushroom": "๐",
+ "ear_of_rice": "๐พ",
+ "bouquet": "๐",
+ "tulip": "๐ท",
+ "rose": "๐น",
+ "wilted_rose": "๐ฅ",
+ "wilted_flower": "๐ฅ",
+ "hibiscus": "๐บ",
+ "cherry_blossom": "๐ธ",
+ "blossom": "๐ผ",
+ "sunflower": "๐ป",
+ "sun_with_face": "๐",
+ "full_moon_with_face": "๐",
+ "first_quarter_moon_with_face": "๐",
+ "last_quarter_moon_with_face": "๐",
+ "new_moon_with_face": "๐",
+ "full_moon": "๐",
+ "waning_gibbous_moon": "๐",
+ "last_quarter_moon": "๐",
+ "waning_crescent_moon": "๐",
+ "new_moon": "๐",
+ "waxing_crescent_moon": "๐",
+ "first_quarter_moon": "๐",
+ "waxing_gibbous_moon": "๐",
+ "crescent_moon": "๐",
+ "earth_americas": "๐",
+ "earth_africa": "๐",
+ "earth_asia": "๐",
+ "ringed_planet": "๐ช",
+ "dizzy": "๐ซ",
+ "star": "โญ",
+ "star2": "๐",
+ "sparkles": "โจ",
+ "zap": "โก",
+ "comet": "โ๏ธ",
+ "boom": "๐ฅ",
+ "fire": "๐ฅ",
+ "flame": "๐ฅ",
+ "cloud_tornado": "๐ช๏ธ",
+ "cloud_with_tornado": "๐ช๏ธ",
+ "rainbow": "๐",
+ "sunny": "โ๏ธ",
+ "white_sun_small_cloud": "๐ค๏ธ",
+ "white_sun_with_small_cloud": "๐ค๏ธ",
+ "partly_sunny": "โ
",
+ "white_sun_cloud": "๐ฅ๏ธ",
+ "white_sun_behind_cloud": "๐ฅ๏ธ",
+ "cloud": "โ๏ธ",
+ "white_sun_rain_cloud": "๐ฆ๏ธ",
+ "white_sun_behind_cloud_with_rain": "๐ฆ๏ธ",
+ "cloud_rain": "๐ง๏ธ",
+ "cloud_with_rain": "๐ง๏ธ",
+ "thunder_cloud_rain": "โ๏ธ",
+ "thunder_cloud_and_rain": "โ๏ธ",
+ "cloud_lightning": "๐ฉ๏ธ",
+ "cloud_with_lightning": "๐ฉ๏ธ",
+ "cloud_snow": "๐จ๏ธ",
+ "cloud_with_snow": "๐จ๏ธ",
+ "snowflake": "โ๏ธ",
+ "snowman2": "โ๏ธ",
+ "snowman": "โ",
+ "wind_blowing_face": "๐ฌ๏ธ",
+ "dash": "๐จ",
+ "droplet": "๐ง",
+ "sweat_drops": "๐ฆ",
+ "umbrella": "โ",
+ "umbrella2": "โ๏ธ",
+ "ocean": "๐",
+ "fog": "๐ซ๏ธ",
+ "green_apple": "๐",
+ "apple": "๐",
+ "pear": "๐",
+ "tangerine": "๐",
+ "lemon": "๐",
+ "banana": "๐",
+ "watermelon": "๐",
+ "grapes": "๐",
+ "strawberry": "๐",
+ "melon": "๐",
+ "cherries": "๐",
+ "peach": "๐",
+ "mango": "๐ฅญ",
+ "pineapple": "๐",
+ "coconut": "๐ฅฅ",
+ "kiwi": "๐ฅ",
+ "kiwifruit": "๐ฅ",
+ "tomato": "๐
",
+ "eggplant": "๐",
+ "avocado": "๐ฅ",
+ "broccoli": "๐ฅฆ",
+ "leafy_green": "๐ฅฌ",
+ "cucumber": "๐ฅ",
+ "hot_pepper": "๐ถ๏ธ",
+ "corn": "๐ฝ",
+ "carrot": "๐ฅ",
+ "onion": "๐ง
",
+ "garlic": "๐ง",
+ "potato": "๐ฅ",
+ "sweet_potato": "๐ ",
+ "croissant": "๐ฅ",
+ "bagel": "๐ฅฏ",
+ "bread": "๐",
+ "french_bread": "๐ฅ",
+ "baguette_bread": "๐ฅ",
+ "pretzel": "๐ฅจ",
+ "cheese": "๐ง",
+ "cheese_wedge": "๐ง",
+ "egg": "๐ฅ",
+ "cooking": "๐ณ",
+ "pancakes": "๐ฅ",
+ "waffle": "๐ง",
+ "bacon": "๐ฅ",
+ "cut_of_meat": "๐ฅฉ",
+ "poultry_leg": "๐",
+ "meat_on_bone": "๐",
+ "hotdog": "๐ญ",
+ "hot_dog": "๐ญ",
+ "hamburger": "๐",
+ "fries": "๐",
+ "pizza": "๐",
+ "sandwich": "๐ฅช",
+ "falafel": "๐ง",
+ "stuffed_flatbread": "๐ฅ",
+ "stuffed_pita": "๐ฅ",
+ "taco": "๐ฎ",
+ "burrito": "๐ฏ",
+ "salad": "๐ฅ",
+ "green_salad": "๐ฅ",
+ "shallow_pan_of_food": "๐ฅ",
+ "paella": "๐ฅ",
+ "canned_food": "๐ฅซ",
+ "spaghetti": "๐",
+ "ramen": "๐",
+ "stew": "๐ฒ",
+ "curry": "๐",
+ "sushi": "๐ฃ",
+ "bento": "๐ฑ",
+ "dumpling": "๐ฅ",
+ "fried_shrimp": "๐ค",
+ "rice_ball": "๐",
+ "rice": "๐",
+ "rice_cracker": "๐",
+ "fish_cake": "๐ฅ",
+ "fortune_cookie": "๐ฅ ",
+ "moon_cake": "๐ฅฎ",
+ "oden": "๐ข",
+ "dango": "๐ก",
+ "shaved_ice": "๐ง",
+ "ice_cream": "๐จ",
+ "icecream": "๐ฆ",
+ "pie": "๐ฅง",
+ "cupcake": "๐ง",
+ "cake": "๐ฐ",
+ "birthday": "๐",
+ "custard": "๐ฎ",
+ "pudding": "๐ฎ",
+ "flan": "๐ฎ",
+ "lollipop": "๐ญ",
+ "candy": "๐ฌ",
+ "chocolate_bar": "๐ซ",
+ "popcorn": "๐ฟ",
+ "doughnut": "๐ฉ",
+ "cookie": "๐ช",
+ "chestnut": "๐ฐ",
+ "peanuts": "๐ฅ",
+ "shelled_peanut": "๐ฅ",
+ "honey_pot": "๐ฏ",
+ "butter": "๐ง",
+ "milk": "๐ฅ",
+ "glass_of_milk": "๐ฅ",
+ "baby_bottle": "๐ผ",
+ "coffee": "โ",
+ "tea": "๐ต",
+ "mate": "๐ง",
+ "cup_with_straw": "๐ฅค",
+ "beverage_box": "๐ง",
+ "ice_cube": "๐ง",
+ "sake": "๐ถ",
+ "beer": "๐บ",
+ "beers": "๐ป",
+ "champagne_glass": "๐ฅ",
+ "clinking_glass": "๐ฅ",
+ "wine_glass": "๐ท",
+ "tumbler_glass": "๐ฅ",
+ "whisky": "๐ฅ",
+ "cocktail": "๐ธ",
+ "tropical_drink": "๐น",
+ "champagne": "๐พ",
+ "bottle_with_popping_cork": "๐พ",
+ "spoon": "๐ฅ",
+ "fork_and_knife": "๐ด",
+ "fork_knife_plate": "๐ฝ๏ธ",
+ "fork_and_knife_with_plate": "๐ฝ๏ธ",
+ "bowl_with_spoon": "๐ฅฃ",
+ "takeout_box": "๐ฅก",
+ "chopsticks": "๐ฅข",
+ "salt": "๐ง",
+ "soccer": "โฝ",
+ "basketball": "๐",
+ "football": "๐",
+ "baseball": "โพ",
+ "softball": "๐ฅ",
+ "tennis": "๐พ",
+ "volleyball": "๐",
+ "rugby_football": "๐",
+ "flying_disc": "๐ฅ",
+ "8ball": "๐ฑ",
+ "ping_pong": "๐",
+ "table_tennis": "๐",
+ "badminton": "๐ธ",
+ "hockey": "๐",
+ "field_hockey": "๐",
+ "lacrosse": "๐ฅ",
+ "cricket_game": "๐",
+ "cricket_bat_ball": "๐",
+ "goal": "๐ฅ
",
+ "goal_net": "๐ฅ
",
+ "golf": "โณ",
+ "bow_and_arrow": "๐น",
+ "archery": "๐น",
+ "fishing_pole_and_fish": "๐ฃ",
+ "boxing_glove": "๐ฅ",
+ "boxing_gloves": "๐ฅ",
+ "martial_arts_uniform": "๐ฅ",
+ "karate_uniform": "๐ฅ",
+ "running_shirt_with_sash": "๐ฝ",
+ "skateboard": "๐น",
+ "sled": "๐ท",
+ "parachute": "๐ช",
+ "ice_skate": "โธ๏ธ",
+ "curling_stone": "๐ฅ",
+ "ski": "๐ฟ",
+ "skier": "โท๏ธ",
+ "snowboarder": "๐",
+ "person_lifting_weights": "๐๏ธ",
+ "lifter": "๐๏ธ",
+ "weight_lifter": "๐๏ธ",
+ "woman_lifting_weights": "๐๏ธโโ๏ธ",
+ "man_lifting_weights": "๐๏ธโโ๏ธ",
+ "people_wrestling": "๐คผ",
+ "wrestlers": "๐คผ",
+ "wrestling": "๐คผ",
+ "women_wrestling": "๐คผโโ๏ธ",
+ "men_wrestling": "๐คผโโ๏ธ",
+ "person_doing_cartwheel": "๐คธ",
+ "cartwheel": "๐คธ",
+ "woman_cartwheeling": "๐คธโโ๏ธ",
+ "man_cartwheeling": "๐คธโโ๏ธ",
+ "person_bouncing_ball": "โน๏ธ",
+ "basketball_player": "โน๏ธ",
+ "person_with_ball": "โน๏ธ",
+ "woman_bouncing_ball": "โน๏ธโโ๏ธ",
+ "man_bouncing_ball": "โน๏ธโโ๏ธ",
+ "person_fencing": "๐คบ",
+ "fencer": "๐คบ",
+ "fencing": "๐คบ",
+ "person_playing_handball": "๐คพ",
+ "handball": "๐คพ",
+ "woman_playing_handball": "๐คพโโ๏ธ",
+ "man_playing_handball": "๐คพโโ๏ธ",
+ "person_golfing": "๐๏ธ",
+ "golfer": "๐๏ธ",
+ "woman_golfing": "๐๏ธโโ๏ธ",
+ "man_golfing": "๐๏ธโโ๏ธ",
+ "horse_racing": "๐",
+ "person_in_lotus_position": "๐ง",
+ "woman_in_lotus_position": "๐งโโ๏ธ",
+ "man_in_lotus_position": "๐งโโ๏ธ",
+ "person_surfing": "๐",
+ "surfer": "๐",
+ "woman_surfing": "๐โโ๏ธ",
+ "man_surfing": "๐โโ๏ธ",
+ "person_swimming": "๐",
+ "swimmer": "๐",
+ "woman_swimming": "๐โโ๏ธ",
+ "man_swimming": "๐โโ๏ธ",
+ "person_playing_water_polo": "๐คฝ",
+ "water_polo": "๐คฝ",
+ "woman_playing_water_polo": "๐คฝโโ๏ธ",
+ "man_playing_water_polo": "๐คฝโโ๏ธ",
+ "person_rowing_boat": "๐ฃ",
+ "rowboat": "๐ฃ",
+ "woman_rowing_boat": "๐ฃโโ๏ธ",
+ "man_rowing_boat": "๐ฃโโ๏ธ",
+ "person_climbing": "๐ง",
+ "woman_climbing": "๐งโโ๏ธ",
+ "man_climbing": "๐งโโ๏ธ",
+ "person_mountain_biking": "๐ต",
+ "mountain_bicyclist": "๐ต",
+ "woman_mountain_biking": "๐ตโโ๏ธ",
+ "man_mountain_biking": "๐ตโโ๏ธ",
+ "person_biking": "๐ด",
+ "bicyclist": "๐ด",
+ "woman_biking": "๐ดโโ๏ธ",
+ "man_biking": "๐ดโโ๏ธ",
+ "trophy": "๐",
+ "first_place": "๐ฅ",
+ "first_place_medal": "๐ฅ",
+ "second_place": "๐ฅ",
+ "second_place_medal": "๐ฅ",
+ "third_place": "๐ฅ",
+ "third_place_medal": "๐ฅ",
+ "medal": "๐
",
+ "sports_medal": "๐
",
+ "military_medal": "๐๏ธ",
+ "rosette": "๐ต๏ธ",
+ "reminder_ribbon": "๐๏ธ",
+ "ticket": "๐ซ",
+ "tickets": "๐๏ธ",
+ "admission_tickets": "๐๏ธ",
+ "circus_tent": "๐ช",
+ "person_juggling": "๐คน",
+ "juggling": "๐คน",
+ "juggler": "๐คน",
+ "woman_juggling": "๐คนโโ๏ธ",
+ "man_juggling": "๐คนโโ๏ธ",
+ "performing_arts": "๐ญ",
+ "art": "๐จ",
+ "clapper": "๐ฌ",
+ "microphone": "๐ค",
+ "headphones": "๐ง",
+ "musical_score": "๐ผ",
+ "musical_keyboard": "๐น",
+ "drum": "๐ฅ",
+ "drum_with_drumsticks": "๐ฅ",
+ "saxophone": "๐ท",
+ "trumpet": "๐บ",
+ "banjo": "๐ช",
+ "guitar": "๐ธ",
+ "violin": "๐ป",
+ "game_die": "๐ฒ",
+ "chess_pawn": "โ๏ธ",
+ "dart": "๐ฏ",
+ "kite": "๐ช",
+ "yo_yo": "๐ช",
+ "bowling": "๐ณ",
+ "video_game": "๐ฎ",
+ "slot_machine": "๐ฐ",
+ "jigsaw": "๐งฉ",
+ "red_car": "๐",
+ "taxi": "๐",
+ "blue_car": "๐",
+ "bus": "๐",
+ "trolleybus": "๐",
+ "race_car": "๐๏ธ",
+ "racing_car": "๐๏ธ",
+ "police_car": "๐",
+ "ambulance": "๐",
+ "fire_engine": "๐",
+ "minibus": "๐",
+ "truck": "๐",
+ "articulated_lorry": "๐",
+ "tractor": "๐",
+ "auto_rickshaw": "๐บ",
+ "motor_scooter": "๐ต",
+ "motorbike": "๐ต",
+ "motorcycle": "๐๏ธ",
+ "racing_motorcycle": "๐๏ธ",
+ "scooter": "๐ด",
+ "bike": "๐ฒ",
+ "motorized_wheelchair": "๐ฆผ",
+ "manual_wheelchair": "๐ฆฝ",
+ "rotating_light": "๐จ",
+ "oncoming_police_car": "๐",
+ "oncoming_bus": "๐",
+ "oncoming_automobile": "๐",
+ "oncoming_taxi": "๐",
+ "aerial_tramway": "๐ก",
+ "mountain_cableway": "๐ ",
+ "suspension_railway": "๐",
+ "railway_car": "๐",
+ "train": "๐",
+ "mountain_railway": "๐",
+ "monorail": "๐",
+ "bullettrain_side": "๐",
+ "bullettrain_front": "๐
",
+ "light_rail": "๐",
+ "steam_locomotive": "๐",
+ "train2": "๐",
+ "metro": "๐",
+ "tram": "๐",
+ "station": "๐",
+ "airplane": "โ๏ธ",
+ "airplane_departure": "๐ซ",
+ "airplane_arriving": "๐ฌ",
+ "airplane_small": "๐ฉ๏ธ",
+ "small_airplane": "๐ฉ๏ธ",
+ "seat": "๐บ",
+ "satellite_orbital": "๐ฐ๏ธ",
+ "rocket": "๐",
+ "flying_saucer": "๐ธ",
+ "helicopter": "๐",
+ "canoe": "๐ถ",
+ "kayak": "๐ถ",
+ "sailboat": "โต",
+ "speedboat": "๐ค",
+ "motorboat": "๐ฅ๏ธ",
+ "cruise_ship": "๐ณ๏ธ",
+ "passenger_ship": "๐ณ๏ธ",
+ "ferry": "โด๏ธ",
+ "ship": "๐ข",
+ "anchor": "โ",
+ "fuelpump": "โฝ",
+ "construction": "๐ง",
+ "vertical_traffic_light": "๐ฆ",
+ "traffic_light": "๐ฅ",
+ "busstop": "๐",
+ "map": "๐บ๏ธ",
+ "world_map": "๐บ๏ธ",
+ "moyai": "๐ฟ",
+ "statue_of_liberty": "๐ฝ",
+ "tokyo_tower": "๐ผ",
+ "european_castle": "๐ฐ",
+ "japanese_castle": "๐ฏ",
+ "stadium": "๐๏ธ",
+ "ferris_wheel": "๐ก",
+ "roller_coaster": "๐ข",
+ "carousel_horse": "๐ ",
+ "fountain": "โฒ",
+ "beach_umbrella": "โฑ๏ธ",
+ "umbrella_on_ground": "โฑ๏ธ",
+ "beach": "๐๏ธ",
+ "beach_with_umbrella": "๐๏ธ",
+ "island": "๐๏ธ",
+ "desert_island": "๐๏ธ",
+ "desert": "๐๏ธ",
+ "volcano": "๐",
+ "mountain": "โฐ๏ธ",
+ "mountain_snow": "๐๏ธ",
+ "snow_capped_mountain": "๐๏ธ",
+ "mount_fuji": "๐ป",
+ "camping": "๐๏ธ",
+ "tent": "โบ",
+ "house": "๐ ",
+ "house_with_garden": "๐ก",
+ "homes": "๐๏ธ",
+ "house_buildings": "๐๏ธ",
+ "house_abandoned": "๐๏ธ",
+ "derelict_house_building": "๐๏ธ",
+ "construction_site": "๐๏ธ",
+ "building_construction": "๐๏ธ",
+ "factory": "๐ญ",
+ "office": "๐ข",
+ "department_store": "๐ฌ",
+ "post_office": "๐ฃ",
+ "european_post_office": "๐ค",
+ "hospital": "๐ฅ",
+ "bank": "๐ฆ",
+ "hotel": "๐จ",
+ "convenience_store": "๐ช",
+ "school": "๐ซ",
+ "love_hotel": "๐ฉ",
+ "wedding": "๐",
+ "classical_building": "๐๏ธ",
+ "church": "โช",
+ "mosque": "๐",
+ "hindu_temple": "๐",
+ "synagogue": "๐",
+ "kaaba": "๐",
+ "shinto_shrine": "โฉ๏ธ",
+ "railway_track": "๐ค๏ธ",
+ "railroad_track": "๐ค๏ธ",
+ "motorway": "๐ฃ๏ธ",
+ "japan": "๐พ",
+ "rice_scene": "๐",
+ "park": "๐๏ธ",
+ "national_park": "๐๏ธ",
+ "sunrise": "๐
",
+ "sunrise_over_mountains": "๐",
+ "stars": "๐ ",
+ "sparkler": "๐",
+ "fireworks": "๐",
+ "city_sunset": "๐",
+ "city_sunrise": "๐",
+ "city_dusk": "๐",
+ "cityscape": "๐๏ธ",
+ "night_with_stars": "๐",
+ "milky_way": "๐",
+ "bridge_at_night": "๐",
+ "foggy": "๐",
+ "watch": "โ",
+ "iphone": "๐ฑ",
+ "calling": "๐ฒ",
+ "computer": "๐ป",
+ "keyboard": "โจ๏ธ",
+ "desktop": "๐ฅ๏ธ",
+ "desktop_computer": "๐ฅ๏ธ",
+ "printer": "๐จ๏ธ",
+ "mouse_three_button": "๐ฑ๏ธ",
+ "three_button_mouse": "๐ฑ๏ธ",
+ "trackball": "๐ฒ๏ธ",
+ "joystick": "๐น๏ธ",
+ "compression": "๐๏ธ",
+ "minidisc": "๐ฝ",
+ "floppy_disk": "๐พ",
+ "cd": "๐ฟ",
+ "dvd": "๐",
+ "vhs": "๐ผ",
+ "camera": "๐ท",
+ "camera_with_flash": "๐ธ",
+ "video_camera": "๐น",
+ "movie_camera": "๐ฅ",
+ "projector": "๐ฝ๏ธ",
+ "film_projector": "๐ฝ๏ธ",
+ "film_frames": "๐๏ธ",
+ "telephone_receiver": "๐",
+ "telephone": "โ๏ธ",
+ "pager": "๐",
+ "fax": "๐ ",
+ "tv": "๐บ",
+ "radio": "๐ป",
+ "microphone2": "๐๏ธ",
+ "studio_microphone": "๐๏ธ",
+ "level_slider": "๐๏ธ",
+ "control_knobs": "๐๏ธ",
+ "compass": "๐งญ",
+ "stopwatch": "โฑ๏ธ",
+ "timer": "โฒ๏ธ",
+ "timer_clock": "โฒ๏ธ",
+ "alarm_clock": "โฐ",
+ "clock": "๐ฐ๏ธ",
+ "mantlepiece_clock": "๐ฐ๏ธ",
+ "hourglass": "โ",
+ "hourglass_flowing_sand": "โณ",
+ "satellite": "๐ก",
+ "battery": "๐",
+ "electric_plug": "๐",
+ "bulb": "๐ก",
+ "flashlight": "๐ฆ",
+ "candle": "๐ฏ๏ธ",
+ "fire_extinguisher": "๐งฏ",
+ "oil": "๐ข๏ธ",
+ "oil_drum": "๐ข๏ธ",
+ "money_with_wings": "๐ธ",
+ "dollar": "๐ต",
+ "yen": "๐ด",
+ "euro": "๐ถ",
+ "pound": "๐ท",
+ "moneybag": "๐ฐ",
+ "credit_card": "๐ณ",
+ "gem": "๐",
+ "scales": "โ๏ธ",
+ "toolbox": "๐งฐ",
+ "wrench": "๐ง",
+ "hammer": "๐จ",
+ "hammer_pick": "โ๏ธ",
+ "hammer_and_pick": "โ๏ธ",
+ "tools": "๐ ๏ธ",
+ "hammer_and_wrench": "๐ ๏ธ",
+ "pick": "โ๏ธ",
+ "nut_and_bolt": "๐ฉ",
+ "gear": "โ๏ธ",
+ "bricks": "๐งฑ",
+ "chains": "โ๏ธ",
+ "magnet": "๐งฒ",
+ "gun": "๐ซ",
+ "bomb": "๐ฃ",
+ "firecracker": "๐งจ",
+ "axe": "๐ช",
+ "razor": "๐ช",
+ "knife": "๐ช",
+ "dagger": "๐ก๏ธ",
+ "dagger_knife": "๐ก๏ธ",
+ "crossed_swords": "โ๏ธ",
+ "shield": "๐ก๏ธ",
+ "smoking": "๐ฌ",
+ "coffin": "โฐ๏ธ",
+ "urn": "โฑ๏ธ",
+ "funeral_urn": "โฑ๏ธ",
+ "amphora": "๐บ",
+ "diya_lamp": "๐ช",
+ "crystal_ball": "๐ฎ",
+ "prayer_beads": "๐ฟ",
+ "nazar_amulet": "๐งฟ",
+ "barber": "๐",
+ "alembic": "โ๏ธ",
+ "telescope": "๐ญ",
+ "microscope": "๐ฌ",
+ "hole": "๐ณ๏ธ",
+ "probing_cane": "๐ฆฏ",
+ "stethoscope": "๐ฉบ",
+ "adhesive_bandage": "๐ฉน",
+ "pill": "๐",
+ "syringe": "๐",
+ "drop_of_blood": "๐ฉธ",
+ "dna": "๐งฌ",
+ "microbe": "๐ฆ ",
+ "petri_dish": "๐งซ",
+ "test_tube": "๐งช",
+ "thermometer": "๐ก๏ธ",
+ "chair": "๐ช",
+ "broom": "๐งน",
+ "basket": "๐งบ",
+ "roll_of_paper": "๐งป",
+ "toilet": "๐ฝ",
+ "potable_water": "๐ฐ",
+ "shower": "๐ฟ",
+ "bathtub": "๐",
+ "bath": "๐",
+ "soap": "๐งผ",
+ "sponge": "๐งฝ",
+ "squeeze_bottle": "๐งด",
+ "bellhop": "๐๏ธ",
+ "bellhop_bell": "๐๏ธ",
+ "key": "๐",
+ "key2": "๐๏ธ",
+ "old_key": "๐๏ธ",
+ "door": "๐ช",
+ "couch": "๐๏ธ",
+ "couch_and_lamp": "๐๏ธ",
+ "bed": "๐๏ธ",
+ "sleeping_accommodation": "๐",
+ "teddy_bear": "๐งธ",
+ "frame_photo": "๐ผ๏ธ",
+ "frame_with_picture": "๐ผ๏ธ",
+ "shopping_bags": "๐๏ธ",
+ "shopping_cart": "๐",
+ "shopping_trolley": "๐",
+ "gift": "๐",
+ "balloon": "๐",
+ "flags": "๐",
+ "ribbon": "๐",
+ "confetti_ball": "๐",
+ "tada": "๐",
+ "dolls": "๐",
+ "izakaya_lantern": "๐ฎ",
+ "wind_chime": "๐",
+ "red_envelope": "๐งง",
+ "envelope": "โ๏ธ",
+ "envelope_with_arrow": "๐ฉ",
+ "incoming_envelope": "๐จ",
+ "e_mail": "๐ง",
+ "email": "๐ง",
+ "love_letter": "๐",
+ "inbox_tray": "๐ฅ",
+ "outbox_tray": "๐ค",
+ "package": "๐ฆ",
+ "label": "๐ท๏ธ",
+ "mailbox_closed": "๐ช",
+ "mailbox": "๐ซ",
+ "mailbox_with_mail": "๐ฌ",
+ "mailbox_with_no_mail": "๐ญ",
+ "postbox": "๐ฎ",
+ "postal_horn": "๐ฏ",
+ "scroll": "๐",
+ "page_with_curl": "๐",
+ "page_facing_up": "๐",
+ "bookmark_tabs": "๐",
+ "receipt": "๐งพ",
+ "bar_chart": "๐",
+ "chart_with_upwards_trend": "๐",
+ "chart_with_downwards_trend": "๐",
+ "notepad_spiral": "๐๏ธ",
+ "spiral_note_pad": "๐๏ธ",
+ "calendar_spiral": "๐๏ธ",
+ "spiral_calendar_pad": "๐๏ธ",
+ "calendar": "๐",
+ "date": "๐
",
+ "wastebasket": "๐๏ธ",
+ "card_index": "๐",
+ "card_box": "๐๏ธ",
+ "card_file_box": "๐๏ธ",
+ "ballot_box": "๐ณ๏ธ",
+ "ballot_box_with_ballot": "๐ณ๏ธ",
+ "file_cabinet": "๐๏ธ",
+ "clipboard": "๐",
+ "file_folder": "๐",
+ "open_file_folder": "๐",
+ "dividers": "๐๏ธ",
+ "card_index_dividers": "๐๏ธ",
+ "newspaper2": "๐๏ธ",
+ "rolled_up_newspaper": "๐๏ธ",
+ "newspaper": "๐ฐ",
+ "notebook": "๐",
+ "notebook_with_decorative_cover": "๐",
+ "ledger": "๐",
+ "closed_book": "๐",
+ "green_book": "๐",
+ "blue_book": "๐",
+ "orange_book": "๐",
+ "books": "๐",
+ "book": "๐",
+ "bookmark": "๐",
+ "safety_pin": "๐งท",
+ "link": "๐",
+ "paperclip": "๐",
+ "paperclips": "๐๏ธ",
+ "linked_paperclips": "๐๏ธ",
+ "triangular_ruler": "๐",
+ "straight_ruler": "๐",
+ "abacus": "๐งฎ",
+ "pushpin": "๐",
+ "round_pushpin": "๐",
+ "scissors": "โ๏ธ",
+ "pen_ballpoint": "๐๏ธ",
+ "lower_left_ballpoint_pen": "๐๏ธ",
+ "pen_fountain": "๐๏ธ",
+ "lower_left_fountain_pen": "๐๏ธ",
+ "black_nib": "โ๏ธ",
+ "paintbrush": "๐๏ธ",
+ "lower_left_paintbrush": "๐๏ธ",
+ "crayon": "๐๏ธ",
+ "lower_left_crayon": "๐๏ธ",
+ "pencil": "๐",
+ "memo": "๐",
+ "pencil2": "โ๏ธ",
+ "mag": "๐",
+ "mag_right": "๐",
+ "lock_with_ink_pen": "๐",
+ "closed_lock_with_key": "๐",
+ "lock": "๐",
+ "unlock": "๐",
+ "heart": "โค๏ธ",
+ "orange_heart": "๐งก",
+ "yellow_heart": "๐",
+ "green_heart": "๐",
+ "blue_heart": "๐",
+ "purple_heart": "๐",
+ "black_heart": "๐ค",
+ "brown_heart": "๐ค",
+ "white_heart": "๐ค",
+ "broken_heart": "๐",
+ "heart_exclamation": "โฃ๏ธ",
+ "heavy_heart_exclamation_mark_ornament": "โฃ๏ธ",
+ "two_hearts": "๐",
+ "revolving_hearts": "๐",
+ "heartbeat": "๐",
+ "heartpulse": "๐",
+ "sparkling_heart": "๐",
+ "cupid": "๐",
+ "gift_heart": "๐",
+ "heart_decoration": "๐",
+ "peace": "โฎ๏ธ",
+ "peace_symbol": "โฎ๏ธ",
+ "cross": "โ๏ธ",
+ "latin_cross": "โ๏ธ",
+ "star_and_crescent": "โช๏ธ",
+ "om_symbol": "๐๏ธ",
+ "wheel_of_dharma": "โธ๏ธ",
+ "star_of_david": "โก๏ธ",
+ "six_pointed_star": "๐ฏ",
+ "menorah": "๐",
+ "yin_yang": "โฏ๏ธ",
+ "orthodox_cross": "โฆ๏ธ",
+ "place_of_worship": "๐",
+ "worship_symbol": "๐",
+ "ophiuchus": "โ",
+ "aries": "โ",
+ "taurus": "โ",
+ "gemini": "โ",
+ "cancer": "โ",
+ "leo": "โ",
+ "virgo": "โ",
+ "libra": "โ",
+ "scorpius": "โ",
+ "sagittarius": "โ",
+ "capricorn": "โ",
+ "aquarius": "โ",
+ "pisces": "โ",
+ "id": "๐",
+ "atom": "โ๏ธ",
+ "atom_symbol": "โ๏ธ",
+ "accept": "๐",
+ "radioactive": "โข๏ธ",
+ "radioactive_sign": "โข๏ธ",
+ "biohazard": "โฃ๏ธ",
+ "biohazard_sign": "โฃ๏ธ",
+ "mobile_phone_off": "๐ด",
+ "vibration_mode": "๐ณ",
+ "u6709": "๐ถ",
+ "u7121": "๐",
+ "u7533": "๐ธ",
+ "u55b6": "๐บ",
+ "u6708": "๐ท๏ธ",
+ "eight_pointed_black_star": "โด๏ธ",
+ "vs": "๐",
+ "white_flower": "๐ฎ",
+ "ideograph_advantage": "๐",
+ "secret": "ใ๏ธ",
+ "congratulations": "ใ๏ธ",
+ "u5408": "๐ด",
+ "u6e80": "๐ต",
+ "u5272": "๐น",
+ "u7981": "๐ฒ",
+ "a": "๐
ฐ๏ธ",
+ "b": "๐
ฑ๏ธ",
+ "ab": "๐",
+ "cl": "๐",
+ "o2": "๐
พ๏ธ",
+ "sos": "๐",
+ "x": "โ",
+ "o": "โญ",
+ "octagonal_sign": "๐",
+ "stop_sign": "๐",
+ "no_entry": "โ",
+ "name_badge": "๐",
+ "no_entry_sign": "๐ซ",
+ "anger": "๐ข",
+ "hotsprings": "โจ๏ธ",
+ "no_pedestrians": "๐ท",
+ "do_not_litter": "๐ฏ",
+ "no_bicycles": "๐ณ",
+ "non_potable_water": "๐ฑ",
+ "underage": "๐",
+ "no_mobile_phones": "๐ต",
+ "no_smoking": "๐ญ",
+ "exclamation": "โ",
+ "grey_exclamation": "โ",
+ "question": "โ",
+ "grey_question": "โ",
+ "bangbang": "โผ๏ธ",
+ "interrobang": "โ๏ธ",
+ "low_brightness": "๐
",
+ "high_brightness": "๐",
+ "part_alternation_mark": "ใฝ๏ธ",
+ "warning": "โ ๏ธ",
+ "children_crossing": "๐ธ",
+ "trident": "๐ฑ",
+ "fleur_de_lis": "โ๏ธ",
+ "beginner": "๐ฐ",
+ "recycle": "โป๏ธ",
+ "white_check_mark": "โ
",
+ "u6307": "๐ฏ",
+ "chart": "๐น",
+ "sparkle": "โ๏ธ",
+ "eight_spoked_asterisk": "โณ๏ธ",
+ "negative_squared_cross_mark": "โ",
+ "globe_with_meridians": "๐",
+ "diamond_shape_with_a_dot_inside": "๐ ",
+ "m": "โ๏ธ",
+ "cyclone": "๐",
+ "zzz": "๐ค",
+ "atm": "๐ง",
+ "wc": "๐พ",
+ "wheelchair": "โฟ",
+ "parking": "๐
ฟ๏ธ",
+ "u7a7a": "๐ณ",
+ "sa": "๐๏ธ",
+ "passport_control": "๐",
+ "customs": "๐",
+ "baggage_claim": "๐",
+ "left_luggage": "๐
",
+ "mens": "๐น",
+ "womens": "๐บ",
+ "baby_symbol": "๐ผ",
+ "restroom": "๐ป",
+ "put_litter_in_its_place": "๐ฎ",
+ "cinema": "๐ฆ",
+ "signal_strength": "๐ถ",
+ "koko": "๐",
+ "symbols": "๐ฃ",
+ "information_source": "โน๏ธ",
+ "abc": "๐ค",
+ "abcd": "๐ก",
+ "capital_abcd": "๐ ",
+ "ng": "๐",
+ "ok": "๐",
+ "up": "๐",
+ "cool": "๐",
+ "new": "๐",
+ "free": "๐",
+ "zero": "0๏ธโฃ",
+ "one": "1๏ธโฃ",
+ "two": "2๏ธโฃ",
+ "three": "3๏ธโฃ",
+ "four": "4๏ธโฃ",
+ "five": "5๏ธโฃ",
+ "six": "6๏ธโฃ",
+ "seven": "7๏ธโฃ",
+ "eight": "8๏ธโฃ",
+ "nine": "9๏ธโฃ",
+ "keycap_ten": "๐",
+ "hash": "#๏ธโฃ",
+ "asterisk": "*๏ธโฃ",
+ "keycap_asterisk": "*๏ธโฃ",
+ "eject": "โ๏ธ",
+ "eject_symbol": "โ๏ธ",
+ "arrow_forward": "โถ๏ธ",
+ "pause_button": "โธ๏ธ",
+ "double_vertical_bar": "โธ๏ธ",
+ "play_pause": "โฏ๏ธ",
+ "stop_button": "โน๏ธ",
+ "record_button": "โบ๏ธ",
+ "track_next": "โญ๏ธ",
+ "next_track": "โญ๏ธ",
+ "track_previous": "โฎ๏ธ",
+ "previous_track": "โฎ๏ธ",
+ "fast_forward": "โฉ",
+ "rewind": "โช",
+ "arrow_double_up": "โซ",
+ "arrow_double_down": "โฌ",
+ "arrow_backward": "โ๏ธ",
+ "arrow_up_small": "๐ผ",
+ "arrow_down_small": "๐ฝ",
+ "arrow_right": "โก๏ธ",
+ "arrow_left": "โฌ
๏ธ",
+ "arrow_up": "โฌ๏ธ",
+ "arrow_down": "โฌ๏ธ",
+ "arrow_upper_right": "โ๏ธ",
+ "arrow_lower_right": "โ๏ธ",
+ "arrow_lower_left": "โ๏ธ",
+ "arrow_upper_left": "โ๏ธ",
+ "arrow_up_down": "โ๏ธ",
+ "left_right_arrow": "โ๏ธ",
+ "arrow_right_hook": "โช๏ธ",
+ "leftwards_arrow_with_hook": "โฉ๏ธ",
+ "arrow_heading_up": "โคด๏ธ",
+ "arrow_heading_down": "โคต๏ธ",
+ "twisted_rightwards_arrows": "๐",
+ "repeat": "๐",
+ "repeat_one": "๐",
+ "arrows_counterclockwise": "๐",
+ "arrows_clockwise": "๐",
+ "musical_note": "๐ต",
+ "notes": "๐ถ",
+ "heavy_plus_sign": "โ",
+ "heavy_minus_sign": "โ",
+ "heavy_division_sign": "โ",
+ "heavy_multiplication_x": "โ๏ธ",
+ "infinity": "โพ๏ธ",
+ "heavy_dollar_sign": "๐ฒ",
+ "currency_exchange": "๐ฑ",
+ "tm": "โข๏ธ",
+ "copyright": "ยฉ๏ธ",
+ "registered": "ยฎ๏ธ",
+ "wavy_dash": "ใฐ๏ธ",
+ "curly_loop": "โฐ",
+ "loop": "โฟ",
+ "end": "๐",
+ "back": "๐",
+ "on": "๐",
+ "top": "๐",
+ "soon": "๐",
+ "heavy_check_mark": "โ๏ธ",
+ "ballot_box_with_check": "โ๏ธ",
+ "radio_button": "๐",
+ "white_circle": "โช",
+ "black_circle": "โซ",
+ "red_circle": "๐ด",
+ "blue_circle": "๐ต",
+ "brown_circle": "๐ค",
+ "purple_circle": "๐ฃ",
+ "green_circle": "๐ข",
+ "yellow_circle": "๐ก",
+ "orange_circle": "๐ ",
+ "small_red_triangle": "๐บ",
+ "small_red_triangle_down": "๐ป",
+ "small_orange_diamond": "๐ธ",
+ "small_blue_diamond": "๐น",
+ "large_orange_diamond": "๐ถ",
+ "large_blue_diamond": "๐ท",
+ "white_square_button": "๐ณ",
+ "black_square_button": "๐ฒ",
+ "black_small_square": "โช๏ธ",
+ "white_small_square": "โซ๏ธ",
+ "black_medium_small_square": "โพ",
+ "white_medium_small_square": "โฝ",
+ "black_medium_square": "โผ๏ธ",
+ "white_medium_square": "โป๏ธ",
+ "black_large_square": "โฌ",
+ "white_large_square": "โฌ",
+ "orange_square": "๐ง",
+ "blue_square": "๐ฆ",
+ "red_square": "๐ฅ",
+ "brown_square": "๐ซ",
+ "purple_square": "๐ช",
+ "green_square": "๐ฉ",
+ "yellow_square": "๐จ",
+ "speaker": "๐",
+ "mute": "๐",
+ "sound": "๐",
+ "loud_sound": "๐",
+ "bell": "๐",
+ "no_bell": "๐",
+ "mega": "๐ฃ",
+ "loudspeaker": "๐ข",
+ "speech_left": "๐จ๏ธ",
+ "left_speech_bubble": "๐จ๏ธ",
+ "eye_in_speech_bubble": "๐โ๐จ",
+ "speech_balloon": "๐ฌ",
+ "thought_balloon": "๐ญ",
+ "anger_right": "๐ฏ๏ธ",
+ "right_anger_bubble": "๐ฏ๏ธ",
+ "spades": "โ ๏ธ",
+ "clubs": "โฃ๏ธ",
+ "hearts": "โฅ๏ธ",
+ "diamonds": "โฆ๏ธ",
+ "black_joker": "๐",
+ "flower_playing_cards": "๐ด",
+ "mahjong": "๐",
+ "clock1": "๐",
+ "clock2": "๐",
+ "clock3": "๐",
+ "clock4": "๐",
+ "clock5": "๐",
+ "clock6": "๐",
+ "clock7": "๐",
+ "clock8": "๐",
+ "clock9": "๐",
+ "clock10": "๐",
+ "clock11": "๐",
+ "clock12": "๐",
+ "clock130": "๐",
+ "clock230": "๐",
+ "clock330": "๐",
+ "clock430": "๐",
+ "clock530": "๐ ",
+ "clock630": "๐ก",
+ "clock730": "๐ข",
+ "clock830": "๐ฃ",
+ "clock930": "๐ค",
+ "clock1030": "๐ฅ",
+ "clock1130": "๐ฆ",
+ "clock1230": "๐ง",
+ "female_sign": "โ๏ธ",
+ "male_sign": "โ๏ธ",
+ "medical_symbol": "โ๏ธ",
+ "regional_indicator_z": "๐ฟ",
+ "regional_indicator_y": "๐พ",
+ "regional_indicator_x": "๐ฝ",
+ "regional_indicator_w": "๐ผ",
+ "regional_indicator_v": "๐ป",
+ "regional_indicator_u": "๐บ",
+ "regional_indicator_t": "๐น",
+ "regional_indicator_s": "๐ธ",
+ "regional_indicator_r": "๐ท",
+ "regional_indicator_q": "๐ถ",
+ "regional_indicator_p": "๐ต",
+ "regional_indicator_o": "๐ด",
+ "regional_indicator_n": "๐ณ",
+ "regional_indicator_m": "๐ฒ",
+ "regional_indicator_l": "๐ฑ",
+ "regional_indicator_k": "๐ฐ",
+ "regional_indicator_j": "๐ฏ",
+ "regional_indicator_i": "๐ฎ",
+ "regional_indicator_h": "๐ญ",
+ "regional_indicator_g": "๐ฌ",
+ "regional_indicator_f": "๐ซ",
+ "regional_indicator_e": "๐ช",
+ "regional_indicator_d": "๐ฉ",
+ "regional_indicator_c": "๐จ",
+ "regional_indicator_b": "๐ง",
+ "regional_indicator_a": "๐ฆ",
+ "flag_white": "๐ณ๏ธ",
+ "flag_black": "๐ด",
+ "checkered_flag": "๐",
+ "triangular_flag_on_post": "๐ฉ",
+ "rainbow_flag": "๐ณ๏ธโ๐",
+ "gay_pride_flag": "๐ณ๏ธโ๐",
+ "pirate_flag": "๐ดโโ ๏ธ",
+ "flag_af": "๐ฆ๐ซ",
+ "flag_ax": "๐ฆ๐ฝ",
+ "flag_al": "๐ฆ๐ฑ",
+ "flag_dz": "๐ฉ๐ฟ",
+ "flag_as": "๐ฆ๐ธ",
+ "flag_ad": "๐ฆ๐ฉ",
+ "flag_ao": "๐ฆ๐ด",
+ "flag_ai": "๐ฆ๐ฎ",
+ "flag_aq": "๐ฆ๐ถ",
+ "flag_ag": "๐ฆ๐ฌ",
+ "flag_ar": "๐ฆ๐ท",
+ "flag_am": "๐ฆ๐ฒ",
+ "flag_aw": "๐ฆ๐ผ",
+ "flag_au": "๐ฆ๐บ",
+ "flag_at": "๐ฆ๐น",
+ "flag_az": "๐ฆ๐ฟ",
+ "flag_bs": "๐ง๐ธ",
+ "flag_bh": "๐ง๐ญ",
+ "flag_bd": "๐ง๐ฉ",
+ "flag_bb": "๐ง๐ง",
+ "flag_by": "๐ง๐พ",
+ "flag_be": "๐ง๐ช",
+ "flag_bz": "๐ง๐ฟ",
+ "flag_bj": "๐ง๐ฏ",
+ "flag_bm": "๐ง๐ฒ",
+ "flag_bt": "๐ง๐น",
+ "flag_bo": "๐ง๐ด",
+ "flag_ba": "๐ง๐ฆ",
+ "flag_bw": "๐ง๐ผ",
+ "flag_br": "๐ง๐ท",
+ "flag_io": "๐ฎ๐ด",
+ "flag_vg": "๐ป๐ฌ",
+ "flag_bn": "๐ง๐ณ",
+ "flag_bg": "๐ง๐ฌ",
+ "flag_bf": "๐ง๐ซ",
+ "flag_bi": "๐ง๐ฎ",
+ "flag_kh": "๐ฐ๐ญ",
+ "flag_cm": "๐จ๐ฒ",
+ "flag_ca": "๐จ๐ฆ",
+ "flag_ic": "๐ฎ๐จ",
+ "flag_cv": "๐จ๐ป",
+ "flag_bq": "๐ง๐ถ",
+ "flag_ky": "๐ฐ๐พ",
+ "flag_cf": "๐จ๐ซ",
+ "flag_td": "๐น๐ฉ",
+ "flag_cl": "๐จ๐ฑ",
+ "flag_cn": "๐จ๐ณ",
+ "flag_cx": "๐จ๐ฝ",
+ "flag_cc": "๐จ๐จ",
+ "flag_co": "๐จ๐ด",
+ "flag_km": "๐ฐ๐ฒ",
+ "flag_cg": "๐จ๐ฌ",
+ "flag_cd": "๐จ๐ฉ",
+ "flag_ck": "๐จ๐ฐ",
+ "flag_cr": "๐จ๐ท",
+ "flag_ci": "๐จ๐ฎ",
+ "flag_hr": "๐ญ๐ท",
+ "flag_cu": "๐จ๐บ",
+ "flag_cw": "๐จ๐ผ",
+ "flag_cy": "๐จ๐พ",
+ "flag_cz": "๐จ๐ฟ",
+ "flag_dk": "๐ฉ๐ฐ",
+ "flag_dj": "๐ฉ๐ฏ",
+ "flag_dm": "๐ฉ๐ฒ",
+ "flag_do": "๐ฉ๐ด",
+ "flag_ec": "๐ช๐จ",
+ "flag_eg": "๐ช๐ฌ",
+ "flag_sv": "๐ธ๐ป",
+ "flag_gq": "๐ฌ๐ถ",
+ "flag_er": "๐ช๐ท",
+ "flag_ee": "๐ช๐ช",
+ "flag_et": "๐ช๐น",
+ "flag_eu": "๐ช๐บ",
+ "flag_fk": "๐ซ๐ฐ",
+ "flag_fo": "๐ซ๐ด",
+ "flag_fj": "๐ซ๐ฏ",
+ "flag_fi": "๐ซ๐ฎ",
+ "flag_fr": "๐ซ๐ท",
+ "flag_gf": "๐ฌ๐ซ",
+ "flag_pf": "๐ต๐ซ",
+ "flag_tf": "๐น๐ซ",
+ "flag_ga": "๐ฌ๐ฆ",
+ "flag_gm": "๐ฌ๐ฒ",
+ "flag_ge": "๐ฌ๐ช",
+ "flag_de": "๐ฉ๐ช",
+ "flag_gh": "๐ฌ๐ญ",
+ "flag_gi": "๐ฌ๐ฎ",
+ "flag_gr": "๐ฌ๐ท",
+ "flag_gl": "๐ฌ๐ฑ",
+ "flag_gd": "๐ฌ๐ฉ",
+ "flag_gp": "๐ฌ๐ต",
+ "flag_gu": "๐ฌ๐บ",
+ "flag_gt": "๐ฌ๐น",
+ "flag_gg": "๐ฌ๐ฌ",
+ "flag_gn": "๐ฌ๐ณ",
+ "flag_gw": "๐ฌ๐ผ",
+ "flag_gy": "๐ฌ๐พ",
+ "flag_ht": "๐ญ๐น",
+ "flag_hn": "๐ญ๐ณ",
+ "flag_hk": "๐ญ๐ฐ",
+ "flag_hu": "๐ญ๐บ",
+ "flag_is": "๐ฎ๐ธ",
+ "flag_in": "๐ฎ๐ณ",
+ "flag_id": "๐ฎ๐ฉ",
+ "flag_ir": "๐ฎ๐ท",
+ "flag_iq": "๐ฎ๐ถ",
+ "flag_ie": "๐ฎ๐ช",
+ "flag_im": "๐ฎ๐ฒ",
+ "flag_il": "๐ฎ๐ฑ",
+ "flag_it": "๐ฎ๐น",
+ "flag_jm": "๐ฏ๐ฒ",
+ "flag_jp": "๐ฏ๐ต",
+ "crossed_flags": "๐",
+ "flag_je": "๐ฏ๐ช",
+ "flag_jo": "๐ฏ๐ด",
+ "flag_kz": "๐ฐ๐ฟ",
+ "flag_ke": "๐ฐ๐ช",
+ "flag_ki": "๐ฐ๐ฎ",
+ "flag_xk": "๐ฝ๐ฐ",
+ "flag_kw": "๐ฐ๐ผ",
+ "flag_kg": "๐ฐ๐ฌ",
+ "flag_la": "๐ฑ๐ฆ",
+ "flag_lv": "๐ฑ๐ป",
+ "flag_lb": "๐ฑ๐ง",
+ "flag_ls": "๐ฑ๐ธ",
+ "flag_lr": "๐ฑ๐ท",
+ "flag_ly": "๐ฑ๐พ",
+ "flag_li": "๐ฑ๐ฎ",
+ "flag_lt": "๐ฑ๐น",
+ "flag_lu": "๐ฑ๐บ",
+ "flag_mo": "๐ฒ๐ด",
+ "flag_mk": "๐ฒ๐ฐ",
+ "flag_mg": "๐ฒ๐ฌ",
+ "flag_mw": "๐ฒ๐ผ",
+ "flag_my": "๐ฒ๐พ",
+ "flag_mv": "๐ฒ๐ป",
+ "flag_ml": "๐ฒ๐ฑ",
+ "flag_mt": "๐ฒ๐น",
+ "flag_mh": "๐ฒ๐ญ",
+ "flag_mq": "๐ฒ๐ถ",
+ "flag_mr": "๐ฒ๐ท",
+ "flag_mu": "๐ฒ๐บ",
+ "flag_yt": "๐พ๐น",
+ "flag_mx": "๐ฒ๐ฝ",
+ "flag_fm": "๐ซ๐ฒ",
+ "flag_md": "๐ฒ๐ฉ",
+ "flag_mc": "๐ฒ๐จ",
+ "flag_mn": "๐ฒ๐ณ",
+ "flag_me": "๐ฒ๐ช",
+ "flag_ms": "๐ฒ๐ธ",
+ "flag_ma": "๐ฒ๐ฆ",
+ "flag_mz": "๐ฒ๐ฟ",
+ "flag_mm": "๐ฒ๐ฒ",
+ "flag_na": "๐ณ๐ฆ",
+ "flag_nr": "๐ณ๐ท",
+ "flag_np": "๐ณ๐ต",
+ "flag_nl": "๐ณ๐ฑ",
+ "flag_nc": "๐ณ๐จ",
+ "flag_nz": "๐ณ๐ฟ",
+ "flag_ni": "๐ณ๐ฎ",
+ "flag_ne": "๐ณ๐ช",
+ "flag_ng": "๐ณ๐ฌ",
+ "flag_nu": "๐ณ๐บ",
+ "flag_nf": "๐ณ๐ซ",
+ "flag_kp": "๐ฐ๐ต",
+ "flag_mp": "๐ฒ๐ต",
+ "flag_no": "๐ณ๐ด",
+ "flag_om": "๐ด๐ฒ",
+ "flag_pk": "๐ต๐ฐ",
+ "flag_pw": "๐ต๐ผ",
+ "flag_ps": "๐ต๐ธ",
+ "flag_pa": "๐ต๐ฆ",
+ "flag_pg": "๐ต๐ฌ",
+ "flag_py": "๐ต๐พ",
+ "flag_pe": "๐ต๐ช",
+ "flag_ph": "๐ต๐ญ",
+ "flag_pn": "๐ต๐ณ",
+ "flag_pl": "๐ต๐ฑ",
+ "flag_pt": "๐ต๐น",
+ "flag_pr": "๐ต๐ท",
+ "flag_qa": "๐ถ๐ฆ",
+ "flag_re": "๐ท๐ช",
+ "flag_ro": "๐ท๐ด",
+ "flag_ru": "๐ท๐บ",
+ "flag_rw": "๐ท๐ผ",
+ "flag_ws": "๐ผ๐ธ",
+ "flag_sm": "๐ธ๐ฒ",
+ "flag_st": "๐ธ๐น",
+ "flag_sa": "๐ธ๐ฆ",
+ "flag_sn": "๐ธ๐ณ",
+ "flag_rs": "๐ท๐ธ",
+ "flag_sc": "๐ธ๐จ",
+ "flag_sl": "๐ธ๐ฑ",
+ "flag_sg": "๐ธ๐ฌ",
+ "flag_sx": "๐ธ๐ฝ",
+ "flag_sk": "๐ธ๐ฐ",
+ "flag_si": "๐ธ๐ฎ",
+ "flag_gs": "๐ฌ๐ธ",
+ "flag_sb": "๐ธ๐ง",
+ "flag_so": "๐ธ๐ด",
+ "flag_za": "๐ฟ๐ฆ",
+ "flag_kr": "๐ฐ๐ท",
+ "flag_ss": "๐ธ๐ธ",
+ "flag_es": "๐ช๐ธ",
+ "flag_lk": "๐ฑ๐ฐ",
+ "flag_bl": "๐ง๐ฑ",
+ "flag_sh": "๐ธ๐ญ",
+ "flag_kn": "๐ฐ๐ณ",
+ "flag_lc": "๐ฑ๐จ",
+ "flag_pm": "๐ต๐ฒ",
+ "flag_vc": "๐ป๐จ",
+ "flag_sd": "๐ธ๐ฉ",
+ "flag_sr": "๐ธ๐ท",
+ "flag_sz": "๐ธ๐ฟ",
+ "flag_se": "๐ธ๐ช",
+ "flag_ch": "๐จ๐ญ",
+ "flag_sy": "๐ธ๐พ",
+ "flag_tw": "๐น๐ผ",
+ "flag_tj": "๐น๐ฏ",
+ "flag_tz": "๐น๐ฟ",
+ "flag_th": "๐น๐ญ",
+ "flag_tl": "๐น๐ฑ",
+ "flag_tg": "๐น๐ฌ",
+ "flag_tk": "๐น๐ฐ",
+ "flag_to": "๐น๐ด",
+ "flag_tt": "๐น๐น",
+ "flag_tn": "๐น๐ณ",
+ "flag_tr": "๐น๐ท",
+ "flag_tm": "๐น๐ฒ",
+ "flag_tc": "๐น๐จ",
+ "flag_vi": "๐ป๐ฎ",
+ "flag_tv": "๐น๐ป",
+ "flag_ug": "๐บ๐ฌ",
+ "flag_ua": "๐บ๐ฆ",
+ "flag_ae": "๐ฆ๐ช",
+ "flag_gb": "๐ฌ๐ง",
+ "england": "๐ด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ",
+ "scotland": "๐ด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ",
+ "wales": "๐ด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ",
+ "flag_us": "๐บ๐ธ",
+ "flag_uy": "๐บ๐พ",
+ "flag_uz": "๐บ๐ฟ",
+ "flag_vu": "๐ป๐บ",
+ "flag_va": "๐ป๐ฆ",
+ "flag_ve": "๐ป๐ช",
+ "flag_vn": "๐ป๐ณ",
+ "flag_wf": "๐ผ๐ซ",
+ "flag_eh": "๐ช๐ญ",
+ "flag_ye": "๐พ๐ช",
+ "flag_zm": "๐ฟ๐ฒ",
+ "flag_zw": "๐ฟ๐ผ",
+ "flag_ac": "๐ฆ๐จ",
+ "flag_bv": "๐ง๐ป",
+ "flag_cp": "๐จ๐ต",
+ "flag_ea": "๐ช๐ฆ",
+ "flag_dg": "๐ฉ๐ฌ",
+ "flag_hm": "๐ญ๐ฒ",
+ "flag_mf": "๐ฒ๐ซ",
+ "flag_sj": "๐ธ๐ฏ",
+ "flag_ta": "๐น๐ฆ",
+ "flag_um": "๐บ๐ฒ",
+ "united_nations": "๐บ๐ณ"
+}
diff --git a/public/static/css/discordmock.css b/public/static/css/discordmock.css
index c098293..f3b2e5b 100644
--- a/public/static/css/discordmock.css
+++ b/public/static/css/discordmock.css
@@ -4,10 +4,6 @@
@font-face{font-family:WhitneyMedium;font-style:medium;font-weight:600;src:url('https://discordapp.com/assets/be0060dafb7a0e31d2a1ca17c0708636.woff') format('woff')}
@font-face{font-family:Whitney;font-style:bold;font-weight:700;src:url('https://discordapp.com/assets/8e12fb4f14d9c4592eb8ec9f22337b04.woff') format('woff')}
-html {
- overflow-y: hidden;
-}
-
.discord-container {
background-color: #2e3136;
border-radius: 4px;
diff --git a/public/templates/includes/navbar.tmpl b/public/templates/includes/navbar.tmpl
index a1ed56b..2b55677 100644
--- a/public/templates/includes/navbar.tmpl
+++ b/public/templates/includes/navbar.tmpl
@@ -14,6 +14,9 @@
Ticket List
+
+ Panels
+
diff --git a/public/templates/views/panels.tmpl b/public/templates/views/panels.tmpl
new file mode 100644
index 0000000..e373ee7
--- /dev/null
+++ b/public/templates/views/panels.tmpl
@@ -0,0 +1,237 @@
+{{define "content"}}
+
+
+
+
+
+
+
+
Your panel quota: {{.panelcount}} / {{if .premium}}โ{{else}}1{{end}}
+
+ {{if not .premium}}
+
Note: You can expand your panel quote by purchasing premium
+ {{end}}
+
+
+
+
+ Channel |
+ Panel Title |
+ Panel Content |
+ Ticket Channel Category |
+ Delete |
+
+
+
+ {{range .panels}}
+
+ {{.ChannelName}} |
+ {{.Title}} |
+ {{.Content}} |
+ {{.CategoryName}} |
+ Delete |
+
+ {{end}}
+
+
+
+
+
+
+
+
+
+
+
+ {{if not .validTitle}}
+
+
+
+ Panel titles must be between 1 and 255 characters long
+
+
+ {{end}}
+ {{if not .validContent}}
+
+
+
+ Panel content must be between 1 and 1024 characters long
+
+
+ {{end}}
+ {{if not .validColour}}
+
+
+
+ Invalid panel colour. You must use the hex value of the colour, which you can find
here.
+
+
+ {{end}}
+ {{if not .validChannel}}
+
+
+
+ Invalid channel - please try again
+
+
+ {{end}}
+ {{if not .validCategory}}
+
+
+
+ Invalid category - please try again
+
+
+ {{end}}
+ {{if not .validReaction}}
+
+
+
+ Invalid reaction emote
+
+
+ {{end}}
+ {{if .created}}
+
+
+
+ Your panel has been created. You may need to refresh this page to see it displayed.
+
+
+ {{end}}
+ {{if .metQuota}}
+
+
+
+ You've hit your panel quota. Premium users can create
unlimited panels. Click
here to learn more about premium.
+
+
+ {{end}}
+
+
+
+
+
+{{end}}
\ No newline at end of file
diff --git a/public/templates/views/settings.tmpl b/public/templates/views/settings.tmpl
index 15ea5f4..4f26442 100644
--- a/public/templates/views/settings.tmpl
+++ b/public/templates/views/settings.tmpl
@@ -79,6 +79,11 @@
+
Default Panel Settings
+
+
+