From 4ff27c2cbd45173be17ceb8139e81357a2d596ca Mon Sep 17 00:00:00 2001
From: "Harrison (Harry) Cramer"
<32515581+harrisoncramer@users.noreply.github.com>
Date: Mon, 16 Sep 2024 16:34:20 -0400
Subject: [PATCH 01/21] fix: Fixes issues w/ shared pointers to structs (#378)
---
cmd/app/assignee_test.go | 6 ++--
cmd/app/attachment_test.go | 6 ++--
cmd/app/comment_test.go | 36 ++++++++++----------
cmd/app/create_mr_test.go | 10 +++---
cmd/app/draft_note_publisher_test.go | 8 ++---
cmd/app/draft_notes_test.go | 36 ++++++++++----------
cmd/app/job_test.go | 6 ++--
cmd/app/list_discussions_test.go | 10 +++---
cmd/app/merge_mr_test.go | 6 ++--
cmd/app/merge_requests_by_username_test.go | 12 +++----
cmd/app/merge_requests_test.go | 8 ++---
cmd/app/middleware.go | 17 +++++++---
cmd/app/middleware_test.go | 4 +--
cmd/app/reply_test.go | 6 ++--
cmd/app/resolve_discussion_test.go | 8 ++---
cmd/app/server.go | 38 +++++++++++-----------
lua/gitlab/actions/comment.lua | 4 +++
17 files changed, 117 insertions(+), 104 deletions(-)
diff --git a/cmd/app/assignee_test.go b/cmd/app/assignee_test.go
index 8cdde646..dca4f83f 100644
--- a/cmd/app/assignee_test.go
+++ b/cmd/app/assignee_test.go
@@ -27,7 +27,7 @@ func TestAssigneeHandler(t *testing.T) {
svc := middleware(
assigneesService{testProjectData, fakeAssigneeClient{}},
withMr(testProjectData, fakeMergeRequestLister{}),
- withPayloadValidation(methodToPayload{http.MethodPut: &AssigneeUpdateRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPut: newPayload[AssigneeUpdateRequest]}),
withMethodCheck(http.MethodPut),
)
data := getSuccessData(t, svc, request)
@@ -40,7 +40,7 @@ func TestAssigneeHandler(t *testing.T) {
svc := middleware(
assigneesService{testProjectData, client},
withMr(testProjectData, fakeMergeRequestLister{}),
- withPayloadValidation(methodToPayload{http.MethodPut: &AssigneeUpdateRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPut: newPayload[AssigneeUpdateRequest]}),
withMethodCheck(http.MethodPut),
)
data, _ := getFailData(t, svc, request)
@@ -53,7 +53,7 @@ func TestAssigneeHandler(t *testing.T) {
svc := middleware(
assigneesService{testProjectData, client},
withMr(testProjectData, fakeMergeRequestLister{}),
- withPayloadValidation(methodToPayload{http.MethodPut: &AssigneeUpdateRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPut: newPayload[AssigneeUpdateRequest]}),
withMethodCheck(http.MethodPut),
)
data, _ := getFailData(t, svc, request)
diff --git a/cmd/app/attachment_test.go b/cmd/app/attachment_test.go
index 38a1a0d5..bb2093ed 100644
--- a/cmd/app/attachment_test.go
+++ b/cmd/app/attachment_test.go
@@ -38,7 +38,7 @@ func TestAttachmentHandler(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/attachment", attachmentTestRequestData)
svc := middleware(
attachmentService{testProjectData, fakeFileReader{}, fakeFileUploaderClient{}},
- withPayloadValidation(methodToPayload{http.MethodPost: &AttachmentRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[AttachmentRequest]}),
withMethodCheck(http.MethodPost),
)
data := getSuccessData(t, svc, request)
@@ -49,7 +49,7 @@ func TestAttachmentHandler(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/attachment", attachmentTestRequestData)
svc := middleware(
attachmentService{testProjectData, fakeFileReader{}, fakeFileUploaderClient{testBase{errFromGitlab: true}}},
- withPayloadValidation(methodToPayload{http.MethodPost: &AttachmentRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[AttachmentRequest]}),
withMethodCheck(http.MethodPost),
)
data, _ := getFailData(t, svc, request)
@@ -60,7 +60,7 @@ func TestAttachmentHandler(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/attachment", attachmentTestRequestData)
svc := middleware(
attachmentService{testProjectData, fakeFileReader{}, fakeFileUploaderClient{testBase{status: http.StatusSeeOther}}},
- withPayloadValidation(methodToPayload{http.MethodPost: &AttachmentRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[AttachmentRequest]}),
withMethodCheck(http.MethodPost),
)
data, _ := getFailData(t, svc, request)
diff --git a/cmd/app/comment_test.go b/cmd/app/comment_test.go
index f86902f4..2e933502 100644
--- a/cmd/app/comment_test.go
+++ b/cmd/app/comment_test.go
@@ -44,9 +44,9 @@ func TestPostComment(t *testing.T) {
commentService{testProjectData, fakeCommentClient{}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
- http.MethodPost: &PostCommentRequest{},
- http.MethodDelete: &DeleteCommentRequest{},
- http.MethodPatch: &EditCommentRequest{},
+ http.MethodPost: newPayload[PostCommentRequest],
+ http.MethodDelete: newPayload[DeleteCommentRequest],
+ http.MethodPatch: newPayload[EditCommentRequest],
}),
withMethodCheck(http.MethodPost, http.MethodDelete, http.MethodPatch),
)
@@ -66,9 +66,9 @@ func TestPostComment(t *testing.T) {
commentService{testProjectData, fakeCommentClient{}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
- http.MethodPost: &PostCommentRequest{},
- http.MethodDelete: &DeleteCommentRequest{},
- http.MethodPatch: &EditCommentRequest{},
+ http.MethodPost: newPayload[PostCommentRequest],
+ http.MethodDelete: newPayload[DeleteCommentRequest],
+ http.MethodPatch: newPayload[EditCommentRequest],
}),
withMethodCheck(http.MethodPost, http.MethodDelete, http.MethodPatch),
)
@@ -82,9 +82,9 @@ func TestPostComment(t *testing.T) {
commentService{testProjectData, fakeCommentClient{testBase{errFromGitlab: true}}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
- http.MethodPost: &PostCommentRequest{},
- http.MethodDelete: &DeleteCommentRequest{},
- http.MethodPatch: &EditCommentRequest{},
+ http.MethodPost: newPayload[PostCommentRequest],
+ http.MethodDelete: newPayload[DeleteCommentRequest],
+ http.MethodPatch: newPayload[EditCommentRequest],
}),
withMethodCheck(http.MethodPost, http.MethodDelete, http.MethodPatch),
)
@@ -98,9 +98,9 @@ func TestPostComment(t *testing.T) {
commentService{testProjectData, fakeCommentClient{testBase{status: http.StatusSeeOther}}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
- http.MethodPost: &PostCommentRequest{},
- http.MethodDelete: &DeleteCommentRequest{},
- http.MethodPatch: &EditCommentRequest{},
+ http.MethodPost: newPayload[PostCommentRequest],
+ http.MethodDelete: newPayload[DeleteCommentRequest],
+ http.MethodPatch: newPayload[EditCommentRequest],
}),
withMethodCheck(http.MethodPost, http.MethodDelete, http.MethodPatch),
)
@@ -117,9 +117,9 @@ func TestDeleteComment(t *testing.T) {
commentService{testProjectData, fakeCommentClient{}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
- http.MethodPost: &PostCommentRequest{},
- http.MethodDelete: &DeleteCommentRequest{},
- http.MethodPatch: &EditCommentRequest{},
+ http.MethodPost: newPayload[PostCommentRequest],
+ http.MethodDelete: newPayload[DeleteCommentRequest],
+ http.MethodPatch: newPayload[EditCommentRequest],
}),
withMethodCheck(http.MethodPost, http.MethodDelete, http.MethodPatch),
)
@@ -136,9 +136,9 @@ func TestEditComment(t *testing.T) {
commentService{testProjectData, fakeCommentClient{}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
- http.MethodPost: &PostCommentRequest{},
- http.MethodDelete: &DeleteCommentRequest{},
- http.MethodPatch: &EditCommentRequest{},
+ http.MethodPost: newPayload[PostCommentRequest],
+ http.MethodDelete: newPayload[DeleteCommentRequest],
+ http.MethodPatch: newPayload[EditCommentRequest],
}),
withMethodCheck(http.MethodPost, http.MethodDelete, http.MethodPatch),
)
diff --git a/cmd/app/create_mr_test.go b/cmd/app/create_mr_test.go
index e10bd7a7..f3c39155 100644
--- a/cmd/app/create_mr_test.go
+++ b/cmd/app/create_mr_test.go
@@ -31,7 +31,7 @@ func TestCreateMr(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/create_mr", testCreateMrRequestData)
svc := middleware(
mergeRequestCreatorService{testProjectData, fakeMergeCreatorClient{}},
- withPayloadValidation(methodToPayload{http.MethodPost: &CreateMrRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[CreateMrRequest]}),
withMethodCheck(http.MethodPost),
)
data := getSuccessData(t, svc, request)
@@ -42,7 +42,7 @@ func TestCreateMr(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/create_mr", testCreateMrRequestData)
svc := middleware(
mergeRequestCreatorService{testProjectData, fakeMergeCreatorClient{testBase{errFromGitlab: true}}},
- withPayloadValidation(methodToPayload{http.MethodPost: &CreateMrRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[CreateMrRequest]}),
withMethodCheck(http.MethodPost),
)
data, _ := getFailData(t, svc, request)
@@ -53,7 +53,7 @@ func TestCreateMr(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/create_mr", testCreateMrRequestData)
svc := middleware(
mergeRequestCreatorService{testProjectData, fakeMergeCreatorClient{testBase{status: http.StatusSeeOther}}},
- withPayloadValidation(methodToPayload{http.MethodPost: &CreateMrRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[CreateMrRequest]}),
withMethodCheck(http.MethodPost),
)
data, _ := getFailData(t, svc, request)
@@ -66,7 +66,7 @@ func TestCreateMr(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/create_mr", reqData)
svc := middleware(
mergeRequestCreatorService{testProjectData, fakeMergeCreatorClient{}},
- withPayloadValidation(methodToPayload{http.MethodPost: &CreateMrRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[CreateMrRequest]}),
withMethodCheck(http.MethodPost),
)
data, _ := getFailData(t, svc, request)
@@ -80,7 +80,7 @@ func TestCreateMr(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/create_mr", reqData)
svc := middleware(
mergeRequestCreatorService{testProjectData, fakeMergeCreatorClient{}},
- withPayloadValidation(methodToPayload{http.MethodPost: &CreateMrRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[CreateMrRequest]}),
withMethodCheck(http.MethodPost),
)
data, _ := getFailData(t, svc, request)
diff --git a/cmd/app/draft_note_publisher_test.go b/cmd/app/draft_note_publisher_test.go
index 36e3e4f0..0ebfa554 100644
--- a/cmd/app/draft_note_publisher_test.go
+++ b/cmd/app/draft_note_publisher_test.go
@@ -25,7 +25,7 @@ func TestPublishDraftNote(t *testing.T) {
svc := middleware(
draftNotePublisherService{testProjectData, fakeDraftNotePublisher{}},
withMr(testProjectData, fakeMergeRequestLister{}),
- withPayloadValidation(methodToPayload{http.MethodPost: &DraftNotePublishRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[DraftNotePublishRequest]}),
withMethodCheck(http.MethodPost),
)
data := getSuccessData(t, svc, request)
@@ -36,7 +36,7 @@ func TestPublishDraftNote(t *testing.T) {
svc := middleware(
draftNotePublisherService{testProjectData, fakeDraftNotePublisher{testBase: testBase{errFromGitlab: true}}},
withMr(testProjectData, fakeMergeRequestLister{}),
- withPayloadValidation(methodToPayload{http.MethodPost: &DraftNotePublishRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[DraftNotePublishRequest]}),
withMethodCheck(http.MethodPost),
)
data, _ := getFailData(t, svc, request)
@@ -51,7 +51,7 @@ func TestPublishAllDraftNotes(t *testing.T) {
svc := middleware(
draftNotePublisherService{testProjectData, fakeDraftNotePublisher{}},
withMr(testProjectData, fakeMergeRequestLister{}),
- withPayloadValidation(methodToPayload{http.MethodPost: &DraftNotePublishRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[DraftNotePublishRequest]}),
withMethodCheck(http.MethodPost),
)
data := getSuccessData(t, svc, request)
@@ -62,7 +62,7 @@ func TestPublishAllDraftNotes(t *testing.T) {
svc := middleware(
draftNotePublisherService{testProjectData, fakeDraftNotePublisher{testBase: testBase{errFromGitlab: true}}},
withMr(testProjectData, fakeMergeRequestLister{}),
- withPayloadValidation(methodToPayload{http.MethodPost: &DraftNotePublishRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[DraftNotePublishRequest]}),
withMethodCheck(http.MethodPost),
)
data, _ := getFailData(t, svc, request)
diff --git a/cmd/app/draft_notes_test.go b/cmd/app/draft_notes_test.go
index 3702a69e..8fe38da1 100644
--- a/cmd/app/draft_notes_test.go
+++ b/cmd/app/draft_notes_test.go
@@ -46,8 +46,8 @@ func TestListDraftNotes(t *testing.T) {
draftNoteService{testProjectData, fakeDraftNoteManager{}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
- http.MethodPost: &PostDraftNoteRequest{},
- http.MethodPatch: &UpdateDraftNoteRequest{},
+ http.MethodPost: newPayload[PostDraftNoteRequest],
+ http.MethodPatch: newPayload[UpdateDraftNoteRequest],
}),
withMethodCheck(http.MethodGet, http.MethodPost, http.MethodPatch, http.MethodDelete),
)
@@ -61,8 +61,8 @@ func TestListDraftNotes(t *testing.T) {
draftNoteService{testProjectData, fakeDraftNoteManager{testBase: testBase{errFromGitlab: true}}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
- http.MethodPost: &PostDraftNoteRequest{},
- http.MethodPatch: &UpdateDraftNoteRequest{},
+ http.MethodPost: newPayload[PostDraftNoteRequest],
+ http.MethodPatch: newPayload[UpdateDraftNoteRequest],
}),
withMethodCheck(http.MethodGet, http.MethodPost, http.MethodPatch, http.MethodDelete),
)
@@ -75,8 +75,8 @@ func TestListDraftNotes(t *testing.T) {
draftNoteService{testProjectData, fakeDraftNoteManager{testBase: testBase{status: http.StatusSeeOther}}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
- http.MethodPost: &PostDraftNoteRequest{},
- http.MethodPatch: &UpdateDraftNoteRequest{},
+ http.MethodPost: newPayload[PostDraftNoteRequest],
+ http.MethodPatch: newPayload[UpdateDraftNoteRequest],
}),
withMethodCheck(http.MethodGet, http.MethodPost, http.MethodPatch, http.MethodDelete),
)
@@ -96,8 +96,8 @@ func TestPostDraftNote(t *testing.T) {
draftNoteService{testProjectData, fakeDraftNoteManager{}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
- http.MethodPost: &PostDraftNoteRequest{},
- http.MethodPatch: &UpdateDraftNoteRequest{},
+ http.MethodPost: newPayload[PostDraftNoteRequest],
+ http.MethodPatch: newPayload[UpdateDraftNoteRequest],
}),
withMethodCheck(http.MethodGet, http.MethodPost, http.MethodPatch, http.MethodDelete),
)
@@ -113,8 +113,8 @@ func TestDeleteDraftNote(t *testing.T) {
draftNoteService{testProjectData, fakeDraftNoteManager{}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
- http.MethodPost: &PostDraftNoteRequest{},
- http.MethodPatch: &UpdateDraftNoteRequest{},
+ http.MethodPost: newPayload[PostDraftNoteRequest],
+ http.MethodPatch: newPayload[UpdateDraftNoteRequest],
}),
withMethodCheck(http.MethodGet, http.MethodPost, http.MethodPatch, http.MethodDelete),
)
@@ -127,8 +127,8 @@ func TestDeleteDraftNote(t *testing.T) {
draftNoteService{testProjectData, fakeDraftNoteManager{}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
- http.MethodPost: &PostDraftNoteRequest{},
- http.MethodPatch: &UpdateDraftNoteRequest{},
+ http.MethodPost: newPayload[PostDraftNoteRequest],
+ http.MethodPatch: newPayload[UpdateDraftNoteRequest],
}),
withMethodCheck(http.MethodGet, http.MethodPost, http.MethodPatch, http.MethodDelete),
)
@@ -146,8 +146,8 @@ func TestEditDraftNote(t *testing.T) {
draftNoteService{testProjectData, fakeDraftNoteManager{}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
- http.MethodPost: &PostDraftNoteRequest{},
- http.MethodPatch: &UpdateDraftNoteRequest{},
+ http.MethodPost: newPayload[PostDraftNoteRequest],
+ http.MethodPatch: newPayload[UpdateDraftNoteRequest],
}),
withMethodCheck(http.MethodGet, http.MethodPost, http.MethodPatch, http.MethodDelete),
)
@@ -160,8 +160,8 @@ func TestEditDraftNote(t *testing.T) {
draftNoteService{testProjectData, fakeDraftNoteManager{}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
- http.MethodPost: &PostDraftNoteRequest{},
- http.MethodPatch: &UpdateDraftNoteRequest{},
+ http.MethodPost: newPayload[PostDraftNoteRequest],
+ http.MethodPatch: newPayload[UpdateDraftNoteRequest],
}),
withMethodCheck(http.MethodGet, http.MethodPost, http.MethodPatch, http.MethodDelete),
)
@@ -177,8 +177,8 @@ func TestEditDraftNote(t *testing.T) {
draftNoteService{testProjectData, fakeDraftNoteManager{}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
- http.MethodPost: &PostDraftNoteRequest{},
- http.MethodPatch: &UpdateDraftNoteRequest{},
+ http.MethodPost: newPayload[PostDraftNoteRequest],
+ http.MethodPatch: newPayload[UpdateDraftNoteRequest],
}),
withMethodCheck(http.MethodGet, http.MethodPost, http.MethodPatch, http.MethodDelete),
)
diff --git a/cmd/app/job_test.go b/cmd/app/job_test.go
index f9465484..34ca0db8 100644
--- a/cmd/app/job_test.go
+++ b/cmd/app/job_test.go
@@ -40,7 +40,7 @@ func TestJobHandler(t *testing.T) {
request := makeRequest(t, http.MethodGet, "/job", JobTraceRequest{JobId: 3})
svc := middleware(
traceFileService{testProjectData, fakeTraceFileGetter{}},
- withPayloadValidation(methodToPayload{http.MethodGet: &JobTraceRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodGet: newPayload[JobTraceRequest]}),
withMethodCheck(http.MethodGet),
)
data := getTraceFileData(t, svc, request)
@@ -51,7 +51,7 @@ func TestJobHandler(t *testing.T) {
request := makeRequest(t, http.MethodGet, "/job", JobTraceRequest{JobId: 2})
svc := middleware(
traceFileService{testProjectData, fakeTraceFileGetter{testBase{errFromGitlab: true}}},
- withPayloadValidation(methodToPayload{http.MethodGet: &JobTraceRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodGet: newPayload[JobTraceRequest]}),
withMethodCheck(http.MethodGet),
)
data, _ := getFailData(t, svc, request)
@@ -62,7 +62,7 @@ func TestJobHandler(t *testing.T) {
request := makeRequest(t, http.MethodGet, "/job", JobTraceRequest{JobId: 1})
svc := middleware(
traceFileService{testProjectData, fakeTraceFileGetter{testBase{status: http.StatusSeeOther}}},
- withPayloadValidation(methodToPayload{http.MethodGet: &JobTraceRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodGet: newPayload[JobTraceRequest]}),
withMethodCheck(http.MethodGet),
)
data, _ := getFailData(t, svc, request)
diff --git a/cmd/app/list_discussions_test.go b/cmd/app/list_discussions_test.go
index 25d284c2..c0366f81 100644
--- a/cmd/app/list_discussions_test.go
+++ b/cmd/app/list_discussions_test.go
@@ -71,7 +71,7 @@ func TestListDiscussions(t *testing.T) {
svc := middleware(
discussionsListerService{testProjectData, fakeDiscussionsLister{}},
withMr(testProjectData, fakeMergeRequestLister{}),
- withPayloadValidation(methodToPayload{http.MethodPost: &DiscussionsRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[DiscussionsRequest]}),
withMethodCheck(http.MethodPost),
)
data := getDiscussionsList(t, svc, request)
@@ -85,7 +85,7 @@ func TestListDiscussions(t *testing.T) {
svc := middleware(
discussionsListerService{testProjectData, fakeDiscussionsLister{}},
withMr(testProjectData, fakeMergeRequestLister{}),
- withPayloadValidation(methodToPayload{http.MethodPost: &DiscussionsRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[DiscussionsRequest]}),
withMethodCheck(http.MethodPost),
)
data := getDiscussionsList(t, svc, request)
@@ -98,7 +98,7 @@ func TestListDiscussions(t *testing.T) {
svc := middleware(
discussionsListerService{testProjectData, fakeDiscussionsLister{testBase: testBase{errFromGitlab: true}}},
withMr(testProjectData, fakeMergeRequestLister{}),
- withPayloadValidation(methodToPayload{http.MethodPost: &DiscussionsRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[DiscussionsRequest]}),
withMethodCheck(http.MethodPost),
)
data, _ := getFailData(t, svc, request)
@@ -109,7 +109,7 @@ func TestListDiscussions(t *testing.T) {
svc := middleware(
discussionsListerService{testProjectData, fakeDiscussionsLister{testBase: testBase{status: http.StatusSeeOther}}},
withMr(testProjectData, fakeMergeRequestLister{}),
- withPayloadValidation(methodToPayload{http.MethodPost: &DiscussionsRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[DiscussionsRequest]}),
withMethodCheck(http.MethodPost),
)
data, _ := getFailData(t, svc, request)
@@ -120,7 +120,7 @@ func TestListDiscussions(t *testing.T) {
svc := middleware(
discussionsListerService{testProjectData, fakeDiscussionsLister{badEmojiResponse: true, testBase: testBase{}}},
withMr(testProjectData, fakeMergeRequestLister{}),
- withPayloadValidation(methodToPayload{http.MethodPost: &DiscussionsRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[DiscussionsRequest]}),
withMethodCheck(http.MethodPost),
)
data, _ := getFailData(t, svc, request)
diff --git a/cmd/app/merge_mr_test.go b/cmd/app/merge_mr_test.go
index 9c48cf41..332f94db 100644
--- a/cmd/app/merge_mr_test.go
+++ b/cmd/app/merge_mr_test.go
@@ -28,7 +28,7 @@ func TestAcceptAndMergeHandler(t *testing.T) {
mergeRequestAccepterService{testProjectData, fakeMergeRequestAccepter{}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
- http.MethodPost: &AcceptMergeRequestRequest{},
+ http.MethodPost: newPayload[AcceptMergeRequestRequest],
}),
withMethodCheck(http.MethodPost),
)
@@ -41,7 +41,7 @@ func TestAcceptAndMergeHandler(t *testing.T) {
mergeRequestAccepterService{testProjectData, fakeMergeRequestAccepter{testBase{errFromGitlab: true}}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
- http.MethodPost: &AcceptMergeRequestRequest{},
+ http.MethodPost: newPayload[AcceptMergeRequestRequest],
}),
withMethodCheck(http.MethodPost),
)
@@ -54,7 +54,7 @@ func TestAcceptAndMergeHandler(t *testing.T) {
mergeRequestAccepterService{testProjectData, fakeMergeRequestAccepter{testBase{status: http.StatusSeeOther}}},
withMr(testProjectData, fakeMergeRequestLister{}),
withPayloadValidation(methodToPayload{
- http.MethodPost: &AcceptMergeRequestRequest{},
+ http.MethodPost: newPayload[AcceptMergeRequestRequest],
}),
withMethodCheck(http.MethodPost),
)
diff --git a/cmd/app/merge_requests_by_username_test.go b/cmd/app/merge_requests_by_username_test.go
index a6c2d010..8518e3c3 100644
--- a/cmd/app/merge_requests_by_username_test.go
+++ b/cmd/app/merge_requests_by_username_test.go
@@ -32,7 +32,7 @@ func TestListMergeRequestByUsername(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/merge_requests_by_username", testListMrsByUsernamePayload)
svc := middleware(
mergeRequestListerByUsernameService{testProjectData, fakeMergeRequestListerByUsername{}},
- withPayloadValidation(methodToPayload{http.MethodPost: &MergeRequestByUsernameRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[MergeRequestByUsernameRequest]}),
withMethodCheck(http.MethodPost),
)
data := getSuccessData(t, svc, request)
@@ -43,7 +43,7 @@ func TestListMergeRequestByUsername(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/merge_requests_by_username", testListMrsByUsernamePayload)
svc := middleware(
mergeRequestListerByUsernameService{testProjectData, fakeMergeRequestListerByUsername{emptyResponse: true}},
- withPayloadValidation(methodToPayload{http.MethodPost: &MergeRequestByUsernameRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[MergeRequestByUsernameRequest]}),
withMethodCheck(http.MethodPost),
)
data, status := getFailData(t, svc, request)
@@ -58,7 +58,7 @@ func TestListMergeRequestByUsername(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/merge_requests_by_username", missingUsernamePayload)
svc := middleware(
mergeRequestListerByUsernameService{testProjectData, fakeMergeRequestListerByUsername{}},
- withPayloadValidation(methodToPayload{http.MethodPost: &MergeRequestByUsernameRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[MergeRequestByUsernameRequest]}),
withMethodCheck(http.MethodPost),
)
data, status := getFailData(t, svc, request)
@@ -73,7 +73,7 @@ func TestListMergeRequestByUsername(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/merge_requests_by_username", missingUsernamePayload)
svc := middleware(
mergeRequestListerByUsernameService{testProjectData, fakeMergeRequestListerByUsername{}},
- withPayloadValidation(methodToPayload{http.MethodPost: &MergeRequestByUsernameRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[MergeRequestByUsernameRequest]}),
withMethodCheck(http.MethodPost),
)
data, status := getFailData(t, svc, request)
@@ -86,7 +86,7 @@ func TestListMergeRequestByUsername(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/merge_requests_by_username", testListMrsByUsernamePayload)
svc := middleware(
mergeRequestListerByUsernameService{testProjectData, fakeMergeRequestListerByUsername{testBase: testBase{errFromGitlab: true}}},
- withPayloadValidation(methodToPayload{http.MethodPost: &MergeRequestByUsernameRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[MergeRequestByUsernameRequest]}),
withMethodCheck(http.MethodPost),
)
data, status := getFailData(t, svc, request)
@@ -99,7 +99,7 @@ func TestListMergeRequestByUsername(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/merge_requests_by_username", testListMrsByUsernamePayload)
svc := middleware(
mergeRequestListerByUsernameService{testProjectData, fakeMergeRequestListerByUsername{testBase: testBase{status: http.StatusSeeOther}}},
- withPayloadValidation(methodToPayload{http.MethodPost: &MergeRequestByUsernameRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[MergeRequestByUsernameRequest]}),
withMethodCheck(http.MethodPost),
)
data, status := getFailData(t, svc, request)
diff --git a/cmd/app/merge_requests_test.go b/cmd/app/merge_requests_test.go
index 5f8cd1c3..29762cf4 100644
--- a/cmd/app/merge_requests_test.go
+++ b/cmd/app/merge_requests_test.go
@@ -36,7 +36,7 @@ func TestMergeRequestHandler(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/merge_requests", testListMergeRequestsRequest)
svc := middleware(
mergeRequestListerService{testProjectData, fakeMergeRequestLister{}},
- withPayloadValidation(methodToPayload{http.MethodPost: &gitlab.ListProjectMergeRequestsOptions{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[gitlab.ListProjectMergeRequestsOptions]}),
withMethodCheck(http.MethodPost),
)
data := getSuccessData(t, svc, request)
@@ -46,7 +46,7 @@ func TestMergeRequestHandler(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/merge_requests", testListMergeRequestsRequest)
svc := middleware(
mergeRequestListerService{testProjectData, fakeMergeRequestLister{testBase: testBase{errFromGitlab: true}}},
- withPayloadValidation(methodToPayload{http.MethodPost: &gitlab.ListProjectMergeRequestsOptions{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[gitlab.ListProjectMergeRequestsOptions]}),
withMethodCheck(http.MethodPost),
)
data, status := getFailData(t, svc, request)
@@ -57,7 +57,7 @@ func TestMergeRequestHandler(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/merge_requests", testListMergeRequestsRequest)
svc := middleware(
mergeRequestListerService{testProjectData, fakeMergeRequestLister{testBase: testBase{status: http.StatusSeeOther}}},
- withPayloadValidation(methodToPayload{http.MethodPost: &gitlab.ListProjectMergeRequestsOptions{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[gitlab.ListProjectMergeRequestsOptions]}),
withMethodCheck(http.MethodPost),
)
data, status := getFailData(t, svc, request)
@@ -68,7 +68,7 @@ func TestMergeRequestHandler(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/merge_requests", testListMergeRequestsRequest)
svc := middleware(
mergeRequestListerService{testProjectData, fakeMergeRequestLister{emptyResponse: true}},
- withPayloadValidation(methodToPayload{http.MethodPost: &gitlab.ListProjectMergeRequestsOptions{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[gitlab.ListProjectMergeRequestsOptions]}),
withMethodCheck(http.MethodPost),
)
data, status := getFailData(t, svc, request)
diff --git a/cmd/app/middleware.go b/cmd/app/middleware.go
index ae991911..9af69679 100644
--- a/cmd/app/middleware.go
+++ b/cmd/app/middleware.go
@@ -28,7 +28,13 @@ func middleware(h http.Handler, middlewares ...mw) http.HandlerFunc {
var validate = validator.New()
-type methodToPayload map[string]any
+type methodToPayload map[string]func() any
+
+// Generic factory function to create new payload instances per request
+func newPayload[T any]() any {
+ var p T
+ return &p
+}
type validatorMiddleware struct {
validate *validator.Validate
@@ -40,7 +46,8 @@ type validatorMiddleware struct {
func (p validatorMiddleware) handle(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- if p.methodToPayload[r.Method] == nil { // If no payload to validate for this method type...
+ constructor, exists := p.methodToPayload[r.Method]
+ if !exists { // If no payload to validate for this method type...
next.ServeHTTP(w, r)
return
}
@@ -51,7 +58,9 @@ func (p validatorMiddleware) handle(next http.Handler) http.Handler {
return
}
- pl := p.methodToPayload[r.Method]
+ // Create a new instance for this request
+ pl := constructor()
+
err = json.Unmarshal(body, &pl)
if err != nil {
@@ -72,7 +81,7 @@ func (p validatorMiddleware) handle(next http.Handler) http.Handler {
}
// Pass the parsed data so we don't have to re-parse it in the handler
- ctx := context.WithValue(r.Context(), payload(payload("payload")), pl)
+ ctx := context.WithValue(r.Context(), payload("payload"), pl)
r = r.WithContext(ctx)
next.ServeHTTP(w, r)
diff --git a/cmd/app/middleware_test.go b/cmd/app/middleware_test.go
index 6e9afdfb..0402f9d4 100644
--- a/cmd/app/middleware_test.go
+++ b/cmd/app/middleware_test.go
@@ -97,7 +97,7 @@ func TestValidatorMiddleware(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/foo", FakePayload{}) // No Foo field
data, status := getFailData(t, middleware(
fakeHandler{},
- withPayloadValidation(methodToPayload{http.MethodPost: &FakePayload{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[FakePayload]}),
), request)
assert(t, data.Message, "Invalid payload")
assert(t, data.Details, "Foo is required")
@@ -107,7 +107,7 @@ func TestValidatorMiddleware(t *testing.T) {
request := makeRequest(t, http.MethodPost, "/foo", FakePayload{Foo: "Some payload"})
data := getSuccessData(t, middleware(
fakeHandler{},
- withPayloadValidation(methodToPayload{http.MethodPost: &FakePayload{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[FakePayload]}),
), request)
assert(t, data.Message, "Some message")
})
diff --git a/cmd/app/reply_test.go b/cmd/app/reply_test.go
index 27d4416e..4234711c 100644
--- a/cmd/app/reply_test.go
+++ b/cmd/app/reply_test.go
@@ -27,7 +27,7 @@ func TestReplyHandler(t *testing.T) {
svc := middleware(
replyService{testProjectData, fakeReplyManager{}},
withMr(testProjectData, fakeMergeRequestLister{}),
- withPayloadValidation(methodToPayload{http.MethodPost: &ReplyRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[ReplyRequest]}),
withMethodCheck(http.MethodPost),
)
data := getSuccessData(t, svc, request)
@@ -38,7 +38,7 @@ func TestReplyHandler(t *testing.T) {
svc := middleware(
replyService{testProjectData, fakeReplyManager{testBase{errFromGitlab: true}}},
withMr(testProjectData, fakeMergeRequestLister{}),
- withPayloadValidation(methodToPayload{http.MethodPost: &ReplyRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[ReplyRequest]}),
withMethodCheck(http.MethodPost),
)
data, _ := getFailData(t, svc, request)
@@ -50,7 +50,7 @@ func TestReplyHandler(t *testing.T) {
svc := middleware(
replyService{testProjectData, fakeReplyManager{testBase{status: http.StatusSeeOther}}},
withMr(testProjectData, fakeMergeRequestLister{}),
- withPayloadValidation(methodToPayload{http.MethodPost: &ReplyRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[ReplyRequest]}),
withMethodCheck(http.MethodPost),
)
data, _ := getFailData(t, svc, request)
diff --git a/cmd/app/resolve_discussion_test.go b/cmd/app/resolve_discussion_test.go
index 18918e1a..26332dae 100644
--- a/cmd/app/resolve_discussion_test.go
+++ b/cmd/app/resolve_discussion_test.go
@@ -30,7 +30,7 @@ func TestResolveDiscussion(t *testing.T) {
svc := middleware(
discussionsResolutionService{testProjectData, fakeDiscussionResolver{}},
withMr(testProjectData, fakeMergeRequestLister{}),
- withPayloadValidation(methodToPayload{http.MethodPut: &DiscussionResolveRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPut: newPayload[DiscussionResolveRequest]}),
withMethodCheck(http.MethodPut),
)
request := makeRequest(t, http.MethodPut, "/mr/discussions/resolve", testResolveMergeRequestPayload)
@@ -44,7 +44,7 @@ func TestResolveDiscussion(t *testing.T) {
svc := middleware(
discussionsResolutionService{testProjectData, fakeDiscussionResolver{}},
withMr(testProjectData, fakeMergeRequestLister{}),
- withPayloadValidation(methodToPayload{http.MethodPut: &DiscussionResolveRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPut: newPayload[DiscussionResolveRequest]}),
withMethodCheck(http.MethodPut),
)
request := makeRequest(t, http.MethodPut, "/mr/discussions/resolve", payload)
@@ -58,7 +58,7 @@ func TestResolveDiscussion(t *testing.T) {
svc := middleware(
discussionsResolutionService{testProjectData, fakeDiscussionResolver{}},
withMr(testProjectData, fakeMergeRequestLister{}),
- withPayloadValidation(methodToPayload{http.MethodPut: &DiscussionResolveRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPut: newPayload[DiscussionResolveRequest]}),
withMethodCheck(http.MethodPut),
)
request := makeRequest(t, http.MethodPut, "/mr/discussions/resolve", payload)
@@ -72,7 +72,7 @@ func TestResolveDiscussion(t *testing.T) {
svc := middleware(
discussionsResolutionService{testProjectData, fakeDiscussionResolver{testBase: testBase{errFromGitlab: true}}},
withMr(testProjectData, fakeMergeRequestLister{}),
- withPayloadValidation(methodToPayload{http.MethodPut: &DiscussionResolveRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPut: newPayload[DiscussionResolveRequest]}),
withMethodCheck(http.MethodPut),
)
request := makeRequest(t, http.MethodPut, "/mr/discussions/resolve", testResolveMergeRequestPayload)
diff --git a/cmd/app/server.go b/cmd/app/server.go
index 342eb947..ca7ac8aa 100644
--- a/cmd/app/server.go
+++ b/cmd/app/server.go
@@ -99,28 +99,28 @@ func CreateRouter(gitlabClient *Client, projectInfo *ProjectInfo, s *shutdownSer
commentService{d, gitlabClient},
withMr(d, gitlabClient),
withPayloadValidation(methodToPayload{
- http.MethodPost: &PostCommentRequest{},
- http.MethodDelete: &DeleteCommentRequest{},
- http.MethodPatch: &EditCommentRequest{},
+ http.MethodPost: newPayload[PostCommentRequest],
+ http.MethodDelete: newPayload[DeleteCommentRequest],
+ http.MethodPatch: newPayload[EditCommentRequest],
}),
withMethodCheck(http.MethodPost, http.MethodDelete, http.MethodPatch),
))
m.HandleFunc("/mr/merge", middleware(
mergeRequestAccepterService{d, gitlabClient},
withMr(d, gitlabClient),
- withPayloadValidation(methodToPayload{http.MethodPost: &AcceptMergeRequestRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[AcceptMergeRequestRequest]}),
withMethodCheck(http.MethodPost),
))
m.HandleFunc("/mr/discussions/list", middleware(
discussionsListerService{d, gitlabClient},
withMr(d, gitlabClient),
- withPayloadValidation(methodToPayload{http.MethodPost: &DiscussionsRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[DiscussionsRequest]}),
withMethodCheck(http.MethodPost),
))
m.HandleFunc("/mr/discussions/resolve", middleware(
discussionsResolutionService{d, gitlabClient},
withMr(d, gitlabClient),
- withPayloadValidation(methodToPayload{http.MethodPut: &DiscussionResolveRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPut: newPayload[DiscussionResolveRequest]}),
withMethodCheck(http.MethodPut),
))
m.HandleFunc("/mr/info", middleware(
@@ -131,19 +131,19 @@ func CreateRouter(gitlabClient *Client, projectInfo *ProjectInfo, s *shutdownSer
m.HandleFunc("/mr/assignee", middleware(
assigneesService{d, gitlabClient},
withMr(d, gitlabClient),
- withPayloadValidation(methodToPayload{http.MethodPut: &AssigneeUpdateRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPut: newPayload[AssigneeUpdateRequest]}),
withMethodCheck(http.MethodPut),
))
m.HandleFunc("/mr/summary", middleware(
summaryService{d, gitlabClient},
withMr(d, gitlabClient),
- withPayloadValidation(methodToPayload{http.MethodPut: &SummaryUpdateRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPut: newPayload[SummaryUpdateRequest]}),
withMethodCheck(http.MethodPut),
))
m.HandleFunc("/mr/reviewer", middleware(
reviewerService{d, gitlabClient},
withMr(d, gitlabClient),
- withPayloadValidation(methodToPayload{http.MethodPut: &ReviewerUpdateRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPut: newPayload[ReviewerUpdateRequest]}),
withMethodCheck(http.MethodPut),
))
m.HandleFunc("/mr/revisions", middleware(
@@ -154,7 +154,7 @@ func CreateRouter(gitlabClient *Client, projectInfo *ProjectInfo, s *shutdownSer
m.HandleFunc("/mr/reply", middleware(
replyService{d, gitlabClient},
withMr(d, gitlabClient),
- withPayloadValidation(methodToPayload{http.MethodPost: &ReplyRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[ReplyRequest]}),
withMethodCheck(http.MethodPost),
))
m.HandleFunc("/mr/label", middleware(
@@ -175,15 +175,15 @@ func CreateRouter(gitlabClient *Client, projectInfo *ProjectInfo, s *shutdownSer
draftNoteService{d, gitlabClient},
withMr(d, gitlabClient),
withPayloadValidation(methodToPayload{
- http.MethodPost: &PostDraftNoteRequest{},
- http.MethodPatch: &UpdateDraftNoteRequest{},
+ http.MethodPost: newPayload[PostDraftNoteRequest],
+ http.MethodPatch: newPayload[UpdateDraftNoteRequest],
}),
withMethodCheck(http.MethodGet, http.MethodPost, http.MethodPatch, http.MethodDelete),
))
m.HandleFunc("/mr/draft_notes/publish", middleware(
draftNotePublisherService{d, gitlabClient},
withMr(d, gitlabClient),
- withPayloadValidation(methodToPayload{http.MethodPost: &DraftNotePublishRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[DraftNotePublishRequest]}),
withMethodCheck(http.MethodPost),
))
m.HandleFunc("/pipeline", middleware(
@@ -200,17 +200,17 @@ func CreateRouter(gitlabClient *Client, projectInfo *ProjectInfo, s *shutdownSer
))
m.HandleFunc("/attachment", middleware(
attachmentService{data: d, client: gitlabClient, fileReader: attachmentReader{}},
- withPayloadValidation(methodToPayload{http.MethodPost: &AttachmentRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[AttachmentRequest]}),
withMethodCheck(http.MethodPost),
))
m.HandleFunc("/create_mr", middleware(
mergeRequestCreatorService{d, gitlabClient},
- withPayloadValidation(methodToPayload{http.MethodPost: &CreateMrRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[CreateMrRequest]}),
withMethodCheck(http.MethodPost),
))
m.HandleFunc("/job", middleware(
traceFileService{d, gitlabClient},
- withPayloadValidation(methodToPayload{http.MethodGet: &JobTraceRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodGet: newPayload[JobTraceRequest]}),
withMethodCheck(http.MethodGet),
))
m.HandleFunc("/project/members", middleware(
@@ -219,17 +219,17 @@ func CreateRouter(gitlabClient *Client, projectInfo *ProjectInfo, s *shutdownSer
))
m.HandleFunc("/merge_requests", middleware(
mergeRequestListerService{d, gitlabClient},
- withPayloadValidation(methodToPayload{http.MethodPost: &gitlab.ListProjectMergeRequestsOptions{}}), // TODO: How to validate external object
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[gitlab.ListProjectMergeRequestsOptions]}), // TODO: How to validate external object
withMethodCheck(http.MethodPost),
))
m.HandleFunc("/merge_requests_by_username", middleware(
mergeRequestListerByUsernameService{d, gitlabClient},
- withPayloadValidation(methodToPayload{http.MethodPost: &MergeRequestByUsernameRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[MergeRequestByUsernameRequest]}),
withMethodCheck(http.MethodPost),
))
m.HandleFunc("/shutdown", middleware(
*s,
- withPayloadValidation(methodToPayload{http.MethodPost: &ShutdownRequest{}}),
+ withPayloadValidation(methodToPayload{http.MethodPost: newPayload[ShutdownRequest]}),
withMethodCheck(http.MethodPost),
))
diff --git a/lua/gitlab/actions/comment.lua b/lua/gitlab/actions/comment.lua
index 95abe305..a2f3d1fd 100644
--- a/lua/gitlab/actions/comment.lua
+++ b/lua/gitlab/actions/comment.lua
@@ -69,6 +69,8 @@ local confirm_create_comment = function(text, visual_range, unlinked, discussion
return
end
+ vim.print("Here: ", unlinked, discussion_id)
+
local reviewer_data = reviewer.get_reviewer_data()
if reviewer_data == nil then
u.notify("Error getting reviewer data", vim.log.levels.ERROR)
@@ -255,6 +257,7 @@ end
--- This function will open a comment popup in order to create a comment on the changed/updated
--- line in the current MR
M.create_comment = function()
+ vim.print("Creating comment...")
local has_clean_tree, err = git.has_clean_tree()
if err ~= nil then
return
@@ -298,6 +301,7 @@ end
--- This function will open a a popup to create a "note" (e.g. unlinked comment)
--- on the changed/updated line in the current MR
M.create_note = function()
+ vim.print("Creating note...")
local layout = M.create_comment_layout({ ranged = false, unlinked = true })
if layout ~= nil then
layout:mount()
From 87e224a1f43ff8fdbb86a70a4b059d6f651d3dfe Mon Sep 17 00:00:00 2001
From: "Harrison (Harry) Cramer"
<32515581+harrisoncramer@users.noreply.github.com>
Date: Mon, 16 Sep 2024 16:34:48 -0400
Subject: [PATCH 02/21] feat: adds even better debugging and linting support
(#376)
---
.github/CONTRIBUTING.md | 5 +++--
.github/workflows/go.yaml | 8 ++++++--
.golangci.yml | 3 +++
cmd/app/assignee.go | 2 +-
cmd/app/client.go | 22 +++++++++++-----------
cmd/app/draft_notes.go | 2 +-
cmd/app/emoji.go | 11 ++++++++---
cmd/app/git/git.go | 16 ++++++++--------
cmd/app/list_discussions.go | 2 +-
cmd/app/logging.go | 6 +++---
cmd/app/merge_requests.go | 4 ++--
cmd/app/merge_requests_by_username_test.go | 2 +-
cmd/app/middleware.go | 12 ++++++------
cmd/app/middleware_test.go | 4 ++--
cmd/app/pipeline.go | 2 +-
cmd/app/resolve_discussion_test.go | 2 +-
cmd/app/server.go | 12 +++++++++---
cmd/app/test_helpers.go | 2 +-
cmd/main.go | 8 ++++++--
19 files changed, 74 insertions(+), 51 deletions(-)
create mode 100644 .golangci.yml
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 0a07071c..98d3c074 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -31,11 +31,12 @@ If you are making changes to the Go codebase, don't forget to run `make compile`
3. Apply formatters and linters to your changes
-For changes to the Go codebase: We use gofmt to check formatting and golangci-lint to check linting. Run these commands in the root of the repository:
+For changes to the Go codebase: We use gofmt to check formatting and golangci-lint to check linting, and staticcheck. Run these commands in the root of the repository:
```bash
$ go fmt ./...
-$ golangci-lint run
+$ golangci-lint run ./...
+$ staticcheck ./...
```
If you are writing tests and have added something to the Go client, you can test with:
diff --git a/.github/workflows/go.yaml b/.github/workflows/go.yaml
index 01e1dbee..2786b74b 100644
--- a/.github/workflows/go.yaml
+++ b/.github/workflows/go.yaml
@@ -12,14 +12,18 @@ jobs:
- uses: actions/checkout@v3
- uses: actions/setup-go@v4
with:
- go-version: '1.19'
+ go-version: '1.23.1'
cache: false
- name: golangci-lint
uses: golangci/golangci-lint-action@v3
with:
- version: v1.54
+ version: v1.61.0
only-new-issues: true
skip-cache: true
+ - name: Install staticcheck
+ run: go install honnef.co/go/tools/cmd/staticcheck@2024.1.1
+ - name: Run staticcheck
+ run: staticcheck ./...
go_test:
name: Test Go ๐งช
needs: [go_lint]
diff --git a/.golangci.yml b/.golangci.yml
new file mode 100644
index 00000000..2ba75e1f
--- /dev/null
+++ b/.golangci.yml
@@ -0,0 +1,3 @@
+run:
+ tests: true
+ timeout: 30s
diff --git a/cmd/app/assignee.go b/cmd/app/assignee.go
index b7be1670..17fb1b66 100644
--- a/cmd/app/assignee.go
+++ b/cmd/app/assignee.go
@@ -28,7 +28,7 @@ func (a assigneesService) ServeHTTP(w http.ResponseWriter, r *http.Request) {
assigneeUpdateRequest, ok := r.Context().Value(payload("payload")).(*AssigneeUpdateRequest)
if !ok {
- handleError(w, errors.New("Could not get payload from context"), "Bad payload", http.StatusInternalServerError)
+ handleError(w, errors.New("could not get payload from context"), "Bad payload", http.StatusInternalServerError)
return
}
diff --git a/cmd/app/client.go b/cmd/app/client.go
index 756371f7..4d3da2ed 100644
--- a/cmd/app/client.go
+++ b/cmd/app/client.go
@@ -33,13 +33,13 @@ type Client struct {
}
/* NewClient parses and validates the project settings and initializes the Gitlab client. */
-func NewClient() (error, *Client) {
+func NewClient() (*Client, error) {
if pluginOptions.GitlabUrl == "" {
- return errors.New("GitLab instance URL cannot be empty"), nil
+ return nil, errors.New("GitLab instance URL cannot be empty")
}
- var apiCustUrl = fmt.Sprintf(pluginOptions.GitlabUrl + "/api/v4")
+ var apiCustUrl = fmt.Sprintf("%s/api/v4", pluginOptions.GitlabUrl)
gitlabOptions := []gitlab.ClientOptionFunc{
gitlab.WithBaseURL(apiCustUrl),
@@ -73,10 +73,10 @@ func NewClient() (error, *Client) {
client, err := gitlab.NewClient(pluginOptions.AuthToken, gitlabOptions...)
if err != nil {
- return fmt.Errorf("Failed to create client: %v", err), nil
+ return nil, fmt.Errorf("failed to create client: %v", err)
}
- return nil, &Client{
+ return &Client{
MergeRequestsService: client.MergeRequests,
MergeRequestApprovalsService: client.MergeRequestApprovals,
DiscussionsService: client.Discussions,
@@ -88,28 +88,28 @@ func NewClient() (error, *Client) {
AwardEmojiService: client.AwardEmoji,
UsersService: client.Users,
DraftNotesService: client.DraftNotes,
- }
+ }, nil
}
/* InitProjectSettings fetch the project ID using the client */
-func InitProjectSettings(c *Client, gitInfo git.GitData) (error, *ProjectInfo) {
+func InitProjectSettings(c *Client, gitInfo git.GitData) (*ProjectInfo, error) {
opt := gitlab.GetProjectOptions{}
project, _, err := c.GetProject(gitInfo.ProjectPath(), &opt)
if err != nil {
- return fmt.Errorf(fmt.Sprintf("Error getting project at %s", gitInfo.RemoteUrl), err), nil
+ return nil, fmt.Errorf(fmt.Sprintf("Error getting project at %s", gitInfo.RemoteUrl), err)
}
if project == nil {
- return fmt.Errorf(fmt.Sprintf("Could not find project at %s", gitInfo.RemoteUrl), err), nil
+ return nil, fmt.Errorf(fmt.Sprintf("Could not find project at %s", gitInfo.RemoteUrl), err)
}
projectId := fmt.Sprint(project.ID)
- return nil, &ProjectInfo{
+ return &ProjectInfo{
ProjectId: projectId,
- }
+ }, nil
}
/* handleError is a utililty handler that returns errors to the client along with their statuses and messages */
diff --git a/cmd/app/draft_notes.go b/cmd/app/draft_notes.go
index 6c248115..42daaa39 100644
--- a/cmd/app/draft_notes.go
+++ b/cmd/app/draft_notes.go
@@ -183,7 +183,7 @@ func (a draftNoteService) updateDraftNote(w http.ResponseWriter, r *http.Request
payload := r.Context().Value(payload("payload")).(*UpdateDraftNoteRequest)
if payload.Note == "" {
- handleError(w, errors.New("Draft note text missing"), "Must provide draft note text", http.StatusBadRequest)
+ handleError(w, errors.New("draft note text missing"), "Must provide draft note text", http.StatusBadRequest)
return
}
diff --git a/cmd/app/emoji.go b/cmd/app/emoji.go
index 4a535038..2dbfe6fb 100644
--- a/cmd/app/emoji.go
+++ b/cmd/app/emoji.go
@@ -64,6 +64,11 @@ func (a emojiService) deleteEmojiFromNote(w http.ResponseWriter, r *http.Request
suffix := strings.TrimPrefix(r.URL.Path, "/mr/awardable/note/")
ids := strings.Split(suffix, "/")
+ if len(ids) < 2 {
+ handleError(w, errors.New("missing IDs"), "Must provide note ID and awardable ID", http.StatusBadRequest)
+ return
+ }
+
noteId, err := strconv.Atoi(ids[0])
if err != nil {
handleError(w, err, "Could not convert note ID to integer", http.StatusBadRequest)
@@ -158,18 +163,18 @@ func attachEmojis(a *data, fr FileReader) error {
reader, err := fr.ReadFile(filePath)
if err != nil {
- return fmt.Errorf("Could not find emojis at %s", filePath)
+ return fmt.Errorf("could not find emojis at %s", filePath)
}
bytes, err := io.ReadAll(reader)
if err != nil {
- return errors.New("Could not read emoji file")
+ return errors.New("could not read emoji file")
}
var emojiMap EmojiMap
err = json.Unmarshal(bytes, &emojiMap)
if err != nil {
- return errors.New("Could not unmarshal emojis")
+ return errors.New("could not unmarshal emojis")
}
a.emojiMap = emojiMap
diff --git a/cmd/app/git/git.go b/cmd/app/git/git.go
index 7307430b..b4e36f87 100644
--- a/cmd/app/git/git.go
+++ b/cmd/app/git/git.go
@@ -39,12 +39,12 @@ Gitlab project and the branch must be a feature branch
func NewGitData(remote string, g GitManager) (GitData, error) {
err := g.RefreshProjectInfo(remote)
if err != nil {
- return GitData{}, fmt.Errorf("Could not get latest information from remote: %v", err)
+ return GitData{}, fmt.Errorf("could not get latest information from remote: %v", err)
}
url, err := g.GetProjectUrlFromNativeGitCmd(remote)
if err != nil {
- return GitData{}, fmt.Errorf("Could not get project Url: %v", err)
+ return GitData{}, fmt.Errorf("could not get project Url: %v", err)
}
/*
@@ -62,7 +62,7 @@ func NewGitData(remote string, g GitManager) (GitData, error) {
re := regexp.MustCompile(`^(?:git@[^\/:]*|https?:\/\/[^\/]+|ssh:\/\/[^\/:]+)(?::\d+)?[\/:](.*)\/([^\/]+?)(?:\.git)?\/?$`)
matches := re.FindStringSubmatch(url)
if len(matches) != 3 {
- return GitData{}, fmt.Errorf("Invalid Git URL format: %s", url)
+ return GitData{}, fmt.Errorf("invalid git URL format: %s", url)
}
namespace := matches[1]
@@ -70,7 +70,7 @@ func NewGitData(remote string, g GitManager) (GitData, error) {
branchName, err := g.GetCurrentBranchNameFromNativeGitCmd()
if err != nil {
- return GitData{}, fmt.Errorf("Failed to get current branch: %v", err)
+ return GitData{}, fmt.Errorf("failed to get current branch: %v", err)
}
return GitData{
@@ -88,7 +88,7 @@ func (g Git) GetCurrentBranchNameFromNativeGitCmd() (res string, e error) {
output, err := gitCmd.Output()
if err != nil {
- return "", fmt.Errorf("Error running git rev-parse: %w", err)
+ return "", fmt.Errorf("error running git rev-parse: %w", err)
}
branchName := strings.TrimSpace(string(output))
@@ -101,7 +101,7 @@ func (g Git) GetProjectUrlFromNativeGitCmd(remote string) (string, error) {
cmd := exec.Command("git", "remote", "get-url", remote)
url, err := cmd.Output()
if err != nil {
- return "", fmt.Errorf("Could not get remote")
+ return "", fmt.Errorf("could not get remote")
}
return strings.TrimSpace(string(url)), nil
@@ -112,7 +112,7 @@ func (g Git) RefreshProjectInfo(remote string) error {
cmd := exec.Command("git", "fetch", remote)
_, err := cmd.Output()
if err != nil {
- return fmt.Errorf("Failed to run `git fetch %s`: %v", remote, err)
+ return fmt.Errorf("failed to run `git fetch %s`: %v", remote, err)
}
return nil
@@ -123,7 +123,7 @@ func (g Git) GetLatestCommitOnRemote(remote string, branchName string) (string,
out, err := cmd.Output()
if err != nil {
- return "", fmt.Errorf("Failed to run `git log -1 --format=%%H " + fmt.Sprintf("%s/%s", remote, branchName))
+ return "", fmt.Errorf("failed to run `git log -1 --format=%%H %s/%s`", remote, branchName)
}
commit := strings.TrimSpace(string(out))
diff --git a/cmd/app/list_discussions.go b/cmd/app/list_discussions.go
index a75134ce..555a151e 100644
--- a/cmd/app/list_discussions.go
+++ b/cmd/app/list_discussions.go
@@ -87,7 +87,7 @@ func (a discussionsListerService) ServeHTTP(w http.ResponseWriter, r *http.Reque
var linkedDiscussions []*gitlab.Discussion
for _, discussion := range discussions {
- if discussion.Notes == nil || len(discussion.Notes) == 0 || Contains(request.Blacklist, discussion.Notes[0].Author.Username) {
+ if len(discussion.Notes) == 0 || Contains(request.Blacklist, discussion.Notes[0].Author.Username) {
continue
}
for _, note := range discussion.Notes {
diff --git a/cmd/app/logging.go b/cmd/app/logging.go
index e7fda5d9..d85820db 100644
--- a/cmd/app/logging.go
+++ b/cmd/app/logging.go
@@ -47,7 +47,7 @@ func (l LoggingServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
Request: r,
}
if pluginOptions.Debug.Response {
- logResponse("RESPONSE FROM GO SERVER", resp)
+ logResponse("RESPONSE FROM GO SERVER", resp) //nolint:errcheck
}
}
@@ -62,7 +62,7 @@ func logRequest(prefix string, r *http.Request) {
os.Exit(1)
}
r.Header.Set("Private-Token", token)
- _, err = file.Write([]byte(fmt.Sprintf("\n-- %s --\n%s\n", prefix, res))) //nolint:all
+ fmt.Fprintf(file, "\n-- %s --\n%s\n", prefix, res) //nolint:errcheck
}
func logResponse(prefix string, r *http.Response) {
@@ -75,7 +75,7 @@ func logResponse(prefix string, r *http.Response) {
os.Exit(1)
}
- _, err = file.Write([]byte(fmt.Sprintf("\n-- %s --\n%s\n", prefix, res))) //nolint:all
+ fmt.Fprintf(file, "\n-- %s --\n%s\n", prefix, res) //nolint:errcheck
}
func openLogFile() *os.File {
diff --git a/cmd/app/merge_requests.go b/cmd/app/merge_requests.go
index 4fd58b6d..7f1510e7 100644
--- a/cmd/app/merge_requests.go
+++ b/cmd/app/merge_requests.go
@@ -48,7 +48,7 @@ func (a mergeRequestListerService) ServeHTTP(w http.ResponseWriter, r *http.Requ
}
if len(mergeRequests) == 0 {
- handleError(w, errors.New("No merge requests found"), "No merge requests found", http.StatusNotFound)
+ handleError(w, errors.New("no merge requests found"), "No merge requests found", http.StatusNotFound)
return
}
@@ -60,6 +60,6 @@ func (a mergeRequestListerService) ServeHTTP(w http.ResponseWriter, r *http.Requ
err = json.NewEncoder(w).Encode(response)
if err != nil {
- handleError(w, err, "Could not encode response", http.StatusInternalServerError)
+ handleError(w, err, "could not encode response", http.StatusInternalServerError)
}
}
diff --git a/cmd/app/merge_requests_by_username_test.go b/cmd/app/merge_requests_by_username_test.go
index 8518e3c3..fb3aa847 100644
--- a/cmd/app/merge_requests_by_username_test.go
+++ b/cmd/app/merge_requests_by_username_test.go
@@ -91,7 +91,7 @@ func TestListMergeRequestByUsername(t *testing.T) {
)
data, status := getFailData(t, svc, request)
assert(t, data.Message, "An error occurred")
- assert(t, data.Details, strings.Repeat("Some error from Gitlab; ", 3))
+ assert(t, data.Details, strings.Repeat("some error from Gitlab; ", 3))
assert(t, status, http.StatusInternalServerError)
})
diff --git a/cmd/app/middleware.go b/cmd/app/middleware.go
index 9af69679..5408626b 100644
--- a/cmd/app/middleware.go
+++ b/cmd/app/middleware.go
@@ -110,18 +110,18 @@ func (m withMrMiddleware) handle(next http.Handler) http.Handler {
mergeRequests, _, err := m.client.ListProjectMergeRequests(m.data.projectInfo.ProjectId, &options)
if err != nil {
- handleError(w, fmt.Errorf("Failed to list merge requests: %w", err), "Failed to list merge requests", http.StatusInternalServerError)
+ handleError(w, fmt.Errorf("failed to list merge requests: %w", err), "Failed to list merge requests", http.StatusInternalServerError)
return
}
if len(mergeRequests) == 0 {
- err := fmt.Errorf("Branch '%s' does not have any merge requests", m.data.gitInfo.BranchName)
+ err := fmt.Errorf("branch '%s' does not have any merge requests", m.data.gitInfo.BranchName)
handleError(w, err, "No MRs Found", http.StatusNotFound)
return
}
if len(mergeRequests) > 1 {
- err := errors.New("Please call gitlab.choose_merge_request()")
+ err := errors.New("please call gitlab.choose_merge_request()")
handleError(w, err, "Multiple MRs found", http.StatusBadRequest)
return
}
@@ -164,9 +164,9 @@ func withMethodCheck(methods ...string) mw {
}
// Helper function to format validation errors into more readable strings
-func formatValidationErrors(errors validator.ValidationErrors) error {
+func formatValidationErrors(errs validator.ValidationErrors) error {
var s strings.Builder
- for i, e := range errors {
+ for i, e := range errs {
if i > 0 {
s.WriteString("; ")
}
@@ -178,5 +178,5 @@ func formatValidationErrors(errors validator.ValidationErrors) error {
}
}
- return fmt.Errorf(s.String())
+ return errors.New(s.String())
}
diff --git a/cmd/app/middleware_test.go b/cmd/app/middleware_test.go
index 0402f9d4..598c3d59 100644
--- a/cmd/app/middleware_test.go
+++ b/cmd/app/middleware_test.go
@@ -75,7 +75,7 @@ func TestWithMrMiddleware(t *testing.T) {
data, status := getFailData(t, handler, request)
assert(t, status, http.StatusNotFound)
assert(t, data.Message, "No MRs Found")
- assert(t, data.Details, "Branch 'foo' does not have any merge requests")
+ assert(t, data.Details, "branch 'foo' does not have any merge requests")
})
t.Run("Handles when there are too many MRs", func(t *testing.T) {
request := makeRequest(t, http.MethodGet, "/foo", nil)
@@ -88,7 +88,7 @@ func TestWithMrMiddleware(t *testing.T) {
data, status := getFailData(t, handler, request)
assert(t, status, http.StatusBadRequest)
assert(t, data.Message, "Multiple MRs found")
- assert(t, data.Details, "Please call gitlab.choose_merge_request()")
+ assert(t, data.Details, "please call gitlab.choose_merge_request()")
})
}
diff --git a/cmd/app/pipeline.go b/cmd/app/pipeline.go
index 8640613a..174b4acc 100644
--- a/cmd/app/pipeline.go
+++ b/cmd/app/pipeline.go
@@ -67,7 +67,7 @@ func (a pipelineService) GetLastPipeline(commit string) (*gitlab.PipelineInfo, e
}
if res.StatusCode >= 300 {
- return nil, errors.New("Could not get pipelines")
+ return nil, errors.New("could not get pipelines")
}
if len(pipes) == 0 {
diff --git a/cmd/app/resolve_discussion_test.go b/cmd/app/resolve_discussion_test.go
index 26332dae..24b04ddd 100644
--- a/cmd/app/resolve_discussion_test.go
+++ b/cmd/app/resolve_discussion_test.go
@@ -78,7 +78,7 @@ func TestResolveDiscussion(t *testing.T) {
request := makeRequest(t, http.MethodPut, "/mr/discussions/resolve", testResolveMergeRequestPayload)
data, status := getFailData(t, svc, request)
assert(t, data.Message, "Could not resolve discussion")
- assert(t, data.Details, "Some error from Gitlab")
+ assert(t, data.Details, "some error from Gitlab")
assert(t, status, http.StatusInternalServerError)
})
}
diff --git a/cmd/app/server.go b/cmd/app/server.go
index ca7ac8aa..c0b1af63 100644
--- a/cmd/app/server.go
+++ b/cmd/app/server.go
@@ -86,7 +86,13 @@ func CreateRouter(gitlabClient *Client, projectInfo *ProjectInfo, s *shutdownSer
for _, optFunc := range optFuncs {
err := optFunc(&d)
if err != nil {
- panic(err)
+ if os.Getenv("DEBUG") != "" {
+ // TODO: We have some JSON files (emojis.json) we import relative to the binary in production and
+ // expect to break during debugging, do not throw when that occurs.
+ fmt.Fprintf(os.Stdout, "Issue occured setting up router: %s\n", err)
+ } else {
+ panic(err)
+ }
}
}
@@ -245,13 +251,13 @@ func CreateRouter(gitlabClient *Client, projectInfo *ProjectInfo, s *shutdownSer
func checkServer(port int) error {
for i := 0; i < 10; i++ {
resp, err := http.Get("http://localhost:" + fmt.Sprintf("%d", port) + "/ping")
- if resp.StatusCode == 200 && err == nil {
+ if resp != nil && resp.StatusCode == 200 && err == nil {
return nil
}
time.Sleep(100 * time.Microsecond)
}
- return errors.New("Could not start server!")
+ return errors.New("could not start server")
}
/* Creates a TCP listener on the port specified by the user or a random port */
diff --git a/cmd/app/test_helpers.go b/cmd/app/test_helpers.go
index 98ec8d2b..2c3e1bf8 100644
--- a/cmd/app/test_helpers.go
+++ b/cmd/app/test_helpers.go
@@ -14,7 +14,7 @@ import (
"github.com/xanzy/go-gitlab"
)
-var errorFromGitlab = errors.New("Some error from Gitlab")
+var errorFromGitlab = errors.New("some error from Gitlab")
/* The assert function is a helper function used to check two comparables */
func assert[T comparable](t *testing.T, got T, want T) {
diff --git a/cmd/main.go b/cmd/main.go
index 175aa30a..b46a880f 100644
--- a/cmd/main.go
+++ b/cmd/main.go
@@ -14,6 +14,10 @@ var pluginOptions app.PluginOptions
func main() {
log.SetFlags(0)
+ if len(os.Args) < 2 {
+ log.Fatal("Must provide server configuration")
+ }
+
err := json.Unmarshal([]byte(os.Args[1]), &pluginOptions)
app.SetPluginOptions(pluginOptions)
@@ -28,12 +32,12 @@ func main() {
log.Fatalf("Failure initializing plugin: %v", err)
}
- err, client := app.NewClient()
+ client, err := app.NewClient()
if err != nil {
log.Fatalf("Failed to initialize Gitlab client: %v", err)
}
- err, projectInfo := app.InitProjectSettings(client, gitData)
+ projectInfo, err := app.InitProjectSettings(client, gitData)
if err != nil {
log.Fatalf("Failed to initialize project settings: %v", err)
}
From e17d713b265a91d7388228da29a72e4f59756e22 Mon Sep 17 00:00:00 2001
From: George Kontridze
Date: Sat, 21 Sep 2024 14:34:48 -0700
Subject: [PATCH 03/21] fix: error messages and run all tests (#381)
Fixes scripts for running go tests and git tests
---
cmd/app/git/git_test.go | 4 ++--
makefile | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/cmd/app/git/git_test.go b/cmd/app/git/git_test.go
index e8864fb2..c2f88045 100644
--- a/cmd/app/git/git_test.go
+++ b/cmd/app/git/git_test.go
@@ -198,7 +198,7 @@ func TestExtractGitInfo_FailToGetProjectRemoteUrl(t *testing.T) {
tC := FailTestCase{
desc: "Error returned by function to get the project remote url",
errMsg: "Some error",
- expectedErr: "Could not get project Url: Some error",
+ expectedErr: "could not get project Url: Some error",
}
t.Run(tC.desc, func(t *testing.T) {
g := failingUrlManager{
@@ -227,7 +227,7 @@ func TestExtractGitInfo_FailToGetCurrentBranchName(t *testing.T) {
tC := FailTestCase{
desc: "Error returned by function to get the project remote url",
errMsg: "Some error",
- expectedErr: "Failed to get current branch: Some error",
+ expectedErr: "failed to get current branch: Some error",
}
t.Run(tC.desc, func(t *testing.T) {
g := failingBranchManager{
diff --git a/makefile b/makefile
index 83e9c65f..151ce822 100644
--- a/makefile
+++ b/makefile
@@ -4,10 +4,10 @@ PROJECTNAME=$(shell basename "$(PWD)")
## compile: build golang project
compile:
- @cd cmd && go build -o bin && mv bin ../bin
+ @go build -o bin ./cmd
## test: run golang project tests
test:
- @cd cmd/app && go test
+ @go test -v ./...
.PHONY: help
all: help
From 523bdd4726b13c715798cde77ef6af19c1bd5cd4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20F=2E=20Bortl=C3=ADk?=
Date: Mon, 23 Sep 2024 21:08:27 +0200
Subject: [PATCH 04/21] feat: Automatically open fold under cursor (#380)
feat: Automatically open fold under cursor, redraw screen with cursor at center
---
lua/gitlab/reviewer/init.lua | 2 ++
lua/gitlab/utils/init.lua | 6 ++++++
2 files changed, 8 insertions(+)
diff --git a/lua/gitlab/reviewer/init.lua b/lua/gitlab/reviewer/init.lua
index 9ef37ea2..185c01bc 100644
--- a/lua/gitlab/reviewer/init.lua
+++ b/lua/gitlab/reviewer/init.lua
@@ -145,6 +145,8 @@ M.jump = function(file_name, line_number, new_buffer)
line_number = number_of_lines
end
vim.api.nvim_win_set_cursor(0, { line_number, 0 })
+ u.open_fold_under_cursor()
+ vim.cmd("normal! zz")
end
---Get the data from diffview, such as line information and file name. May be used by
diff --git a/lua/gitlab/utils/init.lua b/lua/gitlab/utils/init.lua
index 3018fd44..2729da1a 100644
--- a/lua/gitlab/utils/init.lua
+++ b/lua/gitlab/utils/init.lua
@@ -752,4 +752,10 @@ M.get_nested_field = function(table, field)
end
end
+M.open_fold_under_cursor = function()
+ if vim.fn.foldclosed(vim.fn.line(".")) > -1 then
+ vim.cmd("normal! zo")
+ end
+end
+
return M
From 879ee20c1e80d82eb5a47e35bccc73aeba34c2ce Mon Sep 17 00:00:00 2001
From: "Harrison (Harry) Cramer"
<32515581+harrisoncramer@users.noreply.github.com>
Date: Thu, 26 Sep 2024 10:08:25 -0400
Subject: [PATCH 05/21] fix: discussion ID is not required (#383)
---
cmd/app/draft_notes.go | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cmd/app/draft_notes.go b/cmd/app/draft_notes.go
index 42daaa39..4f550537 100644
--- a/cmd/app/draft_notes.go
+++ b/cmd/app/draft_notes.go
@@ -90,7 +90,7 @@ func (a draftNoteService) listDraftNotes(w http.ResponseWriter, r *http.Request)
type PostDraftNoteRequest struct {
Comment string `json:"comment" validate:"required"`
- DiscussionId string `json:"discussion_id,omitempty" validate:"required"`
+ DiscussionId string `json:"discussion_id,omitempty"`
PositionData // TODO: How to add validations to data from external package???
}
From 125cfbb54460861117f930e31cc4a0ec7013ecb9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20F=2E=20Bortl=C3=ADk?=
Date: Fri, 4 Oct 2024 22:03:34 +0200
Subject: [PATCH 06/21] Chore: Add more emojis (#384)
---
config/emojis.json | 45 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/config/emojis.json b/config/emojis.json
index 5df086aa..e349f871 100644
--- a/config/emojis.json
+++ b/config/emojis.json
@@ -6351,6 +6351,38 @@
],
"moji": "๐ฎ"
},
+ "package": {
+ "unicode": "1F4E6",
+ "unicode_alternates": [],
+ "name": "package",
+ "shortname": ":package:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "release"
+ ],
+ "moji": "๐ฆ"
+ },
+ "party": {
+ "unicode": "1F389",
+ "unicode_alternates": [],
+ "name": "party popper as a 'tada' celebration",
+ "shortname": ":tada:",
+ "category": "people",
+ "aliases": [
+ ":party_popper:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "celebrate",
+ "celebration",
+ "hooray",
+ "hurrah",
+ "hurray"
+ ],
+ "moji": "๐"
+ },
"pensive": {
"unicode": "1F614",
"unicode_alternates": [],
@@ -8445,6 +8477,19 @@
],
"moji": "๐ค"
},
+ "rocket": {
+ "unicode": "1F680",
+ "unicode_alternates": [],
+ "name": "rocket",
+ "shortname": ":rocket:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "space"
+ ],
+ "moji": "๐"
+ },
"rofl": {
"unicode": "1F923",
"unicode_alternates": [],
From 7171f4c7d75561bf83b397fed888a470a94e75ee Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20F=2E=20Bortl=C3=ADk?=
Date: Thu, 10 Oct 2024 21:57:25 +0200
Subject: [PATCH 07/21] Fix: Publish all drafts (#391)
* fix: use body with /mr/draft_notes/publish endpoint
* docs: notify about successfully building server
---
lua/gitlab/actions/draft_notes/init.lua | 2 +-
lua/gitlab/server.lua | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/lua/gitlab/actions/draft_notes/init.lua b/lua/gitlab/actions/draft_notes/init.lua
index a8716750..ea7b5b42 100755
--- a/lua/gitlab/actions/draft_notes/init.lua
+++ b/lua/gitlab/actions/draft_notes/init.lua
@@ -84,7 +84,7 @@ end
---Publishes all draft notes and comments. Re-renders all discussion views.
M.confirm_publish_all_drafts = function()
- local body = {}
+ local body = { publish_all = true }
job.run_job("/mr/draft_notes/publish", "POST", body, function(data)
u.notify(data.message, vim.log.levels.INFO)
state.DRAFT_NOTES = {}
diff --git a/lua/gitlab/server.lua b/lua/gitlab/server.lua
index 8efb338a..d770b071 100644
--- a/lua/gitlab/server.lua
+++ b/lua/gitlab/server.lua
@@ -100,6 +100,7 @@ M.build = function(override)
u.notify("Could not install gitlab.nvim!", vim.log.levels.ERROR)
return false
end
+ u.notify("Gitlab.nvim installed successfully!", vim.log.levels.INFO)
return true
end
From 0e19857f49a6e844ec5b7489c8a226abf1eff387 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20F=2E=20Bortl=C3=ADk?=
Date: Fri, 11 Oct 2024 21:18:12 +0200
Subject: [PATCH 08/21] fix: make discussion tree buffers nomodifiable (#394)
---
lua/gitlab/actions/common.lua | 1 +
1 file changed, 1 insertion(+)
diff --git a/lua/gitlab/actions/common.lua b/lua/gitlab/actions/common.lua
index e409454c..ace7bbe4 100644
--- a/lua/gitlab/actions/common.lua
+++ b/lua/gitlab/actions/common.lua
@@ -82,6 +82,7 @@ M.add_empty_titles = function()
{ end_row = linnr - 1, end_col = string.len(v.title), hl_group = "TitleHighlight" }
)
end
+ M.switch_can_edit_bufs(false, v.bufnr)
end
end
end
From 96efdc268f1c9e7c0e5f1c781e9d7f1730b47748 Mon Sep 17 00:00:00 2001
From: "Harrison (Harry) Cramer"
<32515581+harrisoncramer@users.noreply.github.com>
Date: Sat, 12 Oct 2024 10:19:35 -0400
Subject: [PATCH 09/21] fix: Incorrect warning about commits (#395)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Fixed some bad warnings when the branch was out of date or ahead of the remote tracking branch.
---------
Co-authored-by: Jakub F. Bortlรญk
---
lua/gitlab/actions/create_mr.lua | 2 +-
lua/gitlab/actions/summary.lua | 3 +-
lua/gitlab/git.lua | 110 +++++++++++++++++++++++--------
lua/gitlab/reviewer/init.lua | 15 +----
4 files changed, 89 insertions(+), 41 deletions(-)
diff --git a/lua/gitlab/actions/create_mr.lua b/lua/gitlab/actions/create_mr.lua
index 401162e2..2e366946 100644
--- a/lua/gitlab/actions/create_mr.lua
+++ b/lua/gitlab/actions/create_mr.lua
@@ -47,7 +47,7 @@ end
--- continue working on it.
---@param args? Mr
M.start = function(args)
- if not git.current_branch_up_to_date_on_remote(vim.log.levels.ERROR) then
+ if not git.check_current_branch_up_to_date_on_remote(vim.log.levels.ERROR) then
return
end
diff --git a/lua/gitlab/actions/summary.lua b/lua/gitlab/actions/summary.lua
index 613b4df7..dfde1d73 100644
--- a/lua/gitlab/actions/summary.lua
+++ b/lua/gitlab/actions/summary.lua
@@ -82,7 +82,8 @@ M.summary = function()
vim.api.nvim_set_current_buf(description_popup.bufnr)
end)
- git.current_branch_up_to_date_on_remote(vim.log.levels.WARN)
+ git.check_current_branch_up_to_date_on_remote(vim.log.levels.WARN)
+ git.check_mr_in_good_condition()
end
-- Builds a lua list of strings that contain metadata about the current MR. Only builds the
diff --git a/lua/gitlab/git.lua b/lua/gitlab/git.lua
index cced16ad..aa74abc0 100644
--- a/lua/gitlab/git.lua
+++ b/lua/gitlab/git.lua
@@ -43,6 +43,58 @@ M.switch_branch = function(branch)
return run_system({ "git", "checkout", "-q", branch })
end
+---Fetches the name of the remote tracking branch for the current branch
+---@return string|nil, string|nil
+M.get_remote_branch = function()
+ return run_system({ "git", "rev-parse", "--abbrev-ref", "--symbolic-full-name", "@{u}" })
+end
+
+---Determines whether the tracking branch is ahead of or behind the current branch, and warns the user if so
+---@param current_branch string
+---@param remote_branch string
+---@param log_level number
+---@return boolean
+M.get_ahead_behind = function(current_branch, remote_branch, log_level)
+ local u = require("gitlab.utils")
+ local result, err =
+ run_system({ "git", "rev-list", "--left-right", "--count", current_branch .. "..." .. remote_branch })
+ if err ~= nil or result == nil then
+ u.notify("Could not determine if branch is up-to-date: " .. err, vim.log.levels.ERROR)
+ return false
+ end
+
+ local ahead, behind = result:match("(%d+)%s+(%d+)")
+ if ahead == nil or behind == nil then
+ u.notify("Error parsing ahead/behind information.", vim.log.levels.ERROR)
+ return false
+ end
+
+ ahead = tonumber(ahead)
+ behind = tonumber(behind)
+
+ if ahead > 0 and behind == 0 then
+ u.notify(string.format("There are local changes that haven't been pushed to %s yet", remote_branch), log_level)
+ return false
+ end
+ if behind > 0 and ahead == 0 then
+ u.notify(string.format("There are remote changes on %s that haven't been pulled yet", remote_branch), log_level)
+ return false
+ end
+
+ if ahead > 0 and behind > 0 then
+ u.notify(
+ string.format(
+ "Your branch and the remote %s have diverged. You need to pull, possibly rebase, and then push.",
+ remote_branch
+ ),
+ log_level
+ )
+ return false
+ end
+
+ return true -- Checks passed, branch is up-to-date
+end
+
---Return the name of the current branch
---@return string|nil, string|nil
M.get_current_branch = function()
@@ -93,39 +145,45 @@ M.contains_branch = function(current_branch)
return run_system({ "git", "branch", "-r", "--contains", current_branch })
end
----Returns true if `branch` is up-to-date on remote, false otherwise.
+---Returns true if `branch` is up-to-date on remote, otherwise false and warns user
---@param log_level integer
----@return boolean|nil
-M.current_branch_up_to_date_on_remote = function(log_level)
- local state = require("gitlab.state")
- local current_branch = M.get_current_branch()
- local handle = io.popen("git branch -r --contains " .. current_branch .. " 2>&1")
- if not handle then
- require("gitlab.utils").notify("Error running 'git branch' command.", vim.log.levels.ERROR)
- return nil
+---@return boolean
+M.check_current_branch_up_to_date_on_remote = function(log_level)
+ local u = require("gitlab.utils")
+
+ -- Get current branch
+ local current_branch, err_current_branch = M.get_current_branch()
+ if err_current_branch or not current_branch then
+ u.notify("Could not get current branch: " .. err_current_branch, vim.log.levels.ERROR)
+ return false
end
- local remote_branches_with_current_head = {}
- for line in handle:lines() do
- table.insert(remote_branches_with_current_head, line)
+ -- Get remote tracking branch
+ local remote_branch, err_remote_branch = M.get_remote_branch()
+ if err_remote_branch or not remote_branch then
+ u.notify("Could not get remote branch: " .. err_remote_branch, vim.log.levels.ERROR)
+ return false
end
- handle:close()
- local current_head_on_remote = List.new(remote_branches_with_current_head):filter(function(line)
- return line == string.format(" %s/", state.settings.connection_settings.remote) .. current_branch
- end)
- local remote_up_to_date = #current_head_on_remote == 1
+ return M.get_ahead_behind(current_branch, remote_branch, log_level)
+end
- if not remote_up_to_date then
- require("gitlab.utils").notify(
- string.format(
- "You have local commits that are not on %s. Have you forgotten to push?",
- state.settings.connection_settings.remote
- ),
- log_level
- )
+---Warns user if the current MR is in a bad state (closed, has conflicts, merged)
+M.check_mr_in_good_condition = function()
+ local state = require("gitlab.state")
+ local u = require("gitlab.utils")
+
+ if state.INFO.has_conflicts then
+ u.notify("This merge request has conflicts!", vim.log.levels.WARN)
+ end
+
+ if state.INFO.state == "closed" then
+ u.notify(string.format("This MR was closed %s", u.time_since(state.INFO.closed_at)), vim.log.levels.WARN)
+ end
+
+ if state.INFO.state == "merged" then
+ u.notify(string.format("This MR was merged %s", u.time_since(state.INFO.merged_at)), vim.log.levels.WARN)
end
- return remote_up_to_date
end
return M
diff --git a/lua/gitlab/reviewer/init.lua b/lua/gitlab/reviewer/init.lua
index 185c01bc..89654c97 100644
--- a/lua/gitlab/reviewer/init.lua
+++ b/lua/gitlab/reviewer/init.lua
@@ -62,18 +62,6 @@ M.open = function()
)
end
- if state.INFO.has_conflicts then
- u.notify("This merge request has conflicts!", vim.log.levels.WARN)
- end
-
- if state.INFO.state == "closed" then
- u.notify(string.format("This MR was closed %s", u.time_since(state.INFO.closed_at)), vim.log.levels.WARN)
- end
-
- if state.INFO.state == "merged" then
- u.notify(string.format("This MR was merged %s", u.time_since(state.INFO.merged_at)), vim.log.levels.WARN)
- end
-
if state.settings.discussion_diagnostic ~= nil or state.settings.discussion_sign ~= nil then
u.notify(
"Diagnostics are now configured as settings.discussion_signs, see :h gitlab.nvim.signs-and-diagnostics",
@@ -98,7 +86,8 @@ M.open = function()
require("gitlab").toggle_discussions() -- Fetches data and opens discussions
end
- git.current_branch_up_to_date_on_remote(vim.log.levels.WARN)
+ git.check_current_branch_up_to_date_on_remote(vim.log.levels.WARN)
+ git.check_mr_in_good_condition()
end
-- Closes the reviewer and cleans up
From b359b474a4892fdd88d6b9c1f68ac2924d1f8b1b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20F=2E=20Bortl=C3=ADk?=
Date: Sun, 13 Oct 2024 18:59:09 +0200
Subject: [PATCH 10/21] Fix: Show draft replies in the correct tree (#396)
Fix: Show draft replies in the correct tree
---
lua/gitlab/actions/discussions/winbar.lua | 13 ++++++++++---
lua/gitlab/utils/list.lua | 17 +++++++++++++++++
2 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/lua/gitlab/actions/discussions/winbar.lua b/lua/gitlab/actions/discussions/winbar.lua
index 09fb9934..d97c17d5 100644
--- a/lua/gitlab/actions/discussions/winbar.lua
+++ b/lua/gitlab/actions/discussions/winbar.lua
@@ -49,9 +49,16 @@ local function content()
local resolvable_notes, resolved_notes = get_data(state.DISCUSSION_DATA.unlinked_discussions)
local draft_notes = require("gitlab.actions.draft_notes")
- local inline_draft_notes = List.new(state.DRAFT_NOTES):filter(draft_notes.has_position)
- local unlinked_draft_notes = List.new(state.DRAFT_NOTES):filter(function(note)
- return not draft_notes.has_position(note)
+ local inline_draft_notes, unlinked_draft_notes = List.new(state.DRAFT_NOTES):partition(function(note)
+ if note.discussion_id == "" then
+ return draft_notes.has_position(note)
+ end
+ for _, discussion in ipairs(state.DISCUSSION_DATA.unlinked_discussions) do
+ if discussion.id == note.discussion_id then
+ return false
+ end
+ end
+ return true
end)
local t = {
diff --git a/lua/gitlab/utils/list.lua b/lua/gitlab/utils/list.lua
index ea54b90c..775522ff 100644
--- a/lua/gitlab/utils/list.lua
+++ b/lua/gitlab/utils/list.lua
@@ -33,6 +33,23 @@ function List:filter(func)
return result
end
+---Partitions a given list into two lists
+---@generic T
+---@param func fun(v: T, i: integer):boolean
+---@return List, List @Returns two lists: the 1st with elements for which func returns true, the 2nd with elements for which it returns false
+function List:partition(func)
+ local result_true = List.new()
+ local result_false = List.new()
+ for i, v in ipairs(self) do
+ if func(v, i) == true then
+ table.insert(result_true, v)
+ else
+ table.insert(result_false, v)
+ end
+ end
+ return result_true, result_false
+end
+
function List:reduce(func, agg)
for i, v in ipairs(self) do
agg = func(agg, v, i)
From a63823c196d6a6bdf7eee463e262ce7f5002c663 Mon Sep 17 00:00:00 2001
From: "Harrison (Harry) Cramer"
<32515581+harrisoncramer@users.noreply.github.com>
Date: Sun, 13 Oct 2024 15:12:14 -0400
Subject: [PATCH 11/21] fix: Cannot choose merge requests (#398)
---
cmd/app/config.go | 2 +-
cmd/app/middleware.go | 5 ++++-
lua/gitlab/actions/merge_requests.lua | 2 +-
lua/gitlab/server.lua | 4 ++--
lua/gitlab/state.lua | 5 ++---
5 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/cmd/app/config.go b/cmd/app/config.go
index 5861b4b3..dc40dfe2 100644
--- a/cmd/app/config.go
+++ b/cmd/app/config.go
@@ -11,7 +11,7 @@ type PluginOptions struct {
GitlabRequest bool `json:"gitlab_request"`
GitlabResponse bool `json:"gitlab_response"`
} `json:"debug"`
- ChosenTargetBranch *string `json:"chosen_target_branch,omitempty"`
+ ChosenMrIID int `json:"chosen_mr_iid"`
ConnectionSettings struct {
Insecure bool `json:"insecure"`
Remote string `json:"remote"`
diff --git a/cmd/app/middleware.go b/cmd/app/middleware.go
index 5408626b..ec5c534a 100644
--- a/cmd/app/middleware.go
+++ b/cmd/app/middleware.go
@@ -105,7 +105,10 @@ func (m withMrMiddleware) handle(next http.Handler) http.Handler {
options := gitlab.ListProjectMergeRequestsOptions{
Scope: gitlab.Ptr("all"),
SourceBranch: &m.data.gitInfo.BranchName,
- TargetBranch: pluginOptions.ChosenTargetBranch,
+ }
+
+ if pluginOptions.ChosenMrIID != 0 {
+ options.IIDs = gitlab.Ptr([]int{pluginOptions.ChosenMrIID})
}
mergeRequests, _, err := m.client.ListProjectMergeRequests(m.data.projectInfo.ProjectId, &options)
diff --git a/lua/gitlab/actions/merge_requests.lua b/lua/gitlab/actions/merge_requests.lua
index b42b94b6..0af9db0c 100644
--- a/lua/gitlab/actions/merge_requests.lua
+++ b/lua/gitlab/actions/merge_requests.lua
@@ -45,7 +45,7 @@ M.choose_merge_request = function(opts)
end
vim.schedule(function()
- state.chosen_target_branch = choice.target_branch
+ state.chosen_mr_iid = choice.iid
require("gitlab.server").restart(function()
if opts.open_reviewer then
require("gitlab").review()
diff --git a/lua/gitlab/server.lua b/lua/gitlab/server.lua
index d770b071..aa739b45 100644
--- a/lua/gitlab/server.lua
+++ b/lua/gitlab/server.lua
@@ -20,10 +20,10 @@ M.start = function(callback)
debug = state.settings.debug,
log_path = state.settings.log_path,
connection_settings = state.settings.connection_settings,
- chosen_target_branch = state.chosen_target_branch,
+ chosen_mr_iid = state.chosen_mr_iid,
}
- state.chosen_target_branch = nil -- Do not let this interfere with subsequent reviewer.open() calls
+ state.chosen_mr_iid = 0 -- Do not let this interfere with subsequent reviewer.open() calls
local settings = vim.json.encode(go_server_settings)
local command = string.format("%s '%s'", state.settings.bin, settings)
diff --git a/lua/gitlab/state.lua b/lua/gitlab/state.lua
index a6349b50..12686151 100644
--- a/lua/gitlab/state.lua
+++ b/lua/gitlab/state.lua
@@ -251,9 +251,8 @@ M.unlinked_discussion_tree = {
unresolved_expanded = false,
}
--- Used to set a specific target when choosing a merge request, due to the fact
--- that it's technically possible to have multiple target branches
-M.chosen_target_branch = nil
+-- Used to set a specific MR when choosing a merge request
+M.chosen_mr_iid = 0
-- These keymaps are set globally when the plugin is initialized
M.set_global_keymaps = function()
From 0f3841f7188de1fb685db651a889e4abb8db3a10 Mon Sep 17 00:00:00 2001
From: "Harrison (Harry) Cramer"
<32515581+harrisoncramer@users.noreply.github.com>
Date: Mon, 14 Oct 2024 15:56:17 -0400
Subject: [PATCH 12/21] fix: parse dates without timezone offset (#404)
---
lua/gitlab/actions/summary.lua | 2 +-
lua/gitlab/utils/init.lua | 14 ++++++++++++++
tests/spec/util_spec.lua | 8 ++++++++
3 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/lua/gitlab/actions/summary.lua b/lua/gitlab/actions/summary.lua
index dfde1d73..6d034be1 100644
--- a/lua/gitlab/actions/summary.lua
+++ b/lua/gitlab/actions/summary.lua
@@ -93,7 +93,7 @@ M.build_info_lines = function()
local options = {
author = { title = "Author", content = "@" .. info.author.username .. " (" .. info.author.name .. ")" },
created_at = { title = "Created", content = u.format_to_local(info.created_at, vim.fn.strftime("%z")) },
- updated_at = { title = "Updated", content = u.format_to_local(info.updated_at, vim.fn.strftime("%z")) },
+ updated_at = { title = "Updated", content = u.time_since(info.updated_at) },
detailed_merge_status = { title = "Status", content = info.detailed_merge_status },
draft = { title = "Draft", content = (info.draft and "Yes" or "No") },
conflicts = { title = "Merge Conflicts", content = (info.has_conflicts and "Yes" or "No") },
diff --git a/lua/gitlab/utils/init.lua b/lua/gitlab/utils/init.lua
index 2729da1a..1404fbf2 100644
--- a/lua/gitlab/utils/init.lua
+++ b/lua/gitlab/utils/init.lua
@@ -254,6 +254,20 @@ M.format_to_local = function(date_string, offset)
local tzOffsetSign, tzOffsetHour, tzOffsetMin
year, month, day, hour, min, sec, _, tzOffsetSign, tzOffsetHour, tzOffsetMin =
date_string:match("(%d+)-(%d+)-(%d+)T(%d+):(%d+):(%d+).(%d+)([%+%-])(%d%d):(%d%d)")
+
+ -- ISO 8601 format with just "Z" (aka no time offset)
+ -- 2021-01-01T00:00:00Z
+ if year == nil then
+ year, month, day, hour, min, sec = date_string:match("(%d+)-(%d+)-(%d+)T(%d+):(%d+):(%d+)Z")
+ tzOffsetSign = "-"
+ tzOffsetHour = "00"
+ tzOffsetMin = "00"
+ end
+
+ if year == nil then
+ return "Date Unparseable"
+ end
+
tzOffset = tzOffsetSign .. tzOffsetHour .. tzOffsetMin
end
diff --git a/tests/spec/util_spec.lua b/tests/spec/util_spec.lua
index 629a2b84..0a569a79 100644
--- a/tests/spec/util_spec.lua
+++ b/tests/spec/util_spec.lua
@@ -77,6 +77,13 @@ describe("utils/init.lua", function()
local want = "November 19, 2011"
assert.are.same(want, got)
end)
+
+ it("Parses TZ w/out offset (relative)", function()
+ local stamp = "2023-11-14T18:44:02Z"
+ local got = u.time_since(stamp, current_date)
+ local want = "5 days ago"
+ assert.are.same(want, got)
+ end)
end)
describe("remove_first_value", function()
@@ -209,6 +216,7 @@ describe("utils/init.lua", function()
{ "2016-11-21T20:25:09.482-05:00", "-0500", "11/21/2016 at 20:25" },
{ "2016-11-22T1:25:09.482-00:00", "-0000", "11/22/2016 at 01:25" },
{ "2017-3-22T20:25:09.482+07:00", "+0700", "03/22/2017 at 20:25" },
+ { "2016-11-22T1:25:09Z", "-0000", "11/22/2016 at 01:25" },
}
for _, val in ipairs(tests) do
local got = u.format_to_local(val[1], val[2])
From 04976dbcf1aedad07a3c8137357dcd566d22c03c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20F=2E=20Bortl=C3=ADk?=
Date: Tue, 15 Oct 2024 16:55:59 +0200
Subject: [PATCH 13/21] Fix: Use correct name for emoji
---
config/emojis.json | 38 +++++++++++++++++++-------------------
1 file changed, 19 insertions(+), 19 deletions(-)
diff --git a/config/emojis.json b/config/emojis.json
index e349f871..b15d2763 100644
--- a/config/emojis.json
+++ b/config/emojis.json
@@ -6364,25 +6364,6 @@
],
"moji": "๐ฆ"
},
- "party": {
- "unicode": "1F389",
- "unicode_alternates": [],
- "name": "party popper as a 'tada' celebration",
- "shortname": ":tada:",
- "category": "people",
- "aliases": [
- ":party_popper:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "celebrate",
- "celebration",
- "hooray",
- "hurrah",
- "hurray"
- ],
- "moji": "๐"
- },
"pensive": {
"unicode": "1F614",
"unicode_alternates": [],
@@ -9661,6 +9642,25 @@
],
"moji": "๐
"
},
+ "tada": {
+ "unicode": "1F389",
+ "unicode_alternates": [],
+ "name": "party popper as a 'tada' celebration",
+ "shortname": ":tada:",
+ "category": "people",
+ "aliases": [
+ ":party_popper:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "celebrate",
+ "celebration",
+ "hooray",
+ "hurrah",
+ "hurray"
+ ],
+ "moji": "๐"
+ },
"thermometer_face": {
"unicode": "1F912",
"unicode_alternates": [],
From c8c0395df490bceb7df4511a13c4816731597dc6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20F=2E=20Bortl=C3=ADk?=
Date: Fri, 25 Oct 2024 16:52:33 +0200
Subject: [PATCH 14/21] fix: enable replying if tree is in a different tab
(#407)
---
lua/gitlab/actions/comment.lua | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lua/gitlab/actions/comment.lua b/lua/gitlab/actions/comment.lua
index a2f3d1fd..18140765 100644
--- a/lua/gitlab/actions/comment.lua
+++ b/lua/gitlab/actions/comment.lua
@@ -166,7 +166,7 @@ end
---@param opts LayoutOpts
---@return NuiLayout|nil
M.create_comment_layout = function(opts)
- if opts.unlinked ~= true then
+ if opts.unlinked ~= true and opts.discussion_id == nil then
-- Check that diffview is initialized
if reviewer.tabnr == nil then
u.notify("Reviewer must be initialized first", vim.log.levels.ERROR)
From e4c9dbe1a6fa6edadbed956412310423ba72876f Mon Sep 17 00:00:00 2001
From: Oscar
Date: Tue, 5 Nov 2024 02:26:56 +0100
Subject: [PATCH 15/21] fix: wrong get url (#413)
fix: fixes wrong GET to gitlab when the URL includes namespacing. Fixes #413.
---
cmd/app/git/git.go | 11 ++++++++--
cmd/app/git/git_test.go | 47 ++++++++++++++++++++++++++++++++++++++---
cmd/main.go | 2 +-
config/emojis.json | 19 +++++++++++++++++
4 files changed, 73 insertions(+), 6 deletions(-)
diff --git a/cmd/app/git/git.go b/cmd/app/git/git.go
index b4e36f87..1fcc7087 100644
--- a/cmd/app/git/git.go
+++ b/cmd/app/git/git.go
@@ -36,7 +36,7 @@ Extracts information about the current repository and returns
it to the client for initialization. The current directory must be a valid
Gitlab project and the branch must be a feature branch
*/
-func NewGitData(remote string, g GitManager) (GitData, error) {
+func NewGitData(remote string, gitlabUrl string, g GitManager) (GitData, error) {
err := g.RefreshProjectInfo(remote)
if err != nil {
return GitData{}, fmt.Errorf("could not get latest information from remote: %v", err)
@@ -65,7 +65,14 @@ func NewGitData(remote string, g GitManager) (GitData, error) {
return GitData{}, fmt.Errorf("invalid git URL format: %s", url)
}
- namespace := matches[1]
+ // remove part of the hostname from the parsed namespace
+ url_re := regexp.MustCompile(`[^\/]\/([^\/].*)$`)
+ url_matches := url_re.FindStringSubmatch(gitlabUrl)
+ var namespace string = matches[1]
+ if len(url_matches) == 2 {
+ namespace = strings.TrimLeft(strings.TrimPrefix(namespace, url_matches[1]), "/")
+ }
+
projectName := matches[2]
branchName, err := g.GetCurrentBranchNameFromNativeGitCmd()
diff --git a/cmd/app/git/git_test.go b/cmd/app/git/git_test.go
index c2f88045..9158c901 100644
--- a/cmd/app/git/git_test.go
+++ b/cmd/app/git/git_test.go
@@ -30,6 +30,7 @@ func (f FakeGitManager) GetProjectUrlFromNativeGitCmd(string) (url string, err e
type TestCase struct {
desc string
+ url string
branch string
projectName string
namespace string
@@ -40,6 +41,7 @@ func TestExtractGitInfo_Success(t *testing.T) {
testCases := []TestCase{
{
desc: "Project configured in SSH under a single folder",
+ url: "git@custom-gitlab.com",
remote: "git@custom-gitlab.com:namespace-1/project-name.git",
branch: "feature/abc",
projectName: "project-name",
@@ -47,6 +49,7 @@ func TestExtractGitInfo_Success(t *testing.T) {
},
{
desc: "Project configured in SSH under a single folder without .git extension",
+ url: "git@custom-gitlab.com",
remote: "git@custom-gitlab.com:namespace-1/project-name",
branch: "feature/abc",
projectName: "project-name",
@@ -54,6 +57,7 @@ func TestExtractGitInfo_Success(t *testing.T) {
},
{
desc: "Project configured in SSH under one nested folder",
+ url: "git@custom-gitlab.com",
remote: "git@custom-gitlab.com:namespace-1/namespace-2/project-name.git",
branch: "feature/abc",
projectName: "project-name",
@@ -61,6 +65,7 @@ func TestExtractGitInfo_Success(t *testing.T) {
},
{
desc: "Project configured in SSH under two nested folders",
+ url: "git@custom-gitlab.com",
remote: "git@custom-gitlab.com:namespace-1/namespace-2/namespace-3/project-name.git",
branch: "feature/abc",
projectName: "project-name",
@@ -68,6 +73,7 @@ func TestExtractGitInfo_Success(t *testing.T) {
},
{
desc: "Project configured in SSH:// under a single folder",
+ url: "ssh://custom-gitlab.com",
remote: "ssh://custom-gitlab.com/namespace-1/project-name.git",
branch: "feature/abc",
projectName: "project-name",
@@ -75,6 +81,7 @@ func TestExtractGitInfo_Success(t *testing.T) {
},
{
desc: "Project configured in SSH:// under a single folder without .git extension",
+ url: "ssh://custom-gitlab.com",
remote: "ssh://custom-gitlab.com/namespace-1/project-name",
branch: "feature/abc",
projectName: "project-name",
@@ -82,6 +89,7 @@ func TestExtractGitInfo_Success(t *testing.T) {
},
{
desc: "Project configured in SSH:// under two nested folders",
+ url: "ssh://custom-gitlab.com",
remote: "ssh://custom-gitlab.com/namespace-1/namespace-2/namespace-3/project-name.git",
branch: "feature/abc",
projectName: "project-name",
@@ -89,13 +97,23 @@ func TestExtractGitInfo_Success(t *testing.T) {
},
{
desc: "Project configured in SSH:// and have a custom port",
+ url: "ssh://custom-gitlab.com",
remote: "ssh://custom-gitlab.com:2222/namespace-1/project-name",
branch: "feature/abc",
projectName: "project-name",
namespace: "namespace-1",
},
+ {
+ desc: "Project configured in SSH:// and have a custom port (with gitlab url namespace)",
+ url: "ssh://custom-gitlab.com/a",
+ remote: "ssh://custom-gitlab.com:2222/a/namespace-1/project-name",
+ branch: "feature/abc",
+ projectName: "project-name",
+ namespace: "namespace-1",
+ },
{
desc: "Project configured in HTTP and under a single folder without .git extension",
+ url: "http://custom-gitlab.com",
remote: "http://custom-gitlab.com/namespace-1/project-name",
branch: "feature/abc",
projectName: "project-name",
@@ -103,6 +121,7 @@ func TestExtractGitInfo_Success(t *testing.T) {
},
{
desc: "Project configured in HTTP and under a single folder without .git extension (with embedded credentials)",
+ url: "http://custom-gitlab.com",
remote: "http://username:password@custom-gitlab.com/namespace-1/project-name",
branch: "feature/abc",
projectName: "project-name",
@@ -110,6 +129,7 @@ func TestExtractGitInfo_Success(t *testing.T) {
},
{
desc: "Project configured in HTTPS and under a single folder",
+ url: "https://custom-gitlab.com",
remote: "https://custom-gitlab.com/namespace-1/project-name.git",
branch: "feature/abc",
projectName: "project-name",
@@ -117,6 +137,7 @@ func TestExtractGitInfo_Success(t *testing.T) {
},
{
desc: "Project configured in HTTPS and under a single folder (with embedded credentials)",
+ url: "https://custom-gitlab.com",
remote: "https://username:password@custom-gitlab.com/namespace-1/project-name.git",
branch: "feature/abc",
projectName: "project-name",
@@ -124,6 +145,7 @@ func TestExtractGitInfo_Success(t *testing.T) {
},
{
desc: "Project configured in HTTPS and under a nested folder",
+ url: "https://custom-gitlab.com",
remote: "https://custom-gitlab.com/namespace-1/namespace-2/project-name.git",
branch: "feature/abc",
projectName: "project-name",
@@ -131,6 +153,7 @@ func TestExtractGitInfo_Success(t *testing.T) {
},
{
desc: "Project configured in HTTPS and under a nested folder (with embedded credentials)",
+ url: "https://custom-gitlab.com",
remote: "https://username:password@custom-gitlab.com/namespace-1/namespace-2/project-name.git",
branch: "feature/abc",
projectName: "project-name",
@@ -138,6 +161,7 @@ func TestExtractGitInfo_Success(t *testing.T) {
},
{
desc: "Project configured in HTTPS and under two nested folders",
+ url: "https://custom-gitlab.com",
remote: "https://custom-gitlab.com/namespace-1/namespace-2/namespace-3/project-name.git",
branch: "feature/abc",
projectName: "project-name",
@@ -145,11 +169,28 @@ func TestExtractGitInfo_Success(t *testing.T) {
},
{
desc: "Project configured in HTTPS and under two nested folders (with embedded credentials)",
+ url: "https://custom-gitlab.com",
remote: "https://username:password@custom-gitlab.com/namespace-1/namespace-2/namespace-3/project-name.git",
branch: "feature/abc",
projectName: "project-name",
namespace: "namespace-1/namespace-2/namespace-3",
},
+ {
+ desc: "Project configured in HTTPS and under one nested folders (with gitlab url namespace)",
+ url: "https://custom-gitlab.com/gitlab",
+ remote: "https://username:password@custom-gitlab.com/gitlab/namespace-2/namespace-3/project-name.git",
+ branch: "feature/abc",
+ projectName: "project-name",
+ namespace: "namespace-2/namespace-3",
+ },
+ {
+ desc: "Project configured in HTTPS and under one nested folders (with gitlab url namespace + extra slash)",
+ url: "https://custom-gitlab.com/gitlab/",
+ remote: "https://username:password@custom-gitlab.com/gitlab/namespace-2/namespace-3/project-name.git",
+ branch: "feature/abc",
+ projectName: "project-name",
+ namespace: "namespace-2/namespace-3",
+ },
}
for _, tC := range testCases {
t.Run(tC.desc, func(t *testing.T) {
@@ -159,7 +200,7 @@ func TestExtractGitInfo_Success(t *testing.T) {
BranchName: tC.branch,
RemoteUrl: tC.remote,
}
- data, err := NewGitData(tC.remote, g)
+ data, err := NewGitData(tC.remote, tC.url, g)
if err != nil {
t.Errorf("No error was expected, got %s", err)
}
@@ -204,7 +245,7 @@ func TestExtractGitInfo_FailToGetProjectRemoteUrl(t *testing.T) {
g := failingUrlManager{
errMsg: tC.errMsg,
}
- _, err := NewGitData("", g)
+ _, err := NewGitData("", "", g)
if err == nil {
t.Errorf("Expected an error, got none")
}
@@ -236,7 +277,7 @@ func TestExtractGitInfo_FailToGetCurrentBranchName(t *testing.T) {
},
errMsg: tC.errMsg,
}
- _, err := NewGitData("", g)
+ _, err := NewGitData("", "", g)
if err == nil {
t.Errorf("Expected an error, got none")
}
diff --git a/cmd/main.go b/cmd/main.go
index b46a880f..0bfb652d 100644
--- a/cmd/main.go
+++ b/cmd/main.go
@@ -26,7 +26,7 @@ func main() {
}
gitManager := git.Git{}
- gitData, err := git.NewGitData(pluginOptions.ConnectionSettings.Remote, gitManager)
+ gitData, err := git.NewGitData(pluginOptions.ConnectionSettings.Remote, pluginOptions.GitlabUrl, gitManager)
if err != nil {
log.Fatalf("Failure initializing plugin: %v", err)
diff --git a/config/emojis.json b/config/emojis.json
index b15d2763..158a68f6 100644
--- a/config/emojis.json
+++ b/config/emojis.json
@@ -6364,6 +6364,25 @@
],
"moji": "๐ฆ"
},
+ "party": {
+ "unicode": "1F389",
+ "unicode_alternates": [],
+ "name": "party popper as a 'tada' celebration",
+ "shortname": ":tada:",
+ "category": "people",
+ "aliases": [
+ ":party_popper:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "celebrate",
+ "celebration",
+ "hooray",
+ "hurrah",
+ "hurray"
+ ],
+ "moji": "๐"
+ },
"pensive": {
"unicode": "1F614",
"unicode_alternates": [],
From 5f657fdc997c4e0ab64449115d6247e0f6f8aa0e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20F=2E=20Bortl=C3=ADk?=
Date: Tue, 5 Nov 2024 02:28:26 +0100
Subject: [PATCH 16/21] Fix: Restore cursor when updating from outside of tree
(#406)
---
lua/gitlab/actions/comment.lua | 12 ++--------
lua/gitlab/actions/discussions/init.lua | 21 +++++++++++++++--
lua/gitlab/actions/discussions/tree.lua | 30 ++++++++++++++++++++++---
3 files changed, 48 insertions(+), 15 deletions(-)
diff --git a/lua/gitlab/actions/comment.lua b/lua/gitlab/actions/comment.lua
index 18140765..77045b1f 100644
--- a/lua/gitlab/actions/comment.lua
+++ b/lua/gitlab/actions/comment.lua
@@ -41,13 +41,7 @@ local confirm_create_comment = function(text, visual_range, unlinked, discussion
local body = { discussion_id = discussion_id, reply = text, draft = is_draft }
job.run_job("/mr/reply", "POST", body, function()
u.notify("Sent reply!", vim.log.levels.INFO)
- if is_draft then
- draft_notes.load_draft_notes(function()
- discussions.rebuild_view(unlinked)
- end)
- else
- discussions.rebuild_view(unlinked)
- end
+ discussions.rebuild_view(unlinked)
end)
return
end
@@ -69,8 +63,6 @@ local confirm_create_comment = function(text, visual_range, unlinked, discussion
return
end
- vim.print("Here: ", unlinked, discussion_id)
-
local reviewer_data = reviewer.get_reviewer_data()
if reviewer_data == nil then
u.notify("Error getting reviewer data", vim.log.levels.ERROR)
@@ -102,7 +94,7 @@ local confirm_create_comment = function(text, visual_range, unlinked, discussion
job.run_job("/mr/draft_notes/", "POST", body, function()
u.notify("Draft reply created!", vim.log.levels.INFO)
draft_notes.load_draft_notes(function()
- discussions.rebuild_view(false, true)
+ discussions.rebuild_view(unlinked)
end)
end)
return
diff --git a/lua/gitlab/actions/discussions/init.lua b/lua/gitlab/actions/discussions/init.lua
index 571fe47f..40f03acd 100644
--- a/lua/gitlab/actions/discussions/init.lua
+++ b/lua/gitlab/actions/discussions/init.lua
@@ -139,7 +139,7 @@ M.open = function(callback)
local current_window = vim.api.nvim_get_current_win() -- Save user's current window in case they switched while content was loading
vim.api.nvim_set_current_win(M.split.winid)
- common.switch_can_edit_bufs(true, M.linked_bufnr, M.unliked_bufnr)
+ common.switch_can_edit_bufs(true, M.linked_bufnr, M.unlinked_bufnr)
M.rebuild_discussion_tree()
M.rebuild_unlinked_discussion_tree()
@@ -432,6 +432,9 @@ M.rebuild_discussion_tree = function()
if M.linked_bufnr == nil then
return
end
+
+ local current_node = discussions_tree.get_node_at_cursor(M.discussion_tree, M.last_node_at_cursor)
+
local expanded_node_ids = M.gather_expanded_node_ids(M.discussion_tree)
common.switch_can_edit_bufs(true, M.linked_bufnr, M.unlinked_bufnr)
@@ -447,12 +450,14 @@ M.rebuild_discussion_tree = function()
bufnr = M.linked_bufnr,
prepare_node = tree_utils.nui_tree_prepare_node,
})
+
-- Re-expand already expanded nodes
for _, id in ipairs(expanded_node_ids) do
tree_utils.open_node_by_id(discussion_tree, id)
end
-
discussion_tree:render()
+ discussions_tree.restore_cursor_position(M.split.winid, discussion_tree, current_node)
+
M.set_tree_keymaps(discussion_tree, M.linked_bufnr, false)
M.discussion_tree = discussion_tree
common.switch_can_edit_bufs(false, M.linked_bufnr, M.unlinked_bufnr)
@@ -466,6 +471,9 @@ M.rebuild_unlinked_discussion_tree = function()
if M.unlinked_bufnr == nil then
return
end
+
+ local current_node = discussions_tree.get_node_at_cursor(M.unlinked_discussion_tree, M.last_node_at_cursor)
+
local expanded_node_ids = M.gather_expanded_node_ids(M.unlinked_discussion_tree)
common.switch_can_edit_bufs(true, M.linked_bufnr, M.unlinked_bufnr)
vim.api.nvim_buf_set_lines(M.unlinked_bufnr, 0, -1, false, {})
@@ -487,6 +495,7 @@ M.rebuild_unlinked_discussion_tree = function()
tree_utils.open_node_by_id(unlinked_discussion_tree, id)
end
unlinked_discussion_tree:render()
+ discussions_tree.restore_cursor_position(M.split.winid, unlinked_discussion_tree, current_node)
M.set_tree_keymaps(unlinked_discussion_tree, M.unlinked_bufnr, true)
M.unlinked_discussion_tree = unlinked_discussion_tree
@@ -535,6 +544,14 @@ M.create_split_and_bufs = function()
buffer = linked_bufnr,
callback = function()
M.last_row, M.last_column = unpack(vim.api.nvim_win_get_cursor(0))
+ M.last_node_at_cursor = M.discussion_tree and M.discussion_tree:get_node() or nil
+ end,
+ })
+
+ vim.api.nvim_create_autocmd("WinLeave", {
+ buffer = unlinked_bufnr,
+ callback = function()
+ M.last_node_at_cursor = M.unlinked_discussion_tree and M.unlinked_discussion_tree:get_node() or nil
end,
})
diff --git a/lua/gitlab/actions/discussions/tree.lua b/lua/gitlab/actions/discussions/tree.lua
index 6810c35c..a34f5112 100644
--- a/lua/gitlab/actions/discussions/tree.lua
+++ b/lua/gitlab/actions/discussions/tree.lua
@@ -422,12 +422,36 @@ M.toggle_nodes = function(winid, tree, unlinked, opts)
M.restore_cursor_position(winid, tree, current_node, root_node)
end
+-- Get current node for restoring cursor position
+---@param tree NuiTree The inline discussion tree or the unlinked discussion tree
+---@param last_node NuiTree.Node|nil The last active discussion tree node in case we are not in any of the discussion trees
+M.get_node_at_cursor = function(tree, last_node)
+ if tree == nil then
+ return
+ end
+ if vim.api.nvim_get_current_win() == vim.fn.win_findbuf(tree.bufnr)[1] then
+ return tree:get_node()
+ else
+ return last_node
+ end
+end
+
---Restore cursor position to the original node if possible
+---@param winid integer Window number of the discussions split
+---@param tree NuiTree The inline discussion tree or the unlinked discussion tree
+---@param original_node NuiTree.Node|nil The last node with the cursor
+---@param root_node NuiTree.Node|nil The root node of the last node with the cursor
M.restore_cursor_position = function(winid, tree, original_node, root_node)
+ if original_node == nil or tree == nil then
+ return
+ end
local _, line_number = tree:get_node("-" .. tostring(original_node.id))
- -- If current_node is has been collapsed, get line number of root node instead
- if line_number == nil and root_node then
- _, line_number = tree:get_node("-" .. tostring(root_node.id))
+ -- If current_node has been collapsed, try to get line number of root node instead
+ if line_number == nil then
+ root_node = root_node and root_node or common.get_root_node(tree, original_node)
+ if root_node ~= nil then
+ _, line_number = tree:get_node("-" .. tostring(root_node.id))
+ end
end
if line_number ~= nil then
vim.api.nvim_win_set_cursor(winid, { line_number, 0 })
From 839257abfba6e2603f8e20dd4a636b37b3194e0e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20F=2E=20Bortl=C3=ADk?=
Date: Tue, 5 Nov 2024 22:01:58 +0100
Subject: [PATCH 17/21] Fix: Show non-resolvable notes in winbar (#417)
---
lua/gitlab/actions/discussions/winbar.lua | 73 +++++++++++++++++------
lua/gitlab/annotations.lua | 2 +
lua/gitlab/utils/init.lua | 18 +++---
3 files changed, 66 insertions(+), 27 deletions(-)
diff --git a/lua/gitlab/actions/discussions/winbar.lua b/lua/gitlab/actions/discussions/winbar.lua
index d97c17d5..5c831846 100644
--- a/lua/gitlab/actions/discussions/winbar.lua
+++ b/lua/gitlab/actions/discussions/winbar.lua
@@ -1,3 +1,4 @@
+local u = require("gitlab.utils")
local List = require("gitlab.utils.list")
local state = require("gitlab.state")
@@ -17,12 +18,13 @@ M.set_buffers = function(linked_bufnr, unlinked_bufnr)
end
---@param nodes Discussion[]|UnlinkedDiscussion[]|nil
----@return number, number
+---@return number, number, number
local get_data = function(nodes)
local total_resolvable = 0
local total_resolved = 0
+ local total_non_resolvable = 0
if nodes == nil or nodes == vim.NIL then
- return total_resolvable, total_resolved
+ return total_resolvable, total_resolved, total_non_resolvable
end
total_resolvable = List.new(nodes):reduce(function(agg, d)
@@ -33,6 +35,14 @@ local get_data = function(nodes)
return agg
end, 0)
+ total_non_resolvable = List.new(nodes):reduce(function(agg, d)
+ local first_child = d.notes[1]
+ if first_child and not first_child.resolvable then
+ agg = agg + 1
+ end
+ return agg
+ end, 0)
+
total_resolved = List.new(nodes):reduce(function(agg, d)
local first_child = d.notes[1]
if first_child and first_child.resolved then
@@ -41,12 +51,13 @@ local get_data = function(nodes)
return agg
end, 0)
- return total_resolvable, total_resolved
+ return total_resolvable, total_resolved, total_non_resolvable
end
local function content()
- local resolvable_discussions, resolved_discussions = get_data(state.DISCUSSION_DATA.discussions)
- local resolvable_notes, resolved_notes = get_data(state.DISCUSSION_DATA.unlinked_discussions)
+ local resolvable_discussions, resolved_discussions, non_resolvable_discussions =
+ get_data(state.DISCUSSION_DATA.discussions)
+ local resolvable_notes, resolved_notes, non_resolvable_notes = get_data(state.DISCUSSION_DATA.unlinked_discussions)
local draft_notes = require("gitlab.actions.draft_notes")
local inline_draft_notes, unlinked_draft_notes = List.new(state.DRAFT_NOTES):partition(function(note)
@@ -64,10 +75,12 @@ local function content()
local t = {
resolvable_discussions = resolvable_discussions,
resolved_discussions = resolved_discussions,
+ non_resolvable_discussions = non_resolvable_discussions,
inline_draft_notes = #inline_draft_notes,
unlinked_draft_notes = #unlinked_draft_notes,
resolvable_notes = resolvable_notes,
resolved_notes = resolved_notes,
+ non_resolvable_notes = non_resolvable_notes,
help_keymap = state.settings.keymaps.help,
}
@@ -94,34 +107,58 @@ M.update_winbar = function()
vim.api.nvim_set_option_value("winbar", c, { scope = "local", win = win_id })
end
+local function get_connector(base_title)
+ return string.match(base_title, "%($") and "" or "; "
+end
+
---Builds the title string for both sections, using the count of resolvable and draft nodes
---@param base_title string
---@param resolvable_count integer
---@param resolved_count integer
---@param drafts_count integer
---@return string
-local add_drafts_and_resolvable = function(base_title, resolvable_count, resolved_count, drafts_count)
+local add_drafts_and_resolvable = function(
+ base_title,
+ resolvable_count,
+ resolved_count,
+ drafts_count,
+ non_resolvable_count
+)
+ if resolvable_count == 0 and drafts_count == 0 and non_resolvable_count == 0 then
+ return base_title
+ end
+ base_title = base_title .. " ("
+ if non_resolvable_count ~= 0 then
+ base_title = base_title .. u.pluralize(non_resolvable_count, "comment")
+ end
if resolvable_count ~= 0 then
- base_title = base_title .. string.format(" (%d/%d resolved", resolvable_count, resolved_count)
+ base_title = base_title
+ .. get_connector(base_title)
+ .. string.format("%d/%s", resolved_count, u.pluralize(resolvable_count, "thread"))
end
if drafts_count ~= 0 then
- if resolvable_count ~= 0 then
- base_title = base_title .. string.format("; %d drafts)", drafts_count)
- else
- base_title = base_title .. string.format(" (%d drafts)", drafts_count)
- end
- elseif resolvable_count ~= 0 then
- base_title = base_title .. ")"
+ base_title = base_title .. get_connector(base_title) .. u.pluralize(drafts_count, "draft")
end
-
+ base_title = base_title .. ")"
return base_title
end
---@param t WinbarTable
M.make_winbar = function(t)
- local discussion_title =
- add_drafts_and_resolvable("Inline Comments", t.resolvable_discussions, t.resolved_discussions, t.inline_draft_notes)
- local notes_title = add_drafts_and_resolvable("Notes", t.resolvable_notes, t.resolved_notes, t.unlinked_draft_notes)
+ local discussion_title = add_drafts_and_resolvable(
+ "Inline Comments",
+ t.resolvable_discussions,
+ t.resolved_discussions,
+ t.inline_draft_notes,
+ t.non_resolvable_discussions
+ )
+ local notes_title = add_drafts_and_resolvable(
+ "Notes",
+ t.resolvable_notes,
+ t.resolved_notes,
+ t.unlinked_draft_notes,
+ t.non_resolvable_notes
+ )
-- Colorize the active tab
if M.current_view_type == "discussions" then
diff --git a/lua/gitlab/annotations.lua b/lua/gitlab/annotations.lua
index e4993498..a544b44e 100644
--- a/lua/gitlab/annotations.lua
+++ b/lua/gitlab/annotations.lua
@@ -85,10 +85,12 @@
---@field view_type string
---@field resolvable_discussions number
---@field resolved_discussions number
+---@field non_resolvable_discussions number
---@field inline_draft_notes number
---@field unlinked_draft_notes number
---@field resolvable_notes number
---@field resolved_notes number
+---@field non_resolvable_notes number
---@field help_keymap string
---
---@class SignTable
diff --git a/lua/gitlab/utils/init.lua b/lua/gitlab/utils/init.lua
index 1404fbf2..49f15239 100644
--- a/lua/gitlab/utils/init.lua
+++ b/lua/gitlab/utils/init.lua
@@ -98,7 +98,7 @@ end
---@param num integer The count of the item/word
---@param word string The word to pluralize
---@return string
-local function pluralize(num, word)
+M.pluralize = function(num, word)
return num .. string.format(" %s", word) .. ((num > 1 or num <= 0) and "s" or "")
end
@@ -122,13 +122,13 @@ M.time_since = function(date_string, current_date_table)
local time_diff = current_date - date
if time_diff < 60 then
- return pluralize(time_diff, "second") .. " ago"
+ return M.pluralize(time_diff, "second") .. " ago"
elseif time_diff < 3600 then
- return pluralize(math.floor(time_diff / 60), "minute") .. " ago"
+ return M.pluralize(math.floor(time_diff / 60), "minute") .. " ago"
elseif time_diff < 86400 then
- return pluralize(math.floor(time_diff / 3600), "hour") .. " ago"
+ return M.pluralize(math.floor(time_diff / 3600), "hour") .. " ago"
elseif time_diff < 2592000 then
- return pluralize(math.floor(time_diff / 86400), "day") .. " ago"
+ return M.pluralize(math.floor(time_diff / 86400), "day") .. " ago"
else
local formatted_date = os.date("%B %e, %Y", date)
return tostring(formatted_date)
@@ -457,13 +457,13 @@ M.format_date = function(date_string)
local time_diff = current_date - date
if time_diff < 60 then
- return pluralize(time_diff, "second")
+ return M.pluralize(time_diff, "second")
elseif time_diff < 3600 then
- return pluralize(math.floor(time_diff / 60), "minute")
+ return M.pluralize(math.floor(time_diff / 60), "minute")
elseif time_diff < 86400 then
- return pluralize(math.floor(time_diff / 3600), "hour")
+ return M.pluralize(math.floor(time_diff / 3600), "hour")
elseif time_diff < 2592000 then
- return pluralize(math.floor(time_diff / 86400), "day")
+ return M.pluralize(math.floor(time_diff / 86400), "day")
else
local formatted_date = os.date("%A, %B %e", date)
return formatted_date
From a0d10a4b05845efb18a07ea35fa57fca330592f3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20F=2E=20Bortl=C3=ADk?=
Date: Wed, 6 Nov 2024 17:22:17 +0100
Subject: [PATCH 18/21] Fix: add more emojis and make emoji picker configurable
(#414)
---
config/emojis.json | 10991 +----------------------------------------
doc/gitlab.nvim.txt | 11 +
lua/gitlab/emoji.lua | 3 +
lua/gitlab/state.lua | 3 +
4 files changed, 18 insertions(+), 10990 deletions(-)
diff --git a/config/emojis.json b/config/emojis.json
index 158a68f6..cbda9795 100644
--- a/config/emojis.json
+++ b/config/emojis.json
@@ -1,10990 +1 @@
-{
- "alien": {
- "unicode": "1F47D",
- "unicode_alternates": [],
- "name": "extraterrestrial alien",
- "shortname": ":alien:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "UFO",
- "paul",
- "alien",
- "ufo",
- "space",
- "monster",
- "scientology"
- ],
- "moji": "๐ฝ"
- },
- "angel": {
- "unicode": "1F47C",
- "unicode_alternates": [],
- "name": "baby angel",
- "shortname": ":angel:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "baby",
- "angel",
- "halo",
- "cupid",
- "wings",
- "heaven",
- "jesus",
- "people",
- "diversity",
- "omg"
- ],
- "moji": "๐ผ"
- },
- "angel_tone1": {
- "unicode": "1F47C-1F3FB",
- "unicode_alternates": [],
- "name": "baby angel tone 1",
- "shortname": ":angel_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "halo",
- "cupid",
- "heaven",
- "wings",
- "jesus"
- ],
- "moji": "๐ผ๐ป"
- },
- "angel_tone2": {
- "unicode": "1F47C-1F3FC",
- "unicode_alternates": [],
- "name": "baby angel tone 2",
- "shortname": ":angel_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "halo",
- "cupid",
- "heaven",
- "wings",
- "jesus"
- ],
- "moji": "๐ผ๐ผ"
- },
- "angel_tone3": {
- "unicode": "1F47C-1F3FD",
- "unicode_alternates": [],
- "name": "baby angel tone 3",
- "shortname": ":angel_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "halo",
- "cupid",
- "heaven",
- "wings",
- "jesus"
- ],
- "moji": "๐ผ๐ฝ"
- },
- "angel_tone4": {
- "unicode": "1F47C-1F3FE",
- "unicode_alternates": [],
- "name": "baby angel tone 4",
- "shortname": ":angel_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "halo",
- "cupid",
- "heaven",
- "wings",
- "jesus"
- ],
- "moji": "๐ผ๐พ"
- },
- "angel_tone5": {
- "unicode": "1F47C-1F3FF",
- "unicode_alternates": [],
- "name": "baby angel tone 5",
- "shortname": ":angel_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "halo",
- "cupid",
- "heaven",
- "wings",
- "jesus"
- ],
- "moji": "๐ผ๐ฟ"
- },
- "angry": {
- "unicode": "1F620",
- "unicode_alternates": [],
- "name": "angry face",
- "shortname": ":angry:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- ">:(",
- ">:-(",
- ":@"
- ],
- "keywords": [
- "angry",
- "livid",
- "mad",
- "vexed",
- "irritated",
- "annoyed",
- "face",
- "frustrated",
- "smiley",
- "emotion"
- ],
- "moji": "๐ "
- },
- "anguished": {
- "unicode": "1F627",
- "unicode_alternates": [],
- "name": "anguished face",
- "shortname": ":anguished:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "nervous",
- "stunned",
- "pain",
- "anguish",
- "ouch",
- "misery",
- "distress",
- "grief",
- "sad",
- "smiley",
- "surprised",
- "emotion"
- ],
- "moji": "๐ง"
- },
- "astonished": {
- "unicode": "1F632",
- "unicode_alternates": [],
- "name": "astonished face",
- "shortname": ":astonished:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "xox",
- "shocked",
- "surprise",
- "astonished",
- "smiley",
- "surprised",
- "wow",
- "emotion",
- "omg"
- ],
- "moji": "๐ฒ"
- },
- "athletic_shoe": {
- "unicode": "1F45F",
- "unicode_alternates": [],
- "name": "athletic shoe",
- "shortname": ":athletic_shoe:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "shoes",
- "sports",
- "fashion",
- "shoe",
- "accessories",
- "boys night"
- ],
- "moji": "๐"
- },
- "baby": {
- "unicode": "1F476",
- "unicode_alternates": [],
- "name": "baby",
- "shortname": ":baby:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "boy",
- "child",
- "infant",
- "people",
- "baby",
- "diversity"
- ],
- "moji": "๐ถ"
- },
- "baby_tone1": {
- "unicode": "1F476-1F3FB",
- "unicode_alternates": [],
- "name": "baby tone 1",
- "shortname": ":baby_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "child",
- "infant",
- "toddler"
- ],
- "moji": "๐ถ๐ป"
- },
- "baby_tone2": {
- "unicode": "1F476-1F3FC",
- "unicode_alternates": [],
- "name": "baby tone 2",
- "shortname": ":baby_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "child",
- "infant",
- "toddler"
- ],
- "moji": "๐ถ๐ผ"
- },
- "baby_tone3": {
- "unicode": "1F476-1F3FD",
- "unicode_alternates": [],
- "name": "baby tone 3",
- "shortname": ":baby_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "child",
- "infant",
- "toddler"
- ],
- "moji": "๐ถ๐ฝ"
- },
- "baby_tone4": {
- "unicode": "1F476-1F3FE",
- "unicode_alternates": [],
- "name": "baby tone 4",
- "shortname": ":baby_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "child",
- "infant",
- "toddler"
- ],
- "moji": "๐ถ๐พ"
- },
- "baby_tone5": {
- "unicode": "1F476-1F3FF",
- "unicode_alternates": [],
- "name": "baby tone 5",
- "shortname": ":baby_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "child",
- "infant",
- "toddler"
- ],
- "moji": "๐ถ๐ฟ"
- },
- "bikini": {
- "unicode": "1F459",
- "unicode_alternates": [],
- "name": "bikini",
- "shortname": ":bikini:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "beach",
- "fashion",
- "female",
- "girl",
- "swimming",
- "woman",
- "women",
- "sexy",
- "vacation",
- "tropical",
- "swim"
- ],
- "moji": "๐"
- },
- "blush": {
- "unicode": "1F60A",
- "unicode_alternates": [],
- "name": "smiling face with smiling eyes",
- "shortname": ":blush:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "crush",
- "embarrassed",
- "face",
- "flushed",
- "happy",
- "shy",
- "smile",
- "smiling",
- "smiley",
- "emotion",
- "good",
- "beautiful"
- ],
- "moji": "๐"
- },
- "boot": {
- "unicode": "1F462",
- "unicode_alternates": [],
- "name": "womans boots",
- "shortname": ":boot:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fashion",
- "shoes",
- "women",
- "shoe",
- "sexy",
- "accessories"
- ],
- "moji": "๐ข"
- },
- "bow": {
- "unicode": "1F647",
- "unicode_alternates": [],
- "name": "person bowing deeply",
- "shortname": ":bow:",
- "category": "people",
- "aliases": [
- ":bowing_man:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "boy",
- "male",
- "man",
- "sorry",
- "bow",
- "respect",
- "curtsy",
- "bend",
- "people",
- "pray",
- "diversity"
- ],
- "moji": "๐"
- },
- "bow_tone1": {
- "unicode": "1F647-1F3FB",
- "unicode_alternates": [],
- "name": "person bowing deeply tone 1",
- "shortname": ":bow_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "boy",
- "male",
- "man",
- "sorry",
- "bow",
- "respect",
- "bend"
- ],
- "moji": "๐๐ป"
- },
- "bow_tone2": {
- "unicode": "1F647-1F3FC",
- "unicode_alternates": [],
- "name": "person bowing deeply tone 2",
- "shortname": ":bow_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "boy",
- "male",
- "man",
- "sorry",
- "bow",
- "respect",
- "bend"
- ],
- "moji": "๐๐ผ"
- },
- "bow_tone3": {
- "unicode": "1F647-1F3FD",
- "unicode_alternates": [],
- "name": "person bowing deeply tone 3",
- "shortname": ":bow_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "boy",
- "male",
- "man",
- "sorry",
- "bow",
- "respect",
- "bend"
- ],
- "moji": "๐๐ฝ"
- },
- "bow_tone4": {
- "unicode": "1F647-1F3FE",
- "unicode_alternates": [],
- "name": "person bowing deeply tone 4",
- "shortname": ":bow_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "boy",
- "male",
- "man",
- "sorry",
- "bow",
- "respect",
- "bend"
- ],
- "moji": "๐๐พ"
- },
- "bow_tone5": {
- "unicode": "1F647-1F3FF",
- "unicode_alternates": [],
- "name": "person bowing deeply tone 5",
- "shortname": ":bow_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "boy",
- "male",
- "man",
- "sorry",
- "bow",
- "respect",
- "bend"
- ],
- "moji": "๐๐ฟ"
- },
- "boy": {
- "unicode": "1F466",
- "unicode_alternates": [],
- "name": "boy",
- "shortname": ":boy:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "guy",
- "male",
- "man",
- "people",
- "baby",
- "diversity"
- ],
- "moji": "๐ฆ"
- },
- "boy_tone1": {
- "unicode": "1F466-1F3FB",
- "unicode_alternates": [],
- "name": "boy tone 1",
- "shortname": ":boy_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "kid",
- "child"
- ],
- "moji": "๐ฆ๐ป"
- },
- "boy_tone2": {
- "unicode": "1F466-1F3FC",
- "unicode_alternates": [],
- "name": "boy tone 2",
- "shortname": ":boy_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "kid",
- "child"
- ],
- "moji": "๐ฆ๐ผ"
- },
- "boy_tone3": {
- "unicode": "1F466-1F3FD",
- "unicode_alternates": [],
- "name": "boy tone 3",
- "shortname": ":boy_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "kid",
- "child"
- ],
- "moji": "๐ฆ๐ฝ"
- },
- "boy_tone4": {
- "unicode": "1F466-1F3FE",
- "unicode_alternates": [],
- "name": "boy tone 4",
- "shortname": ":boy_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "kid",
- "child"
- ],
- "moji": "๐ฆ๐พ"
- },
- "boy_tone5": {
- "unicode": "1F466-1F3FF",
- "unicode_alternates": [],
- "name": "boy tone 5",
- "shortname": ":boy_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "kid",
- "child"
- ],
- "moji": "๐ฆ๐ฟ"
- },
- "bride_with_veil": {
- "unicode": "1F470",
- "unicode_alternates": [],
- "name": "bride with veil",
- "shortname": ":bride_with_veil:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "couple",
- "marriage",
- "wedding",
- "bride",
- "planning",
- "veil",
- "gown",
- "dress",
- "engagement",
- "white",
- "people",
- "women",
- "diversity"
- ],
- "moji": "๐ฐ"
- },
- "bride_with_veil_tone1": {
- "unicode": "1F470-1F3FB",
- "unicode_alternates": [],
- "name": "bride with veil tone 1",
- "shortname": ":bride_with_veil_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "couple",
- "marriage",
- "wedding",
- "planning",
- "gown",
- "dress",
- "engagement",
- "white"
- ],
- "moji": "๐ฐ๐ป"
- },
- "bride_with_veil_tone2": {
- "unicode": "1F470-1F3FC",
- "unicode_alternates": [],
- "name": "bride with veil tone 2",
- "shortname": ":bride_with_veil_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "couple",
- "marriage",
- "wedding",
- "planning",
- "gown",
- "dress",
- "engagement",
- "white"
- ],
- "moji": "๐ฐ๐ผ"
- },
- "bride_with_veil_tone3": {
- "unicode": "1F470-1F3FD",
- "unicode_alternates": [],
- "name": "bride with veil tone 3",
- "shortname": ":bride_with_veil_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "couple",
- "marriage",
- "wedding",
- "planning",
- "gown",
- "dress",
- "engagement",
- "white"
- ],
- "moji": "๐ฐ๐ฝ"
- },
- "bride_with_veil_tone4": {
- "unicode": "1F470-1F3FE",
- "unicode_alternates": [],
- "name": "bride with veil tone 4",
- "shortname": ":bride_with_veil_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "couple",
- "marriage",
- "wedding",
- "planning",
- "gown",
- "dress",
- "engagement",
- "white"
- ],
- "moji": "๐ฐ๐พ"
- },
- "bride_with_veil_tone5": {
- "unicode": "1F470-1F3FF",
- "unicode_alternates": [],
- "name": "bride with veil tone 5",
- "shortname": ":bride_with_veil_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "couple",
- "marriage",
- "wedding",
- "planning",
- "gown",
- "dress",
- "engagement",
- "white"
- ],
- "moji": "๐ฐ๐ฟ"
- },
- "briefcase": {
- "unicode": "1F4BC",
- "unicode_alternates": [],
- "name": "briefcase",
- "shortname": ":briefcase:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "business",
- "documents",
- "work",
- "bag",
- "accessories",
- "nutcase",
- "job"
- ],
- "moji": "๐ผ"
- },
- "bust_in_silhouette": {
- "unicode": "1F464",
- "unicode_alternates": [],
- "name": "bust in silhouette",
- "shortname": ":bust_in_silhouette:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "human",
- "man",
- "person",
- "user",
- "silhouette",
- "member",
- "account",
- "guest",
- "icon",
- "avatar",
- "profile",
- "me",
- "myself",
- "i",
- "people"
- ],
- "moji": "๐ค"
- },
- "busts_in_silhouette": {
- "unicode": "1F465",
- "unicode_alternates": [],
- "name": "busts in silhouette",
- "shortname": ":busts_in_silhouette:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "group",
- "human",
- "man",
- "person",
- "team",
- "user",
- "silhouette",
- "silhouettes",
- "people",
- "members",
- "accounts",
- "relationship",
- "shadow"
- ],
- "moji": "๐ฅ"
- },
- "call_me": {
- "unicode": "1F919",
- "unicode_alternates": [],
- "name": "call me hand",
- "shortname": ":call_me:",
- "category": "people",
- "aliases": [
- ":call_me_hand:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค"
- },
- "call_me_tone1": {
- "unicode": "1F919-1F3FB",
- "unicode_alternates": [],
- "name": "call me hand tone 1",
- "shortname": ":call_me_tone1:",
- "category": "people",
- "aliases": [
- ":call_me_hand_tone1:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐ป"
- },
- "call_me_tone2": {
- "unicode": "1F919-1F3FC",
- "unicode_alternates": [],
- "name": "call me hand tone 2",
- "shortname": ":call_me_tone2:",
- "category": "people",
- "aliases": [
- ":call_me_hand_tone2:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐ผ"
- },
- "call_me_tone3": {
- "unicode": "1F919-1F3FD",
- "unicode_alternates": [],
- "name": "call me hand tone 3",
- "shortname": ":call_me_tone3:",
- "category": "people",
- "aliases": [
- ":call_me_hand_tone3:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐ฝ"
- },
- "call_me_tone4": {
- "unicode": "1F919-1F3FE",
- "unicode_alternates": [],
- "name": "call me hand tone 4",
- "shortname": ":call_me_tone4:",
- "category": "people",
- "aliases": [
- ":call_me_hand_tone4:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐พ"
- },
- "call_me_tone5": {
- "unicode": "1F919-1F3FF",
- "unicode_alternates": [],
- "name": "call me hand tone 5",
- "shortname": ":call_me_tone5:",
- "category": "people",
- "aliases": [
- ":call_me_hand_tone5:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐ฟ"
- },
- "clap": {
- "unicode": "1F44F",
- "unicode_alternates": [],
- "name": "clapping hands sign",
- "shortname": ":clap:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "applause",
- "congrats",
- "hands",
- "praise",
- "clapping",
- "appreciation",
- "approval",
- "sound",
- "encouragement",
- "enthusiasm",
- "body",
- "win",
- "diversity",
- "good",
- "beautiful"
- ],
- "moji": "๐"
- },
- "clap_tone1": {
- "unicode": "1F44F-1F3FB",
- "unicode_alternates": [],
- "name": "clapping hands sign tone 1",
- "shortname": ":clap_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "applause",
- "congrats",
- "praise",
- "clap",
- "appreciation",
- "approval",
- "sound",
- "encouragement",
- "enthusiasm"
- ],
- "moji": "๐๐ป"
- },
- "clap_tone2": {
- "unicode": "1F44F-1F3FC",
- "unicode_alternates": [],
- "name": "clapping hands sign tone 2",
- "shortname": ":clap_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "applause",
- "congrats",
- "praise",
- "clap",
- "appreciation",
- "approval",
- "sound",
- "encouragement",
- "enthusiasm"
- ],
- "moji": "๐๐ผ"
- },
- "clap_tone3": {
- "unicode": "1F44F-1F3FD",
- "unicode_alternates": [],
- "name": "clapping hands sign tone 3",
- "shortname": ":clap_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "applause",
- "congrats",
- "praise",
- "clap",
- "appreciation",
- "approval",
- "sound",
- "encouragement",
- "enthusiasm"
- ],
- "moji": "๐๐ฝ"
- },
- "clap_tone4": {
- "unicode": "1F44F-1F3FE",
- "unicode_alternates": [],
- "name": "clapping hands sign tone 4",
- "shortname": ":clap_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "applause",
- "congrats",
- "praise",
- "clap",
- "appreciation",
- "approval",
- "sound",
- "encouragement",
- "enthusiasm"
- ],
- "moji": "๐๐พ"
- },
- "clap_tone5": {
- "unicode": "1F44F-1F3FF",
- "unicode_alternates": [],
- "name": "clapping hands sign tone 5",
- "shortname": ":clap_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "applause",
- "congrats",
- "praise",
- "clap",
- "appreciation",
- "approval",
- "sound",
- "encouragement",
- "enthusiasm"
- ],
- "moji": "๐๐ฟ"
- },
- "closed_umbrella": {
- "unicode": "1F302",
- "unicode_alternates": [],
- "name": "closed umbrella",
- "shortname": ":closed_umbrella:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "drizzle",
- "rain",
- "weather",
- "umbrella",
- "closed",
- "moisture",
- "protection",
- "sun",
- "ultraviolet",
- "uv",
- "object",
- "sky",
- "accessories"
- ],
- "moji": "๐"
- },
- "clown": {
- "unicode": "1F921",
- "unicode_alternates": [],
- "name": "clown face",
- "shortname": ":clown:",
- "category": "people",
- "aliases": [
- ":clown_face:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คก"
- },
- "cold_sweat": {
- "unicode": "1F630",
- "unicode_alternates": [],
- "name": "face with open mouth and cold sweat",
- "shortname": ":cold_sweat:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "nervous",
- "sweat",
- "exasperated",
- "frustrated",
- "smiley",
- "emotion"
- ],
- "moji": "๐ฐ"
- },
- "confounded": {
- "unicode": "1F616",
- "unicode_alternates": [],
- "name": "confounded face",
- "shortname": ":confounded:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "confused",
- "face",
- "sick",
- "unwell",
- "confound",
- "amaze",
- "perplex",
- "puzzle",
- "mystify",
- "sad",
- "smiley",
- "angry",
- "emotion"
- ],
- "moji": "๐"
- },
- "confused": {
- "unicode": "1F615",
- "unicode_alternates": [],
- "name": "confused face",
- "shortname": ":confused:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- ">:\\",
- ">:/",
- ":-/",
- ":-.",
- ":/",
- ":\\",
- "=/",
- "=\\",
- ":L",
- "=L"
- ],
- "keywords": [
- "confused",
- "confuse",
- "daze",
- "perplex",
- "puzzle",
- "indifference",
- "skeptical",
- "undecided",
- "uneasy",
- "hesitant",
- "smiley",
- "surprised",
- "emotion"
- ],
- "moji": "๐"
- },
- "construction_worker": {
- "unicode": "1F477",
- "unicode_alternates": [],
- "name": "construction worker",
- "shortname": ":construction_worker:",
- "category": "people",
- "aliases": [
- ":construction_worker_man:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "human",
- "male",
- "man",
- "wip",
- "people",
- "hat",
- "men",
- "diversity",
- "job"
- ],
- "moji": "๐ท"
- },
- "construction_worker_tone1": {
- "unicode": "1F477-1F3FB",
- "unicode_alternates": [],
- "name": "construction worker tone 1",
- "shortname": ":construction_worker_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "human",
- "male",
- "man",
- "wip"
- ],
- "moji": "๐ท๐ป"
- },
- "construction_worker_tone2": {
- "unicode": "1F477-1F3FC",
- "unicode_alternates": [],
- "name": "construction worker tone 2",
- "shortname": ":construction_worker_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "human",
- "male",
- "man",
- "wip"
- ],
- "moji": "๐ท๐ผ"
- },
- "construction_worker_tone3": {
- "unicode": "1F477-1F3FD",
- "unicode_alternates": [],
- "name": "construction worker tone 3",
- "shortname": ":construction_worker_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "human",
- "male",
- "man",
- "wip"
- ],
- "moji": "๐ท๐ฝ"
- },
- "construction_worker_tone4": {
- "unicode": "1F477-1F3FE",
- "unicode_alternates": [],
- "name": "construction worker tone 4",
- "shortname": ":construction_worker_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "human",
- "male",
- "man",
- "wip"
- ],
- "moji": "๐ท๐พ"
- },
- "construction_worker_tone5": {
- "unicode": "1F477-1F3FF",
- "unicode_alternates": [],
- "name": "construction worker tone 5",
- "shortname": ":construction_worker_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "human",
- "male",
- "man",
- "wip"
- ],
- "moji": "๐ท๐ฟ"
- },
- "cop": {
- "unicode": "1F46E",
- "unicode_alternates": [],
- "name": "police officer",
- "shortname": ":cop:",
- "category": "people",
- "aliases": [
- ":policeman:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "arrest",
- "enforcement",
- "law",
- "man",
- "police",
- "people",
- "hat",
- "men",
- "diversity",
- "job",
- "911"
- ],
- "moji": "๐ฎ"
- },
- "cop_tone1": {
- "unicode": "1F46E-1F3FB",
- "unicode_alternates": [],
- "name": "police officer tone 1",
- "shortname": ":cop_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "arrest",
- "enforcement",
- "law",
- "man",
- "cop"
- ],
- "moji": "๐ฎ๐ป"
- },
- "cop_tone2": {
- "unicode": "1F46E-1F3FC",
- "unicode_alternates": [],
- "name": "police officer tone 2",
- "shortname": ":cop_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "arrest",
- "enforcement",
- "law",
- "man",
- "cop"
- ],
- "moji": "๐ฎ๐ผ"
- },
- "cop_tone3": {
- "unicode": "1F46E-1F3FD",
- "unicode_alternates": [],
- "name": "police officer tone 3",
- "shortname": ":cop_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "arrest",
- "enforcement",
- "law",
- "man",
- "cop"
- ],
- "moji": "๐ฎ๐ฝ"
- },
- "cop_tone4": {
- "unicode": "1F46E-1F3FE",
- "unicode_alternates": [],
- "name": "police officer tone 4",
- "shortname": ":cop_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "arrest",
- "enforcement",
- "law",
- "man",
- "cop"
- ],
- "moji": "๐ฎ๐พ"
- },
- "cop_tone5": {
- "unicode": "1F46E-1F3FF",
- "unicode_alternates": [],
- "name": "police officer tone 5",
- "shortname": ":cop_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "arrest",
- "enforcement",
- "law",
- "man",
- "cop"
- ],
- "moji": "๐ฎ๐ฟ"
- },
- "couple": {
- "unicode": "1F46B",
- "unicode_alternates": [],
- "name": "man and woman holding hands",
- "shortname": ":couple:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "affection",
- "date",
- "dating",
- "human",
- "like",
- "love",
- "marriage",
- "people",
- "valentines",
- "sex",
- "creationism"
- ],
- "moji": "๐ซ"
- },
- "couple_mm": {
- "unicode": "1F468-2764-1F468",
- "unicode_alternates": [
- "1F468-200D-2764-FE0F-200D-1F468"
- ],
- "name": "couple (man,man)",
- "shortname": ":couple_mm:",
- "category": "people",
- "aliases": [
- ":couple_with_heart_mm:",
- ":couple_with_heart_man_man:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "affection",
- "dating",
- "human",
- "like",
- "love",
- "marriage",
- "valentines",
- "people",
- "gay",
- "men",
- "sex",
- "lgbt"
- ],
- "moji": "๐จโโค๏ธโ๐จ"
- },
- "couple_with_heart": {
- "unicode": "1F491",
- "unicode_alternates": [],
- "name": "couple with heart",
- "shortname": ":couple_with_heart:",
- "category": "people",
- "aliases": [
- ":couple_with_heart_woman_man:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "affection",
- "dating",
- "human",
- "like",
- "love",
- "marriage",
- "valentines",
- "people",
- "sex"
- ],
- "moji": "๐"
- },
- "couple_ww": {
- "unicode": "1F469-2764-1F469",
- "unicode_alternates": [
- "1F469-200D-2764-FE0F-200D-1F469"
- ],
- "name": "couple (woman,woman)",
- "shortname": ":couple_ww:",
- "category": "people",
- "aliases": [
- ":couple_with_heart_ww:",
- ":couple_with_heart_woman_woman:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "affection",
- "dating",
- "human",
- "like",
- "love",
- "marriage",
- "valentines",
- "people",
- "women",
- "sex",
- "lgbt"
- ],
- "moji": "๐ฉโโค๏ธโ๐ฉ"
- },
- "couplekiss": {
- "unicode": "1F48F",
- "unicode_alternates": [],
- "name": "kiss",
- "shortname": ":couplekiss:",
- "category": "people",
- "aliases": [
- ":couplekiss_man_woman:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "dating",
- "like",
- "love",
- "marriage",
- "valentines",
- "people",
- "sex"
- ],
- "moji": "๐"
- },
- "cowboy": {
- "unicode": "1F920",
- "unicode_alternates": [],
- "name": "face with cowboy hat",
- "shortname": ":cowboy:",
- "category": "people",
- "aliases": [
- ":face_with_cowboy_hat:",
- ":cowboy_hat_face:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค "
- },
- "crown": {
- "unicode": "1F451",
- "unicode_alternates": [],
- "name": "crown",
- "shortname": ":crown:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "king",
- "kod",
- "leader",
- "royalty",
- "object",
- "gem",
- "accessories"
- ],
- "moji": "๐"
- },
- "cry": {
- "unicode": "1F622",
- "unicode_alternates": [],
- "name": "crying face",
- "shortname": ":cry:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- ":'(",
- ":'-(",
- ";(",
- ";-("
- ],
- "keywords": [
- "face",
- "sad",
- "cry",
- "tear",
- "weep",
- "tears",
- "smiley",
- "emotion",
- "rip",
- "heartbreak"
- ],
- "moji": "๐ข"
- },
- "crying_cat_face": {
- "unicode": "1F63F",
- "unicode_alternates": [],
- "name": "crying cat face",
- "shortname": ":crying_cat_face:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "animal",
- "cats",
- "sad",
- "tears",
- "weep",
- "cry",
- "cat",
- "sob",
- "melancholy",
- "morn",
- "somber",
- "hurt"
- ],
- "moji": "๐ฟ"
- },
- "dancer": {
- "unicode": "1F483",
- "unicode_alternates": [],
- "name": "dancer",
- "shortname": ":dancer:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "fun",
- "girl",
- "woman",
- "dance",
- "dancer",
- "dress",
- "fancy",
- "boogy",
- "party",
- "celebrate",
- "ballet",
- "tango",
- "cha cha",
- "music",
- "people",
- "women",
- "sexy",
- "diversity",
- "girls night"
- ],
- "moji": "๐"
- },
- "dancer_tone1": {
- "unicode": "1F483-1F3FB",
- "unicode_alternates": [],
- "name": "dancer tone 1",
- "shortname": ":dancer_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "fun",
- "girl",
- "woman",
- "dress",
- "fancy",
- "boogy",
- "party",
- "celebrate",
- "ballet",
- "tango",
- "cha cha",
- "music"
- ],
- "moji": "๐๐ป"
- },
- "dancer_tone2": {
- "unicode": "1F483-1F3FC",
- "unicode_alternates": [],
- "name": "dancer tone 2",
- "shortname": ":dancer_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "fun",
- "girl",
- "woman",
- "dress",
- "fancy",
- "boogy",
- "party",
- "celebrate",
- "ballet",
- "tango",
- "cha cha",
- "music"
- ],
- "moji": "๐๐ผ"
- },
- "dancer_tone3": {
- "unicode": "1F483-1F3FD",
- "unicode_alternates": [],
- "name": "dancer tone 3",
- "shortname": ":dancer_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "fun",
- "girl",
- "woman",
- "dress",
- "fancy",
- "boogy",
- "party",
- "celebrate",
- "ballet",
- "tango",
- "cha cha",
- "music"
- ],
- "moji": "๐๐ฝ"
- },
- "dancer_tone4": {
- "unicode": "1F483-1F3FE",
- "unicode_alternates": [],
- "name": "dancer tone 4",
- "shortname": ":dancer_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "fun",
- "girl",
- "woman",
- "dress",
- "fancy",
- "boogy",
- "party",
- "celebrate",
- "ballet",
- "tango",
- "cha cha",
- "music"
- ],
- "moji": "๐๐พ"
- },
- "dancer_tone5": {
- "unicode": "1F483-1F3FF",
- "unicode_alternates": [],
- "name": "dancer tone 5",
- "shortname": ":dancer_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "fun",
- "girl",
- "woman",
- "dress",
- "fancy",
- "boogy",
- "party",
- "celebrate",
- "ballet",
- "tango",
- "cha cha",
- "music"
- ],
- "moji": "๐๐ฟ"
- },
- "dancers": {
- "unicode": "1F46F",
- "unicode_alternates": [],
- "name": "woman with bunny ears",
- "shortname": ":dancers:",
- "category": "people",
- "aliases": [
- ":dancing_women:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "bunny",
- "female",
- "girls",
- "women",
- "dancing",
- "dancers",
- "showgirl",
- "playboy",
- "costume",
- "cancan",
- "people",
- "sexy",
- "girls night",
- "boys night",
- "parties",
- "dance"
- ],
- "moji": "๐ฏ"
- },
- "dark_sunglasses": {
- "unicode": "1F576",
- "unicode_alternates": [],
- "name": "dark sunglasses",
- "shortname": ":dark_sunglasses:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "shades",
- "eyes",
- "fashion",
- "glasses",
- "accessories"
- ],
- "moji": "๐ถ"
- },
- "disappointed": {
- "unicode": "1F61E",
- "unicode_alternates": [],
- "name": "disappointed face",
- "shortname": ":disappointed:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- ">:[",
- ":-(",
- ":(",
- ":-[",
- ":[",
- "=("
- ],
- "keywords": [
- "disappointed",
- "disappoint",
- "frown",
- "depressed",
- "discouraged",
- "face",
- "sad",
- "upset",
- "smiley",
- "tired",
- "emotion"
- ],
- "moji": "๐"
- },
- "disappointed_relieved": {
- "unicode": "1F625",
- "unicode_alternates": [],
- "name": "disappointed but relieved face",
- "shortname": ":disappointed_relieved:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "nervous",
- "phew",
- "sweat",
- "disappoint",
- "relief",
- "sad",
- "smiley",
- "stressed",
- "cry",
- "emotion"
- ],
- "moji": "๐ฅ"
- },
- "dizzy_face": {
- "unicode": "1F635",
- "unicode_alternates": [],
- "name": "dizzy face",
- "shortname": ":dizzy_face:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- "#-)",
- "#)",
- "%-)",
- "%)",
- "X)",
- "X-)"
- ],
- "keywords": [
- "dizzy",
- "drunk",
- "inebriated",
- "face",
- "spent",
- "unconscious",
- "xox",
- "smiley",
- "surprised",
- "dead",
- "wow",
- "emotion",
- "omg"
- ],
- "moji": "๐ต"
- },
- "dress": {
- "unicode": "1F457",
- "unicode_alternates": [],
- "name": "dress",
- "shortname": ":dress:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "clothes",
- "fashion",
- "women",
- "sexy",
- "girls night"
- ],
- "moji": "๐"
- },
- "drooling_face": {
- "unicode": "1F924",
- "unicode_alternates": [],
- "name": "drooling face",
- "shortname": ":drooling_face:",
- "category": "people",
- "aliases": [
- ":drool:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คค"
- },
- "ear": {
- "unicode": "1F442",
- "unicode_alternates": [],
- "name": "ear",
- "shortname": ":ear:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "hear",
- "listen",
- "sound",
- "body",
- "diversity"
- ],
- "moji": "๐"
- },
- "ear_tone1": {
- "unicode": "1F442-1F3FB",
- "unicode_alternates": [],
- "name": "ear tone 1",
- "shortname": ":ear_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "hear",
- "listen",
- "sound"
- ],
- "moji": "๐๐ป"
- },
- "ear_tone2": {
- "unicode": "1F442-1F3FC",
- "unicode_alternates": [],
- "name": "ear tone 2",
- "shortname": ":ear_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "hear",
- "listen",
- "sound"
- ],
- "moji": "๐๐ผ"
- },
- "ear_tone3": {
- "unicode": "1F442-1F3FD",
- "unicode_alternates": [],
- "name": "ear tone 3",
- "shortname": ":ear_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "hear",
- "listen",
- "sound"
- ],
- "moji": "๐๐ฝ"
- },
- "ear_tone4": {
- "unicode": "1F442-1F3FE",
- "unicode_alternates": [],
- "name": "ear tone 4",
- "shortname": ":ear_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "hear",
- "listen",
- "sound"
- ],
- "moji": "๐๐พ"
- },
- "ear_tone5": {
- "unicode": "1F442-1F3FF",
- "unicode_alternates": [],
- "name": "ear tone 5",
- "shortname": ":ear_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "hear",
- "listen",
- "sound"
- ],
- "moji": "๐๐ฟ"
- },
- "expressionless": {
- "unicode": "1F611",
- "unicode_alternates": [],
- "name": "expressionless face",
- "shortname": ":expressionless:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- "-_-",
- "-__-",
- "-___-"
- ],
- "keywords": [
- "expressionless",
- "blank",
- "void",
- "vapid",
- "without expression",
- "face",
- "indifferent",
- "mad",
- "smiley",
- "neutral",
- "emotion"
- ],
- "moji": "๐"
- },
- "eye": {
- "unicode": "1F441",
- "unicode_alternates": [],
- "name": "eye",
- "shortname": ":eye:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "look",
- "peek",
- "watch",
- "body",
- "eyes"
- ],
- "moji": "๐"
- },
- "eyeglasses": {
- "unicode": "1F453",
- "unicode_alternates": [],
- "name": "eyeglasses",
- "shortname": ":eyeglasses:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "accessories",
- "eyesight",
- "fashion",
- "eyeglasses",
- "spectacles",
- "eye",
- "sight",
- "nearsightedness",
- "myopia",
- "farsightedness",
- "hyperopia",
- "frames",
- "vision",
- "see",
- "blurry",
- "contacts",
- "glasses"
- ],
- "moji": "๐"
- },
- "eyes": {
- "unicode": "1F440",
- "unicode_alternates": [],
- "name": "eyes",
- "shortname": ":eyes:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "look",
- "peek",
- "stalk",
- "watch",
- "body",
- "eyes"
- ],
- "moji": "๐"
- },
- "face_palm": {
- "unicode": "1F926",
- "unicode_alternates": [],
- "name": "face palm",
- "shortname": ":face_palm:",
- "category": "people",
- "aliases": [
- ":facepalm:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คฆ"
- },
- "face_palm_tone1": {
- "unicode": "1F926-1F3FB",
- "unicode_alternates": [],
- "name": "face palm tone 1",
- "shortname": ":face_palm_tone1:",
- "category": "people",
- "aliases": [
- ":facepalm_tone1:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คฆ๐ป"
- },
- "face_palm_tone2": {
- "unicode": "1F926-1F3FC",
- "unicode_alternates": [],
- "name": "face palm tone 2",
- "shortname": ":face_palm_tone2:",
- "category": "people",
- "aliases": [
- ":facepalm_tone2:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คฆ๐ผ"
- },
- "face_palm_tone3": {
- "unicode": "1F926-1F3FD",
- "unicode_alternates": [],
- "name": "face palm tone 3",
- "shortname": ":face_palm_tone3:",
- "category": "people",
- "aliases": [
- ":facepalm_tone3:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คฆ๐ฝ"
- },
- "face_palm_tone4": {
- "unicode": "1F926-1F3FE",
- "unicode_alternates": [],
- "name": "face palm tone 4",
- "shortname": ":face_palm_tone4:",
- "category": "people",
- "aliases": [
- ":facepalm_tone4:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คฆ๐พ"
- },
- "face_palm_tone5": {
- "unicode": "1F926-1F3FF",
- "unicode_alternates": [],
- "name": "face palm tone 5",
- "shortname": ":face_palm_tone5:",
- "category": "people",
- "aliases": [
- ":facepalm_tone5:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คฆ๐ฟ"
- },
- "family": {
- "unicode": "1F46A",
- "unicode_alternates": [],
- "name": "family",
- "shortname": ":family:",
- "category": "people",
- "aliases": [
- ":family_man_woman_boy:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "child",
- "dad",
- "father",
- "home",
- "mom",
- "mother",
- "parents",
- "family",
- "girl",
- "boy",
- "group",
- "unit",
- "people",
- "baby"
- ],
- "moji": "๐ช"
- },
- "family_mmb": {
- "unicode": "1F468-1F468-1F466",
- "unicode_alternates": [
- "1F468-200D-1F468-200D-1F466"
- ],
- "name": "family (man,man,boy)",
- "shortname": ":family_mmb:",
- "category": "people",
- "aliases": [
- ":family_man_man_boy:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "child",
- "dad",
- "father",
- "parents",
- "group",
- "unit",
- "gay",
- "homosexual",
- "man",
- "boy",
- "people",
- "family",
- "men",
- "baby",
- "lgbt"
- ],
- "moji": "๐จโ๐จโ๐ฆ"
- },
- "family_mmbb": {
- "unicode": "1F468-1F468-1F466-1F466",
- "unicode_alternates": [
- "1F468-200D-1F468-200D-1F466-200D-1F466"
- ],
- "name": "family (man,man,boy,boy)",
- "shortname": ":family_mmbb:",
- "category": "people",
- "aliases": [
- ":family_man_man_boy_boy:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "children",
- "dad",
- "father",
- "parents",
- "group",
- "unit",
- "gay",
- "homosexual",
- "man",
- "boy",
- "people",
- "family",
- "men",
- "baby",
- "lgbt"
- ],
- "moji": "๐จโ๐จโ๐ฆโ๐ฆ"
- },
- "family_mmg": {
- "unicode": "1F468-1F468-1F467",
- "unicode_alternates": [
- "1F468-200D-1F468-200D-1F467"
- ],
- "name": "family (man,man,girl)",
- "shortname": ":family_mmg:",
- "category": "people",
- "aliases": [
- ":family_man_man_girl:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "child",
- "dad",
- "father",
- "parents",
- "group",
- "unit",
- "gay",
- "homosexual",
- "man",
- "girl",
- "people",
- "family",
- "men",
- "baby",
- "lgbt"
- ],
- "moji": "๐จโ๐จโ๐ง"
- },
- "family_mmgb": {
- "unicode": "1F468-1F468-1F467-1F466",
- "unicode_alternates": [
- "1F468-200D-1F468-200D-1F467-200D-1F466"
- ],
- "name": "family (man,man,girl,boy)",
- "shortname": ":family_mmgb:",
- "category": "people",
- "aliases": [
- ":family_man_man_girl_boy:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "children",
- "dad",
- "father",
- "parents",
- "group",
- "unit",
- "gay",
- "homosexual",
- "man",
- "girl",
- "boy",
- "people",
- "family",
- "men",
- "baby",
- "lgbt"
- ],
- "moji": "๐จโ๐จโ๐งโ๐ฆ"
- },
- "family_mmgg": {
- "unicode": "1F468-1F468-1F467-1F467",
- "unicode_alternates": [
- "1F468-200D-1F468-200D-1F467-200D-1F467"
- ],
- "name": "family (man,man,girl,girl)",
- "shortname": ":family_mmgg:",
- "category": "people",
- "aliases": [
- ":family_man_man_girl_girl:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "children",
- "dad",
- "father",
- "parents",
- "group",
- "unit",
- "gay",
- "homosexual",
- "man",
- "girl",
- "people",
- "family",
- "men",
- "baby",
- "lgbt"
- ],
- "moji": "๐จโ๐จโ๐งโ๐ง"
- },
- "family_mwbb": {
- "unicode": "1F468-1F469-1F466-1F466",
- "unicode_alternates": [
- "1F468-200D-1F469-200D-1F466-200D-1F466"
- ],
- "name": "family (man,woman,boy,boy)",
- "shortname": ":family_mwbb:",
- "category": "people",
- "aliases": [
- ":family_man_woman_boy_boy:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "dad",
- "father",
- "mom",
- "mother",
- "parents",
- "children",
- "boy",
- "group",
- "unit",
- "man",
- "woman",
- "people",
- "family",
- "baby"
- ],
- "moji": "๐จโ๐ฉโ๐ฆโ๐ฆ"
- },
- "family_mwg": {
- "unicode": "1F468-1F469-1F467",
- "unicode_alternates": [
- "1F468-200D-1F469-200D-1F467"
- ],
- "name": "family (man,woman,girl)",
- "shortname": ":family_mwg:",
- "category": "people",
- "aliases": [
- ":family_man_woman_girl:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "child",
- "dad",
- "father",
- "mom",
- "mother",
- "parents",
- "girl",
- "boy",
- "group",
- "unit",
- "man",
- "woman",
- "people",
- "family",
- "baby"
- ],
- "moji": "๐จโ๐ฉโ๐ง"
- },
- "family_mwgb": {
- "unicode": "1F468-1F469-1F467-1F466",
- "unicode_alternates": [
- "1F468-200D-1F469-200D-1F467-200D-1F466"
- ],
- "name": "family (man,woman,girl,boy)",
- "shortname": ":family_mwgb:",
- "category": "people",
- "aliases": [
- ":family_man_woman_girl_boy:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "dad",
- "father",
- "mom",
- "mother",
- "parents",
- "children",
- "girl",
- "boy",
- "group",
- "unit",
- "man",
- "woman",
- "people",
- "family",
- "baby"
- ],
- "moji": "๐จโ๐ฉโ๐งโ๐ฆ"
- },
- "family_mwgg": {
- "unicode": "1F468-1F469-1F467-1F467",
- "unicode_alternates": [
- "1F468-200D-1F469-200D-1F467-200D-1F467"
- ],
- "name": "family (man,woman,girl,girl)",
- "shortname": ":family_mwgg:",
- "category": "people",
- "aliases": [
- ":family_man_woman_girl_girl:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "dad",
- "father",
- "mom",
- "mother",
- "parents",
- "children",
- "girl",
- "group",
- "unit",
- "man",
- "woman",
- "people",
- "family",
- "baby"
- ],
- "moji": "๐จโ๐ฉโ๐งโ๐ง"
- },
- "family_wwb": {
- "unicode": "1F469-1F469-1F466",
- "unicode_alternates": [
- "1F469-200D-1F469-200D-1F466"
- ],
- "name": "family (woman,woman,boy)",
- "shortname": ":family_wwb:",
- "category": "people",
- "aliases": [
- ":family_woman_woman_boy:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "mom",
- "mother",
- "parents",
- "child",
- "boy",
- "group",
- "unit",
- "gay",
- "lesbian",
- "homosexual",
- "woman",
- "people",
- "family",
- "women",
- "baby",
- "lgbt"
- ],
- "moji": "๐ฉโ๐ฉโ๐ฆ"
- },
- "family_wwbb": {
- "unicode": "1F469-1F469-1F466-1F466",
- "unicode_alternates": [
- "1F469-200D-1F469-200D-1F466-200D-1F466"
- ],
- "name": "family (woman,woman,boy,boy)",
- "shortname": ":family_wwbb:",
- "category": "people",
- "aliases": [
- ":family_woman_woman_boy_boy:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "mom",
- "mother",
- "parents",
- "children",
- "group",
- "unit",
- "gay",
- "lesbian",
- "homosexual",
- "woman",
- "boy",
- "people",
- "family",
- "women",
- "baby",
- "lgbt"
- ],
- "moji": "๐ฉโ๐ฉโ๐ฆโ๐ฆ"
- },
- "family_wwg": {
- "unicode": "1F469-1F469-1F467",
- "unicode_alternates": [
- "1F469-200D-1F469-200D-1F467"
- ],
- "name": "family (woman,woman,girl)",
- "shortname": ":family_wwg:",
- "category": "people",
- "aliases": [
- ":family_woman_woman_girl:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "mom",
- "mother",
- "parents",
- "child",
- "woman",
- "girl",
- "group",
- "unit",
- "gay",
- "lesbian",
- "homosexual",
- "people",
- "family",
- "women",
- "baby",
- "lgbt"
- ],
- "moji": "๐ฉโ๐ฉโ๐ง"
- },
- "family_wwgb": {
- "unicode": "1F469-1F469-1F467-1F466",
- "unicode_alternates": [
- "1F469-200D-1F469-200D-1F467-200D-1F466"
- ],
- "name": "family (woman,woman,girl,boy)",
- "shortname": ":family_wwgb:",
- "category": "people",
- "aliases": [
- ":family_woman_woman_girl_boy:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "mom",
- "mother",
- "parents",
- "children",
- "group",
- "unit",
- "gay",
- "lesbian",
- "homosexual",
- "woman",
- "girl",
- "boy",
- "people",
- "family",
- "women",
- "baby",
- "lgbt"
- ],
- "moji": "๐ฉโ๐ฉโ๐งโ๐ฆ"
- },
- "family_wwgg": {
- "unicode": "1F469-1F469-1F467-1F467",
- "unicode_alternates": [
- "1F469-200D-1F469-200D-1F467-200D-1F467"
- ],
- "name": "family (woman,woman,girl,girl)",
- "shortname": ":family_wwgg:",
- "category": "people",
- "aliases": [
- ":family_woman_woman_girl_girl:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "mom",
- "mother",
- "parents",
- "children",
- "group",
- "unit",
- "gay",
- "lesbian",
- "homosexual",
- "woman",
- "girl",
- "people",
- "family",
- "women",
- "baby",
- "lgbt"
- ],
- "moji": "๐ฉโ๐ฉโ๐งโ๐ง"
- },
- "fearful": {
- "unicode": "1F628",
- "unicode_alternates": [],
- "name": "fearful face",
- "shortname": ":fearful:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "nervous",
- "oops",
- "scared",
- "terrified",
- "fear",
- "fearful",
- "frightened",
- "smiley",
- "surprised",
- "emotion"
- ],
- "moji": "๐จ"
- },
- "fingers_crossed": {
- "unicode": "1F91E",
- "unicode_alternates": [],
- "name": "hand with first and index finger crossed",
- "shortname": ":fingers_crossed:",
- "category": "people",
- "aliases": [
- ":hand_with_index_and_middle_finger_crossed:",
- ":crossed_fingers:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค"
- },
- "fingers_crossed_tone1": {
- "unicode": "1F91E-1F3FB",
- "unicode_alternates": [],
- "name": "hand with index and middle fingers crossed tone 1",
- "shortname": ":fingers_crossed_tone1:",
- "category": "people",
- "aliases": [
- ":hand_with_index_and_middle_fingers_crossed_tone1:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐ป"
- },
- "fingers_crossed_tone2": {
- "unicode": "1F91E-1F3FC",
- "unicode_alternates": [],
- "name": "hand with index and middle fingers crossed tone 2",
- "shortname": ":fingers_crossed_tone2:",
- "category": "people",
- "aliases": [
- ":hand_with_index_and_middle_fingers_crossed_tone2:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐ผ"
- },
- "fingers_crossed_tone3": {
- "unicode": "1F91E-1F3FD",
- "unicode_alternates": [],
- "name": "hand with index and middle fingers crossed tone 3",
- "shortname": ":fingers_crossed_tone3:",
- "category": "people",
- "aliases": [
- ":hand_with_index_and_middle_fingers_crossed_tone3:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐ฝ"
- },
- "fingers_crossed_tone4": {
- "unicode": "1F91E-1F3FE",
- "unicode_alternates": [],
- "name": "hand with index and middle fingers crossed tone 4",
- "shortname": ":fingers_crossed_tone4:",
- "category": "people",
- "aliases": [
- ":hand_with_index_and_middle_fingers_crossed_tone4:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐พ"
- },
- "fingers_crossed_tone5": {
- "unicode": "1F91E-1F3FF",
- "unicode_alternates": [],
- "name": "hand with index and middle fingers crossed tone 5",
- "shortname": ":fingers_crossed_tone5:",
- "category": "people",
- "aliases": [
- ":hand_with_index_and_middle_fingers_crossed_tone5:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐ฟ"
- },
- "fist": {
- "unicode": "270A",
- "unicode_alternates": [],
- "name": "raised fist",
- "shortname": ":fist:",
- "category": "people",
- "aliases": [
- ":fist_raised:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "fingers",
- "grasp",
- "hand",
- "body",
- "hands",
- "hi",
- "fist bump",
- "diversity",
- "condolence"
- ],
- "moji": "โ"
- },
- "fist_tone1": {
- "unicode": "270A-1F3FB",
- "unicode_alternates": [],
- "name": "raised fist tone 1",
- "shortname": ":fist_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fingers",
- "grasp",
- "hand"
- ],
- "moji": "โ๐ป"
- },
- "fist_tone2": {
- "unicode": "270A-1F3FC",
- "unicode_alternates": [],
- "name": "raised fist tone 2",
- "shortname": ":fist_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fingers",
- "grasp",
- "hand"
- ],
- "moji": "โ๐ผ"
- },
- "fist_tone3": {
- "unicode": "270A-1F3FD",
- "unicode_alternates": [],
- "name": "raised fist tone 3",
- "shortname": ":fist_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fingers",
- "grasp",
- "hand"
- ],
- "moji": "โ๐ฝ"
- },
- "fist_tone4": {
- "unicode": "270A-1F3FE",
- "unicode_alternates": [],
- "name": "raised fist tone 4",
- "shortname": ":fist_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fingers",
- "grasp",
- "hand"
- ],
- "moji": "โ๐พ"
- },
- "fist_tone5": {
- "unicode": "270A-1F3FF",
- "unicode_alternates": [],
- "name": "raised fist tone 5",
- "shortname": ":fist_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fingers",
- "grasp",
- "hand"
- ],
- "moji": "โ๐ฟ"
- },
- "flushed": {
- "unicode": "1F633",
- "unicode_alternates": [],
- "name": "flushed face",
- "shortname": ":flushed:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- ":$",
- "=$"
- ],
- "keywords": [
- "blush",
- "face",
- "flattered",
- "flush",
- "red",
- "pink",
- "cheeks",
- "shy",
- "smiley",
- "emotion",
- "omg"
- ],
- "moji": "๐ณ"
- },
- "footprints": {
- "unicode": "1F463",
- "unicode_alternates": [],
- "name": "footprints",
- "shortname": ":footprints:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "feet"
- ],
- "moji": "๐ฃ"
- },
- "frowning": {
- "unicode": "1F626",
- "unicode_alternates": [],
- "name": "frowning face with open mouth",
- "shortname": ":frowning:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "aw",
- "face",
- "frown",
- "sad",
- "pout",
- "sulk",
- "glower",
- "smiley",
- "surprised",
- "emotion"
- ],
- "moji": "๐ฆ"
- },
- "frowning2": {
- "unicode": "2639",
- "unicode_alternates": [],
- "name": "white frowning face",
- "shortname": ":frowning2:",
- "category": "people",
- "aliases": [
- ":white_frowning_face:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "frown",
- "person",
- "sad",
- "smiley",
- "emotion"
- ],
- "moji": "โน"
- },
- "ghost": {
- "unicode": "1F47B",
- "unicode_alternates": [],
- "name": "ghost",
- "shortname": ":ghost:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "halloween",
- "holidays",
- "monster"
- ],
- "moji": "๐ป"
- },
- "girl": {
- "unicode": "1F467",
- "unicode_alternates": [],
- "name": "girl",
- "shortname": ":girl:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "woman",
- "people",
- "women",
- "baby",
- "diversity"
- ],
- "moji": "๐ง"
- },
- "girl_tone1": {
- "unicode": "1F467-1F3FB",
- "unicode_alternates": [],
- "name": "girl tone 1",
- "shortname": ":girl_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "kid",
- "child"
- ],
- "moji": "๐ง๐ป"
- },
- "girl_tone2": {
- "unicode": "1F467-1F3FC",
- "unicode_alternates": [],
- "name": "girl tone 2",
- "shortname": ":girl_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "kid",
- "child"
- ],
- "moji": "๐ง๐ผ"
- },
- "girl_tone3": {
- "unicode": "1F467-1F3FD",
- "unicode_alternates": [],
- "name": "girl tone 3",
- "shortname": ":girl_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "kid",
- "child"
- ],
- "moji": "๐ง๐ฝ"
- },
- "girl_tone4": {
- "unicode": "1F467-1F3FE",
- "unicode_alternates": [],
- "name": "girl tone 4",
- "shortname": ":girl_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "kid",
- "child"
- ],
- "moji": "๐ง๐พ"
- },
- "girl_tone5": {
- "unicode": "1F467-1F3FF",
- "unicode_alternates": [],
- "name": "girl tone 5",
- "shortname": ":girl_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "kid",
- "child"
- ],
- "moji": "๐ง๐ฟ"
- },
- "grimacing": {
- "unicode": "1F62C",
- "unicode_alternates": [],
- "name": "grimacing face",
- "shortname": ":grimacing:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "grimace",
- "teeth",
- "disapprove",
- "pain",
- "silly",
- "smiley",
- "emotion",
- "selfie"
- ],
- "moji": "๐ฌ"
- },
- "grin": {
- "unicode": "1F601",
- "unicode_alternates": [],
- "name": "grinning face with smiling eyes",
- "shortname": ":grin:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "happy",
- "joy",
- "smile",
- "grin",
- "grinning",
- "smiling",
- "smiley",
- "silly",
- "emotion",
- "good",
- "selfie"
- ],
- "moji": "๐"
- },
- "grinning": {
- "unicode": "1F600",
- "unicode_alternates": [],
- "name": "grinning face",
- "shortname": ":grinning:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "happy",
- "joy",
- "smile",
- "grin",
- "grinning",
- "smiling",
- "smiley",
- "emotion"
- ],
- "moji": "๐"
- },
- "guardsman": {
- "unicode": "1F482",
- "unicode_alternates": [],
- "name": "guardsman",
- "shortname": ":guardsman:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "british",
- "gb",
- "male",
- "man",
- "uk",
- "guardsman",
- "guard",
- "bearskin",
- "hat",
- "queen",
- "ceremonial",
- "military",
- "people",
- "men",
- "diversity",
- "job"
- ],
- "moji": "๐"
- },
- "guardsman_tone1": {
- "unicode": "1F482-1F3FB",
- "unicode_alternates": [],
- "name": "guardsman tone 1",
- "shortname": ":guardsman_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "british",
- "gb",
- "male",
- "man",
- "uk",
- "guard",
- "bearskin",
- "hat",
- "queen",
- "ceremonial",
- "military"
- ],
- "moji": "๐๐ป"
- },
- "guardsman_tone2": {
- "unicode": "1F482-1F3FC",
- "unicode_alternates": [],
- "name": "guardsman tone 2",
- "shortname": ":guardsman_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "british",
- "gb",
- "male",
- "man",
- "uk",
- "guard",
- "bearskin",
- "hat",
- "queen",
- "ceremonial",
- "military"
- ],
- "moji": "๐๐ผ"
- },
- "guardsman_tone3": {
- "unicode": "1F482-1F3FD",
- "unicode_alternates": [],
- "name": "guardsman tone 3",
- "shortname": ":guardsman_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "british",
- "gb",
- "male",
- "man",
- "uk",
- "guard",
- "bearskin",
- "hat",
- "queen",
- "ceremonial",
- "military"
- ],
- "moji": "๐๐ฝ"
- },
- "guardsman_tone4": {
- "unicode": "1F482-1F3FE",
- "unicode_alternates": [],
- "name": "guardsman tone 4",
- "shortname": ":guardsman_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "british",
- "gb",
- "male",
- "man",
- "uk",
- "guard",
- "bearskin",
- "hat",
- "queen",
- "ceremonial",
- "military"
- ],
- "moji": "๐๐พ"
- },
- "guardsman_tone5": {
- "unicode": "1F482-1F3FF",
- "unicode_alternates": [],
- "name": "guardsman tone 5",
- "shortname": ":guardsman_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "british",
- "gb",
- "male",
- "man",
- "uk",
- "guard",
- "bearskin",
- "hat",
- "queen",
- "ceremonial",
- "military"
- ],
- "moji": "๐๐ฟ"
- },
- "haircut": {
- "unicode": "1F487",
- "unicode_alternates": [],
- "name": "haircut",
- "shortname": ":haircut:",
- "category": "people",
- "aliases": [
- ":haircut_woman:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "people",
- "women",
- "diversity"
- ],
- "moji": "๐"
- },
- "haircut_tone1": {
- "unicode": "1F487-1F3FB",
- "unicode_alternates": [],
- "name": "haircut tone 1",
- "shortname": ":haircut_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman"
- ],
- "moji": "๐๐ป"
- },
- "haircut_tone2": {
- "unicode": "1F487-1F3FC",
- "unicode_alternates": [],
- "name": "haircut tone 2",
- "shortname": ":haircut_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman"
- ],
- "moji": "๐๐ผ"
- },
- "haircut_tone3": {
- "unicode": "1F487-1F3FD",
- "unicode_alternates": [],
- "name": "haircut tone 3",
- "shortname": ":haircut_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman"
- ],
- "moji": "๐๐ฝ"
- },
- "haircut_tone4": {
- "unicode": "1F487-1F3FE",
- "unicode_alternates": [],
- "name": "haircut tone 4",
- "shortname": ":haircut_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman"
- ],
- "moji": "๐๐พ"
- },
- "haircut_tone5": {
- "unicode": "1F487-1F3FF",
- "unicode_alternates": [],
- "name": "haircut tone 5",
- "shortname": ":haircut_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman"
- ],
- "moji": "๐๐ฟ"
- },
- "hand_splayed": {
- "unicode": "1F590",
- "unicode_alternates": [],
- "name": "raised hand with fingers splayed",
- "shortname": ":hand_splayed:",
- "category": "people",
- "aliases": [
- ":raised_hand_with_fingers_splayed:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "hi",
- "five",
- "stop",
- "halt",
- "body",
- "hands",
- "diversity"
- ],
- "moji": "๐"
- },
- "hand_splayed_tone1": {
- "unicode": "1F590-1F3FB",
- "unicode_alternates": [],
- "name": "raised hand with fingers splayed tone 1",
- "shortname": ":hand_splayed_tone1:",
- "category": "people",
- "aliases": [
- ":raised_hand_with_fingers_splayed_tone1:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "hi",
- "five",
- "stop",
- "halt"
- ],
- "moji": "๐๐ป"
- },
- "hand_splayed_tone2": {
- "unicode": "1F590-1F3FC",
- "unicode_alternates": [],
- "name": "raised hand with fingers splayed tone 2",
- "shortname": ":hand_splayed_tone2:",
- "category": "people",
- "aliases": [
- ":raised_hand_with_fingers_splayed_tone2:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "hi",
- "five",
- "stop",
- "halt"
- ],
- "moji": "๐๐ผ"
- },
- "hand_splayed_tone3": {
- "unicode": "1F590-1F3FD",
- "unicode_alternates": [],
- "name": "raised hand with fingers splayed tone 3",
- "shortname": ":hand_splayed_tone3:",
- "category": "people",
- "aliases": [
- ":raised_hand_with_fingers_splayed_tone3:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "hi",
- "five",
- "stop",
- "halt"
- ],
- "moji": "๐๐ฝ"
- },
- "hand_splayed_tone4": {
- "unicode": "1F590-1F3FE",
- "unicode_alternates": [],
- "name": "raised hand with fingers splayed tone 4",
- "shortname": ":hand_splayed_tone4:",
- "category": "people",
- "aliases": [
- ":raised_hand_with_fingers_splayed_tone4:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "hi",
- "five",
- "stop",
- "halt"
- ],
- "moji": "๐๐พ"
- },
- "hand_splayed_tone5": {
- "unicode": "1F590-1F3FF",
- "unicode_alternates": [],
- "name": "raised hand with fingers splayed tone 5",
- "shortname": ":hand_splayed_tone5:",
- "category": "people",
- "aliases": [
- ":raised_hand_with_fingers_splayed_tone5:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "hi",
- "five",
- "stop",
- "halt"
- ],
- "moji": "๐๐ฟ"
- },
- "handbag": {
- "unicode": "1F45C",
- "unicode_alternates": [],
- "name": "handbag",
- "shortname": ":handbag:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "accessories",
- "accessory",
- "bag",
- "fashion",
- "women",
- "vacation"
- ],
- "moji": "๐"
- },
- "handshake": {
- "unicode": "1F91D",
- "unicode_alternates": [],
- "name": "handshake",
- "shortname": ":handshake:",
- "category": "people",
- "aliases": [
- ":shaking_hands:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค"
- },
- "head_bandage": {
- "unicode": "1F915",
- "unicode_alternates": [],
- "name": "face with head-bandage",
- "shortname": ":head_bandage:",
- "category": "people",
- "aliases": [
- ":face_with_head_bandage:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "smiley",
- "health",
- "sick",
- "emotion"
- ],
- "moji": "๐ค"
- },
- "heart": {
- "unicode": "1F495",
- "unicode_alternates": [],
- "name": "heart",
- "shortname": ":heart:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "affection",
- "crush",
- "face",
- "infatuation",
- "like",
- "love",
- "valentines",
- "heart",
- "lovestruck",
- "heart-shaped",
- "emotion",
- "beautiful"
- ],
- "moji": "โค๏ธ "
- },
- "hearts": {
- "unicode": "1F495",
- "unicode_alternates": [],
- "name": "hearts",
- "shortname": ":hearts:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "affection",
- "crush",
- "face",
- "infatuation",
- "like",
- "love",
- "valentines",
- "heart",
- "lovestruck",
- "heart-shaped",
- "emotion",
- "beautiful"
- ],
- "moji": "โค๏ธ "
- },
- "heart_eyes": {
- "unicode": "1F60D",
- "unicode_alternates": [],
- "name": "smiling face with heart-shaped eyes",
- "shortname": ":heart_eyes:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "affection",
- "crush",
- "face",
- "infatuation",
- "like",
- "love",
- "valentines",
- "smiling",
- "heart",
- "lovestruck",
- "flirt",
- "smile",
- "heart-shaped",
- "happy",
- "smiley",
- "sex",
- "heart eyes",
- "emotion",
- "beautiful"
- ],
- "moji": "๐"
- },
- "heart_eyes_cat": {
- "unicode": "1F63B",
- "unicode_alternates": [],
- "name": "smiling cat face with heart-shaped eyes",
- "shortname": ":heart_eyes_cat:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "affection",
- "animal",
- "cats",
- "like",
- "love",
- "valentines",
- "lovestruck",
- "heart",
- "heart eyes",
- "cat",
- "beautiful"
- ],
- "moji": "๐ป"
- },
- "helmet_with_cross": {
- "unicode": "26D1",
- "unicode_alternates": [],
- "name": "helmet with white cross",
- "shortname": ":helmet_with_cross:",
- "category": "people",
- "aliases": [
- ":helmet_with_white_cross:",
- ":rescue_worker_helmet:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "aid",
- "face",
- "hat",
- "person",
- "object",
- "accessories",
- "job"
- ],
- "moji": "โ"
- },
- "high_heel": {
- "unicode": "1F460",
- "unicode_alternates": [],
- "name": "high-heeled shoe",
- "shortname": ":high_heel:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fashion",
- "female",
- "shoes",
- "women",
- "shoe",
- "sexy",
- "accessories",
- "girls night"
- ],
- "moji": "๐ "
- },
- "hugging": {
- "unicode": "1F917",
- "unicode_alternates": [],
- "name": "hugging face",
- "shortname": ":hugging:",
- "category": "people",
- "aliases": [
- ":hugging_face:",
- ":hugs:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "smiley",
- "hug",
- "thank you"
- ],
- "moji": "๐ค"
- },
- "hushed": {
- "unicode": "1F62F",
- "unicode_alternates": [],
- "name": "hushed face",
- "shortname": ":hushed:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "woo",
- "quiet",
- "hush",
- "whisper",
- "silent",
- "smiley",
- "surprised",
- "wow"
- ],
- "moji": "๐ฏ"
- },
- "imp": {
- "unicode": "1F47F",
- "unicode_alternates": [],
- "name": "imp",
- "shortname": ":imp:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "angry",
- "devil",
- "evil",
- "horns",
- "cute",
- "smiley",
- "monster",
- "wth"
- ],
- "moji": "๐ฟ"
- },
- "information_desk_person": {
- "unicode": "1F481",
- "unicode_alternates": [],
- "name": "information desk person",
- "shortname": ":information_desk_person:",
- "category": "people",
- "aliases": [
- ":tipping_hand_woman:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "human",
- "woman",
- "information",
- "help",
- "question",
- "answer",
- "sassy",
- "unimpressed",
- "attitude",
- "snarky",
- "people",
- "women",
- "diversity"
- ],
- "moji": "๐"
- },
- "information_desk_person_tone1": {
- "unicode": "1F481-1F3FB",
- "unicode_alternates": [],
- "name": "information desk person tone 1",
- "shortname": ":information_desk_person_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "human",
- "woman",
- "help",
- "question",
- "answer",
- "sassy",
- "unimpressed",
- "attitude",
- "snarky"
- ],
- "moji": "๐๐ป"
- },
- "information_desk_person_tone2": {
- "unicode": "1F481-1F3FC",
- "unicode_alternates": [],
- "name": "information desk person tone 2",
- "shortname": ":information_desk_person_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "human",
- "woman",
- "help",
- "question",
- "answer",
- "sassy",
- "unimpressed",
- "attitude",
- "snarky"
- ],
- "moji": "๐๐ผ"
- },
- "information_desk_person_tone3": {
- "unicode": "1F481-1F3FD",
- "unicode_alternates": [],
- "name": "information desk person tone 3",
- "shortname": ":information_desk_person_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "human",
- "woman",
- "help",
- "question",
- "answer",
- "sassy",
- "unimpressed",
- "attitude",
- "snarky"
- ],
- "moji": "๐๐ฝ"
- },
- "information_desk_person_tone4": {
- "unicode": "1F481-1F3FE",
- "unicode_alternates": [],
- "name": "information desk person tone 4",
- "shortname": ":information_desk_person_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "human",
- "woman",
- "help",
- "question",
- "answer",
- "sassy",
- "unimpressed",
- "attitude",
- "snarky"
- ],
- "moji": "๐๐พ"
- },
- "information_desk_person_tone5": {
- "unicode": "1F481-1F3FF",
- "unicode_alternates": [],
- "name": "information desk person tone 5",
- "shortname": ":information_desk_person_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "human",
- "woman",
- "help",
- "question",
- "answer",
- "sassy",
- "unimpressed",
- "attitude",
- "snarky"
- ],
- "moji": "๐๐ฟ"
- },
- "innocent": {
- "unicode": "1F607",
- "unicode_alternates": [],
- "name": "smiling face with halo",
- "shortname": ":innocent:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- "O:-)",
- "0:-3",
- "0:3",
- "0:-)",
- "0:)",
- "0;^)",
- "O:)",
- "O;-)",
- "O=)",
- "0;-)",
- "O:-3",
- "O:3"
- ],
- "keywords": [
- "angel",
- "face",
- "halo",
- "innocent",
- "ring",
- "circle",
- "heaven",
- "smiley",
- "emotion"
- ],
- "moji": "๐"
- },
- "japanese_goblin": {
- "unicode": "1F47A",
- "unicode_alternates": [],
- "name": "japanese goblin",
- "shortname": ":japanese_goblin:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "evil",
- "mask",
- "red",
- "japanese",
- "tengu",
- "supernatural",
- "avian",
- "demon",
- "goblin",
- "theater",
- "nose",
- "frown",
- "mustache",
- "anger",
- "frustration",
- "angry",
- "monster"
- ],
- "moji": "๐บ"
- },
- "japanese_ogre": {
- "unicode": "1F479",
- "unicode_alternates": [],
- "name": "japanese ogre",
- "shortname": ":japanese_ogre:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "monster",
- "japanese",
- "oni",
- "demon",
- "troll",
- "ogre",
- "folklore",
- "devil",
- "mask",
- "theater",
- "horns",
- "teeth"
- ],
- "moji": "๐น"
- },
- "jeans": {
- "unicode": "1F456",
- "unicode_alternates": [],
- "name": "jeans",
- "shortname": ":jeans:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fashion",
- "shopping",
- "jeans",
- "pants",
- "blue",
- "denim",
- "levi's",
- "levi",
- "designer",
- "work",
- "skinny"
- ],
- "moji": "๐"
- },
- "joy": {
- "unicode": "1F602",
- "unicode_alternates": [],
- "name": "face with tears of joy",
- "shortname": ":joy:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- ":')",
- ":'-)"
- ],
- "keywords": [
- "cry",
- "face",
- "haha",
- "happy",
- "tears",
- "joy",
- "weep",
- "silly",
- "smiley",
- "laugh",
- "emotion",
- "sarcastic"
- ],
- "moji": "๐"
- },
- "joy_cat": {
- "unicode": "1F639",
- "unicode_alternates": [],
- "name": "cat face with tears of joy",
- "shortname": ":joy_cat:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "animal",
- "cats",
- "haha",
- "happy",
- "tears",
- "cry",
- "joy",
- "silly",
- "laugh",
- "cat",
- "sarcastic"
- ],
- "moji": "๐น"
- },
- "kimono": {
- "unicode": "1F458",
- "unicode_alternates": [],
- "name": "kimono",
- "shortname": ":kimono:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "dress",
- "fashion",
- "female",
- "japanese",
- "women"
- ],
- "moji": "๐"
- },
- "kiss": {
- "unicode": "1F48B",
- "unicode_alternates": [],
- "name": "kiss mark",
- "shortname": ":kiss:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "affection",
- "face",
- "like",
- "lips",
- "love",
- "valentines",
- "women",
- "sexy",
- "lip",
- "beautiful",
- "girls night"
- ],
- "moji": "๐"
- },
- "kiss_mm": {
- "unicode": "1F468-2764-1F48B-1F468",
- "unicode_alternates": [
- "1F468-200D-2764-FE0F-200D-1F48B-200D-1F468"
- ],
- "name": "kiss (man,man)",
- "shortname": ":kiss_mm:",
- "category": "people",
- "aliases": [
- ":couplekiss_mm:",
- ":couplekiss_man_man:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "dating",
- "like",
- "love",
- "marriage",
- "valentines",
- "couple",
- "people",
- "gay",
- "men",
- "sex",
- "lgbt"
- ],
- "moji": "๐จโโค๏ธโ๐โ๐จ"
- },
- "kiss_ww": {
- "unicode": "1F469-2764-1F48B-1F469",
- "unicode_alternates": [
- "1F469-200D-2764-FE0F-200D-1F48B-200D-1F469"
- ],
- "name": "kiss (woman,woman)",
- "shortname": ":kiss_ww:",
- "category": "people",
- "aliases": [
- ":couplekiss_ww:",
- ":couplekiss_woman_woman:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "dating",
- "like",
- "love",
- "marriage",
- "valentines",
- "couple",
- "people",
- "women",
- "sex",
- "lgbt",
- "lesbian"
- ],
- "moji": "๐ฉโโค๏ธโ๐โ๐ฉ"
- },
- "kissing": {
- "unicode": "1F617",
- "unicode_alternates": [],
- "name": "kissing face",
- "shortname": ":kissing:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "3",
- "face",
- "infatuation",
- "like",
- "love",
- "valentines",
- "kissing",
- "kiss",
- "pucker",
- "lips",
- "smooch",
- "smiley",
- "sexy"
- ],
- "moji": "๐"
- },
- "kissing_cat": {
- "unicode": "1F63D",
- "unicode_alternates": [],
- "name": "kissing cat face with closed eyes",
- "shortname": ":kissing_cat:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "animal",
- "cats",
- "passion",
- "kiss",
- "puckered",
- "heart",
- "love",
- "cat"
- ],
- "moji": "๐ฝ"
- },
- "kissing_closed_eyes": {
- "unicode": "1F61A",
- "unicode_alternates": [],
- "name": "kissing face with closed eyes",
- "shortname": ":kissing_closed_eyes:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "affection",
- "face",
- "infatuation",
- "like",
- "love",
- "valentines",
- "kissing",
- "kiss",
- "passion",
- "puckered",
- "heart",
- "smooch",
- "smiley",
- "sexy"
- ],
- "moji": "๐"
- },
- "kissing_heart": {
- "unicode": "1F618",
- "unicode_alternates": [],
- "name": "face throwing a kiss",
- "shortname": ":kissing_heart:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- ":*",
- ":-*",
- "=*",
- ":^*"
- ],
- "keywords": [
- "affection",
- "face",
- "infatuation",
- "kiss",
- "blowing kiss",
- "heart",
- "love",
- "lips",
- "like",
- "valentines",
- "smiley",
- "sexy"
- ],
- "moji": "๐"
- },
- "kissing_smiling_eyes": {
- "unicode": "1F619",
- "unicode_alternates": [],
- "name": "kissing face with smiling eyes",
- "shortname": ":kissing_smiling_eyes:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "affection",
- "face",
- "infatuation",
- "valentines",
- "kissing",
- "kiss",
- "smile",
- "pucker",
- "lips",
- "smooch",
- "smiley",
- "sexy"
- ],
- "moji": "๐"
- },
- "laughing": {
- "unicode": "1F606",
- "unicode_alternates": [],
- "name": "smiling face with open mouth and tightly-closed ey",
- "shortname": ":laughing:",
- "category": "people",
- "aliases": [
- ":satisfied:"
- ],
- "aliases_ascii": [
- ">:)",
- ">;)",
- ">:-)",
- ">=)"
- ],
- "keywords": [
- "happy",
- "joy",
- "lol",
- "smiling",
- "laughing",
- "laugh",
- "smiley",
- "emotion"
- ],
- "moji": "๐"
- },
- "left_facing_fist": {
- "unicode": "1F91B",
- "unicode_alternates": [],
- "name": "left-facing fist",
- "shortname": ":left_facing_fist:",
- "category": "people",
- "aliases": [
- ":left_fist:",
- ":fist_left:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค"
- },
- "left_facing_fist_tone1": {
- "unicode": "1F91B-1F3FB",
- "unicode_alternates": [],
- "name": "left facing fist tone 1",
- "shortname": ":left_facing_fist_tone1:",
- "category": "people",
- "aliases": [
- ":left_fist_tone1:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐ป"
- },
- "left_facing_fist_tone2": {
- "unicode": "1F91B-1F3FC",
- "unicode_alternates": [],
- "name": "left facing fist tone 2",
- "shortname": ":left_facing_fist_tone2:",
- "category": "people",
- "aliases": [
- ":left_fist_tone2:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐ผ"
- },
- "left_facing_fist_tone3": {
- "unicode": "1F91B-1F3FD",
- "unicode_alternates": [],
- "name": "left facing fist tone 3",
- "shortname": ":left_facing_fist_tone3:",
- "category": "people",
- "aliases": [
- ":left_fist_tone3:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐ฝ"
- },
- "left_facing_fist_tone4": {
- "unicode": "1F91B-1F3FE",
- "unicode_alternates": [],
- "name": "left facing fist tone 4",
- "shortname": ":left_facing_fist_tone4:",
- "category": "people",
- "aliases": [
- ":left_fist_tone4:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐พ"
- },
- "left_facing_fist_tone5": {
- "unicode": "1F91B-1F3FF",
- "unicode_alternates": [],
- "name": "left facing fist tone 5",
- "shortname": ":left_facing_fist_tone5:",
- "category": "people",
- "aliases": [
- ":left_fist_tone5:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐ฟ"
- },
- "lips": {
- "unicode": "1F444",
- "unicode_alternates": [],
- "name": "mouth",
- "shortname": ":lips:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "kiss",
- "mouth",
- "women",
- "body",
- "sexy",
- "lip"
- ],
- "moji": "๐"
- },
- "lipstick": {
- "unicode": "1F484",
- "unicode_alternates": [],
- "name": "lipstick",
- "shortname": ":lipstick:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fashion",
- "female",
- "girl",
- "object",
- "women",
- "sexy",
- "lip"
- ],
- "moji": "๐"
- },
- "lying_face": {
- "unicode": "1F925",
- "unicode_alternates": [],
- "name": "lying face",
- "shortname": ":lying_face:",
- "category": "people",
- "aliases": [
- ":liar:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คฅ"
- },
- "man": {
- "unicode": "1F468",
- "unicode_alternates": [],
- "name": "man",
- "shortname": ":man:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "classy",
- "dad",
- "father",
- "guy",
- "mustashe",
- "people",
- "men",
- "sex",
- "diversity",
- "selfie",
- "boys night"
- ],
- "moji": "๐จ"
- },
- "man_dancing": {
- "unicode": "1F57A",
- "unicode_alternates": [],
- "name": "man dancing",
- "shortname": ":man_dancing:",
- "category": "people",
- "aliases": [
- ":male_dancer:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐บ"
- },
- "man_in_tuxedo": {
- "unicode": "1F935",
- "unicode_alternates": [],
- "name": "man in tuxedo",
- "shortname": ":man_in_tuxedo:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คต"
- },
- "man_in_tuxedo_tone1": {
- "unicode": "1F935-1F3FB",
- "unicode_alternates": [],
- "name": "man in tuxedo tone 1",
- "shortname": ":man_in_tuxedo_tone1:",
- "category": "people",
- "aliases": [
- ":tuxedo_tone1:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คต๐ป"
- },
- "man_in_tuxedo_tone2": {
- "unicode": "1F935-1F3FC",
- "unicode_alternates": [],
- "name": "man in tuxedo tone 2",
- "shortname": ":man_in_tuxedo_tone2:",
- "category": "people",
- "aliases": [
- ":tuxedo_tone2:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คต๐ผ"
- },
- "man_in_tuxedo_tone3": {
- "unicode": "1F935-1F3FD",
- "unicode_alternates": [],
- "name": "man in tuxedo tone 3",
- "shortname": ":man_in_tuxedo_tone3:",
- "category": "people",
- "aliases": [
- ":tuxedo_tone3:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คต๐ฝ"
- },
- "man_in_tuxedo_tone4": {
- "unicode": "1F935-1F3FE",
- "unicode_alternates": [],
- "name": "man in tuxedo tone 4",
- "shortname": ":man_in_tuxedo_tone4:",
- "category": "people",
- "aliases": [
- ":tuxedo_tone4:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คต๐พ"
- },
- "man_in_tuxedo_tone5": {
- "unicode": "1F935-1F3FF",
- "unicode_alternates": [],
- "name": "man in tuxedo tone 5",
- "shortname": ":man_in_tuxedo_tone5:",
- "category": "people",
- "aliases": [
- ":tuxedo_tone5:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คต๐ฟ"
- },
- "man_tone1": {
- "unicode": "1F468-1F3FB",
- "unicode_alternates": [],
- "name": "man tone 1",
- "shortname": ":man_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "classy",
- "dad",
- "father",
- "guy",
- "mustache"
- ],
- "moji": "๐จ๐ป"
- },
- "man_tone2": {
- "unicode": "1F468-1F3FC",
- "unicode_alternates": [],
- "name": "man tone 2",
- "shortname": ":man_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "classy",
- "dad",
- "father",
- "guy",
- "mustache"
- ],
- "moji": "๐จ๐ผ"
- },
- "man_tone3": {
- "unicode": "1F468-1F3FD",
- "unicode_alternates": [],
- "name": "man tone 3",
- "shortname": ":man_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "classy",
- "dad",
- "father",
- "guy",
- "mustache"
- ],
- "moji": "๐จ๐ฝ"
- },
- "man_tone4": {
- "unicode": "1F468-1F3FE",
- "unicode_alternates": [],
- "name": "man tone 4",
- "shortname": ":man_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "classy",
- "dad",
- "father",
- "guy",
- "mustache"
- ],
- "moji": "๐จ๐พ"
- },
- "man_tone5": {
- "unicode": "1F468-1F3FF",
- "unicode_alternates": [],
- "name": "man tone 5",
- "shortname": ":man_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "classy",
- "dad",
- "father",
- "guy",
- "mustache"
- ],
- "moji": "๐จ๐ฟ"
- },
- "man_with_gua_pi_mao": {
- "unicode": "1F472",
- "unicode_alternates": [],
- "name": "man with gua pi mao",
- "shortname": ":man_with_gua_pi_mao:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "boy",
- "male",
- "skullcap",
- "chinese",
- "asian",
- "qing",
- "people",
- "hat",
- "men",
- "diversity"
- ],
- "moji": "๐ฒ"
- },
- "man_with_gua_pi_mao_tone1": {
- "unicode": "1F472-1F3FB",
- "unicode_alternates": [],
- "name": "man with gua pi mao tone 1",
- "shortname": ":man_with_gua_pi_mao_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "boy",
- "male",
- "skullcap",
- "chinese",
- "asian",
- "qing"
- ],
- "moji": "๐ฒ๐ป"
- },
- "man_with_gua_pi_mao_tone2": {
- "unicode": "1F472-1F3FC",
- "unicode_alternates": [],
- "name": "man with gua pi mao tone 2",
- "shortname": ":man_with_gua_pi_mao_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "boy",
- "male",
- "skullcap",
- "chinese",
- "asian",
- "qing"
- ],
- "moji": "๐ฒ๐ผ"
- },
- "man_with_gua_pi_mao_tone3": {
- "unicode": "1F472-1F3FD",
- "unicode_alternates": [],
- "name": "man with gua pi mao tone 3",
- "shortname": ":man_with_gua_pi_mao_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "boy",
- "male",
- "skullcap",
- "chinese",
- "asian",
- "qing"
- ],
- "moji": "๐ฒ๐ฝ"
- },
- "man_with_gua_pi_mao_tone4": {
- "unicode": "1F472-1F3FE",
- "unicode_alternates": [],
- "name": "man with gua pi mao tone 4",
- "shortname": ":man_with_gua_pi_mao_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "boy",
- "male",
- "skullcap",
- "chinese",
- "asian",
- "qing"
- ],
- "moji": "๐ฒ๐พ"
- },
- "man_with_gua_pi_mao_tone5": {
- "unicode": "1F472-1F3FF",
- "unicode_alternates": [],
- "name": "man with gua pi mao tone 5",
- "shortname": ":man_with_gua_pi_mao_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "boy",
- "male",
- "skullcap",
- "chinese",
- "asian",
- "qing"
- ],
- "moji": "๐ฒ๐ฟ"
- },
- "man_with_turban": {
- "unicode": "1F473",
- "unicode_alternates": [],
- "name": "man with turban",
- "shortname": ":man_with_turban:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "turban",
- "headdress",
- "headwear",
- "pagri",
- "india",
- "indian",
- "mummy",
- "wisdom",
- "peace",
- "people",
- "hat",
- "diversity"
- ],
- "moji": "๐ณ"
- },
- "man_with_turban_tone1": {
- "unicode": "1F473-1F3FB",
- "unicode_alternates": [],
- "name": "man with turban tone 1",
- "shortname": ":man_with_turban_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "headdress",
- "headwear",
- "pagri",
- "india",
- "indian",
- "mummy",
- "wisdom",
- "peace"
- ],
- "moji": "๐ณ๐ป"
- },
- "man_with_turban_tone2": {
- "unicode": "1F473-1F3FC",
- "unicode_alternates": [],
- "name": "man with turban tone 2",
- "shortname": ":man_with_turban_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "headdress",
- "headwear",
- "pagri",
- "india",
- "indian",
- "mummy",
- "wisdom",
- "peace"
- ],
- "moji": "๐ณ๐ผ"
- },
- "man_with_turban_tone3": {
- "unicode": "1F473-1F3FD",
- "unicode_alternates": [],
- "name": "man with turban tone 3",
- "shortname": ":man_with_turban_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "headdress",
- "headwear",
- "pagri",
- "india",
- "indian",
- "mummy",
- "wisdom",
- "peace"
- ],
- "moji": "๐ณ๐ฝ"
- },
- "man_with_turban_tone4": {
- "unicode": "1F473-1F3FE",
- "unicode_alternates": [],
- "name": "man with turban tone 4",
- "shortname": ":man_with_turban_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "headdress",
- "headwear",
- "pagri",
- "india",
- "indian",
- "mummy",
- "wisdom",
- "peace"
- ],
- "moji": "๐ณ๐พ"
- },
- "man_with_turban_tone5": {
- "unicode": "1F473-1F3FF",
- "unicode_alternates": [],
- "name": "man with turban tone 5",
- "shortname": ":man_with_turban_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "headdress",
- "headwear",
- "pagri",
- "india",
- "indian",
- "mummy",
- "wisdom",
- "peace"
- ],
- "moji": "๐ณ๐ฟ"
- },
- "mans_shoe": {
- "unicode": "1F45E",
- "unicode_alternates": [],
- "name": "mans shoe",
- "shortname": ":mans_shoe:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fashion",
- "male",
- "shoe",
- "accessories"
- ],
- "moji": "๐"
- },
- "mask": {
- "unicode": "1F637",
- "unicode_alternates": [],
- "name": "face with medical mask",
- "shortname": ":mask:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "ill",
- "sick",
- "virus",
- "flu",
- "medical",
- "mask",
- "smiley",
- "dead",
- "health"
- ],
- "moji": "๐ท"
- },
- "massage": {
- "unicode": "1F486",
- "unicode_alternates": [],
- "name": "face massage",
- "shortname": ":massage:",
- "category": "people",
- "aliases": [
- ":massage_woman:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "people",
- "women",
- "diversity"
- ],
- "moji": "๐"
- },
- "massage_tone1": {
- "unicode": "1F486-1F3FB",
- "unicode_alternates": [],
- "name": "face massage tone 1",
- "shortname": ":massage_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman"
- ],
- "moji": "๐๐ป"
- },
- "massage_tone2": {
- "unicode": "1F486-1F3FC",
- "unicode_alternates": [],
- "name": "face massage tone 2",
- "shortname": ":massage_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman"
- ],
- "moji": "๐๐ผ"
- },
- "massage_tone3": {
- "unicode": "1F486-1F3FD",
- "unicode_alternates": [],
- "name": "face massage tone 3",
- "shortname": ":massage_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman"
- ],
- "moji": "๐๐ฝ"
- },
- "massage_tone4": {
- "unicode": "1F486-1F3FE",
- "unicode_alternates": [],
- "name": "face massage tone 4",
- "shortname": ":massage_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman"
- ],
- "moji": "๐๐พ"
- },
- "massage_tone5": {
- "unicode": "1F486-1F3FF",
- "unicode_alternates": [],
- "name": "face massage tone 5",
- "shortname": ":massage_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman"
- ],
- "moji": "๐๐ฟ"
- },
- "metal": {
- "unicode": "1F918",
- "unicode_alternates": [],
- "name": "sign of the horns",
- "shortname": ":metal:",
- "category": "people",
- "aliases": [
- ":sign_of_the_horns:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "band",
- "concert",
- "fingers",
- "rocknroll",
- "body",
- "hands",
- "hi",
- "diversity",
- "boys night",
- "parties"
- ],
- "moji": "๐ค"
- },
- "metal_tone1": {
- "unicode": "1F918-1F3FB",
- "unicode_alternates": [],
- "name": "sign of the horns tone 1",
- "shortname": ":metal_tone1:",
- "category": "people",
- "aliases": [
- ":sign_of_the_horns_tone1:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "band",
- "concert",
- "fingers",
- "rocknroll"
- ],
- "moji": "๐ค๐ป"
- },
- "metal_tone2": {
- "unicode": "1F918-1F3FC",
- "unicode_alternates": [],
- "name": "sign of the horns tone 2",
- "shortname": ":metal_tone2:",
- "category": "people",
- "aliases": [
- ":sign_of_the_horns_tone2:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "band",
- "concert",
- "fingers",
- "rocknroll"
- ],
- "moji": "๐ค๐ผ"
- },
- "metal_tone3": {
- "unicode": "1F918-1F3FD",
- "unicode_alternates": [],
- "name": "sign of the horns tone 3",
- "shortname": ":metal_tone3:",
- "category": "people",
- "aliases": [
- ":sign_of_the_horns_tone3:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "band",
- "concert",
- "fingers",
- "rocknroll"
- ],
- "moji": "๐ค๐ฝ"
- },
- "metal_tone4": {
- "unicode": "1F918-1F3FE",
- "unicode_alternates": [],
- "name": "sign of the horns tone 4",
- "shortname": ":metal_tone4:",
- "category": "people",
- "aliases": [
- ":sign_of_the_horns_tone4:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "band",
- "concert",
- "fingers",
- "rocknroll"
- ],
- "moji": "๐ค๐พ"
- },
- "metal_tone5": {
- "unicode": "1F918-1F3FF",
- "unicode_alternates": [],
- "name": "sign of the horns tone 5",
- "shortname": ":metal_tone5:",
- "category": "people",
- "aliases": [
- ":sign_of_the_horns_tone5:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "band",
- "concert",
- "fingers",
- "rocknroll"
- ],
- "moji": "๐ค๐ฟ"
- },
- "middle_finger": {
- "unicode": "1F595",
- "unicode_alternates": [],
- "name": "reversed hand with middle finger extended",
- "shortname": ":middle_finger:",
- "explicit": "true",
- "category": "people",
- "aliases": [
- ":reversed_hand_with_middle_finger_extended:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "fu",
- "body",
- "hands",
- "middle finger",
- "diversity"
- ],
- "moji": "๐"
- },
- "middle_finger_tone1": {
- "unicode": "1F595-1F3FB",
- "unicode_alternates": [],
- "name": "reversed hand with middle finger extended tone 1",
- "shortname": ":middle_finger_tone1:",
- "category": "people",
- "aliases": [
- ":reversed_hand_with_middle_finger_extended_tone1:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "fu"
- ],
- "moji": "๐๐ป"
- },
- "middle_finger_tone2": {
- "unicode": "1F595-1F3FC",
- "unicode_alternates": [],
- "name": "reversed hand with middle finger extended tone 2",
- "shortname": ":middle_finger_tone2:",
- "category": "people",
- "aliases": [
- ":reversed_hand_with_middle_finger_extended_tone2:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "fu"
- ],
- "moji": "๐๐ผ"
- },
- "middle_finger_tone3": {
- "unicode": "1F595-1F3FD",
- "unicode_alternates": [],
- "name": "reversed hand with middle finger extended tone 3",
- "shortname": ":middle_finger_tone3:",
- "category": "people",
- "aliases": [
- ":reversed_hand_with_middle_finger_extended_tone3:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "fu"
- ],
- "moji": "๐๐ฝ"
- },
- "middle_finger_tone4": {
- "unicode": "1F595-1F3FE",
- "unicode_alternates": [],
- "name": "reversed hand with middle finger extended tone 4",
- "shortname": ":middle_finger_tone4:",
- "category": "people",
- "aliases": [
- ":reversed_hand_with_middle_finger_extended_tone4:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "fu"
- ],
- "moji": "๐๐พ"
- },
- "middle_finger_tone5": {
- "unicode": "1F595-1F3FF",
- "unicode_alternates": [],
- "name": "reversed hand with middle finger extended tone 5",
- "shortname": ":middle_finger_tone5:",
- "category": "people",
- "aliases": [
- ":reversed_hand_with_middle_finger_extended_tone5:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "fu"
- ],
- "moji": "๐๐ฟ"
- },
- "money_mouth": {
- "unicode": "1F911",
- "unicode_alternates": [],
- "name": "money-mouth face",
- "shortname": ":money_mouth:",
- "category": "people",
- "aliases": [
- ":money_mouth_face:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "smiley",
- "win",
- "money",
- "emotion",
- "boys night"
- ],
- "moji": "๐ค"
- },
- "mortar_board": {
- "unicode": "1F393",
- "unicode_alternates": [],
- "name": "graduation cap",
- "shortname": ":mortar_board:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "cap",
- "college",
- "degree",
- "graduation",
- "hat",
- "school",
- "university",
- "mortarboard",
- "academic",
- "education",
- "ceremony",
- "square",
- "tassel",
- "office",
- "accessories"
- ],
- "moji": "๐"
- },
- "mrs_claus": {
- "unicode": "1F936",
- "unicode_alternates": [],
- "name": "mother christmas",
- "shortname": ":mrs_claus:",
- "category": "people",
- "aliases": [
- ":mother_christmas:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คถ"
- },
- "mrs_claus_tone1": {
- "unicode": "1F936-1F3FB",
- "unicode_alternates": [],
- "name": "mother christmas tone 1",
- "shortname": ":mrs_claus_tone1:",
- "category": "people",
- "aliases": [
- ":mother_christmas_tone1:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คถ๐ป"
- },
- "mrs_claus_tone2": {
- "unicode": "1F936-1F3FC",
- "unicode_alternates": [],
- "name": "mother christmas tone 2",
- "shortname": ":mrs_claus_tone2:",
- "category": "people",
- "aliases": [
- ":mother_christmas_tone2:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คถ๐ผ"
- },
- "mrs_claus_tone3": {
- "unicode": "1F936-1F3FD",
- "unicode_alternates": [],
- "name": "mother christmas tone 3",
- "shortname": ":mrs_claus_tone3:",
- "category": "people",
- "aliases": [
- ":mother_christmas_tone3:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คถ๐ฝ"
- },
- "mrs_claus_tone4": {
- "unicode": "1F936-1F3FE",
- "unicode_alternates": [],
- "name": "mother christmas tone 4",
- "shortname": ":mrs_claus_tone4:",
- "category": "people",
- "aliases": [
- ":mother_christmas_tone4:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คถ๐พ"
- },
- "mrs_claus_tone5": {
- "unicode": "1F936-1F3FF",
- "unicode_alternates": [],
- "name": "mother christmas tone 5",
- "shortname": ":mrs_claus_tone5:",
- "category": "people",
- "aliases": [
- ":mother_christmas_tone5:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คถ๐ฟ"
- },
- "muscle": {
- "unicode": "1F4AA",
- "unicode_alternates": [],
- "name": "flexed biceps",
- "shortname": ":muscle:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "arm",
- "flex",
- "hand",
- "strong",
- "muscle",
- "bicep",
- "body",
- "hands",
- "workout",
- "win",
- "diversity",
- "feminist",
- "boys night"
- ],
- "moji": "๐ช"
- },
- "muscle_tone1": {
- "unicode": "1F4AA-1F3FB",
- "unicode_alternates": [],
- "name": "flexed biceps tone 1",
- "shortname": ":muscle_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "arm",
- "flex",
- "hand",
- "strong",
- "muscle",
- "bicep"
- ],
- "moji": "๐ช๐ป"
- },
- "muscle_tone2": {
- "unicode": "1F4AA-1F3FC",
- "unicode_alternates": [],
- "name": "flexed biceps tone 2",
- "shortname": ":muscle_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "arm",
- "flex",
- "hand",
- "strong",
- "muscle",
- "bicep"
- ],
- "moji": "๐ช๐ผ"
- },
- "muscle_tone3": {
- "unicode": "1F4AA-1F3FD",
- "unicode_alternates": [],
- "name": "flexed biceps tone 3",
- "shortname": ":muscle_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "arm",
- "flex",
- "hand",
- "strong",
- "muscle",
- "bicep"
- ],
- "moji": "๐ช๐ฝ"
- },
- "muscle_tone4": {
- "unicode": "1F4AA-1F3FE",
- "unicode_alternates": [],
- "name": "flexed biceps tone 4",
- "shortname": ":muscle_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "arm",
- "flex",
- "hand",
- "strong",
- "muscle",
- "bicep"
- ],
- "moji": "๐ช๐พ"
- },
- "muscle_tone5": {
- "unicode": "1F4AA-1F3FF",
- "unicode_alternates": [],
- "name": "flexed biceps tone 5",
- "shortname": ":muscle_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "arm",
- "flex",
- "hand",
- "strong",
- "muscle",
- "bicep"
- ],
- "moji": "๐ช๐ฟ"
- },
- "nail_care": {
- "unicode": "1F485",
- "unicode_alternates": [],
- "name": "nail polish",
- "shortname": ":nail_care:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "beauty",
- "manicure",
- "women",
- "body",
- "hands",
- "nailpolish",
- "diversity",
- "girls night"
- ],
- "moji": "๐
"
- },
- "nail_care_tone1": {
- "unicode": "1F485-1F3FB",
- "unicode_alternates": [],
- "name": "nail polish tone 1",
- "shortname": ":nail_care_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "beauty",
- "manicure"
- ],
- "moji": "๐
๐ป"
- },
- "nail_care_tone2": {
- "unicode": "1F485-1F3FC",
- "unicode_alternates": [],
- "name": "nail polish tone 2",
- "shortname": ":nail_care_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "beauty",
- "manicure"
- ],
- "moji": "๐
๐ผ"
- },
- "nail_care_tone3": {
- "unicode": "1F485-1F3FD",
- "unicode_alternates": [],
- "name": "nail polish tone 3",
- "shortname": ":nail_care_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "beauty",
- "manicure"
- ],
- "moji": "๐
๐ฝ"
- },
- "nail_care_tone4": {
- "unicode": "1F485-1F3FE",
- "unicode_alternates": [],
- "name": "nail polish tone 4",
- "shortname": ":nail_care_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "beauty",
- "manicure"
- ],
- "moji": "๐
๐พ"
- },
- "nail_care_tone5": {
- "unicode": "1F485-1F3FF",
- "unicode_alternates": [],
- "name": "nail polish tone 5",
- "shortname": ":nail_care_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "beauty",
- "manicure"
- ],
- "moji": "๐
๐ฟ"
- },
- "nauseated_face": {
- "unicode": "1F922",
- "unicode_alternates": [],
- "name": "nauseated face",
- "shortname": ":nauseated_face:",
- "category": "people",
- "aliases": [
- ":sick:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คข"
- },
- "necktie": {
- "unicode": "1F454",
- "unicode_alternates": [],
- "name": "necktie",
- "shortname": ":necktie:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "cloth",
- "fashion",
- "formal",
- "shirt",
- "suitup"
- ],
- "moji": "๐"
- },
- "nerd": {
- "unicode": "1F913",
- "unicode_alternates": [],
- "name": "nerd face",
- "shortname": ":nerd:",
- "category": "people",
- "aliases": [
- ":nerd_face:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "smiley",
- "glasses"
- ],
- "moji": "๐ค"
- },
- "neutral_face": {
- "unicode": "1F610",
- "unicode_alternates": [],
- "name": "neutral face",
- "shortname": ":neutral_face:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "indifference",
- "neutral",
- "objective",
- "impartial",
- "blank",
- "mad",
- "smiley",
- "shrug",
- "emotion"
- ],
- "moji": "๐"
- },
- "no_good": {
- "unicode": "1F645",
- "unicode_alternates": [],
- "name": "face with no good gesture",
- "shortname": ":no_good:",
- "category": "people",
- "aliases": [
- ":no_good_woman:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "no",
- "stop",
- "nope",
- "don't",
- "not",
- "people",
- "women",
- "diversity",
- "girls night"
- ],
- "moji": "๐
"
- },
- "no_good_tone1": {
- "unicode": "1F645-1F3FB",
- "unicode_alternates": [],
- "name": "face with no good gesture tone 1",
- "shortname": ":no_good_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "stop",
- "nope",
- "don't",
- "not",
- "forbidden",
- "hand",
- "person",
- "prohibited"
- ],
- "moji": "๐
๐ป"
- },
- "no_good_tone2": {
- "unicode": "1F645-1F3FC",
- "unicode_alternates": [],
- "name": "face with no good gesture tone 2",
- "shortname": ":no_good_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "stop",
- "nope",
- "don't",
- "not",
- "forbidden",
- "hand",
- "person",
- "prohibited"
- ],
- "moji": "๐
๐ผ"
- },
- "no_good_tone3": {
- "unicode": "1F645-1F3FD",
- "unicode_alternates": [],
- "name": "face with no good gesture tone 3",
- "shortname": ":no_good_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "stop",
- "nope",
- "don't",
- "not",
- "forbidden",
- "hand",
- "person",
- "prohibited"
- ],
- "moji": "๐
๐ฝ"
- },
- "no_good_tone4": {
- "unicode": "1F645-1F3FE",
- "unicode_alternates": [],
- "name": "face with no good gesture tone 4",
- "shortname": ":no_good_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "stop",
- "nope",
- "don't",
- "not",
- "forbidden",
- "hand",
- "person",
- "prohibited"
- ],
- "moji": "๐
๐พ"
- },
- "no_good_tone5": {
- "unicode": "1F645-1F3FF",
- "unicode_alternates": [],
- "name": "face with no good gesture tone 5",
- "shortname": ":no_good_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "stop",
- "nope",
- "don't",
- "not",
- "forbidden",
- "hand",
- "person",
- "prohibited"
- ],
- "moji": "๐
๐ฟ"
- },
- "no_mouth": {
- "unicode": "1F636",
- "unicode_alternates": [],
- "name": "face without mouth",
- "shortname": ":no_mouth:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- ":-X",
- ":X",
- ":-#",
- ":#",
- "=X",
- "=x",
- ":x",
- ":-x",
- "=#"
- ],
- "keywords": [
- "face",
- "hellokitty",
- "mouth",
- "silent",
- "vapid",
- "mad",
- "smiley",
- "neutral",
- "emotion"
- ],
- "moji": "๐ถ"
- },
- "nose": {
- "unicode": "1F443",
- "unicode_alternates": [],
- "name": "nose",
- "shortname": ":nose:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "smell",
- "sniff",
- "body",
- "diversity"
- ],
- "moji": "๐"
- },
- "nose_tone1": {
- "unicode": "1F443-1F3FB",
- "unicode_alternates": [],
- "name": "nose tone 1",
- "shortname": ":nose_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "smell",
- "sniff"
- ],
- "moji": "๐๐ป"
- },
- "nose_tone2": {
- "unicode": "1F443-1F3FC",
- "unicode_alternates": [],
- "name": "nose tone 2",
- "shortname": ":nose_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "smell",
- "sniff"
- ],
- "moji": "๐๐ผ"
- },
- "nose_tone3": {
- "unicode": "1F443-1F3FD",
- "unicode_alternates": [],
- "name": "nose tone 3",
- "shortname": ":nose_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "smell",
- "sniff"
- ],
- "moji": "๐๐ฝ"
- },
- "nose_tone4": {
- "unicode": "1F443-1F3FE",
- "unicode_alternates": [],
- "name": "nose tone 4",
- "shortname": ":nose_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "smell",
- "sniff"
- ],
- "moji": "๐๐พ"
- },
- "nose_tone5": {
- "unicode": "1F443-1F3FF",
- "unicode_alternates": [],
- "name": "nose tone 5",
- "shortname": ":nose_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "smell",
- "sniff"
- ],
- "moji": "๐๐ฟ"
- },
- "ok_hand": {
- "unicode": "1F44C",
- "unicode_alternates": [],
- "name": "ok hand sign",
- "shortname": ":ok_hand:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fingers",
- "limbs",
- "perfect",
- "okay",
- "ok",
- "smoke",
- "smoking",
- "marijuana",
- "joint",
- "pot",
- "420",
- "body",
- "hands",
- "hi",
- "diversity",
- "good",
- "beautiful"
- ],
- "moji": "๐"
- },
- "ok_hand_tone1": {
- "unicode": "1F44C-1F3FB",
- "unicode_alternates": [],
- "name": "ok hand sign tone 1",
- "shortname": ":ok_hand_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fingers",
- "limbs",
- "perfect",
- "okay",
- "smoke",
- "smoking",
- "marijuana",
- "joint",
- "pot",
- "420"
- ],
- "moji": "๐๐ป"
- },
- "ok_hand_tone2": {
- "unicode": "1F44C-1F3FC",
- "unicode_alternates": [],
- "name": "ok hand sign tone 2",
- "shortname": ":ok_hand_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fingers",
- "limbs",
- "perfect",
- "okay",
- "smoke",
- "smoking",
- "marijuana",
- "joint",
- "pot",
- "420"
- ],
- "moji": "๐๐ผ"
- },
- "ok_hand_tone3": {
- "unicode": "1F44C-1F3FD",
- "unicode_alternates": [],
- "name": "ok hand sign tone 3",
- "shortname": ":ok_hand_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fingers",
- "limbs",
- "perfect",
- "okay",
- "smoke",
- "smoking",
- "marijuana",
- "joint",
- "pot",
- "420"
- ],
- "moji": "๐๐ฝ"
- },
- "ok_hand_tone4": {
- "unicode": "1F44C-1F3FE",
- "unicode_alternates": [],
- "name": "ok hand sign tone 4",
- "shortname": ":ok_hand_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fingers",
- "limbs",
- "perfect",
- "okay",
- "smoke",
- "smoking",
- "marijuana",
- "joint",
- "pot",
- "420"
- ],
- "moji": "๐๐พ"
- },
- "ok_hand_tone5": {
- "unicode": "1F44C-1F3FF",
- "unicode_alternates": [],
- "name": "ok hand sign tone 5",
- "shortname": ":ok_hand_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fingers",
- "limbs",
- "perfect",
- "okay",
- "smoke",
- "smoking",
- "marijuana",
- "joint",
- "pot",
- "420"
- ],
- "moji": "๐๐ฟ"
- },
- "ok_woman": {
- "unicode": "1F646",
- "unicode_alternates": [],
- "name": "face with ok gesture",
- "shortname": ":ok_woman:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- "*\\0/*",
- "\\0/",
- "*\\O/*",
- "\\O/"
- ],
- "keywords": [
- "female",
- "girl",
- "human",
- "pink",
- "women",
- "yes",
- "ok",
- "okay",
- "accept",
- "people",
- "diversity"
- ],
- "moji": "๐"
- },
- "ok_woman_tone1": {
- "unicode": "1F646-1F3FB",
- "unicode_alternates": [],
- "name": "face with ok gesture tone1",
- "shortname": ":ok_woman_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "human",
- "pink",
- "women",
- "yes",
- "okay",
- "accept"
- ],
- "moji": "๐๐ป"
- },
- "ok_woman_tone2": {
- "unicode": "1F646-1F3FC",
- "unicode_alternates": [],
- "name": "face with ok gesture tone2",
- "shortname": ":ok_woman_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "human",
- "pink",
- "women",
- "yes",
- "okay",
- "accept"
- ],
- "moji": "๐๐ผ"
- },
- "ok_woman_tone3": {
- "unicode": "1F646-1F3FD",
- "unicode_alternates": [],
- "name": "face with ok gesture tone3",
- "shortname": ":ok_woman_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "human",
- "pink",
- "women",
- "yes",
- "okay",
- "accept"
- ],
- "moji": "๐๐ฝ"
- },
- "ok_woman_tone4": {
- "unicode": "1F646-1F3FE",
- "unicode_alternates": [],
- "name": "face with ok gesture tone4",
- "shortname": ":ok_woman_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "human",
- "pink",
- "women",
- "yes",
- "okay",
- "accept"
- ],
- "moji": "๐๐พ"
- },
- "ok_woman_tone5": {
- "unicode": "1F646-1F3FF",
- "unicode_alternates": [],
- "name": "face with ok gesture tone5",
- "shortname": ":ok_woman_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "human",
- "pink",
- "women",
- "yes",
- "okay",
- "accept"
- ],
- "moji": "๐๐ฟ"
- },
- "older_man": {
- "unicode": "1F474",
- "unicode_alternates": [],
- "name": "older man",
- "shortname": ":older_man:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "human",
- "male",
- "men",
- "people",
- "old people",
- "diversity"
- ],
- "moji": "๐ด"
- },
- "older_man_tone1": {
- "unicode": "1F474-1F3FB",
- "unicode_alternates": [],
- "name": "older man tone 1",
- "shortname": ":older_man_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "men",
- "grandpa",
- "grandfather"
- ],
- "moji": "๐ด๐ป"
- },
- "older_man_tone2": {
- "unicode": "1F474-1F3FC",
- "unicode_alternates": [],
- "name": "older man tone 2",
- "shortname": ":older_man_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "men",
- "grandpa",
- "grandfather"
- ],
- "moji": "๐ด๐ผ"
- },
- "older_man_tone3": {
- "unicode": "1F474-1F3FD",
- "unicode_alternates": [],
- "name": "older man tone 3",
- "shortname": ":older_man_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "men",
- "grandpa",
- "grandfather"
- ],
- "moji": "๐ด๐ฝ"
- },
- "older_man_tone4": {
- "unicode": "1F474-1F3FE",
- "unicode_alternates": [],
- "name": "older man tone 4",
- "shortname": ":older_man_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "men",
- "grandpa",
- "grandfather"
- ],
- "moji": "๐ด๐พ"
- },
- "older_man_tone5": {
- "unicode": "1F474-1F3FF",
- "unicode_alternates": [],
- "name": "older man tone 5",
- "shortname": ":older_man_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "men",
- "grandpa",
- "grandfather"
- ],
- "moji": "๐ด๐ฟ"
- },
- "older_woman": {
- "unicode": "1F475",
- "unicode_alternates": [],
- "name": "older woman",
- "shortname": ":older_woman:",
- "category": "people",
- "aliases": [
- ":grandma:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "women",
- "grandma",
- "grandmother",
- "people",
- "old people",
- "diversity"
- ],
- "moji": "๐ต"
- },
- "older_woman_tone1": {
- "unicode": "1F475-1F3FB",
- "unicode_alternates": [],
- "name": "older woman tone 1",
- "shortname": ":older_woman_tone1:",
- "category": "people",
- "aliases": [
- ":grandma_tone1:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "women",
- "lady",
- "grandma",
- "grandmother"
- ],
- "moji": "๐ต๐ป"
- },
- "older_woman_tone2": {
- "unicode": "1F475-1F3FC",
- "unicode_alternates": [],
- "name": "older woman tone 2",
- "shortname": ":older_woman_tone2:",
- "category": "people",
- "aliases": [
- ":grandma_tone2:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "women",
- "lady",
- "grandma",
- "grandmother"
- ],
- "moji": "๐ต๐ผ"
- },
- "older_woman_tone3": {
- "unicode": "1F475-1F3FD",
- "unicode_alternates": [],
- "name": "older woman tone 3",
- "shortname": ":older_woman_tone3:",
- "category": "people",
- "aliases": [
- ":grandma_tone3:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "women",
- "lady",
- "grandma",
- "grandmother"
- ],
- "moji": "๐ต๐ฝ"
- },
- "older_woman_tone4": {
- "unicode": "1F475-1F3FE",
- "unicode_alternates": [],
- "name": "older woman tone 4",
- "shortname": ":older_woman_tone4:",
- "category": "people",
- "aliases": [
- ":grandma_tone4:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "women",
- "lady",
- "grandma",
- "grandmother"
- ],
- "moji": "๐ต๐พ"
- },
- "older_woman_tone5": {
- "unicode": "1F475-1F3FF",
- "unicode_alternates": [],
- "name": "older woman tone 5",
- "shortname": ":older_woman_tone5:",
- "category": "people",
- "aliases": [
- ":grandma_tone5:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "women",
- "lady",
- "grandma",
- "grandmother"
- ],
- "moji": "๐ต๐ฟ"
- },
- "open_hands": {
- "unicode": "1F450",
- "unicode_alternates": [],
- "name": "open hands sign",
- "shortname": ":open_hands:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "butterfly",
- "fingers",
- "body",
- "hands",
- "diversity",
- "condolence"
- ],
- "moji": "๐"
- },
- "open_hands_tone1": {
- "unicode": "1F450-1F3FB",
- "unicode_alternates": [],
- "name": "open hands sign tone 1",
- "shortname": ":open_hands_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "butterfly",
- "fingers"
- ],
- "moji": "๐๐ป"
- },
- "open_hands_tone2": {
- "unicode": "1F450-1F3FC",
- "unicode_alternates": [],
- "name": "open hands sign tone 2",
- "shortname": ":open_hands_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "butterfly",
- "fingers"
- ],
- "moji": "๐๐ผ"
- },
- "open_hands_tone3": {
- "unicode": "1F450-1F3FD",
- "unicode_alternates": [],
- "name": "open hands sign tone 3",
- "shortname": ":open_hands_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "butterfly",
- "fingers"
- ],
- "moji": "๐๐ฝ"
- },
- "open_hands_tone4": {
- "unicode": "1F450-1F3FE",
- "unicode_alternates": [],
- "name": "open hands sign tone 4",
- "shortname": ":open_hands_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "butterfly",
- "fingers"
- ],
- "moji": "๐๐พ"
- },
- "open_hands_tone5": {
- "unicode": "1F450-1F3FF",
- "unicode_alternates": [],
- "name": "open hands sign tone 5",
- "shortname": ":open_hands_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "butterfly",
- "fingers"
- ],
- "moji": "๐๐ฟ"
- },
- "open_mouth": {
- "unicode": "1F62E",
- "unicode_alternates": [],
- "name": "face with open mouth",
- "shortname": ":open_mouth:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- ":-O",
- ":O",
- ":-o",
- ":o",
- "O_O",
- ">:O"
- ],
- "keywords": [
- "face",
- "impressed",
- "mouth",
- "open",
- "jaw",
- "gapping",
- "surprise",
- "wow",
- "smiley",
- "surprised",
- "emotion"
- ],
- "moji": "๐ฎ"
- },
- "package": {
- "unicode": "1F4E6",
- "unicode_alternates": [],
- "name": "package",
- "shortname": ":package:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "release"
- ],
- "moji": "๐ฆ"
- },
- "party": {
- "unicode": "1F389",
- "unicode_alternates": [],
- "name": "party popper as a 'tada' celebration",
- "shortname": ":tada:",
- "category": "people",
- "aliases": [
- ":party_popper:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "celebrate",
- "celebration",
- "hooray",
- "hurrah",
- "hurray"
- ],
- "moji": "๐"
- },
- "pensive": {
- "unicode": "1F614",
- "unicode_alternates": [],
- "name": "pensive face",
- "shortname": ":pensive:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "okay",
- "sad",
- "pensive",
- "thoughtful",
- "think",
- "reflective",
- "wistful",
- "meditate",
- "serious",
- "smiley",
- "emotion",
- "rip"
- ],
- "moji": "๐"
- },
- "persevere": {
- "unicode": "1F623",
- "unicode_alternates": [],
- "name": "persevering face",
- "shortname": ":persevere:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- ">.<"
- ],
- "keywords": [
- "endure",
- "persevere",
- "face",
- "no",
- "sick",
- "upset",
- "sad",
- "smiley",
- "angry",
- "emotion"
- ],
- "moji": "๐ฃ"
- },
- "person_frowning": {
- "unicode": "1F64D",
- "unicode_alternates": [],
- "name": "person frowning",
- "shortname": ":person_frowning:",
- "category": "people",
- "aliases": [
- ":frowning_woman:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "dejected",
- "rejected",
- "sad",
- "frown",
- "people",
- "women",
- "diversity"
- ],
- "moji": "๐"
- },
- "person_frowning_tone1": {
- "unicode": "1F64D-1F3FB",
- "unicode_alternates": [],
- "name": "person frowning tone 1",
- "shortname": ":person_frowning_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "dejected",
- "rejected",
- "sad",
- "frown"
- ],
- "moji": "๐๐ป"
- },
- "person_frowning_tone2": {
- "unicode": "1F64D-1F3FC",
- "unicode_alternates": [],
- "name": "person frowning tone 2",
- "shortname": ":person_frowning_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "dejected",
- "rejected",
- "sad",
- "frown"
- ],
- "moji": "๐๐ผ"
- },
- "person_frowning_tone3": {
- "unicode": "1F64D-1F3FD",
- "unicode_alternates": [],
- "name": "person frowning tone 3",
- "shortname": ":person_frowning_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "dejected",
- "rejected",
- "sad",
- "frown"
- ],
- "moji": "๐๐ฝ"
- },
- "person_frowning_tone4": {
- "unicode": "1F64D-1F3FE",
- "unicode_alternates": [],
- "name": "person frowning tone 4",
- "shortname": ":person_frowning_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "dejected",
- "rejected",
- "sad",
- "frown"
- ],
- "moji": "๐๐พ"
- },
- "person_frowning_tone5": {
- "unicode": "1F64D-1F3FF",
- "unicode_alternates": [],
- "name": "person frowning tone 5",
- "shortname": ":person_frowning_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "dejected",
- "rejected",
- "sad",
- "frown"
- ],
- "moji": "๐๐ฟ"
- },
- "person_with_blond_hair": {
- "unicode": "1F471",
- "unicode_alternates": [],
- "name": "person with blond hair",
- "shortname": ":person_with_blond_hair:",
- "category": "people",
- "aliases": [
- ":blonde_man:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "man",
- "blonde",
- "young",
- "western",
- "westerner",
- "occidental",
- "people",
- "men",
- "diversity"
- ],
- "moji": "๐ฑ"
- },
- "person_with_blond_hair_tone1": {
- "unicode": "1F471-1F3FB",
- "unicode_alternates": [],
- "name": "person with blond hair tone 1",
- "shortname": ":person_with_blond_hair_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "man",
- "blonde",
- "young",
- "western",
- "westerner",
- "occidental"
- ],
- "moji": "๐ฑ๐ป"
- },
- "person_with_blond_hair_tone2": {
- "unicode": "1F471-1F3FC",
- "unicode_alternates": [],
- "name": "person with blond hair tone 2",
- "shortname": ":person_with_blond_hair_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "man",
- "blonde",
- "young",
- "western",
- "westerner",
- "occidental"
- ],
- "moji": "๐ฑ๐ผ"
- },
- "person_with_blond_hair_tone3": {
- "unicode": "1F471-1F3FD",
- "unicode_alternates": [],
- "name": "person with blond hair tone 3",
- "shortname": ":person_with_blond_hair_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "man",
- "blonde",
- "young",
- "western",
- "westerner",
- "occidental"
- ],
- "moji": "๐ฑ๐ฝ"
- },
- "person_with_blond_hair_tone4": {
- "unicode": "1F471-1F3FE",
- "unicode_alternates": [],
- "name": "person with blond hair tone 4",
- "shortname": ":person_with_blond_hair_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "man",
- "blonde",
- "young",
- "western",
- "westerner",
- "occidental"
- ],
- "moji": "๐ฑ๐พ"
- },
- "person_with_blond_hair_tone5": {
- "unicode": "1F471-1F3FF",
- "unicode_alternates": [],
- "name": "person with blond hair tone 5",
- "shortname": ":person_with_blond_hair_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "man",
- "blonde",
- "young",
- "western",
- "westerner",
- "occidental"
- ],
- "moji": "๐ฑ๐ฟ"
- },
- "person_with_pouting_face": {
- "unicode": "1F64E",
- "unicode_alternates": [],
- "name": "person with pouting face",
- "shortname": ":person_with_pouting_face:",
- "category": "people",
- "aliases": [
- ":pouting_woman:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "pout",
- "sexy",
- "cute",
- "annoyed",
- "people",
- "women",
- "diversity"
- ],
- "moji": "๐"
- },
- "person_with_pouting_face_tone1": {
- "unicode": "1F64E-1F3FB",
- "unicode_alternates": [],
- "name": "person with pouting face tone1",
- "shortname": ":person_with_pouting_face_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "pout",
- "sexy",
- "cute",
- "annoyed"
- ],
- "moji": "๐๐ป"
- },
- "person_with_pouting_face_tone2": {
- "unicode": "1F64E-1F3FC",
- "unicode_alternates": [],
- "name": "person with pouting face tone2",
- "shortname": ":person_with_pouting_face_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "pout",
- "sexy",
- "cute",
- "annoyed"
- ],
- "moji": "๐๐ผ"
- },
- "person_with_pouting_face_tone3": {
- "unicode": "1F64E-1F3FD",
- "unicode_alternates": [],
- "name": "person with pouting face tone3",
- "shortname": ":person_with_pouting_face_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "pout",
- "sexy",
- "cute",
- "annoyed"
- ],
- "moji": "๐๐ฝ"
- },
- "person_with_pouting_face_tone4": {
- "unicode": "1F64E-1F3FE",
- "unicode_alternates": [],
- "name": "person with pouting face tone4",
- "shortname": ":person_with_pouting_face_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "pout",
- "sexy",
- "cute",
- "annoyed"
- ],
- "moji": "๐๐พ"
- },
- "person_with_pouting_face_tone5": {
- "unicode": "1F64E-1F3FF",
- "unicode_alternates": [],
- "name": "person with pouting face tone5",
- "shortname": ":person_with_pouting_face_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "pout",
- "sexy",
- "cute",
- "annoyed"
- ],
- "moji": "๐๐ฟ"
- },
- "point_down": {
- "unicode": "1F447",
- "unicode_alternates": [],
- "name": "white down pointing backhand index",
- "shortname": ":point_down:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "fingers",
- "hand",
- "body",
- "hands",
- "diversity"
- ],
- "moji": "๐"
- },
- "point_down_tone1": {
- "unicode": "1F447-1F3FB",
- "unicode_alternates": [],
- "name": "white down pointing backhand index tone 1",
- "shortname": ":point_down_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand"
- ],
- "moji": "๐๐ป"
- },
- "point_down_tone2": {
- "unicode": "1F447-1F3FC",
- "unicode_alternates": [],
- "name": "white down pointing backhand index tone 2",
- "shortname": ":point_down_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand"
- ],
- "moji": "๐๐ผ"
- },
- "point_down_tone3": {
- "unicode": "1F447-1F3FD",
- "unicode_alternates": [],
- "name": "white down pointing backhand index tone 3",
- "shortname": ":point_down_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand"
- ],
- "moji": "๐๐ฝ"
- },
- "point_down_tone4": {
- "unicode": "1F447-1F3FE",
- "unicode_alternates": [],
- "name": "white down pointing backhand index tone 4",
- "shortname": ":point_down_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand"
- ],
- "moji": "๐๐พ"
- },
- "point_down_tone5": {
- "unicode": "1F447-1F3FF",
- "unicode_alternates": [],
- "name": "white down pointing backhand index tone 5",
- "shortname": ":point_down_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand"
- ],
- "moji": "๐๐ฟ"
- },
- "point_left": {
- "unicode": "1F448",
- "unicode_alternates": [],
- "name": "white left pointing backhand index",
- "shortname": ":point_left:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "fingers",
- "hand",
- "body",
- "hands",
- "hi",
- "diversity"
- ],
- "moji": "๐"
- },
- "point_left_tone1": {
- "unicode": "1F448-1F3FB",
- "unicode_alternates": [],
- "name": "white left pointing backhand index tone 1",
- "shortname": ":point_left_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand"
- ],
- "moji": "๐๐ป"
- },
- "point_left_tone2": {
- "unicode": "1F448-1F3FC",
- "unicode_alternates": [],
- "name": "white left pointing backhand index tone 2",
- "shortname": ":point_left_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand"
- ],
- "moji": "๐๐ผ"
- },
- "point_left_tone3": {
- "unicode": "1F448-1F3FD",
- "unicode_alternates": [],
- "name": "white left pointing backhand index tone 3",
- "shortname": ":point_left_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand"
- ],
- "moji": "๐๐ฝ"
- },
- "point_left_tone4": {
- "unicode": "1F448-1F3FE",
- "unicode_alternates": [],
- "name": "white left pointing backhand index tone 4",
- "shortname": ":point_left_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand"
- ],
- "moji": "๐๐พ"
- },
- "point_left_tone5": {
- "unicode": "1F448-1F3FF",
- "unicode_alternates": [],
- "name": "white left pointing backhand index tone 5",
- "shortname": ":point_left_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand"
- ],
- "moji": "๐๐ฟ"
- },
- "point_right": {
- "unicode": "1F449",
- "unicode_alternates": [],
- "name": "white right pointing backhand index",
- "shortname": ":point_right:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "fingers",
- "hand",
- "body",
- "hands",
- "hi",
- "diversity"
- ],
- "moji": "๐"
- },
- "point_right_tone1": {
- "unicode": "1F449-1F3FB",
- "unicode_alternates": [],
- "name": "white right pointing backhand index tone 1",
- "shortname": ":point_right_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand"
- ],
- "moji": "๐๐ป"
- },
- "point_right_tone2": {
- "unicode": "1F449-1F3FC",
- "unicode_alternates": [],
- "name": "white right pointing backhand index tone 2",
- "shortname": ":point_right_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand"
- ],
- "moji": "๐๐ผ"
- },
- "point_right_tone3": {
- "unicode": "1F449-1F3FD",
- "unicode_alternates": [],
- "name": "white right pointing backhand index tone 3",
- "shortname": ":point_right_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand"
- ],
- "moji": "๐๐ฝ"
- },
- "point_right_tone4": {
- "unicode": "1F449-1F3FE",
- "unicode_alternates": [],
- "name": "white right pointing backhand index tone 4",
- "shortname": ":point_right_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand"
- ],
- "moji": "๐๐พ"
- },
- "point_right_tone5": {
- "unicode": "1F449-1F3FF",
- "unicode_alternates": [],
- "name": "white right pointing backhand index tone 5",
- "shortname": ":point_right_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand"
- ],
- "moji": "๐๐ฟ"
- },
- "point_up": {
- "unicode": "261D",
- "unicode_alternates": [
- "261D-FE0F"
- ],
- "name": "white up pointing index",
- "shortname": ":point_up:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "fingers",
- "hand",
- "body",
- "hands",
- "emojione",
- "diversity"
- ],
- "moji": "โ"
- },
- "point_up_2": {
- "unicode": "1F446",
- "unicode_alternates": [],
- "name": "white up pointing backhand index",
- "shortname": ":point_up_2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "fingers",
- "hand",
- "body",
- "hands",
- "diversity"
- ],
- "moji": "๐"
- },
- "point_up_2_tone1": {
- "unicode": "1F446-1F3FB",
- "unicode_alternates": [],
- "name": "white up pointing backhand index tone 1",
- "shortname": ":point_up_2_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand",
- "one"
- ],
- "moji": "๐๐ป"
- },
- "point_up_2_tone2": {
- "unicode": "1F446-1F3FC",
- "unicode_alternates": [],
- "name": "white up pointing backhand index tone 2",
- "shortname": ":point_up_2_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand",
- "one"
- ],
- "moji": "๐๐ผ"
- },
- "point_up_2_tone3": {
- "unicode": "1F446-1F3FD",
- "unicode_alternates": [],
- "name": "white up pointing backhand index tone 3",
- "shortname": ":point_up_2_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand",
- "one"
- ],
- "moji": "๐๐ฝ"
- },
- "point_up_2_tone4": {
- "unicode": "1F446-1F3FE",
- "unicode_alternates": [],
- "name": "white up pointing backhand index tone 4",
- "shortname": ":point_up_2_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand",
- "one"
- ],
- "moji": "๐๐พ"
- },
- "point_up_2_tone5": {
- "unicode": "1F446-1F3FF",
- "unicode_alternates": [],
- "name": "white up pointing backhand index tone 5",
- "shortname": ":point_up_2_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand",
- "one"
- ],
- "moji": "๐๐ฟ"
- },
- "point_up_tone1": {
- "unicode": "261D-1F3FB",
- "unicode_alternates": [],
- "name": "white up pointing index tone 1",
- "shortname": ":point_up_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand",
- "one"
- ],
- "moji": "โ๐ป"
- },
- "point_up_tone2": {
- "unicode": "261D-1F3FC",
- "unicode_alternates": [],
- "name": "white up pointing index tone 2",
- "shortname": ":point_up_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand",
- "one"
- ],
- "moji": "โ๐ผ"
- },
- "point_up_tone3": {
- "unicode": "261D-1F3FD",
- "unicode_alternates": [],
- "name": "white up pointing index tone 3",
- "shortname": ":point_up_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand",
- "one"
- ],
- "moji": "โ๐ฝ"
- },
- "point_up_tone4": {
- "unicode": "261D-1F3FE",
- "unicode_alternates": [],
- "name": "white up pointing index tone 4",
- "shortname": ":point_up_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand",
- "one"
- ],
- "moji": "โ๐พ"
- },
- "point_up_tone5": {
- "unicode": "261D-1F3FF",
- "unicode_alternates": [],
- "name": "white up pointing index tone 5",
- "shortname": ":point_up_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand",
- "one"
- ],
- "moji": "โ๐ฟ"
- },
- "poop": {
- "unicode": "1F4A9",
- "unicode_alternates": [],
- "name": "pile of poo",
- "shortname": ":poop:",
- "category": "people",
- "aliases": [
- ":shit:",
- ":hankey:",
- ":poo:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "poop",
- "shit",
- "shitface",
- "turd",
- "poo",
- "bathroom",
- "sol",
- "diarrhea"
- ],
- "moji": "๐ฉ"
- },
- "pouch": {
- "unicode": "1F45D",
- "unicode_alternates": [],
- "name": "pouch",
- "shortname": ":pouch:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "accessories",
- "bag",
- "pouch",
- "cosmetic",
- "packing",
- "grandma",
- "makeup",
- "women",
- "fashion"
- ],
- "moji": "๐"
- },
- "pouting_cat": {
- "unicode": "1F63E",
- "unicode_alternates": [],
- "name": "pouting cat face",
- "shortname": ":pouting_cat:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "animal",
- "cats",
- "pout",
- "annoyed",
- "miffed",
- "glower",
- "frown",
- "cat"
- ],
- "moji": "๐พ"
- },
- "pray": {
- "unicode": "1F64F",
- "unicode_alternates": [],
- "name": "person with folded hands",
- "shortname": ":pray:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "highfive",
- "hope",
- "namaste",
- "please",
- "wish",
- "pray",
- "high five",
- "hands",
- "sorrow",
- "regret",
- "sorry",
- "body",
- "hi",
- "luck",
- "thank you",
- "diversity",
- "scientology"
- ],
- "moji": "๐"
- },
- "pray_tone1": {
- "unicode": "1F64F-1F3FB",
- "unicode_alternates": [],
- "name": "person with folded hands tone 1",
- "shortname": ":pray_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "highfive",
- "hope",
- "namaste",
- "please",
- "wish",
- "pray",
- "high five",
- "sorrow",
- "regret",
- "sorry"
- ],
- "moji": "๐๐ป"
- },
- "pray_tone2": {
- "unicode": "1F64F-1F3FC",
- "unicode_alternates": [],
- "name": "person with folded hands tone 2",
- "shortname": ":pray_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "highfive",
- "hope",
- "namaste",
- "please",
- "wish",
- "pray",
- "high five",
- "sorrow",
- "regret",
- "sorry"
- ],
- "moji": "๐๐ผ"
- },
- "pray_tone3": {
- "unicode": "1F64F-1F3FD",
- "unicode_alternates": [],
- "name": "person with folded hands tone 3",
- "shortname": ":pray_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "highfive",
- "hope",
- "namaste",
- "please",
- "wish",
- "pray",
- "high five",
- "sorrow",
- "regret",
- "sorry"
- ],
- "moji": "๐๐ฝ"
- },
- "pray_tone4": {
- "unicode": "1F64F-1F3FE",
- "unicode_alternates": [],
- "name": "person with folded hands tone 4",
- "shortname": ":pray_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "highfive",
- "hope",
- "namaste",
- "please",
- "wish",
- "pray",
- "high five",
- "sorrow",
- "regret",
- "sorry"
- ],
- "moji": "๐๐พ"
- },
- "pray_tone5": {
- "unicode": "1F64F-1F3FF",
- "unicode_alternates": [],
- "name": "person with folded hands tone 5",
- "shortname": ":pray_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "highfive",
- "hope",
- "namaste",
- "please",
- "wish",
- "pray",
- "high five",
- "sorrow",
- "regret",
- "sorry"
- ],
- "moji": "๐๐ฟ"
- },
- "pregnant_woman": {
- "unicode": "1F930",
- "unicode_alternates": [],
- "name": "pregnant woman",
- "shortname": ":pregnant_woman:",
- "category": "people",
- "aliases": [
- ":expecting_woman:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คฐ"
- },
- "pregnant_woman_tone1": {
- "unicode": "1F930-1F3FB",
- "unicode_alternates": [],
- "name": "pregnant woman tone 1",
- "shortname": ":pregnant_woman_tone1:",
- "category": "people",
- "aliases": [
- ":expecting_woman_tone1:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คฐ๐ป"
- },
- "pregnant_woman_tone2": {
- "unicode": "1F930-1F3FC",
- "unicode_alternates": [],
- "name": "pregnant woman tone 2",
- "shortname": ":pregnant_woman_tone2:",
- "category": "people",
- "aliases": [
- ":expecting_woman_tone2:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คฐ๐ผ"
- },
- "pregnant_woman_tone3": {
- "unicode": "1F930-1F3FD",
- "unicode_alternates": [],
- "name": "pregnant woman tone 3",
- "shortname": ":pregnant_woman_tone3:",
- "category": "people",
- "aliases": [
- ":expecting_woman_tone3:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คฐ๐ฝ"
- },
- "pregnant_woman_tone4": {
- "unicode": "1F930-1F3FE",
- "unicode_alternates": [],
- "name": "pregnant woman tone 4",
- "shortname": ":pregnant_woman_tone4:",
- "category": "people",
- "aliases": [
- ":expecting_woman_tone4:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คฐ๐พ"
- },
- "pregnant_woman_tone5": {
- "unicode": "1F930-1F3FF",
- "unicode_alternates": [],
- "name": "pregnant woman tone 5",
- "shortname": ":pregnant_woman_tone5:",
- "category": "people",
- "aliases": [
- ":expecting_woman_tone5:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คฐ๐ฟ"
- },
- "prince": {
- "unicode": "1F934",
- "unicode_alternates": [],
- "name": "prince",
- "shortname": ":prince:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คด"
- },
- "prince_tone1": {
- "unicode": "1F934-1F3FB",
- "unicode_alternates": [],
- "name": "prince tone 1",
- "shortname": ":prince_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คด๐ป"
- },
- "prince_tone2": {
- "unicode": "1F934-1F3FC",
- "unicode_alternates": [],
- "name": "prince tone 2",
- "shortname": ":prince_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คด๐ผ"
- },
- "prince_tone3": {
- "unicode": "1F934-1F3FD",
- "unicode_alternates": [],
- "name": "prince tone 3",
- "shortname": ":prince_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คด๐ฝ"
- },
- "prince_tone4": {
- "unicode": "1F934-1F3FE",
- "unicode_alternates": [],
- "name": "prince tone 4",
- "shortname": ":prince_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คด๐พ"
- },
- "prince_tone5": {
- "unicode": "1F934-1F3FF",
- "unicode_alternates": [],
- "name": "prince tone 5",
- "shortname": ":prince_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คด๐ฟ"
- },
- "princess": {
- "unicode": "1F478",
- "unicode_alternates": [],
- "name": "princess",
- "shortname": ":princess:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "blond",
- "crown",
- "female",
- "girl",
- "woman",
- "princess",
- "royal",
- "royalty",
- "king",
- "queen",
- "daughter",
- "disney",
- "high-maintenance",
- "people",
- "women",
- "diversity",
- "beautiful",
- "girls night"
- ],
- "moji": "๐ธ"
- },
- "princess_tone1": {
- "unicode": "1F478-1F3FB",
- "unicode_alternates": [],
- "name": "princess tone 1",
- "shortname": ":princess_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "blond",
- "crown",
- "female",
- "girl",
- "woman",
- "royal",
- "royalty",
- "king",
- "queen",
- "daughter",
- "disney",
- "high-maintenance"
- ],
- "moji": "๐ธ๐ป"
- },
- "princess_tone2": {
- "unicode": "1F478-1F3FC",
- "unicode_alternates": [],
- "name": "princess tone 2",
- "shortname": ":princess_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "blond",
- "crown",
- "female",
- "girl",
- "woman",
- "royal",
- "royalty",
- "king",
- "queen",
- "daughter",
- "disney",
- "high-maintenance"
- ],
- "moji": "๐ธ๐ผ"
- },
- "princess_tone3": {
- "unicode": "1F478-1F3FD",
- "unicode_alternates": [],
- "name": "princess tone 3",
- "shortname": ":princess_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "blond",
- "crown",
- "female",
- "girl",
- "woman",
- "royal",
- "royalty",
- "king",
- "queen",
- "daughter",
- "disney",
- "high-maintenance"
- ],
- "moji": "๐ธ๐ฝ"
- },
- "princess_tone4": {
- "unicode": "1F478-1F3FE",
- "unicode_alternates": [],
- "name": "princess tone 4",
- "shortname": ":princess_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "blond",
- "crown",
- "female",
- "girl",
- "woman",
- "royal",
- "royalty",
- "king",
- "queen",
- "daughter",
- "disney",
- "high-maintenance"
- ],
- "moji": "๐ธ๐พ"
- },
- "princess_tone5": {
- "unicode": "1F478-1F3FF",
- "unicode_alternates": [],
- "name": "princess tone 5",
- "shortname": ":princess_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "blond",
- "crown",
- "female",
- "girl",
- "woman",
- "royal",
- "royalty",
- "king",
- "queen",
- "daughter",
- "disney",
- "high-maintenance"
- ],
- "moji": "๐ธ๐ฟ"
- },
- "punch": {
- "unicode": "1F44A",
- "unicode_alternates": [],
- "name": "fisted hand sign",
- "shortname": ":punch:",
- "category": "people",
- "aliases": [
- ":fist_oncoming:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "fist",
- "hand",
- "body",
- "hands",
- "hi",
- "fist bump",
- "diversity",
- "boys night"
- ],
- "moji": "๐"
- },
- "punch_tone1": {
- "unicode": "1F44A-1F3FB",
- "unicode_alternates": [],
- "name": "fisted hand sign tone 1",
- "shortname": ":punch_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fist",
- "punch"
- ],
- "moji": "๐๐ป"
- },
- "punch_tone2": {
- "unicode": "1F44A-1F3FC",
- "unicode_alternates": [],
- "name": "fisted hand sign tone 2",
- "shortname": ":punch_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fist",
- "punch"
- ],
- "moji": "๐๐ผ"
- },
- "punch_tone3": {
- "unicode": "1F44A-1F3FD",
- "unicode_alternates": [],
- "name": "fisted hand sign tone 3",
- "shortname": ":punch_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fist",
- "punch"
- ],
- "moji": "๐๐ฝ"
- },
- "punch_tone4": {
- "unicode": "1F44A-1F3FE",
- "unicode_alternates": [],
- "name": "fisted hand sign tone 4",
- "shortname": ":punch_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fist",
- "punch"
- ],
- "moji": "๐๐พ"
- },
- "punch_tone5": {
- "unicode": "1F44A-1F3FF",
- "unicode_alternates": [],
- "name": "fisted hand sign tone 5",
- "shortname": ":punch_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fist",
- "punch"
- ],
- "moji": "๐๐ฟ"
- },
- "purse": {
- "unicode": "1F45B",
- "unicode_alternates": [],
- "name": "purse",
- "shortname": ":purse:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "accessories",
- "fashion",
- "money",
- "purse",
- "clutch",
- "bag",
- "handbag",
- "coin bag",
- "accessory",
- "ladies",
- "shopping",
- "women"
- ],
- "moji": "๐"
- },
- "rage": {
- "unicode": "1F621",
- "unicode_alternates": [],
- "name": "pouting face",
- "shortname": ":rage:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "angry",
- "despise",
- "hate",
- "mad",
- "pout",
- "anger",
- "rage",
- "irate",
- "smiley",
- "emotion"
- ],
- "moji": "๐ก"
- },
- "raised_back_of_hand": {
- "unicode": "1F91A",
- "unicode_alternates": [],
- "name": "raised back of hand",
- "shortname": ":raised_back_of_hand:",
- "category": "people",
- "aliases": [
- ":back_of_hand:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค"
- },
- "raised_back_of_hand_tone1": {
- "unicode": "1F91A-1F3FB",
- "unicode_alternates": [],
- "name": "raised back of hand tone 1",
- "shortname": ":raised_back_of_hand_tone1:",
- "category": "people",
- "aliases": [
- ":back_of_hand_tone1:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐ป"
- },
- "raised_back_of_hand_tone2": {
- "unicode": "1F91A-1F3FC",
- "unicode_alternates": [],
- "name": "raised back of hand tone 2",
- "shortname": ":raised_back_of_hand_tone2:",
- "category": "people",
- "aliases": [
- ":back_of_hand_tone2:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐ผ"
- },
- "raised_back_of_hand_tone3": {
- "unicode": "1F91A-1F3FD",
- "unicode_alternates": [],
- "name": "raised back of hand tone 3",
- "shortname": ":raised_back_of_hand_tone3:",
- "category": "people",
- "aliases": [
- ":back_of_hand_tone3:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐ฝ"
- },
- "raised_back_of_hand_tone4": {
- "unicode": "1F91A-1F3FE",
- "unicode_alternates": [],
- "name": "raised back of hand tone 4",
- "shortname": ":raised_back_of_hand_tone4:",
- "category": "people",
- "aliases": [
- ":back_of_hand_tone4:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐พ"
- },
- "raised_back_of_hand_tone5": {
- "unicode": "1F91A-1F3FF",
- "unicode_alternates": [],
- "name": "raised back of hand tone 5",
- "shortname": ":raised_back_of_hand_tone5:",
- "category": "people",
- "aliases": [
- ":back_of_hand_tone5:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐ฟ"
- },
- "raised_hand": {
- "unicode": "270B",
- "unicode_alternates": [],
- "name": "raised hand",
- "shortname": ":raised_hand:",
- "category": "people",
- "aliases": [
- ":hand:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "body",
- "hands",
- "hi",
- "diversity",
- "girls night"
- ],
- "moji": "โ"
- },
- "raised_hand_tone1": {
- "unicode": "270B-1F3FB",
- "unicode_alternates": [],
- "name": "raised hand tone 1",
- "shortname": ":raised_hand_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman"
- ],
- "moji": "โ๐ป"
- },
- "raised_hand_tone2": {
- "unicode": "270B-1F3FC",
- "unicode_alternates": [],
- "name": "raised hand tone 2",
- "shortname": ":raised_hand_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman"
- ],
- "moji": "โ๐ผ"
- },
- "raised_hand_tone3": {
- "unicode": "270B-1F3FD",
- "unicode_alternates": [],
- "name": "raised hand tone 3",
- "shortname": ":raised_hand_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman"
- ],
- "moji": "โ๐ฝ"
- },
- "raised_hand_tone4": {
- "unicode": "270B-1F3FE",
- "unicode_alternates": [],
- "name": "raised hand tone 4",
- "shortname": ":raised_hand_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman"
- ],
- "moji": "โ๐พ"
- },
- "raised_hand_tone5": {
- "unicode": "270B-1F3FF",
- "unicode_alternates": [],
- "name": "raised hand tone 5",
- "shortname": ":raised_hand_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman"
- ],
- "moji": "โ๐ฟ"
- },
- "raised_hands": {
- "unicode": "1F64C",
- "unicode_alternates": [],
- "name": "person raising both hands in celebration",
- "shortname": ":raised_hands:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "gesture",
- "hooray",
- "winning",
- "woot",
- "yay",
- "banzai",
- "body",
- "hands",
- "diversity",
- "perfect",
- "good",
- "parties"
- ],
- "moji": "๐"
- },
- "raised_hands_tone1": {
- "unicode": "1F64C-1F3FB",
- "unicode_alternates": [],
- "name": "person raising both hands in celebration tone 1",
- "shortname": ":raised_hands_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "gesture",
- "hooray",
- "winning",
- "woot",
- "yay",
- "banzai",
- "raised"
- ],
- "moji": "๐๐ป"
- },
- "raised_hands_tone2": {
- "unicode": "1F64C-1F3FC",
- "unicode_alternates": [],
- "name": "person raising both hands in celebration tone 2",
- "shortname": ":raised_hands_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "gesture",
- "hooray",
- "winning",
- "woot",
- "yay",
- "banzai",
- "raised"
- ],
- "moji": "๐๐ผ"
- },
- "raised_hands_tone3": {
- "unicode": "1F64C-1F3FD",
- "unicode_alternates": [],
- "name": "person raising both hands in celebration tone 3",
- "shortname": ":raised_hands_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "gesture",
- "hooray",
- "winning",
- "woot",
- "yay",
- "banzai",
- "raised"
- ],
- "moji": "๐๐ฝ"
- },
- "raised_hands_tone4": {
- "unicode": "1F64C-1F3FE",
- "unicode_alternates": [],
- "name": "person raising both hands in celebration tone 4",
- "shortname": ":raised_hands_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "gesture",
- "hooray",
- "winning",
- "woot",
- "yay",
- "banzai",
- "raised"
- ],
- "moji": "๐๐พ"
- },
- "raised_hands_tone5": {
- "unicode": "1F64C-1F3FF",
- "unicode_alternates": [],
- "name": "person raising both hands in celebration tone 5",
- "shortname": ":raised_hands_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "gesture",
- "hooray",
- "winning",
- "woot",
- "yay",
- "banzai",
- "raised"
- ],
- "moji": "๐๐ฟ"
- },
- "raising_hand": {
- "unicode": "1F64B",
- "unicode_alternates": [],
- "name": "happy person raising one hand",
- "shortname": ":raising_hand:",
- "category": "people",
- "aliases": [
- ":raising_hand_woman:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "hand",
- "raise",
- "notice",
- "attention",
- "answer",
- "people",
- "women",
- "diversity"
- ],
- "moji": "๐"
- },
- "raising_hand_tone1": {
- "unicode": "1F64B-1F3FB",
- "unicode_alternates": [],
- "name": "happy person raising one hand tone1",
- "shortname": ":raising_hand_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "raise",
- "notice",
- "attention",
- "answer"
- ],
- "moji": "๐๐ป"
- },
- "raising_hand_tone2": {
- "unicode": "1F64B-1F3FC",
- "unicode_alternates": [],
- "name": "happy person raising one hand tone2",
- "shortname": ":raising_hand_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "raise",
- "notice",
- "attention",
- "answer"
- ],
- "moji": "๐๐ผ"
- },
- "raising_hand_tone3": {
- "unicode": "1F64B-1F3FD",
- "unicode_alternates": [],
- "name": "happy person raising one hand tone3",
- "shortname": ":raising_hand_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "raise",
- "notice",
- "attention",
- "answer"
- ],
- "moji": "๐๐ฝ"
- },
- "raising_hand_tone4": {
- "unicode": "1F64B-1F3FE",
- "unicode_alternates": [],
- "name": "happy person raising one hand tone4",
- "shortname": ":raising_hand_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "raise",
- "notice",
- "attention",
- "answer"
- ],
- "moji": "๐๐พ"
- },
- "raising_hand_tone5": {
- "unicode": "1F64B-1F3FF",
- "unicode_alternates": [],
- "name": "happy person raising one hand tone5",
- "shortname": ":raising_hand_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "woman",
- "raise",
- "notice",
- "attention",
- "answer"
- ],
- "moji": "๐๐ฟ"
- },
- "relaxed": {
- "unicode": "263A",
- "unicode_alternates": [
- "263A-FE0F"
- ],
- "name": "white smiling face",
- "shortname": ":relaxed:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "blush",
- "face",
- "happiness",
- "massage",
- "smile",
- "happy",
- "smiley"
- ],
- "moji": "โบ"
- },
- "relieved": {
- "unicode": "1F60C",
- "unicode_alternates": [],
- "name": "relieved face",
- "shortname": ":relieved:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "happiness",
- "massage",
- "phew",
- "relaxed",
- "relieved",
- "satisfied",
- "relief",
- "smiley",
- "emotion"
- ],
- "moji": "๐"
- },
- "right_facing_fist": {
- "unicode": "1F91C",
- "unicode_alternates": [],
- "name": "right-facing fist",
- "shortname": ":right_facing_fist:",
- "category": "people",
- "aliases": [
- ":right_fist:",
- ":fist_right:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค"
- },
- "right_facing_fist_tone1": {
- "unicode": "1F91C-1F3FB",
- "unicode_alternates": [],
- "name": "right facing fist tone 1",
- "shortname": ":right_facing_fist_tone1:",
- "category": "people",
- "aliases": [
- ":right_fist_tone1:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐ป"
- },
- "right_facing_fist_tone2": {
- "unicode": "1F91C-1F3FC",
- "unicode_alternates": [],
- "name": "right facing fist tone 2",
- "shortname": ":right_facing_fist_tone2:",
- "category": "people",
- "aliases": [
- ":right_fist_tone2:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐ผ"
- },
- "right_facing_fist_tone3": {
- "unicode": "1F91C-1F3FD",
- "unicode_alternates": [],
- "name": "right facing fist tone 3",
- "shortname": ":right_facing_fist_tone3:",
- "category": "people",
- "aliases": [
- ":right_fist_tone3:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐ฝ"
- },
- "right_facing_fist_tone4": {
- "unicode": "1F91C-1F3FE",
- "unicode_alternates": [],
- "name": "right facing fist tone 4",
- "shortname": ":right_facing_fist_tone4:",
- "category": "people",
- "aliases": [
- ":right_fist_tone4:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐พ"
- },
- "right_facing_fist_tone5": {
- "unicode": "1F91C-1F3FF",
- "unicode_alternates": [],
- "name": "right facing fist tone 5",
- "shortname": ":right_facing_fist_tone5:",
- "category": "people",
- "aliases": [
- ":right_fist_tone5:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐ค๐ฟ"
- },
- "ring": {
- "unicode": "1F48D",
- "unicode_alternates": [],
- "name": "ring",
- "shortname": ":ring:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "marriage",
- "propose",
- "valentines",
- "wedding",
- "object",
- "fashion",
- "gem",
- "accessories"
- ],
- "moji": "๐"
- },
- "robot": {
- "unicode": "1F916",
- "unicode_alternates": [],
- "name": "robot face",
- "shortname": ":robot:",
- "category": "people",
- "aliases": [
- ":robot_face:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "monster",
- "robot"
- ],
- "moji": "๐ค"
- },
- "rocket": {
- "unicode": "1F680",
- "unicode_alternates": [],
- "name": "rocket",
- "shortname": ":rocket:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "space"
- ],
- "moji": "๐"
- },
- "rofl": {
- "unicode": "1F923",
- "unicode_alternates": [],
- "name": "rolling on the floor laughing",
- "shortname": ":rofl:",
- "category": "people",
- "aliases": [
- ":rolling_on_the_floor_laughing:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คฃ"
- },
- "rolling_eyes": {
- "unicode": "1F644",
- "unicode_alternates": [],
- "name": "face with rolling eyes",
- "shortname": ":rolling_eyes:",
- "category": "people",
- "aliases": [
- ":face_with_rolling_eyes:",
- ":roll_eyes:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "mad",
- "smiley",
- "rolling eyes",
- "emotion",
- "sarcastic"
- ],
- "moji": "๐"
- },
- "runner": {
- "unicode": "1F3C3",
- "unicode_alternates": [],
- "name": "runner",
- "shortname": ":runner:",
- "category": "people",
- "aliases": [
- ":running_man:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "exercise",
- "man",
- "walking",
- "run",
- "runner",
- "jog",
- "sprint",
- "race",
- "dash",
- "people",
- "men",
- "diversity",
- "boys night"
- ],
- "moji": "๐"
- },
- "runner_tone1": {
- "unicode": "1F3C3-1F3FB",
- "unicode_alternates": [],
- "name": "runner tone 1",
- "shortname": ":runner_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "exercise",
- "man",
- "run",
- "jog",
- "sprint",
- "race",
- "dash",
- "marathon"
- ],
- "moji": "๐๐ป"
- },
- "runner_tone2": {
- "unicode": "1F3C3-1F3FC",
- "unicode_alternates": [],
- "name": "runner tone 2",
- "shortname": ":runner_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "exercise",
- "man",
- "run",
- "jog",
- "sprint",
- "race",
- "dash",
- "marathon"
- ],
- "moji": "๐๐ผ"
- },
- "runner_tone3": {
- "unicode": "1F3C3-1F3FD",
- "unicode_alternates": [],
- "name": "runner tone 3",
- "shortname": ":runner_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "exercise",
- "man",
- "run",
- "jog",
- "sprint",
- "race",
- "dash",
- "marathon"
- ],
- "moji": "๐๐ฝ"
- },
- "runner_tone4": {
- "unicode": "1F3C3-1F3FE",
- "unicode_alternates": [],
- "name": "runner tone 4",
- "shortname": ":runner_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "exercise",
- "man",
- "run",
- "jog",
- "sprint",
- "race",
- "dash",
- "marathon"
- ],
- "moji": "๐๐พ"
- },
- "runner_tone5": {
- "unicode": "1F3C3-1F3FF",
- "unicode_alternates": [],
- "name": "runner tone 5",
- "shortname": ":runner_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "exercise",
- "man",
- "run",
- "jog",
- "sprint",
- "race",
- "dash",
- "marathon"
- ],
- "moji": "๐๐ฟ"
- },
- "sandal": {
- "unicode": "1F461",
- "unicode_alternates": [],
- "name": "womans sandal",
- "shortname": ":sandal:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fashion",
- "shoes",
- "shoe",
- "accessories"
- ],
- "moji": "๐ก"
- },
- "santa": {
- "unicode": "1F385",
- "unicode_alternates": [],
- "name": "father christmas",
- "shortname": ":santa:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "christmas",
- "father christmas",
- "festival",
- "male",
- "man",
- "xmas",
- "santa",
- "saint nick",
- "jolly",
- "ho ho ho",
- "north pole",
- "presents",
- "gifts",
- "naughty",
- "nice",
- "sleigh",
- "father",
- "holiday",
- "people",
- "hat",
- "winter",
- "holidays",
- "diversity"
- ],
- "moji": "๐
"
- },
- "santa_tone1": {
- "unicode": "1F385-1F3FB",
- "unicode_alternates": [],
- "name": "father christmas tone 1",
- "shortname": ":santa_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "festival",
- "male",
- "man",
- "xmas",
- "santa",
- "saint nick",
- "jolly",
- "ho ho ho",
- "north pole",
- "presents",
- "gifts",
- "naughty",
- "nice",
- "sleigh",
- "holiday"
- ],
- "moji": "๐
๐ป"
- },
- "santa_tone2": {
- "unicode": "1F385-1F3FC",
- "unicode_alternates": [],
- "name": "father christmas tone 2",
- "shortname": ":santa_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "festival",
- "male",
- "man",
- "xmas",
- "santa",
- "saint nick",
- "jolly",
- "ho ho ho",
- "north pole",
- "presents",
- "gifts",
- "naughty",
- "nice",
- "sleigh",
- "holiday"
- ],
- "moji": "๐
๐ผ"
- },
- "santa_tone3": {
- "unicode": "1F385-1F3FD",
- "unicode_alternates": [],
- "name": "father christmas tone 3",
- "shortname": ":santa_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "festival",
- "male",
- "man",
- "xmas",
- "santa",
- "saint nick",
- "jolly",
- "ho ho ho",
- "north pole",
- "presents",
- "gifts",
- "naughty",
- "nice",
- "sleigh",
- "holiday"
- ],
- "moji": "๐
๐ฝ"
- },
- "santa_tone4": {
- "unicode": "1F385-1F3FE",
- "unicode_alternates": [],
- "name": "father christmas tone 4",
- "shortname": ":santa_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "festival",
- "male",
- "man",
- "xmas",
- "santa",
- "saint nick",
- "jolly",
- "ho ho ho",
- "north pole",
- "presents",
- "gifts",
- "naughty",
- "nice",
- "sleigh",
- "holiday"
- ],
- "moji": "๐
๐พ"
- },
- "santa_tone5": {
- "unicode": "1F385-1F3FF",
- "unicode_alternates": [],
- "name": "father christmas tone 5",
- "shortname": ":santa_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "festival",
- "male",
- "man",
- "xmas",
- "santa",
- "saint nick",
- "jolly",
- "ho ho ho",
- "north pole",
- "presents",
- "gifts",
- "naughty",
- "nice",
- "sleigh",
- "holiday"
- ],
- "moji": "๐
๐ฟ"
- },
- "school_satchel": {
- "unicode": "1F392",
- "unicode_alternates": [],
- "name": "school satchel",
- "shortname": ":school_satchel:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "bag",
- "education",
- "student",
- "school",
- "satchel",
- "backpack",
- "packing",
- "pack",
- "hike",
- "adventure",
- "travel",
- "sightsee",
- "fashion",
- "office",
- "vacation",
- "accessories"
- ],
- "moji": "๐"
- },
- "scream": {
- "unicode": "1F631",
- "unicode_alternates": [],
- "name": "face screaming in fear",
- "shortname": ":scream:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "munch",
- "scream",
- "painting",
- "artist",
- "alien",
- "smiley",
- "surprised",
- "wow",
- "emotion",
- "omg"
- ],
- "moji": "๐ฑ"
- },
- "scream_cat": {
- "unicode": "1F640",
- "unicode_alternates": [],
- "name": "weary cat face",
- "shortname": ":scream_cat:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "animal",
- "cats",
- "munch",
- "weary",
- "sleepy",
- "tired",
- "tiredness",
- "study",
- "finals",
- "school",
- "exhausted",
- "scream",
- "painting",
- "artist",
- "cat"
- ],
- "moji": "๐"
- },
- "selfie": {
- "unicode": "1F933",
- "unicode_alternates": [],
- "name": "selfie",
- "shortname": ":selfie:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คณ"
- },
- "selfie_tone1": {
- "unicode": "1F933-1F3FB",
- "unicode_alternates": [],
- "name": "selfie tone 1",
- "shortname": ":selfie_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คณ๐ป"
- },
- "selfie_tone2": {
- "unicode": "1F933-1F3FC",
- "unicode_alternates": [],
- "name": "selfie tone 2",
- "shortname": ":selfie_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คณ๐ผ"
- },
- "selfie_tone3": {
- "unicode": "1F933-1F3FD",
- "unicode_alternates": [],
- "name": "selfie tone 3",
- "shortname": ":selfie_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คณ๐ฝ"
- },
- "selfie_tone4": {
- "unicode": "1F933-1F3FE",
- "unicode_alternates": [],
- "name": "selfie tone 4",
- "shortname": ":selfie_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คณ๐พ"
- },
- "selfie_tone5": {
- "unicode": "1F933-1F3FF",
- "unicode_alternates": [],
- "name": "selfie tone 5",
- "shortname": ":selfie_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คณ๐ฟ"
- },
- "shirt": {
- "unicode": "1F455",
- "unicode_alternates": [],
- "name": "t-shirt",
- "shortname": ":shirt:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "cloth",
- "fashion"
- ],
- "moji": "๐"
- },
- "shrug": {
- "unicode": "1F937",
- "unicode_alternates": [],
- "name": "shrug",
- "shortname": ":shrug:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คท"
- },
- "shrug_tone1": {
- "unicode": "1F937-1F3FB",
- "unicode_alternates": [],
- "name": "shrug tone 1",
- "shortname": ":shrug_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คท๐ป"
- },
- "shrug_tone2": {
- "unicode": "1F937-1F3FC",
- "unicode_alternates": [],
- "name": "shrug tone 2",
- "shortname": ":shrug_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คท๐ผ"
- },
- "shrug_tone3": {
- "unicode": "1F937-1F3FD",
- "unicode_alternates": [],
- "name": "shrug tone 3",
- "shortname": ":shrug_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คท๐ฝ"
- },
- "shrug_tone4": {
- "unicode": "1F937-1F3FE",
- "unicode_alternates": [],
- "name": "shrug tone 4",
- "shortname": ":shrug_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คท๐พ"
- },
- "shrug_tone5": {
- "unicode": "1F937-1F3FF",
- "unicode_alternates": [],
- "name": "shrug tone 5",
- "shortname": ":shrug_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คท๐ฟ"
- },
- "skull": {
- "unicode": "1F480",
- "unicode_alternates": [],
- "name": "skull",
- "shortname": ":skull:",
- "category": "people",
- "aliases": [
- ":skeleton:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "dead",
- "skeleton",
- "dying",
- "halloween",
- "skull"
- ],
- "moji": "๐"
- },
- "sleeping": {
- "unicode": "1F634",
- "unicode_alternates": [],
- "name": "sleeping face",
- "shortname": ":sleeping:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "sleepy",
- "tired",
- "sleep",
- "sleeping",
- "snore",
- "smiley",
- "emotion",
- "goodnight"
- ],
- "moji": "๐ด"
- },
- "sleepy": {
- "unicode": "1F62A",
- "unicode_alternates": [],
- "name": "sleepy face",
- "shortname": ":sleepy:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "rest",
- "tired",
- "sleepy",
- "exhausted",
- "smiley",
- "sick",
- "emotion"
- ],
- "moji": "๐ช"
- },
- "slight_frown": {
- "unicode": "1F641",
- "unicode_alternates": [],
- "name": "slightly frowning face",
- "shortname": ":slight_frown:",
- "category": "people",
- "aliases": [
- ":slightly_frowning_face:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "slight",
- "frown",
- "unhappy",
- "disappointed",
- "sad",
- "smiley",
- "emotion"
- ],
- "moji": "๐"
- },
- "slight_smile": {
- "unicode": "1F642",
- "unicode_alternates": [],
- "name": "slightly smiling face",
- "shortname": ":slight_smile:",
- "category": "people",
- "aliases": [
- ":slightly_smiling_face:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "slight",
- "smile",
- "happy",
- "smiley"
- ],
- "moji": "๐"
- },
- "smile": {
- "unicode": "1F604",
- "unicode_alternates": [],
- "name": "smiling face with open mouth and smiling eyes",
- "shortname": ":smile:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- ":)",
- ":-)",
- "=]",
- "=)",
- ":]"
- ],
- "keywords": [
- "face",
- "funny",
- "haha",
- "happy",
- "joy",
- "laugh",
- "smile",
- "smiley",
- "smiling",
- "emotion"
- ],
- "moji": "๐"
- },
- "smile_cat": {
- "unicode": "1F638",
- "unicode_alternates": [],
- "name": "grinning cat face with smiling eyes",
- "shortname": ":smile_cat:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "animal",
- "cats",
- "cat",
- "smile",
- "grin",
- "grinning",
- "happy"
- ],
- "moji": "๐ธ"
- },
- "smiley": {
- "unicode": "1F603",
- "unicode_alternates": [],
- "name": "smiling face with open mouth",
- "shortname": ":smiley:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- ":D",
- ":-D",
- "=D"
- ],
- "keywords": [
- "face",
- "haha",
- "happy",
- "joy",
- "smiling",
- "smile",
- "smiley",
- "emotion",
- "good"
- ],
- "moji": "๐"
- },
- "smiley_cat": {
- "unicode": "1F63A",
- "unicode_alternates": [],
- "name": "smiling cat face with open mouth",
- "shortname": ":smiley_cat:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "animal",
- "cats",
- "happy",
- "smile",
- "smiley",
- "cat"
- ],
- "moji": "๐บ"
- },
- "smiling_imp": {
- "unicode": "1F608",
- "unicode_alternates": [],
- "name": "smiling face with horns",
- "shortname": ":smiling_imp:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "devil",
- "horns",
- "impish",
- "trouble",
- "silly",
- "smiley",
- "angry",
- "monster",
- "boys night"
- ],
- "moji": "๐"
- },
- "smirk": {
- "unicode": "1F60F",
- "unicode_alternates": [],
- "name": "smirking face",
- "shortname": ":smirk:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "mean",
- "prank",
- "smile",
- "smug",
- "smirking",
- "smirk",
- "half-smile",
- "conceited",
- "silly",
- "smiley",
- "sexy",
- "sarcastic"
- ],
- "moji": "๐"
- },
- "smirk_cat": {
- "unicode": "1F63C",
- "unicode_alternates": [],
- "name": "cat face with wry smile",
- "shortname": ":smirk_cat:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "animal",
- "cats",
- "smirk",
- "smirking",
- "wry",
- "confident",
- "confidence",
- "cat"
- ],
- "moji": "๐ผ"
- },
- "sneezing_face": {
- "unicode": "1F927",
- "unicode_alternates": [],
- "name": "sneezing face",
- "shortname": ":sneezing_face:",
- "category": "people",
- "aliases": [
- ":sneeze:"
- ],
- "aliases_ascii": [],
- "keywords": [],
- "moji": "๐คง"
- },
- "sob": {
- "unicode": "1F62D",
- "unicode_alternates": [],
- "name": "loudly crying face",
- "shortname": ":sob:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "cry",
- "face",
- "sad",
- "tears",
- "upset",
- "sob",
- "melancholy",
- "morn",
- "somber",
- "hurt",
- "smiley",
- "emotion",
- "heartbreak"
- ],
- "moji": "๐ญ"
- },
- "speaking_head": {
- "unicode": "1F5E3",
- "unicode_alternates": [],
- "name": "speaking head in silhouette",
- "shortname": ":speaking_head:",
- "category": "people",
- "aliases": [
- ":speaking_head_in_silhouette:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "talk",
- "people"
- ],
- "moji": "๐ฃ"
- },
- "spy": {
- "unicode": "1F575",
- "unicode_alternates": [],
- "name": "sleuth or spy",
- "shortname": ":spy:",
- "category": "people",
- "aliases": [
- ":sleuth_or_spy:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "pi",
- "undercover",
- "investigator",
- "people",
- "hat",
- "men",
- "glasses",
- "diversity",
- "job"
- ],
- "moji": "๐ต"
- },
- "spy_tone1": {
- "unicode": "1F575-1F3FB",
- "unicode_alternates": [],
- "name": "sleuth or spy tone 1",
- "shortname": ":spy_tone1:",
- "category": "people",
- "aliases": [
- ":sleuth_or_spy_tone1:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "pi",
- "undercover",
- "investigator",
- "person"
- ],
- "moji": "๐ต๐ป"
- },
- "spy_tone2": {
- "unicode": "1F575-1F3FC",
- "unicode_alternates": [],
- "name": "sleuth or spy tone 2",
- "shortname": ":spy_tone2:",
- "category": "people",
- "aliases": [
- ":sleuth_or_spy_tone2:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "pi",
- "undercover",
- "investigator",
- "person"
- ],
- "moji": "๐ต๐ผ"
- },
- "spy_tone3": {
- "unicode": "1F575-1F3FD",
- "unicode_alternates": [],
- "name": "sleuth or spy tone 3",
- "shortname": ":spy_tone3:",
- "category": "people",
- "aliases": [
- ":sleuth_or_spy_tone3:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "pi",
- "undercover",
- "investigator",
- "person"
- ],
- "moji": "๐ต๐ฝ"
- },
- "spy_tone4": {
- "unicode": "1F575-1F3FE",
- "unicode_alternates": [],
- "name": "sleuth or spy tone 4",
- "shortname": ":spy_tone4:",
- "category": "people",
- "aliases": [
- ":sleuth_or_spy_tone4:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "pi",
- "undercover",
- "investigator",
- "person"
- ],
- "moji": "๐ต๐พ"
- },
- "spy_tone5": {
- "unicode": "1F575-1F3FF",
- "unicode_alternates": [],
- "name": "sleuth or spy tone 5",
- "shortname": ":spy_tone5:",
- "category": "people",
- "aliases": [
- ":sleuth_or_spy_tone5:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "pi",
- "undercover",
- "investigator",
- "person"
- ],
- "moji": "๐ต๐ฟ"
- },
- "stuck_out_tongue": {
- "unicode": "1F61B",
- "unicode_alternates": [],
- "name": "face with stuck-out tongue",
- "shortname": ":stuck_out_tongue:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- ":P",
- ":-P",
- "=P",
- ":-p",
- ":p",
- "=p",
- ":-ร",
- ":ร",
- ":รพ",
- ":-รพ",
- ":-b",
- ":b",
- "d:"
- ],
- "keywords": [
- "childish",
- "face",
- "mischievous",
- "playful",
- "prank",
- "tongue",
- "silly",
- "cheeky",
- "smiley",
- "sex",
- "emotion"
- ],
- "moji": "๐"
- },
- "stuck_out_tongue_closed_eyes": {
- "unicode": "1F61D",
- "unicode_alternates": [],
- "name": "face with stuck-out tongue and tightly-closed eyes",
- "shortname": ":stuck_out_tongue_closed_eyes:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "mischievous",
- "playful",
- "prank",
- "tongue",
- "kidding",
- "silly",
- "ecstatic",
- "happy",
- "smiley",
- "emotion"
- ],
- "moji": "๐"
- },
- "stuck_out_tongue_winking_eye": {
- "unicode": "1F61C",
- "unicode_alternates": [],
- "name": "face with stuck-out tongue and winking eye",
- "shortname": ":stuck_out_tongue_winking_eye:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- ">:P",
- "X-P",
- "x-p"
- ],
- "keywords": [
- "childish",
- "face",
- "mischievous",
- "playful",
- "prank",
- "tongue",
- "wink",
- "winking",
- "kidding",
- "silly",
- "crazy",
- "happy",
- "smiley",
- "emotion",
- "parties"
- ],
- "moji": "๐"
- },
- "sunglasses": {
- "unicode": "1F60E",
- "unicode_alternates": [],
- "name": "smiling face with sunglasses",
- "shortname": ":sunglasses:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- "B-)",
- "B)",
- "8)",
- "8-)",
- "B-D",
- "8-D"
- ],
- "keywords": [
- "cool",
- "face",
- "smiling",
- "sunglasses",
- "sun",
- "glasses",
- "sunny",
- "smooth",
- "silly",
- "smiley",
- "emojione",
- "boys night"
- ],
- "moji": "๐"
- },
- "sweat": {
- "unicode": "1F613",
- "unicode_alternates": [],
- "name": "face with cold sweat",
- "shortname": ":sweat:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- "':(",
- "':-(",
- "'=("
- ],
- "keywords": [
- "cold",
- "sweat",
- "sick",
- "anxious",
- "worried",
- "clammy",
- "diaphoresis",
- "face",
- "hot",
- "sad",
- "smiley",
- "stressed",
- "emotion"
- ],
- "moji": "๐"
- },
- "sweat_smile": {
- "unicode": "1F605",
- "unicode_alternates": [],
- "name": "smiling face with open mouth and cold sweat",
- "shortname": ":sweat_smile:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- "':)",
- "':-)",
- "'=)",
- "':D",
- "':-D",
- "'=D"
- ],
- "keywords": [
- "face",
- "happy",
- "hot",
- "smiling",
- "cold",
- "sweat",
- "perspiration",
- "smiley",
- "workout",
- "emotion"
- ],
- "moji": "๐
"
- },
- "tada": {
- "unicode": "1F389",
- "unicode_alternates": [],
- "name": "party popper as a 'tada' celebration",
- "shortname": ":tada:",
- "category": "people",
- "aliases": [
- ":party_popper:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "celebrate",
- "celebration",
- "hooray",
- "hurrah",
- "hurray"
- ],
- "moji": "๐"
- },
- "thermometer_face": {
- "unicode": "1F912",
- "unicode_alternates": [],
- "name": "face with thermometer",
- "shortname": ":thermometer_face:",
- "category": "people",
- "aliases": [
- ":face_with_thermometer:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "smiley",
- "health",
- "sick",
- "emotion"
- ],
- "moji": "๐ค"
- },
- "thinking": {
- "unicode": "1F914",
- "unicode_alternates": [],
- "name": "thinking face",
- "shortname": ":thinking:",
- "category": "people",
- "aliases": [
- ":thinking_face:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "smiley",
- "thinking",
- "boys night"
- ],
- "moji": "๐ค"
- },
- "thumbsdown": {
- "unicode": "1F44E",
- "unicode_alternates": [],
- "name": "thumbs down sign",
- "shortname": ":thumbsdown:",
- "category": "people",
- "aliases": [
- ":-1:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "hand",
- "no",
- "body",
- "hands",
- "diversity"
- ],
- "moji": "๐"
- },
- "thumbsdown_tone1": {
- "unicode": "1F44E-1F3FB",
- "unicode_alternates": [],
- "name": "thumbs down sign tone 1",
- "shortname": ":thumbsdown_tone1:",
- "category": "people",
- "aliases": [
- ":-1_tone1:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "hand",
- "no",
- "-1"
- ],
- "moji": "๐๐ป"
- },
- "thumbsdown_tone2": {
- "unicode": "1F44E-1F3FC",
- "unicode_alternates": [],
- "name": "thumbs down sign tone 2",
- "shortname": ":thumbsdown_tone2:",
- "category": "people",
- "aliases": [
- ":-1_tone2:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "hand",
- "no",
- "-1"
- ],
- "moji": "๐๐ผ"
- },
- "thumbsdown_tone3": {
- "unicode": "1F44E-1F3FD",
- "unicode_alternates": [],
- "name": "thumbs down sign tone 3",
- "shortname": ":thumbsdown_tone3:",
- "category": "people",
- "aliases": [
- ":-1_tone3:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "hand",
- "no",
- "-1"
- ],
- "moji": "๐๐ฝ"
- },
- "thumbsdown_tone4": {
- "unicode": "1F44E-1F3FE",
- "unicode_alternates": [],
- "name": "thumbs down sign tone 4",
- "shortname": ":thumbsdown_tone4:",
- "category": "people",
- "aliases": [
- ":-1_tone4:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "hand",
- "no",
- "-1"
- ],
- "moji": "๐๐พ"
- },
- "thumbsdown_tone5": {
- "unicode": "1F44E-1F3FF",
- "unicode_alternates": [],
- "name": "thumbs down sign tone 5",
- "shortname": ":thumbsdown_tone5:",
- "category": "people",
- "aliases": [
- ":-1_tone5:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "hand",
- "no",
- "-1"
- ],
- "moji": "๐๐ฟ"
- },
- "thumbsup": {
- "unicode": "1F44D",
- "unicode_alternates": [],
- "name": "thumbs up sign",
- "shortname": ":thumbsup:",
- "category": "people",
- "aliases": [
- ":+1:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "cool",
- "hand",
- "like",
- "yes",
- "body",
- "hands",
- "hi",
- "luck",
- "thank you",
- "diversity",
- "perfect",
- "good",
- "beautiful"
- ],
- "moji": "๐"
- },
- "thumbsup_tone1": {
- "unicode": "1F44D-1F3FB",
- "unicode_alternates": [],
- "name": "thumbs up sign tone 1",
- "shortname": ":thumbsup_tone1:",
- "category": "people",
- "aliases": [
- ":+1_tone1:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "cool",
- "hand",
- "like",
- "yes",
- "+1"
- ],
- "moji": "๐๐ป"
- },
- "thumbsup_tone2": {
- "unicode": "1F44D-1F3FC",
- "unicode_alternates": [],
- "name": "thumbs up sign tone 2",
- "shortname": ":thumbsup_tone2:",
- "category": "people",
- "aliases": [
- ":+1_tone2:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "cool",
- "hand",
- "like",
- "yes",
- "+1"
- ],
- "moji": "๐๐ผ"
- },
- "thumbsup_tone3": {
- "unicode": "1F44D-1F3FD",
- "unicode_alternates": [],
- "name": "thumbs up sign tone 3",
- "shortname": ":thumbsup_tone3:",
- "category": "people",
- "aliases": [
- ":+1_tone3:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "cool",
- "hand",
- "like",
- "yes",
- "+1"
- ],
- "moji": "๐๐ฝ"
- },
- "thumbsup_tone4": {
- "unicode": "1F44D-1F3FE",
- "unicode_alternates": [],
- "name": "thumbs up sign tone 4",
- "shortname": ":thumbsup_tone4:",
- "category": "people",
- "aliases": [
- ":+1_tone4:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "cool",
- "hand",
- "like",
- "yes",
- "+1"
- ],
- "moji": "๐๐พ"
- },
- "thumbsup_tone5": {
- "unicode": "1F44D-1F3FF",
- "unicode_alternates": [],
- "name": "thumbs up sign tone 5",
- "shortname": ":thumbsup_tone5:",
- "category": "people",
- "aliases": [
- ":+1_tone5:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "cool",
- "hand",
- "like",
- "yes",
- "+1"
- ],
- "moji": "๐๐ฟ"
- },
- "tired_face": {
- "unicode": "1F62B",
- "unicode_alternates": [],
- "name": "tired face",
- "shortname": ":tired_face:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "frustrated",
- "sick",
- "upset",
- "whine",
- "exhausted",
- "sleepy",
- "tired",
- "sad",
- "smiley",
- "emotion"
- ],
- "moji": "๐ซ"
- },
- "tongue": {
- "unicode": "1F445",
- "unicode_alternates": [],
- "name": "tongue",
- "shortname": ":tongue:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "mouth",
- "playful",
- "tongue",
- "taste",
- "buds",
- "food",
- "silly",
- "tease",
- "kiss",
- "french kiss",
- "lick",
- "tasty",
- "playfulness",
- "silliness",
- "intimacy",
- "body",
- "sexy",
- "lip"
- ],
- "moji": "๐
"
- },
- "tophat": {
- "unicode": "1F3A9",
- "unicode_alternates": [],
- "name": "top hat",
- "shortname": ":tophat:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "classy",
- "gentleman",
- "magic",
- "top",
- "hat",
- "cap",
- "beaver",
- "high",
- "tall",
- "stove",
- "pipe",
- "chimney",
- "topper",
- "london",
- "period piece",
- "magician",
- "fashion",
- "accessories"
- ],
- "moji": "๐ฉ"
- },
- "triumph": {
- "unicode": "1F624",
- "unicode_alternates": [],
- "name": "face with look of triumph",
- "shortname": ":triumph:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "gas",
- "phew",
- "triumph",
- "steam",
- "breath",
- "mad",
- "smiley",
- "angry",
- "emotion"
- ],
- "moji": "๐ค"
- },
- "two_men_holding_hands": {
- "unicode": "1F46C",
- "unicode_alternates": [],
- "name": "two men holding hands",
- "shortname": ":two_men_holding_hands:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "bromance",
- "couple",
- "friends",
- "like",
- "love",
- "men",
- "gay",
- "homosexual",
- "hands",
- "holding",
- "team",
- "unity",
- "people",
- "sex",
- "lgbt"
- ],
- "moji": "๐ฌ"
- },
- "two_women_holding_hands": {
- "unicode": "1F46D",
- "unicode_alternates": [],
- "name": "two women holding hands",
- "shortname": ":two_women_holding_hands:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "couple",
- "female",
- "friends",
- "like",
- "love",
- "women",
- "hands",
- "girlfriends",
- "sisters",
- "mother",
- "daughter",
- "gay",
- "homosexual",
- "unity",
- "people",
- "sex",
- "lgbt",
- "lesbian",
- "girls night"
- ],
- "moji": "๐ญ"
- },
- "unamused": {
- "unicode": "1F612",
- "unicode_alternates": [],
- "name": "unamused face",
- "shortname": ":unamused:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "bored",
- "face",
- "indifference",
- "serious",
- "straight face",
- "unamused",
- "not amused",
- "depressed",
- "unhappy",
- "disapprove",
- "lame",
- "sad",
- "mad",
- "smiley",
- "tired",
- "emotion"
- ],
- "moji": "๐"
- },
- "upside_down": {
- "unicode": "1F643",
- "unicode_alternates": [],
- "name": "upside-down face",
- "shortname": ":upside_down:",
- "category": "people",
- "aliases": [
- ":upside_down_face:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "silly",
- "smiley",
- "sarcastic"
- ],
- "moji": "๐"
- },
- "v": {
- "unicode": "270C",
- "unicode_alternates": [
- "270C-FE0F"
- ],
- "name": "victory hand",
- "shortname": ":v:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fingers",
- "hand",
- "ohyeah",
- "peace",
- "two",
- "victory",
- "body",
- "hands",
- "hi",
- "thank you",
- "diversity",
- "girls night"
- ],
- "moji": "โ"
- },
- "v_tone1": {
- "unicode": "270C-1F3FB",
- "unicode_alternates": [],
- "name": "victory hand tone 1",
- "shortname": ":v_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fingers",
- "ohyeah",
- "peace",
- "two",
- "v"
- ],
- "moji": "โ๐ป"
- },
- "v_tone2": {
- "unicode": "270C-1F3FC",
- "unicode_alternates": [],
- "name": "victory hand tone 2",
- "shortname": ":v_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fingers",
- "ohyeah",
- "peace",
- "two",
- "v"
- ],
- "moji": "โ๐ผ"
- },
- "v_tone3": {
- "unicode": "270C-1F3FD",
- "unicode_alternates": [],
- "name": "victory hand tone 3",
- "shortname": ":v_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fingers",
- "ohyeah",
- "peace",
- "two",
- "v"
- ],
- "moji": "โ๐ฝ"
- },
- "v_tone4": {
- "unicode": "270C-1F3FE",
- "unicode_alternates": [],
- "name": "victory hand tone 4",
- "shortname": ":v_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fingers",
- "ohyeah",
- "peace",
- "two",
- "v"
- ],
- "moji": "โ๐พ"
- },
- "v_tone5": {
- "unicode": "270C-1F3FF",
- "unicode_alternates": [],
- "name": "victory hand tone 5",
- "shortname": ":v_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fingers",
- "ohyeah",
- "peace",
- "two",
- "v"
- ],
- "moji": "โ๐ฟ"
- },
- "vulcan": {
- "unicode": "1F596",
- "unicode_alternates": [],
- "name": "raised hand with part between middle and ring fingers",
- "shortname": ":vulcan:",
- "category": "people",
- "aliases": [
- ":raised_hand_with_part_between_middle_and_ring_fingers:",
- ":vulcan_salute:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "vulcan",
- "spock",
- "leonard",
- "nimoy",
- "star trek",
- "live long",
- "body",
- "hands",
- "hi",
- "diversity"
- ],
- "moji": "๐"
- },
- "vulcan_tone1": {
- "unicode": "1F596-1F3FB",
- "unicode_alternates": [],
- "name": "raised hand with part between middle and ring fingers tone 1",
- "shortname": ":vulcan_tone1:",
- "category": "people",
- "aliases": [
- ":raised_hand_with_part_between_middle_and_ring_fingers_tone1:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "vulcan",
- "spock",
- "leonard",
- "nimoy",
- "star trek",
- "live long"
- ],
- "moji": "๐๐ป"
- },
- "vulcan_tone2": {
- "unicode": "1F596-1F3FC",
- "unicode_alternates": [],
- "name": "raised hand with part between middle and ring fingers tone 2",
- "shortname": ":vulcan_tone2:",
- "category": "people",
- "aliases": [
- ":raised_hand_with_part_between_middle_and_ring_fingers_tone2:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "vulcan",
- "spock",
- "leonard",
- "nimoy",
- "star trek",
- "live long"
- ],
- "moji": "๐๐ผ"
- },
- "vulcan_tone3": {
- "unicode": "1F596-1F3FD",
- "unicode_alternates": [],
- "name": "raised hand with part between middle and ring fingers tone 3",
- "shortname": ":vulcan_tone3:",
- "category": "people",
- "aliases": [
- ":raised_hand_with_part_between_middle_and_ring_fingers_tone3:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "vulcan",
- "spock",
- "leonard",
- "nimoy",
- "star trek",
- "live long"
- ],
- "moji": "๐๐ฝ"
- },
- "vulcan_tone4": {
- "unicode": "1F596-1F3FE",
- "unicode_alternates": [],
- "name": "raised hand with part between middle and ring fingers tone 4",
- "shortname": ":vulcan_tone4:",
- "category": "people",
- "aliases": [
- ":raised_hand_with_part_between_middle_and_ring_fingers_tone4:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "vulcan",
- "spock",
- "leonard",
- "nimoy",
- "star trek",
- "live long"
- ],
- "moji": "๐๐พ"
- },
- "vulcan_tone5": {
- "unicode": "1F596-1F3FF",
- "unicode_alternates": [],
- "name": "raised hand with part between middle and ring fingers tone 5",
- "shortname": ":vulcan_tone5:",
- "category": "people",
- "aliases": [
- ":raised_hand_with_part_between_middle_and_ring_fingers_tone5:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "vulcan",
- "spock",
- "leonard",
- "nimoy",
- "star trek",
- "live long"
- ],
- "moji": "๐๐ฟ"
- },
- "walking": {
- "unicode": "1F6B6",
- "unicode_alternates": [],
- "name": "pedestrian",
- "shortname": ":walking:",
- "category": "people",
- "aliases": [
- ":walking_man:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "human",
- "man",
- "walk",
- "pedestrian",
- "stroll",
- "stride",
- "foot",
- "feet",
- "people",
- "men",
- "diversity"
- ],
- "moji": "๐ถ"
- },
- "walking_tone1": {
- "unicode": "1F6B6-1F3FB",
- "unicode_alternates": [],
- "name": "pedestrian tone 1",
- "shortname": ":walking_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "man",
- "walk",
- "stroll",
- "stride",
- "hiking",
- "hike"
- ],
- "moji": "๐ถ๐ป"
- },
- "walking_tone2": {
- "unicode": "1F6B6-1F3FC",
- "unicode_alternates": [],
- "name": "pedestrian tone 2",
- "shortname": ":walking_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "man",
- "walk",
- "stroll",
- "stride",
- "hiking",
- "hike"
- ],
- "moji": "๐ถ๐ผ"
- },
- "walking_tone3": {
- "unicode": "1F6B6-1F3FD",
- "unicode_alternates": [],
- "name": "pedestrian tone 3",
- "shortname": ":walking_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "man",
- "walk",
- "stroll",
- "stride",
- "hiking",
- "hike"
- ],
- "moji": "๐ถ๐ฝ"
- },
- "walking_tone4": {
- "unicode": "1F6B6-1F3FE",
- "unicode_alternates": [],
- "name": "pedestrian tone 4",
- "shortname": ":walking_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "man",
- "walk",
- "stroll",
- "stride",
- "hiking",
- "hike"
- ],
- "moji": "๐ถ๐พ"
- },
- "walking_tone5": {
- "unicode": "1F6B6-1F3FF",
- "unicode_alternates": [],
- "name": "pedestrian tone 5",
- "shortname": ":walking_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "man",
- "walk",
- "stroll",
- "stride",
- "hiking",
- "hike"
- ],
- "moji": "๐ถ๐ฟ"
- },
- "wave": {
- "unicode": "1F44B",
- "unicode_alternates": [],
- "name": "waving hand sign",
- "shortname": ":wave:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "farewell",
- "gesture",
- "goodbye",
- "hands",
- "solong",
- "body",
- "hi",
- "diversity"
- ],
- "moji": "๐"
- },
- "wave_tone1": {
- "unicode": "1F44B-1F3FB",
- "unicode_alternates": [],
- "name": "waving hand sign tone 1",
- "shortname": ":wave_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "farewell",
- "gesture",
- "goodbye",
- "solong",
- "hi",
- "wave"
- ],
- "moji": "๐๐ป"
- },
- "wave_tone2": {
- "unicode": "1F44B-1F3FC",
- "unicode_alternates": [],
- "name": "waving hand sign tone 2",
- "shortname": ":wave_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "farewell",
- "gesture",
- "goodbye",
- "solong",
- "hi",
- "wave"
- ],
- "moji": "๐๐ผ"
- },
- "wave_tone3": {
- "unicode": "1F44B-1F3FD",
- "unicode_alternates": [],
- "name": "waving hand sign tone 3",
- "shortname": ":wave_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "farewell",
- "gesture",
- "goodbye",
- "solong",
- "hi",
- "wave"
- ],
- "moji": "๐๐ฝ"
- },
- "wave_tone4": {
- "unicode": "1F44B-1F3FE",
- "unicode_alternates": [],
- "name": "waving hand sign tone 4",
- "shortname": ":wave_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "farewell",
- "gesture",
- "goodbye",
- "solong",
- "hi",
- "wave"
- ],
- "moji": "๐๐พ"
- },
- "wave_tone5": {
- "unicode": "1F44B-1F3FF",
- "unicode_alternates": [],
- "name": "waving hand sign tone 5",
- "shortname": ":wave_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "farewell",
- "gesture",
- "goodbye",
- "solong",
- "hi",
- "wave"
- ],
- "moji": "๐๐ฟ"
- },
- "weary": {
- "unicode": "1F629",
- "unicode_alternates": [],
- "name": "weary face",
- "shortname": ":weary:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "frustrated",
- "sad",
- "sleepy",
- "tired",
- "weary",
- "tiredness",
- "study",
- "finals",
- "school",
- "exhausted",
- "smiley",
- "stressed",
- "emotion"
- ],
- "moji": "๐ฉ"
- },
- "wink": {
- "unicode": "1F609",
- "unicode_alternates": [],
- "name": "winking face",
- "shortname": ":wink:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [
- ";)",
- ";-)",
- "*-)",
- "*)",
- ";-]",
- ";]",
- ";D",
- ";^)"
- ],
- "keywords": [
- "face",
- "happy",
- "mischievous",
- "secret",
- "wink",
- "winking",
- "friendly",
- "joke",
- "silly",
- "smiley",
- "emotion"
- ],
- "moji": "๐"
- },
- "woman": {
- "unicode": "1F469",
- "unicode_alternates": [],
- "name": "woman",
- "shortname": ":woman:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girls",
- "people",
- "women",
- "sex",
- "diversity",
- "feminist",
- "selfie",
- "girls night"
- ],
- "moji": "๐ฉ"
- },
- "woman_tone1": {
- "unicode": "1F469-1F3FB",
- "unicode_alternates": [],
- "name": "woman tone 1",
- "shortname": ":woman_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "lady"
- ],
- "moji": "๐ฉ๐ป"
- },
- "woman_tone2": {
- "unicode": "1F469-1F3FC",
- "unicode_alternates": [],
- "name": "woman tone 2",
- "shortname": ":woman_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "lady"
- ],
- "moji": "๐ฉ๐ผ"
- },
- "woman_tone3": {
- "unicode": "1F469-1F3FD",
- "unicode_alternates": [],
- "name": "woman tone 3",
- "shortname": ":woman_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "lady"
- ],
- "moji": "๐ฉ๐ฝ"
- },
- "woman_tone4": {
- "unicode": "1F469-1F3FE",
- "unicode_alternates": [],
- "name": "woman tone 4",
- "shortname": ":woman_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "lady"
- ],
- "moji": "๐ฉ๐พ"
- },
- "woman_tone5": {
- "unicode": "1F469-1F3FF",
- "unicode_alternates": [],
- "name": "woman tone 5",
- "shortname": ":woman_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "girl",
- "lady"
- ],
- "moji": "๐ฉ๐ฟ"
- },
- "womans_clothes": {
- "unicode": "1F45A",
- "unicode_alternates": [],
- "name": "womans clothes",
- "shortname": ":womans_clothes:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "fashion",
- "woman",
- "clothing",
- "clothes",
- "blouse",
- "shirt",
- "wardrobe",
- "breasts",
- "cleavage",
- "shopping",
- "shop",
- "dressing",
- "dressed",
- "women"
- ],
- "moji": "๐"
- },
- "womans_hat": {
- "unicode": "1F452",
- "unicode_alternates": [],
- "name": "womans hat",
- "shortname": ":womans_hat:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "accessories",
- "fashion",
- "female",
- "women"
- ],
- "moji": "๐"
- },
- "worried": {
- "unicode": "1F61F",
- "unicode_alternates": [],
- "name": "worried face",
- "shortname": ":worried:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "concern",
- "face",
- "nervous",
- "worried",
- "anxious",
- "distressed",
- "tense",
- "sad",
- "smiley",
- "emotion"
- ],
- "moji": "๐"
- },
- "writing_hand": {
- "unicode": "270D",
- "unicode_alternates": [
- "270D-FE0F"
- ],
- "name": "writing hand",
- "shortname": ":writing_hand:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "body",
- "hands",
- "write",
- "diversity"
- ],
- "moji": "โ"
- },
- "writing_hand_tone1": {
- "unicode": "270D-1F3FB",
- "unicode_alternates": [],
- "name": "writing hand tone 1",
- "shortname": ":writing_hand_tone1:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "write",
- "sign",
- "signature",
- "draw"
- ],
- "moji": "โ๐ป"
- },
- "writing_hand_tone2": {
- "unicode": "270D-1F3FC",
- "unicode_alternates": [],
- "name": "writing hand tone 2",
- "shortname": ":writing_hand_tone2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "write",
- "sign",
- "signature",
- "draw"
- ],
- "moji": "โ๐ผ"
- },
- "writing_hand_tone3": {
- "unicode": "270D-1F3FD",
- "unicode_alternates": [],
- "name": "writing hand tone 3",
- "shortname": ":writing_hand_tone3:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "write",
- "sign",
- "signature",
- "draw"
- ],
- "moji": "โ๐ฝ"
- },
- "writing_hand_tone4": {
- "unicode": "270D-1F3FE",
- "unicode_alternates": [],
- "name": "writing hand tone 4",
- "shortname": ":writing_hand_tone4:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "write",
- "sign",
- "signature",
- "draw"
- ],
- "moji": "โ๐พ"
- },
- "writing_hand_tone5": {
- "unicode": "270D-1F3FF",
- "unicode_alternates": [],
- "name": "writing hand tone 5",
- "shortname": ":writing_hand_tone5:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "write",
- "sign",
- "signature",
- "draw"
- ],
- "moji": "โ๐ฟ"
- },
- "yum": {
- "unicode": "1F60B",
- "unicode_alternates": [],
- "name": "face savouring delicious food",
- "shortname": ":yum:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "face",
- "happy",
- "joy",
- "smile",
- "tongue",
- "delicious",
- "savoring",
- "food",
- "eat",
- "yummy",
- "yum",
- "tasty",
- "savory",
- "silly",
- "smiley",
- "emotion",
- "sarcastic",
- "good"
- ],
- "moji": "๐"
- },
- "zipper_mouth": {
- "unicode": "1F910",
- "unicode_alternates": [],
- "name": "zipper-mouth face",
- "shortname": ":zipper_mouth:",
- "category": "people",
- "aliases": [
- ":zipper_mouth_face:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "mad",
- "smiley"
- ],
- "moji": "๐ค"
- },
- "zzz": {
- "unicode": "1F4A4",
- "unicode_alternates": [],
- "name": "sleeping symbol",
- "shortname": ":zzz:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "sleepy",
- "tired",
- "goodnight"
- ],
- "moji": "๐ค"
- }
-}
+{"100":{"unicode":"1F4AF","name":"100","shortname":":100:","moji":"๐ฏ"},"1234":{"unicode":"1F522","name":"1234","shortname":":1234:","moji":"๐ข"},"+1":{"unicode":"1F44D","name":"+1","shortname":":+1:","moji":"๐"},"-1":{"unicode":"1F44E","name":"-1","shortname":":-1:","moji":"๐"},"8ball":{"unicode":"1F3B1","name":"8ball","shortname":":8ball:","moji":"๐ฑ"},"a":{"unicode":"1F170-FE0F","name":"a","shortname":":a:","moji":"๐
ฐ๏ธ"},"ab":{"unicode":"1F18E","name":"ab","shortname":":ab:","moji":"๐"},"abacus":{"unicode":"1F9EE","name":"abacus","shortname":":abacus:","moji":"๐งฎ"},"abc":{"unicode":"1F524","name":"abc","shortname":":abc:","moji":"๐ค"},"abcd":{"unicode":"1F521","name":"abcd","shortname":":abcd:","moji":"๐ก"},"accept":{"unicode":"1F251","name":"accept","shortname":":accept:","moji":"๐"},"adult":{"unicode":"1F9D1","name":"adult","shortname":":adult:","moji":"๐ง"},"aerial_tramway":{"unicode":"1F6A1","name":"aerial tramway","shortname":":aerial_tramway:","moji":"๐ก"},"airplane":{"unicode":"2708-FE0F","name":"airplane","shortname":":airplane:","moji":"โ๏ธ"},"airplane_arriving":{"unicode":"1F6EC","name":"airplane arriving","shortname":":airplane_arriving:","moji":"๐ฌ"},"airplane_departure":{"unicode":"1F6EB","name":"airplane departure","shortname":":airplane_departure:","moji":"๐ซ"},"airplane_small":{"unicode":"1F6E9","name":"airplane small","shortname":":airplane_small:","moji":"๐ฉ"},"alarm_clock":{"unicode":"23F0","name":"alarm clock","shortname":":alarm_clock:","moji":"โฐ"},"alembic":{"unicode":"2697-FE0F","name":"alembic","shortname":":alembic:","moji":"โ๏ธ"},"alien":{"unicode":"1F47D","name":"extraterrestrial alien","shortname":":alien:","moji":"๐ฝ"},"ambulance":{"unicode":"1F691","name":"ambulance","shortname":":ambulance:","moji":"๐"},"amphora":{"unicode":"1F3FA","name":"amphora","shortname":":amphora:","moji":"๐บ"},"anchor":{"unicode":"2693","name":"anchor","shortname":":anchor:","moji":"โ"},"angel":{"unicode":"1F47C","name":"baby angel","shortname":":angel:","moji":"๐ผ"},"angel_tone1":{"unicode":"1F47C-1F3FB","name":"baby angel tone 1","shortname":":angel_tone1:","moji":"๐ผ๐ป"},"angel_tone2":{"unicode":"1F47C-1F3FC","name":"baby angel tone 2","shortname":":angel_tone2:","moji":"๐ผ๐ผ"},"angel_tone3":{"unicode":"1F47C-1F3FD","name":"baby angel tone 3","shortname":":angel_tone3:","moji":"๐ผ๐ฝ"},"angel_tone4":{"unicode":"1F47C-1F3FE","name":"baby angel tone 4","shortname":":angel_tone4:","moji":"๐ผ๐พ"},"angel_tone5":{"unicode":"1F47C-1F3FF","name":"baby angel tone 5","shortname":":angel_tone5:","moji":"๐ผ๐ฟ"},"anger":{"unicode":"1F4A2","name":"anger","shortname":":anger:","moji":"๐ข"},"anger_right":{"unicode":"1F5EF","name":"anger right","shortname":":anger_right:","moji":"๐ฏ"},"angry":{"unicode":"1F620","name":"angry face","shortname":":angry:","moji":"๐ "},"anguished":{"unicode":"1F627","name":"anguished face","shortname":":anguished:","moji":"๐ง"},"ant":{"unicode":"1F41C","name":"ant","shortname":":ant:","moji":"๐"},"apple":{"unicode":"1F34E","name":"apple","shortname":":apple:","moji":"๐"},"aquarius":{"unicode":"2652","name":"aquarius","shortname":":aquarius:","moji":"โ"},"aries":{"unicode":"2648","name":"aries","shortname":":aries:","moji":"โ"},"arrow_backward":{"unicode":"25C0-FE0F","name":"arrow backward","shortname":":arrow_backward:","moji":"โ๏ธ"},"arrow_double_down":{"unicode":"23EC","name":"arrow double down","shortname":":arrow_double_down:","moji":"โฌ"},"arrow_double_up":{"unicode":"23EB","name":"arrow double up","shortname":":arrow_double_up:","moji":"โซ"},"arrow_down":{"unicode":"2B07-FE0F","name":"arrow down","shortname":":arrow_down:","moji":"โฌ๏ธ"},"arrow_down_small":{"unicode":"1F53D","name":"arrow down small","shortname":":arrow_down_small:","moji":"๐ฝ"},"arrow_forward":{"unicode":"25B6-FE0F","name":"arrow forward","shortname":":arrow_forward:","moji":"โถ๏ธ"},"arrow_heading_down":{"unicode":"2935-FE0F","name":"arrow heading down","shortname":":arrow_heading_down:","moji":"โคต๏ธ"},"arrow_heading_up":{"unicode":"2934-FE0F","name":"arrow heading up","shortname":":arrow_heading_up:","moji":"โคด๏ธ"},"arrow_left":{"unicode":"2B05-FE0F","name":"arrow left","shortname":":arrow_left:","moji":"โฌ
๏ธ"},"arrow_lower_left":{"unicode":"2199-FE0F","name":"arrow lower left","shortname":":arrow_lower_left:","moji":"โ๏ธ"},"arrow_lower_right":{"unicode":"2198-FE0F","name":"arrow lower right","shortname":":arrow_lower_right:","moji":"โ๏ธ"},"arrow_right":{"unicode":"27A1-FE0F","name":"arrow right","shortname":":arrow_right:","moji":"โก๏ธ"},"arrow_right_hook":{"unicode":"21AA-FE0F","name":"arrow right hook","shortname":":arrow_right_hook:","moji":"โช๏ธ"},"arrow_up":{"unicode":"2B06-FE0F","name":"arrow up","shortname":":arrow_up:","moji":"โฌ๏ธ"},"arrow_up_down":{"unicode":"2195-FE0F","name":"arrow up down","shortname":":arrow_up_down:","moji":"โ๏ธ"},"arrow_up_small":{"unicode":"1F53C","name":"arrow up small","shortname":":arrow_up_small:","moji":"๐ผ"},"arrow_upper_left":{"unicode":"2196-FE0F","name":"arrow upper left","shortname":":arrow_upper_left:","moji":"โ๏ธ"},"arrow_upper_right":{"unicode":"2197-FE0F","name":"arrow upper right","shortname":":arrow_upper_right:","moji":"โ๏ธ"},"arrows_clockwise":{"unicode":"1F503","name":"arrows clockwise","shortname":":arrows_clockwise:","moji":"๐"},"arrows_counterclockwise":{"unicode":"1F504","name":"arrows counterclockwise","shortname":":arrows_counterclockwise:","moji":"๐"},"art":{"unicode":"1F3A8","name":"art","shortname":":art:","moji":"๐จ"},"articulated_lorry":{"unicode":"1F69B","name":"articulated lorry","shortname":":articulated_lorry:","moji":"๐"},"asterisk_symbol":{"unicode":"2A-FE0F-20E3","name":"asterisk symbol","shortname":":asterisk_symbol:","moji":"*๏ธโฃ"},"astonished":{"unicode":"1F632","name":"astonished face","shortname":":astonished:","moji":"๐ฒ"},"athletic_shoe":{"unicode":"1F45F","name":"athletic shoe","shortname":":athletic_shoe:","moji":"๐"},"atm":{"unicode":"1F3E7","name":"atm","shortname":":atm:","moji":"๐ง"},"atom":{"unicode":"269B-FE0F","name":"atom","shortname":":atom:","moji":"โ๏ธ"},"avocado":{"unicode":"1F951","name":"avocado","shortname":":avocado:","moji":"๐ฅ"},"b":{"unicode":"1F171-FE0F","name":"b","shortname":":b:","moji":"๐
ฑ๏ธ"},"baby":{"unicode":"1F476","name":"baby","shortname":":baby:","moji":"๐ถ"},"baby_bottle":{"unicode":"1F37C","name":"baby bottle","shortname":":baby_bottle:","moji":"๐ผ"},"baby_chick":{"unicode":"1F424","name":"baby chick","shortname":":baby_chick:","moji":"๐ค"},"baby_symbol":{"unicode":"1F6BC","name":"baby symbol","shortname":":baby_symbol:","moji":"๐ผ"},"baby_tone1":{"unicode":"1F476-1F3FB","name":"baby tone 1","shortname":":baby_tone1:","moji":"๐ถ๐ป"},"baby_tone2":{"unicode":"1F476-1F3FC","name":"baby tone 2","shortname":":baby_tone2:","moji":"๐ถ๐ผ"},"baby_tone3":{"unicode":"1F476-1F3FD","name":"baby tone 3","shortname":":baby_tone3:","moji":"๐ถ๐ฝ"},"baby_tone4":{"unicode":"1F476-1F3FE","name":"baby tone 4","shortname":":baby_tone4:","moji":"๐ถ๐พ"},"baby_tone5":{"unicode":"1F476-1F3FF","name":"baby tone 5","shortname":":baby_tone5:","moji":"๐ถ๐ฟ"},"back":{"unicode":"1F519","name":"back","shortname":":back:","moji":"๐"},"bacon":{"unicode":"1F953","name":"bacon","shortname":":bacon:","moji":"๐ฅ"},"badger":{"unicode":"1F9A1","name":"badger","shortname":":badger:","moji":"๐ฆก"},"badminton":{"unicode":"1F3F8","name":"badminton","shortname":":badminton:","moji":"๐ธ"},"bagel":{"unicode":"1F96F","name":"bagel","shortname":":bagel:","moji":"๐ฅฏ"},"baggage_claim":{"unicode":"1F6C4","name":"baggage claim","shortname":":baggage_claim:","moji":"๐"},"bald":{"unicode":"1F9B2","name":"bald","shortname":":bald:","moji":"๐ฆฒ"},"balloon":{"unicode":"1F388","name":"balloon","shortname":":balloon:","moji":"๐"},"ballot_box":{"unicode":"1F5F3","name":"ballot box","shortname":":ballot_box:","moji":"๐ณ"},"ballot_box_with_check":{"unicode":"2611-FE0F","name":"ballot box with check","shortname":":ballot_box_with_check:","moji":"โ๏ธ"},"bamboo":{"unicode":"1F38D","name":"bamboo","shortname":":bamboo:","moji":"๐"},"banana":{"unicode":"1F34C","name":"banana","shortname":":banana:","moji":"๐"},"bangbang":{"unicode":"203C-FE0F","name":"bangbang","shortname":":bangbang:","moji":"โผ๏ธ"},"bank":{"unicode":"1F3E6","name":"bank","shortname":":bank:","moji":"๐ฆ"},"bar_chart":{"unicode":"1F4CA","name":"bar chart","shortname":":bar_chart:","moji":"๐"},"barber":{"unicode":"1F488","name":"barber","shortname":":barber:","moji":"๐"},"baseball":{"unicode":"26BE","name":"baseball","shortname":":baseball:","moji":"โพ"},"basket":{"unicode":"1F9FA","name":"basket","shortname":":basket:","moji":"๐งบ"},"basketball":{"unicode":"1F3C0","name":"basketball","shortname":":basketball:","moji":"๐"},"basketball_player":{"unicode":"26F9-FE0F","name":"basketball player","shortname":":basketball_player:","moji":"โน๏ธ"},"bat":{"unicode":"1F987","name":"bat","shortname":":bat:","moji":"๐ฆ"},"bath":{"unicode":"1F6C0","name":"bath","shortname":":bath:","moji":"๐"},"bathtub":{"unicode":"1F6C1","name":"bathtub","shortname":":bathtub:","moji":"๐"},"battery":{"unicode":"1F50B","name":"battery","shortname":":battery:","moji":"๐"},"beach":{"unicode":"1F3D6","name":"beach","shortname":":beach:","moji":"๐"},"beach_umbrella":{"unicode":"26F1","name":"beach umbrella","shortname":":beach_umbrella:","moji":"โฑ"},"bear":{"unicode":"1F43B","name":"bear","shortname":":bear:","moji":"๐ป"},"bearded_person":{"unicode":"1F9D4","name":"bearded person","shortname":":bearded_person:","moji":"๐ง"},"bed":{"unicode":"1F6CF","name":"bed","shortname":":bed:","moji":"๐"},"bee":{"unicode":"1F41D","name":"bee","shortname":":bee:","moji":"๐"},"beer":{"unicode":"1F37A","name":"beer","shortname":":beer:","moji":"๐บ"},"beers":{"unicode":"1F37B","name":"beers","shortname":":beers:","moji":"๐ป"},"beetle":{"unicode":"1FAB2","name":"beetle","shortname":":beetle:","moji":"๐ชฒ"},"beginner":{"unicode":"1F530","name":"beginner","shortname":":beginner:","moji":"๐ฐ"},"bell":{"unicode":"1F514","name":"bell","shortname":":bell:","moji":"๐"},"bellhop":{"unicode":"1F6CE","name":"bellhop","shortname":":bellhop:","moji":"๐"},"bento":{"unicode":"1F371","name":"bento","shortname":":bento:","moji":"๐ฑ"},"bicyclist":{"unicode":"1F6B4","name":"bicyclist","shortname":":bicyclist:","moji":"๐ด"},"bike":{"unicode":"1F6B2","name":"bike","shortname":":bike:","moji":"๐ฒ"},"bikini":{"unicode":"1F459","name":"bikini","shortname":":bikini:","moji":"๐"},"billed_cap":{"unicode":"1F9E2","name":"billed cap","shortname":":billed_cap:","moji":"๐งข"},"biohazard":{"unicode":"2623-FE0F","name":"biohazard","shortname":":biohazard:","moji":"โฃ๏ธ"},"bird":{"unicode":"1F426","name":"bird","shortname":":bird:","moji":"๐ฆ"},"birthday":{"unicode":"1F382","name":"birthday","shortname":":birthday:","moji":"๐"},"black_circle":{"unicode":"26AB","name":"black circle","shortname":":black_circle:","moji":"โซ"},"black_heart":{"unicode":"1F5A4","name":"black heart","shortname":":black_heart:","moji":"๐ค"},"black_joker":{"unicode":"1F0CF","name":"black joker","shortname":":black_joker:","moji":"๐"},"black_large_square":{"unicode":"2B1B","name":"black large square","shortname":":black_large_square:","moji":"โฌ"},"black_nib":{"unicode":"2712-FE0F","name":"black nib","shortname":":black_nib:","moji":"โ๏ธ"},"black_square_button":{"unicode":"1F532","name":"black square button","shortname":":black_square_button:","moji":"๐ฒ"},"blossom":{"unicode":"1F33C","name":"blossom","shortname":":blossom:","moji":"๐ผ"},"blowfish":{"unicode":"1F421","name":"blowfish","shortname":":blowfish:","moji":"๐ก"},"blue_book":{"unicode":"1F4D8","name":"blue book","shortname":":blue_book:","moji":"๐"},"blue_car":{"unicode":"1F699","name":"blue car","shortname":":blue_car:","moji":"๐"},"blue_heart":{"unicode":"1F499","name":"blue heart","shortname":":blue_heart:","moji":"๐"},"blush":{"unicode":"1F60A","name":"smiling face with smiling eyes","shortname":":blush:","moji":"๐"},"boar":{"unicode":"1F417","name":"boar","shortname":":boar:","moji":"๐"},"boat":{"unicode":"26F5-FE0F","name":"boat","shortname":":boat:","moji":"โต๏ธ"},"bomb":{"unicode":"1F4A3","name":"bomb","shortname":":bomb:","moji":"๐ฃ"},"bone":{"unicode":"1F9B4","name":"bone","shortname":":bone:","moji":"๐ฆด"},"book":{"unicode":"1F4D6","name":"book","shortname":":book:","moji":"๐"},"bookmark":{"unicode":"1F516","name":"bookmark","shortname":":bookmark:","moji":"๐"},"bookmark_tabs":{"unicode":"1F4D1","name":"bookmark tabs","shortname":":bookmark_tabs:","moji":"๐"},"books":{"unicode":"1F4DA","name":"books","shortname":":books:","moji":"๐"},"boom":{"unicode":"1F4A5","name":"boom","shortname":":boom:","moji":"๐ฅ"},"boot":{"unicode":"1F462","name":"womans boots","shortname":":boot:","moji":"๐ข"},"bouquet":{"unicode":"1F490","name":"bouquet","shortname":":bouquet:","moji":"๐"},"bow":{"unicode":"1F647","name":"person bowing deeply","shortname":":bow:","moji":"๐"},"bow_and_arrow":{"unicode":"1F3F9","name":"bow and arrow","shortname":":bow_and_arrow:","moji":"๐น"},"bow_tone1":{"unicode":"1F647-1F3FB","name":"person bowing deeply tone 1","shortname":":bow_tone1:","moji":"๐๐ป"},"bow_tone2":{"unicode":"1F647-1F3FC","name":"person bowing deeply tone 2","shortname":":bow_tone2:","moji":"๐๐ผ"},"bow_tone3":{"unicode":"1F647-1F3FD","name":"person bowing deeply tone 3","shortname":":bow_tone3:","moji":"๐๐ฝ"},"bow_tone4":{"unicode":"1F647-1F3FE","name":"person bowing deeply tone 4","shortname":":bow_tone4:","moji":"๐๐พ"},"bow_tone5":{"unicode":"1F647-1F3FF","name":"person bowing deeply tone 5","shortname":":bow_tone5:","moji":"๐๐ฟ"},"bowl_with_spoon":{"unicode":"1F963","name":"bowl with spoon","shortname":":bowl_with_spoon:","moji":"๐ฅฃ"},"bowling":{"unicode":"1F3B3","name":"bowling","shortname":":bowling:","moji":"๐ณ"},"boxing_glove":{"unicode":"1F94A","name":"boxing glove","shortname":":boxing_glove:","moji":"๐ฅ"},"boy":{"unicode":"1F466","name":"boy","shortname":":boy:","moji":"๐ฆ"},"boy_tone1":{"unicode":"1F466-1F3FB","name":"boy tone 1","shortname":":boy_tone1:","moji":"๐ฆ๐ป"},"boy_tone2":{"unicode":"1F466-1F3FC","name":"boy tone 2","shortname":":boy_tone2:","moji":"๐ฆ๐ผ"},"boy_tone3":{"unicode":"1F466-1F3FD","name":"boy tone 3","shortname":":boy_tone3:","moji":"๐ฆ๐ฝ"},"boy_tone4":{"unicode":"1F466-1F3FE","name":"boy tone 4","shortname":":boy_tone4:","moji":"๐ฆ๐พ"},"boy_tone5":{"unicode":"1F466-1F3FF","name":"boy tone 5","shortname":":boy_tone5:","moji":"๐ฆ๐ฟ"},"brain":{"unicode":"1F9E0","name":"brain","shortname":":brain:","moji":"๐ง "},"bread":{"unicode":"1F35E","name":"bread","shortname":":bread:","moji":"๐"},"breast_feeding":{"unicode":"1F931","name":"breast feeding","shortname":":breast_feeding:","moji":"๐คฑ"},"bricks":{"unicode":"1F9F1","name":"bricks","shortname":":bricks:","moji":"๐งฑ"},"bride_with_veil":{"unicode":"1F470","name":"bride with veil","shortname":":bride_with_veil:","moji":"๐ฐ"},"bride_with_veil_tone1":{"unicode":"1F470-1F3FB","name":"bride with veil tone 1","shortname":":bride_with_veil_tone1:","moji":"๐ฐ๐ป"},"bride_with_veil_tone2":{"unicode":"1F470-1F3FC","name":"bride with veil tone 2","shortname":":bride_with_veil_tone2:","moji":"๐ฐ๐ผ"},"bride_with_veil_tone3":{"unicode":"1F470-1F3FD","name":"bride with veil tone 3","shortname":":bride_with_veil_tone3:","moji":"๐ฐ๐ฝ"},"bride_with_veil_tone4":{"unicode":"1F470-1F3FE","name":"bride with veil tone 4","shortname":":bride_with_veil_tone4:","moji":"๐ฐ๐พ"},"bride_with_veil_tone5":{"unicode":"1F470-1F3FF","name":"bride with veil tone 5","shortname":":bride_with_veil_tone5:","moji":"๐ฐ๐ฟ"},"bridge_at_night":{"unicode":"1F309","name":"bridge at night","shortname":":bridge_at_night:","moji":"๐"},"briefcase":{"unicode":"1F4BC","name":"briefcase","shortname":":briefcase:","moji":"๐ผ"},"broccoli":{"unicode":"1F966","name":"broccoli","shortname":":broccoli:","moji":"๐ฅฆ"},"broken_heart":{"unicode":"1F494","name":"broken heart","shortname":":broken_heart:","moji":"๐"},"broom":{"unicode":"1F9F9","name":"broom","shortname":":broom:","moji":"๐งน"},"bug":{"unicode":"1F41B","name":"bug","shortname":":bug:","moji":"๐"},"bulb":{"unicode":"1F4A1","name":"bulb","shortname":":bulb:","moji":"๐ก"},"bullettrain_front":{"unicode":"1F685","name":"bullettrain front","shortname":":bullettrain_front:","moji":"๐
"},"bullettrain_side":{"unicode":"1F684","name":"bullettrain side","shortname":":bullettrain_side:","moji":"๐"},"burrito":{"unicode":"1F32F","name":"burrito","shortname":":burrito:","moji":"๐ฏ"},"bus":{"unicode":"1F68C","name":"bus","shortname":":bus:","moji":"๐"},"busstop":{"unicode":"1F68F","name":"busstop","shortname":":busstop:","moji":"๐"},"bust_in_silhouette":{"unicode":"1F464","name":"bust in silhouette","shortname":":bust_in_silhouette:","moji":"๐ค"},"busts_in_silhouette":{"unicode":"1F465","name":"busts in silhouette","shortname":":busts_in_silhouette:","moji":"๐ฅ"},"butterfly":{"unicode":"1F98B","name":"butterfly","shortname":":butterfly:","moji":"๐ฆ"},"cactus":{"unicode":"1F335","name":"cactus","shortname":":cactus:","moji":"๐ต"},"cake":{"unicode":"1F370","name":"cake","shortname":":cake:","moji":"๐ฐ"},"calendar":{"unicode":"1F4C6","name":"calendar","shortname":":calendar:","moji":"๐"},"calendar_spiral":{"unicode":"1F5D3","name":"calendar spiral","shortname":":calendar_spiral:","moji":"๐"},"call_me":{"unicode":"1F919","name":"call me hand","shortname":":call_me:","moji":"๐ค"},"call_me_tone1":{"unicode":"1F919-1F3FB","name":"call me hand tone 1","shortname":":call_me_tone1:","moji":"๐ค๐ป"},"call_me_tone2":{"unicode":"1F919-1F3FC","name":"call me hand tone 2","shortname":":call_me_tone2:","moji":"๐ค๐ผ"},"call_me_tone3":{"unicode":"1F919-1F3FD","name":"call me hand tone 3","shortname":":call_me_tone3:","moji":"๐ค๐ฝ"},"call_me_tone4":{"unicode":"1F919-1F3FE","name":"call me hand tone 4","shortname":":call_me_tone4:","moji":"๐ค๐พ"},"call_me_tone5":{"unicode":"1F919-1F3FF","name":"call me hand tone 5","shortname":":call_me_tone5:","moji":"๐ค๐ฟ"},"calling":{"unicode":"1F4F2","name":"calling","shortname":":calling:","moji":"๐ฒ"},"camel":{"unicode":"1F42B","name":"camel","shortname":":camel:","moji":"๐ซ"},"camera":{"unicode":"1F4F7","name":"camera","shortname":":camera:","moji":"๐ท"},"camera_with_flash":{"unicode":"1F4F8","name":"camera with flash","shortname":":camera_with_flash:","moji":"๐ธ"},"camping":{"unicode":"1F3D5","name":"camping","shortname":":camping:","moji":"๐"},"cancer":{"unicode":"264B","name":"cancer","shortname":":cancer:","moji":"โ"},"candle":{"unicode":"1F56F","name":"candle","shortname":":candle:","moji":"๐ฏ"},"candy":{"unicode":"1F36C","name":"candy","shortname":":candy:","moji":"๐ฌ"},"canned_food":{"unicode":"1F96B","name":"canned food","shortname":":canned_food:","moji":"๐ฅซ"},"canoe":{"unicode":"1F6F6","name":"canoe","shortname":":canoe:","moji":"๐ถ"},"capital_abcd":{"unicode":"1F520","name":"capital abcd","shortname":":capital_abcd:","moji":"๐ "},"capricorn":{"unicode":"2651","name":"capricorn","shortname":":capricorn:","moji":"โ"},"car":{"unicode":"1F697","name":"car","shortname":":car:","moji":"๐"},"card_box":{"unicode":"1F5C3","name":"card box","shortname":":card_box:","moji":"๐"},"card_index":{"unicode":"1F4C7","name":"card index","shortname":":card_index:","moji":"๐"},"carousel_horse":{"unicode":"1F3A0","name":"carousel horse","shortname":":carousel_horse:","moji":"๐ "},"carrot":{"unicode":"1F955","name":"carrot","shortname":":carrot:","moji":"๐ฅ"},"cartwheel":{"unicode":"1F938","name":"cartwheel","shortname":":cartwheel:","moji":"๐คธ"},"cat":{"unicode":"1F431","name":"cat","shortname":":cat:","moji":"๐ฑ"},"cat2":{"unicode":"1F408","name":"cat2","shortname":":cat2:","moji":"๐"},"cd":{"unicode":"1F4BF","name":"cd","shortname":":cd:","moji":"๐ฟ"},"chains":{"unicode":"26D3","name":"chains","shortname":":chains:","moji":"โ"},"champagne":{"unicode":"1F37E","name":"champagne","shortname":":champagne:","moji":"๐พ"},"champagne_glass":{"unicode":"1F942","name":"champagne glass","shortname":":champagne_glass:","moji":"๐ฅ"},"chart":{"unicode":"1F4B9","name":"chart","shortname":":chart:","moji":"๐น"},"chart_with_downwards_trend":{"unicode":"1F4C9","name":"chart with downwards trend","shortname":":chart_with_downwards_trend:","moji":"๐"},"chart_with_upwards_trend":{"unicode":"1F4C8","name":"chart with upwards trend","shortname":":chart_with_upwards_trend:","moji":"๐"},"checkered_flag":{"unicode":"1F3C1","name":"checkered flag","shortname":":checkered_flag:","moji":"๐"},"cheese":{"unicode":"1F9C0","name":"cheese","shortname":":cheese:","moji":"๐ง"},"cherries":{"unicode":"1F352","name":"cherries","shortname":":cherries:","moji":"๐"},"cherry_blossom":{"unicode":"1F338","name":"cherry blossom","shortname":":cherry_blossom:","moji":"๐ธ"},"chess_pawn":{"unicode":"265F-FE0F","name":"chess pawn","shortname":":chess_pawn:","moji":"โ๏ธ"},"chestnut":{"unicode":"1F330","name":"chestnut","shortname":":chestnut:","moji":"๐ฐ"},"chicken":{"unicode":"1F414","name":"chicken","shortname":":chicken:","moji":"๐"},"child":{"unicode":"1F9D2","name":"child","shortname":":child:","moji":"๐ง"},"children_crossing":{"unicode":"1F6B8","name":"children crossing","shortname":":children_crossing:","moji":"๐ธ"},"chipmunk":{"unicode":"1F43F","name":"chipmunk","shortname":":chipmunk:","moji":"๐ฟ"},"chocolate_bar":{"unicode":"1F36B","name":"chocolate bar","shortname":":chocolate_bar:","moji":"๐ซ"},"chopsticks":{"unicode":"1F962","name":"chopsticks","shortname":":chopsticks:","moji":"๐ฅข"},"christmas_tree":{"unicode":"1F384","name":"christmas tree","shortname":":christmas_tree:","moji":"๐"},"church":{"unicode":"26EA","name":"church","shortname":":church:","moji":"โช"},"cinema":{"unicode":"1F3A6","name":"cinema","shortname":":cinema:","moji":"๐ฆ"},"circus_tent":{"unicode":"1F3AA","name":"circus tent","shortname":":circus_tent:","moji":"๐ช"},"city_dusk":{"unicode":"1F306","name":"city dusk","shortname":":city_dusk:","moji":"๐"},"city_sunrise":{"unicode":"1F307","name":"city sunrise","shortname":":city_sunrise:","moji":"๐"},"city_sunset":{"unicode":"1F307","name":"city sunset","shortname":":city_sunset:","moji":"๐"},"cityscape":{"unicode":"1F3D9","name":"cityscape","shortname":":cityscape:","moji":"๐"},"cl":{"unicode":"1F191","name":"cl","shortname":":cl:","moji":"๐"},"clap":{"unicode":"1F44F","name":"clapping hands sign","shortname":":clap:","moji":"๐"},"clap_tone1":{"unicode":"1F44F-1F3FB","name":"clapping hands sign tone 1","shortname":":clap_tone1:","moji":"๐๐ป"},"clap_tone2":{"unicode":"1F44F-1F3FC","name":"clapping hands sign tone 2","shortname":":clap_tone2:","moji":"๐๐ผ"},"clap_tone3":{"unicode":"1F44F-1F3FD","name":"clapping hands sign tone 3","shortname":":clap_tone3:","moji":"๐๐ฝ"},"clap_tone4":{"unicode":"1F44F-1F3FE","name":"clapping hands sign tone 4","shortname":":clap_tone4:","moji":"๐๐พ"},"clap_tone5":{"unicode":"1F44F-1F3FF","name":"clapping hands sign tone 5","shortname":":clap_tone5:","moji":"๐๐ฟ"},"clapper":{"unicode":"1F3AC","name":"clapper","shortname":":clapper:","moji":"๐ฌ"},"classical_building":{"unicode":"1F3DB","name":"classical building","shortname":":classical_building:","moji":"๐"},"clipboard":{"unicode":"1F4CB","name":"clipboard","shortname":":clipboard:","moji":"๐"},"clock":{"unicode":"1F570","name":"clock","shortname":":clock:","moji":"๐ฐ"},"clock1":{"unicode":"1F550","name":"clock1","shortname":":clock1:","moji":"๐"},"clock10":{"unicode":"1F559","name":"clock10","shortname":":clock10:","moji":"๐"},"clock1030":{"unicode":"1F565","name":"clock1030","shortname":":clock1030:","moji":"๐ฅ"},"clock11":{"unicode":"1F55A","name":"clock11","shortname":":clock11:","moji":"๐"},"clock1130":{"unicode":"1F566","name":"clock1130","shortname":":clock1130:","moji":"๐ฆ"},"clock12":{"unicode":"1F55B","name":"clock12","shortname":":clock12:","moji":"๐"},"clock1230":{"unicode":"1F567","name":"clock1230","shortname":":clock1230:","moji":"๐ง"},"clock130":{"unicode":"1F55C","name":"clock130","shortname":":clock130:","moji":"๐"},"clock2":{"unicode":"1F551","name":"clock2","shortname":":clock2:","moji":"๐"},"clock230":{"unicode":"1F55D","name":"clock230","shortname":":clock230:","moji":"๐"},"clock3":{"unicode":"1F552","name":"clock3","shortname":":clock3:","moji":"๐"},"clock330":{"unicode":"1F55E","name":"clock330","shortname":":clock330:","moji":"๐"},"clock4":{"unicode":"1F553","name":"clock4","shortname":":clock4:","moji":"๐"},"clock430":{"unicode":"1F55F","name":"clock430","shortname":":clock430:","moji":"๐"},"clock5":{"unicode":"1F554","name":"clock5","shortname":":clock5:","moji":"๐"},"clock530":{"unicode":"1F560","name":"clock530","shortname":":clock530:","moji":"๐ "},"clock6":{"unicode":"1F555","name":"clock6","shortname":":clock6:","moji":"๐"},"clock630":{"unicode":"1F561","name":"clock630","shortname":":clock630:","moji":"๐ก"},"clock7":{"unicode":"1F556","name":"clock7","shortname":":clock7:","moji":"๐"},"clock730":{"unicode":"1F562","name":"clock730","shortname":":clock730:","moji":"๐ข"},"clock8":{"unicode":"1F557","name":"clock8","shortname":":clock8:","moji":"๐"},"clock830":{"unicode":"1F563","name":"clock830","shortname":":clock830:","moji":"๐ฃ"},"clock9":{"unicode":"1F558","name":"clock9","shortname":":clock9:","moji":"๐"},"clock930":{"unicode":"1F564","name":"clock930","shortname":":clock930:","moji":"๐ค"},"closed_book":{"unicode":"1F4D5","name":"closed book","shortname":":closed_book:","moji":"๐"},"closed_lock_with_key":{"unicode":"1F510","name":"closed lock with key","shortname":":closed_lock_with_key:","moji":"๐"},"closed_umbrella":{"unicode":"1F302","name":"closed umbrella","shortname":":closed_umbrella:","moji":"๐"},"cloud":{"unicode":"2601-FE0F","name":"cloud","shortname":":cloud:","moji":"โ๏ธ"},"cloud_lightning":{"unicode":"1F329","name":"cloud lightning","shortname":":cloud_lightning:","moji":"๐ฉ"},"cloud_rain":{"unicode":"1F327","name":"cloud rain","shortname":":cloud_rain:","moji":"๐ง"},"cloud_snow":{"unicode":"1F328","name":"cloud snow","shortname":":cloud_snow:","moji":"๐จ"},"cloud_tornado":{"unicode":"1F32A","name":"cloud tornado","shortname":":cloud_tornado:","moji":"๐ช"},"clown":{"unicode":"1F921","name":"clown face","shortname":":clown:","moji":"๐คก"},"clubs":{"unicode":"2663-FE0F","name":"clubs","shortname":":clubs:","moji":"โฃ๏ธ"},"coat":{"unicode":"1F9E5","name":"coat","shortname":":coat:","moji":"๐งฅ"},"cocktail":{"unicode":"1F378","name":"cocktail","shortname":":cocktail:","moji":"๐ธ"},"coconut":{"unicode":"1F965","name":"coconut","shortname":":coconut:","moji":"๐ฅฅ"},"coffee":{"unicode":"2615","name":"coffee","shortname":":coffee:","moji":"โ"},"coffin":{"unicode":"26B0-FE0F","name":"coffin","shortname":":coffin:","moji":"โฐ๏ธ"},"cold_face":{"unicode":"1F976","name":"cold face","shortname":":cold_face:","moji":"๐ฅถ"},"cold_sweat":{"unicode":"1F630","name":"face with open mouth and cold sweat","shortname":":cold_sweat:","moji":"๐ฐ"},"collision":{"unicode":"1F4A5","name":"collision","shortname":":collision:","moji":"๐ฅ"},"comet":{"unicode":"2604-FE0F","name":"comet","shortname":":comet:","moji":"โ๏ธ"},"compass":{"unicode":"1F9ED","name":"compass","shortname":":compass:","moji":"๐งญ"},"compression":{"unicode":"1F5DC","name":"compression","shortname":":compression:","moji":"๐"},"computer":{"unicode":"1F4BB","name":"computer","shortname":":computer:","moji":"๐ป"},"confetti_ball":{"unicode":"1F38A","name":"confetti ball","shortname":":confetti_ball:","moji":"๐"},"confounded":{"unicode":"1F616","name":"confounded face","shortname":":confounded:","moji":"๐"},"confused":{"unicode":"1F615","name":"confused face","shortname":":confused:","moji":"๐"},"congratulations":{"unicode":"3297-FE0F","name":"congratulations","shortname":":congratulations:","moji":"ใ๏ธ"},"construction":{"unicode":"1F6A7","name":"construction","shortname":":construction:","moji":"๐ง"},"construction_site":{"unicode":"1F3D7","name":"construction site","shortname":":construction_site:","moji":"๐"},"construction_worker":{"unicode":"1F477","name":"construction worker","shortname":":construction_worker:","moji":"๐ท"},"construction_worker_tone1":{"unicode":"1F477-1F3FB","name":"construction worker tone 1","shortname":":construction_worker_tone1:","moji":"๐ท๐ป"},"construction_worker_tone2":{"unicode":"1F477-1F3FC","name":"construction worker tone 2","shortname":":construction_worker_tone2:","moji":"๐ท๐ผ"},"construction_worker_tone3":{"unicode":"1F477-1F3FD","name":"construction worker tone 3","shortname":":construction_worker_tone3:","moji":"๐ท๐ฝ"},"construction_worker_tone4":{"unicode":"1F477-1F3FE","name":"construction worker tone 4","shortname":":construction_worker_tone4:","moji":"๐ท๐พ"},"construction_worker_tone5":{"unicode":"1F477-1F3FF","name":"construction worker tone 5","shortname":":construction_worker_tone5:","moji":"๐ท๐ฟ"},"control_knobs":{"unicode":"1F39B","name":"control knobs","shortname":":control_knobs:","moji":"๐"},"convenience_store":{"unicode":"1F3EA","name":"convenience store","shortname":":convenience_store:","moji":"๐ช"},"cookie":{"unicode":"1F36A","name":"cookie","shortname":":cookie:","moji":"๐ช"},"cooking":{"unicode":"1F373","name":"cooking","shortname":":cooking:","moji":"๐ณ"},"cool":{"unicode":"1F192","name":"cool","shortname":":cool:","moji":"๐"},"cop":{"unicode":"1F46E","name":"police officer","shortname":":cop:","moji":"๐ฎ"},"cop_tone1":{"unicode":"1F46E-1F3FB","name":"police officer tone 1","shortname":":cop_tone1:","moji":"๐ฎ๐ป"},"cop_tone2":{"unicode":"1F46E-1F3FC","name":"police officer tone 2","shortname":":cop_tone2:","moji":"๐ฎ๐ผ"},"cop_tone3":{"unicode":"1F46E-1F3FD","name":"police officer tone 3","shortname":":cop_tone3:","moji":"๐ฎ๐ฝ"},"cop_tone4":{"unicode":"1F46E-1F3FE","name":"police officer tone 4","shortname":":cop_tone4:","moji":"๐ฎ๐พ"},"cop_tone5":{"unicode":"1F46E-1F3FF","name":"police officer tone 5","shortname":":cop_tone5:","moji":"๐ฎ๐ฟ"},"copyright":{"unicode":"A9-FE0F","name":"copyright","shortname":":copyright:","moji":"ยฉ๏ธ"},"corn":{"unicode":"1F33D","name":"corn","shortname":":corn:","moji":"๐ฝ"},"couch":{"unicode":"1F6CB","name":"couch","shortname":":couch:","moji":"๐"},"couple":{"unicode":"1F46B","name":"man and woman holding hands","shortname":":couple:","moji":"๐ซ"},"couple_mm":{"unicode":"1F468-2764-1F468","name":"couple (man,man)","shortname":":couple_mm:","moji":"๐จโโค๏ธโ๐จ"},"couple_with_heart":{"unicode":"1F491","name":"couple with heart","shortname":":couple_with_heart:","moji":"๐"},"couple_ww":{"unicode":"1F469-2764-1F469","name":"couple (woman,woman)","shortname":":couple_ww:","moji":"๐ฉโโค๏ธโ๐ฉ"},"couplekiss":{"unicode":"1F48F","name":"kiss","shortname":":couplekiss:","moji":"๐"},"cow":{"unicode":"1F42E","name":"cow","shortname":":cow:","moji":"๐ฎ"},"cow2":{"unicode":"1F404","name":"cow2","shortname":":cow2:","moji":"๐"},"cowboy":{"unicode":"1F920","name":"face with cowboy hat","shortname":":cowboy:","moji":"๐ค "},"crab":{"unicode":"1F980","name":"crab","shortname":":crab:","moji":"๐ฆ"},"crayon":{"unicode":"1F58D","name":"crayon","shortname":":crayon:","moji":"๐"},"credit_card":{"unicode":"1F4B3","name":"credit card","shortname":":credit_card:","moji":"๐ณ"},"crescent_moon":{"unicode":"1F319","name":"crescent moon","shortname":":crescent_moon:","moji":"๐"},"cricket":{"unicode":"1F997","name":"cricket","shortname":":cricket:","moji":"๐ฆ"},"crocodile":{"unicode":"1F40A","name":"crocodile","shortname":":crocodile:","moji":"๐"},"croissant":{"unicode":"1F950","name":"croissant","shortname":":croissant:","moji":"๐ฅ"},"cross":{"unicode":"271D-FE0F","name":"cross","shortname":":cross:","moji":"โ๏ธ"},"crossed_flags":{"unicode":"1F38C","name":"crossed flags","shortname":":crossed_flags:","moji":"๐"},"crossed_swords":{"unicode":"2694-FE0F","name":"crossed swords","shortname":":crossed_swords:","moji":"โ๏ธ"},"crown":{"unicode":"1F451","name":"crown","shortname":":crown:","moji":"๐"},"cruise_ship":{"unicode":"1F6F3","name":"cruise ship","shortname":":cruise_ship:","moji":"๐ณ"},"cry":{"unicode":"1F622","name":"crying face","shortname":":cry:","moji":"๐ข"},"crying_cat_face":{"unicode":"1F63F","name":"crying cat face","shortname":":crying_cat_face:","moji":"๐ฟ"},"crystal_ball":{"unicode":"1F52E","name":"crystal ball","shortname":":crystal_ball:","moji":"๐ฎ"},"cucumber":{"unicode":"1F952","name":"cucumber","shortname":":cucumber:","moji":"๐ฅ"},"cup_with_straw":{"unicode":"1F964","name":"cup with straw","shortname":":cup_with_straw:","moji":"๐ฅค"},"cupcake":{"unicode":"1F9C1","name":"cupcake","shortname":":cupcake:","moji":"๐ง"},"cupid":{"unicode":"1F498","name":"cupid","shortname":":cupid:","moji":"๐"},"curling_stone":{"unicode":"1F94C","name":"curling stone","shortname":":curling_stone:","moji":"๐ฅ"},"curly_haired":{"unicode":"1F9B1","name":"curly haired","shortname":":curly_haired:","moji":"๐ฆฑ"},"curly_loop":{"unicode":"27B0","name":"curly loop","shortname":":curly_loop:","moji":"โฐ"},"currency_exchange":{"unicode":"1F4B1","name":"currency exchange","shortname":":currency_exchange:","moji":"๐ฑ"},"curry":{"unicode":"1F35B","name":"curry","shortname":":curry:","moji":"๐"},"custard":{"unicode":"1F36E","name":"custard","shortname":":custard:","moji":"๐ฎ"},"customs":{"unicode":"1F6C3","name":"customs","shortname":":customs:","moji":"๐"},"cut_of_meat":{"unicode":"1F969","name":"cut of meat","shortname":":cut_of_meat:","moji":"๐ฅฉ"},"cyclone":{"unicode":"1F300","name":"cyclone","shortname":":cyclone:","moji":"๐"},"dagger":{"unicode":"1F5E1","name":"dagger","shortname":":dagger:","moji":"๐ก"},"dancer":{"unicode":"1F483","name":"dancer","shortname":":dancer:","moji":"๐"},"dancer_tone1":{"unicode":"1F483-1F3FB","name":"dancer tone 1","shortname":":dancer_tone1:","moji":"๐๐ป"},"dancer_tone2":{"unicode":"1F483-1F3FC","name":"dancer tone 2","shortname":":dancer_tone2:","moji":"๐๐ผ"},"dancer_tone3":{"unicode":"1F483-1F3FD","name":"dancer tone 3","shortname":":dancer_tone3:","moji":"๐๐ฝ"},"dancer_tone4":{"unicode":"1F483-1F3FE","name":"dancer tone 4","shortname":":dancer_tone4:","moji":"๐๐พ"},"dancer_tone5":{"unicode":"1F483-1F3FF","name":"dancer tone 5","shortname":":dancer_tone5:","moji":"๐๐ฟ"},"dancers":{"unicode":"1F46F","name":"woman with bunny ears","shortname":":dancers:","moji":"๐ฏ"},"dango":{"unicode":"1F361","name":"dango","shortname":":dango:","moji":"๐ก"},"dark_sunglasses":{"unicode":"1F576","name":"dark sunglasses","shortname":":dark_sunglasses:","moji":"๐ถ"},"dart":{"unicode":"1F3AF","name":"dart","shortname":":dart:","moji":"๐ฏ"},"dash":{"unicode":"1F4A8","name":"dash","shortname":":dash:","moji":"๐จ"},"date":{"unicode":"1F4C5","name":"date","shortname":":date:","moji":"๐
"},"deciduous_tree":{"unicode":"1F333","name":"deciduous tree","shortname":":deciduous_tree:","moji":"๐ณ"},"deer":{"unicode":"1F98C","name":"deer","shortname":":deer:","moji":"๐ฆ"},"department_store":{"unicode":"1F3EC","name":"department store","shortname":":department_store:","moji":"๐ฌ"},"desert":{"unicode":"1F3DC","name":"desert","shortname":":desert:","moji":"๐"},"desktop":{"unicode":"1F5A5","name":"desktop","shortname":":desktop:","moji":"๐ฅ"},"diamond_shape_with_a_dot_inside":{"unicode":"1F4A0","name":"diamond shape with a dot inside","shortname":":diamond_shape_with_a_dot_inside:","moji":"๐ "},"diamonds":{"unicode":"2666-FE0F","name":"diamonds","shortname":":diamonds:","moji":"โฆ๏ธ"},"disappointed":{"unicode":"1F61E","name":"disappointed face","shortname":":disappointed:","moji":"๐"},"disappointed_relieved":{"unicode":"1F625","name":"disappointed but relieved face","shortname":":disappointed_relieved:","moji":"๐ฅ"},"dividers":{"unicode":"1F5C2","name":"dividers","shortname":":dividers:","moji":"๐"},"dizzy":{"unicode":"1F4AB","name":"dizzy","shortname":":dizzy:","moji":"๐ซ"},"dizzy_face":{"unicode":"1F635","name":"dizzy face","shortname":":dizzy_face:","moji":"๐ต"},"dna":{"unicode":"1F9EC","name":"dna","shortname":":dna:","moji":"๐งฌ"},"do_not_litter":{"unicode":"1F6AF","name":"do not litter","shortname":":do_not_litter:","moji":"๐ฏ"},"dog":{"unicode":"1F436","name":"dog","shortname":":dog:","moji":"๐ถ"},"dog2":{"unicode":"1F415","name":"dog2","shortname":":dog2:","moji":"๐"},"dollar":{"unicode":"1F4B5","name":"dollar","shortname":":dollar:","moji":"๐ต"},"dolls":{"unicode":"1F38E","name":"dolls","shortname":":dolls:","moji":"๐"},"dolphin":{"unicode":"1F42C","name":"dolphin","shortname":":dolphin:","moji":"๐ฌ"},"door":{"unicode":"1F6AA","name":"door","shortname":":door:","moji":"๐ช"},"doughnut":{"unicode":"1F369","name":"doughnut","shortname":":doughnut:","moji":"๐ฉ"},"dove":{"unicode":"1F54A","name":"dove","shortname":":dove:","moji":"๐"},"dragon":{"unicode":"1F409","name":"dragon","shortname":":dragon:","moji":"๐"},"dragon_face":{"unicode":"1F432","name":"dragon face","shortname":":dragon_face:","moji":"๐ฒ"},"dress":{"unicode":"1F457","name":"dress","shortname":":dress:","moji":"๐"},"dromedary_camel":{"unicode":"1F42A","name":"dromedary camel","shortname":":dromedary_camel:","moji":"๐ช"},"drooling_face":{"unicode":"1F924","name":"drooling face","shortname":":drooling_face:","moji":"๐คค"},"droplet":{"unicode":"1F4A7","name":"droplet","shortname":":droplet:","moji":"๐ง"},"drum":{"unicode":"1F941","name":"drum","shortname":":drum:","moji":"๐ฅ"},"duck":{"unicode":"1F986","name":"duck","shortname":":duck:","moji":"๐ฆ"},"dumpling":{"unicode":"1F95F","name":"dumpling","shortname":":dumpling:","moji":"๐ฅ"},"dvd":{"unicode":"1F4C0","name":"dvd","shortname":":dvd:","moji":"๐"},"e-mail":{"unicode":"1F4E7","name":"e-mail","shortname":":e-mail:","moji":"๐ง"},"eagle":{"unicode":"1F985","name":"eagle","shortname":":eagle:","moji":"๐ฆ
"},"ear":{"unicode":"1F442","name":"ear","shortname":":ear:","moji":"๐"},"ear_of_rice":{"unicode":"1F33E","name":"ear of rice","shortname":":ear_of_rice:","moji":"๐พ"},"ear_tone1":{"unicode":"1F442-1F3FB","name":"ear tone 1","shortname":":ear_tone1:","moji":"๐๐ป"},"ear_tone2":{"unicode":"1F442-1F3FC","name":"ear tone 2","shortname":":ear_tone2:","moji":"๐๐ผ"},"ear_tone3":{"unicode":"1F442-1F3FD","name":"ear tone 3","shortname":":ear_tone3:","moji":"๐๐ฝ"},"ear_tone4":{"unicode":"1F442-1F3FE","name":"ear tone 4","shortname":":ear_tone4:","moji":"๐๐พ"},"ear_tone5":{"unicode":"1F442-1F3FF","name":"ear tone 5","shortname":":ear_tone5:","moji":"๐๐ฟ"},"earth_africa":{"unicode":"1F30D","name":"earth africa","shortname":":earth_africa:","moji":"๐"},"earth_americas":{"unicode":"1F30E","name":"earth americas","shortname":":earth_americas:","moji":"๐"},"earth_asia":{"unicode":"1F30F","name":"earth asia","shortname":":earth_asia:","moji":"๐"},"egg":{"unicode":"1F95A","name":"egg","shortname":":egg:","moji":"๐ฅ"},"eggplant":{"unicode":"1F346","name":"eggplant","shortname":":eggplant:","moji":"๐"},"eight":{"unicode":"38-FE0F-20E3","name":"eight","shortname":":eight:","moji":"8๏ธโฃ"},"eight_pointed_black_star":{"unicode":"2734-FE0F","name":"eight pointed black star","shortname":":eight_pointed_black_star:","moji":"โด๏ธ"},"eight_spoked_asterisk":{"unicode":"2733-FE0F","name":"eight spoked asterisk","shortname":":eight_spoked_asterisk:","moji":"โณ๏ธ"},"eject":{"unicode":"23CF-FE0F","name":"eject","shortname":":eject:","moji":"โ๏ธ"},"electric_plug":{"unicode":"1F50C","name":"electric plug","shortname":":electric_plug:","moji":"๐"},"elephant":{"unicode":"1F418","name":"elephant","shortname":":elephant:","moji":"๐"},"elf":{"unicode":"1F9DD","name":"elf","shortname":":elf:","moji":"๐ง"},"email":{"unicode":"1F4E7","name":"email","shortname":":email:","moji":"๐ง"},"end":{"unicode":"1F51A","name":"end","shortname":":end:","moji":"๐"},"england":{"unicode":"1F3F4-E0067-E0062-E0065-E006E-E0067-E007F","name":"england","shortname":":england:","moji":"๐ด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ"},"envelope":{"unicode":"2709-FE0F","name":"envelope","shortname":":envelope:","moji":"โ๏ธ"},"envelope_with_arrow":{"unicode":"1F4E9","name":"envelope with arrow","shortname":":envelope_with_arrow:","moji":"๐ฉ"},"euro":{"unicode":"1F4B6","name":"euro","shortname":":euro:","moji":"๐ถ"},"european_castle":{"unicode":"1F3F0","name":"european castle","shortname":":european_castle:","moji":"๐ฐ"},"european_post_office":{"unicode":"1F3E4","name":"european post office","shortname":":european_post_office:","moji":"๐ค"},"evergreen_tree":{"unicode":"1F332","name":"evergreen tree","shortname":":evergreen_tree:","moji":"๐ฒ"},"exclamation":{"unicode":"2757","name":"exclamation","shortname":":exclamation:","moji":"โ"},"exploding_head":{"unicode":"1F92F","name":"exploding head","shortname":":exploding_head:","moji":"๐คฏ"},"expressionless":{"unicode":"1F611","name":"expressionless face","shortname":":expressionless:","moji":"๐"},"eye":{"unicode":"1F441","name":"eye","shortname":":eye:","moji":"๐"},"eyeglasses":{"unicode":"1F453","name":"eyeglasses","shortname":":eyeglasses:","moji":"๐"},"eyes":{"unicode":"1F440","name":"eyes","shortname":":eyes:","moji":"๐"},"face_palm":{"unicode":"1F926","name":"face palm","shortname":":face_palm:","moji":"๐คฆ"},"face_palm_tone1":{"unicode":"1F926-1F3FB","name":"face palm tone 1","shortname":":face_palm_tone1:","moji":"๐คฆ๐ป"},"face_palm_tone2":{"unicode":"1F926-1F3FC","name":"face palm tone 2","shortname":":face_palm_tone2:","moji":"๐คฆ๐ผ"},"face_palm_tone3":{"unicode":"1F926-1F3FD","name":"face palm tone 3","shortname":":face_palm_tone3:","moji":"๐คฆ๐ฝ"},"face_palm_tone4":{"unicode":"1F926-1F3FE","name":"face palm tone 4","shortname":":face_palm_tone4:","moji":"๐คฆ๐พ"},"face_palm_tone5":{"unicode":"1F926-1F3FF","name":"face palm tone 5","shortname":":face_palm_tone5:","moji":"๐คฆ๐ฟ"},"face_vomiting":{"unicode":"1F92E","name":"face vomiting","shortname":":face_vomiting:","moji":"๐คฎ"},"face_with_hand_over_mouth":{"unicode":"1F92D","name":"face with hand over mouth","shortname":":face_with_hand_over_mouth:","moji":"๐คญ"},"face_with_monocle":{"unicode":"1F9D0","name":"face with monocle","shortname":":face_with_monocle:","moji":"๐ง"},"face_with_raised_eyebrow":{"unicode":"1F928","name":"face with raised eyebrow","shortname":":face_with_raised_eyebrow:","moji":"๐คจ"},"face_with_symbols_over_mouth":{"unicode":"1F92C","name":"face with symbols over mouth","shortname":":face_with_symbols_over_mouth:","moji":"๐คฌ"},"facepunch":{"unicode":"1F44A","name":"facepunch","shortname":":facepunch:","moji":"๐"},"factory":{"unicode":"1F3ED","name":"factory","shortname":":factory:","moji":"๐ญ"},"fairy":{"unicode":"1F9DA","name":"fairy","shortname":":fairy:","moji":"๐ง"},"fallen_leaf":{"unicode":"1F342","name":"fallen leaf","shortname":":fallen_leaf:","moji":"๐"},"family":{"unicode":"1F46A","name":"family","shortname":":family:","moji":"๐ช"},"family_mmb":{"unicode":"1F468-1F468-1F466","name":"family (man,man,boy)","shortname":":family_mmb:","moji":"๐จโ๐จโ๐ฆ"},"family_mmbb":{"unicode":"1F468-1F468-1F466-1F466","name":"family (man,man,boy,boy)","shortname":":family_mmbb:","moji":"๐จโ๐จโ๐ฆโ๐ฆ"},"family_mmg":{"unicode":"1F468-1F468-1F467","name":"family (man,man,girl)","shortname":":family_mmg:","moji":"๐จโ๐จโ๐ง"},"family_mmgb":{"unicode":"1F468-1F468-1F467-1F466","name":"family (man,man,girl,boy)","shortname":":family_mmgb:","moji":"๐จโ๐จโ๐งโ๐ฆ"},"family_mmgg":{"unicode":"1F468-1F468-1F467-1F467","name":"family (man,man,girl,girl)","shortname":":family_mmgg:","moji":"๐จโ๐จโ๐งโ๐ง"},"family_mwbb":{"unicode":"1F468-1F469-1F466-1F466","name":"family (man,woman,boy,boy)","shortname":":family_mwbb:","moji":"๐จโ๐ฉโ๐ฆโ๐ฆ"},"family_mwg":{"unicode":"1F468-1F469-1F467","name":"family (man,woman,girl)","shortname":":family_mwg:","moji":"๐จโ๐ฉโ๐ง"},"family_mwgb":{"unicode":"1F468-1F469-1F467-1F466","name":"family (man,woman,girl,boy)","shortname":":family_mwgb:","moji":"๐จโ๐ฉโ๐งโ๐ฆ"},"family_mwgg":{"unicode":"1F468-1F469-1F467-1F467","name":"family (man,woman,girl,girl)","shortname":":family_mwgg:","moji":"๐จโ๐ฉโ๐งโ๐ง"},"family_wwb":{"unicode":"1F469-1F469-1F466","name":"family (woman,woman,boy)","shortname":":family_wwb:","moji":"๐ฉโ๐ฉโ๐ฆ"},"family_wwbb":{"unicode":"1F469-1F469-1F466-1F466","name":"family (woman,woman,boy,boy)","shortname":":family_wwbb:","moji":"๐ฉโ๐ฉโ๐ฆโ๐ฆ"},"family_wwg":{"unicode":"1F469-1F469-1F467","name":"family (woman,woman,girl)","shortname":":family_wwg:","moji":"๐ฉโ๐ฉโ๐ง"},"family_wwgb":{"unicode":"1F469-1F469-1F467-1F466","name":"family (woman,woman,girl,boy)","shortname":":family_wwgb:","moji":"๐ฉโ๐ฉโ๐งโ๐ฆ"},"family_wwgg":{"unicode":"1F469-1F469-1F467-1F467","name":"family (woman,woman,girl,girl)","shortname":":family_wwgg:","moji":"๐ฉโ๐ฉโ๐งโ๐ง"},"fast_forward":{"unicode":"23E9","name":"fast forward","shortname":":fast_forward:","moji":"โฉ"},"fax":{"unicode":"1F4E0","name":"fax","shortname":":fax:","moji":"๐ "},"fearful":{"unicode":"1F628","name":"fearful face","shortname":":fearful:","moji":"๐จ"},"feet":{"unicode":"1F43E","name":"feet","shortname":":feet:","moji":"๐พ"},"female_sign":{"unicode":"2640-FE0F-FE0F","name":"female sign","shortname":":female_sign:","moji":"โ๏ธ๏ธ"},"fencer":{"unicode":"1F93A","name":"fencer","shortname":":fencer:","moji":"๐คบ"},"ferris_wheel":{"unicode":"1F3A1","name":"ferris wheel","shortname":":ferris_wheel:","moji":"๐ก"},"ferry":{"unicode":"26F4","name":"ferry","shortname":":ferry:","moji":"โด"},"field_hockey":{"unicode":"1F3D1","name":"field hockey","shortname":":field_hockey:","moji":"๐"},"file_cabinet":{"unicode":"1F5C4","name":"file cabinet","shortname":":file_cabinet:","moji":"๐"},"file_folder":{"unicode":"1F4C1","name":"file folder","shortname":":file_folder:","moji":"๐"},"film_frames":{"unicode":"1F39E","name":"film frames","shortname":":film_frames:","moji":"๐"},"fingers_crossed":{"unicode":"1F91E","name":"hand with first and index finger crossed","shortname":":fingers_crossed:","moji":"๐ค"},"fingers_crossed_tone1":{"unicode":"1F91E-1F3FB","name":"hand with index and middle fingers crossed tone 1","shortname":":fingers_crossed_tone1:","moji":"๐ค๐ป"},"fingers_crossed_tone2":{"unicode":"1F91E-1F3FC","name":"hand with index and middle fingers crossed tone 2","shortname":":fingers_crossed_tone2:","moji":"๐ค๐ผ"},"fingers_crossed_tone3":{"unicode":"1F91E-1F3FD","name":"hand with index and middle fingers crossed tone 3","shortname":":fingers_crossed_tone3:","moji":"๐ค๐ฝ"},"fingers_crossed_tone4":{"unicode":"1F91E-1F3FE","name":"hand with index and middle fingers crossed tone 4","shortname":":fingers_crossed_tone4:","moji":"๐ค๐พ"},"fingers_crossed_tone5":{"unicode":"1F91E-1F3FF","name":"hand with index and middle fingers crossed tone 5","shortname":":fingers_crossed_tone5:","moji":"๐ค๐ฟ"},"fire":{"unicode":"1F525","name":"fire","shortname":":fire:","moji":"๐ฅ"},"fire_engine":{"unicode":"1F692","name":"fire engine","shortname":":fire_engine:","moji":"๐"},"fire_extinguisher":{"unicode":"1F9EF","name":"fire extinguisher","shortname":":fire_extinguisher:","moji":"๐งฏ"},"firecracker":{"unicode":"1F9E8","name":"firecracker","shortname":":firecracker:","moji":"๐งจ"},"fireworks":{"unicode":"1F386","name":"fireworks","shortname":":fireworks:","moji":"๐"},"first_place":{"unicode":"1F947","name":"first place","shortname":":first_place:","moji":"๐ฅ"},"first_quarter_moon":{"unicode":"1F313","name":"first quarter moon","shortname":":first_quarter_moon:","moji":"๐"},"first_quarter_moon_with_face":{"unicode":"1F31B","name":"first quarter moon with face","shortname":":first_quarter_moon_with_face:","moji":"๐"},"fish":{"unicode":"1F41F","name":"fish","shortname":":fish:","moji":"๐"},"fish_cake":{"unicode":"1F365","name":"fish cake","shortname":":fish_cake:","moji":"๐ฅ"},"fishing_pole_and_fish":{"unicode":"1F3A3","name":"fishing pole and fish","shortname":":fishing_pole_and_fish:","moji":"๐ฃ"},"fist":{"unicode":"270A","name":"raised fist","shortname":":fist:","moji":"โ"},"fist_tone1":{"unicode":"270A-1F3FB","name":"raised fist tone 1","shortname":":fist_tone1:","moji":"โ๐ป"},"fist_tone2":{"unicode":"270A-1F3FC","name":"raised fist tone 2","shortname":":fist_tone2:","moji":"โ๐ผ"},"fist_tone3":{"unicode":"270A-1F3FD","name":"raised fist tone 3","shortname":":fist_tone3:","moji":"โ๐ฝ"},"fist_tone4":{"unicode":"270A-1F3FE","name":"raised fist tone 4","shortname":":fist_tone4:","moji":"โ๐พ"},"fist_tone5":{"unicode":"270A-1F3FF","name":"raised fist tone 5","shortname":":fist_tone5:","moji":"โ๐ฟ"},"five":{"unicode":"35-FE0F-20E3","name":"five","shortname":":five:","moji":"5๏ธโฃ"},"flag_ad":{"unicode":"1F1E6-1F1E9","name":"Andorra","shortname":":flag_ad:","moji":"๐ฆ๐ฉ"},"flag_ae":{"unicode":"1F1E6-1F1EA","name":"United Arab Emirates","shortname":":flag_ae:","moji":"๐ฆ๐ช"},"flag_af":{"unicode":"1F1E6-1F1EB","name":"Afghanistan","shortname":":flag_af:","moji":"๐ฆ๐ซ"},"flag_ag":{"unicode":"1F1E6-1F1EC","name":"Antigua and Barbuda","shortname":":flag_ag:","moji":"๐ฆ๐ฌ"},"flag_ai":{"unicode":"1F1E6-1F1EE","name":"Anguilla","shortname":":flag_ai:","moji":"๐ฆ๐ฎ"},"flag_al":{"unicode":"1F1E6-1F1F1","name":"Albania","shortname":":flag_al:","moji":"๐ฆ๐ฑ"},"flag_am":{"unicode":"1F1E6-1F1F2","name":"Armenia","shortname":":flag_am:","moji":"๐ฆ๐ฒ"},"flag_ao":{"unicode":"1F1E6-1F1F4","name":"Angola","shortname":":flag_ao:","moji":"๐ฆ๐ด"},"flag_aq":{"unicode":"1F1E6-1F1F6","name":"Antarctica","shortname":":flag_aq:","moji":"๐ฆ๐ถ"},"flag_ar":{"unicode":"1F1E6-1F1F7","name":"Argentina","shortname":":flag_ar:","moji":"๐ฆ๐ท"},"flag_as":{"unicode":"1F1E6-1F1F8","name":"American Samoa","shortname":":flag_as:","moji":"๐ฆ๐ธ"},"flag_at":{"unicode":"1F1E6-1F1F9","name":"Austria","shortname":":flag_at:","moji":"๐ฆ๐น"},"flag_au":{"unicode":"1F1E6-1F1FA","name":"Australia","shortname":":flag_au:","moji":"๐ฆ๐บ"},"flag_aw":{"unicode":"1F1E6-1F1FC","name":"Aruba","shortname":":flag_aw:","moji":"๐ฆ๐ผ"},"flag_ax":{"unicode":"1F1E6-1F1FD","name":"ร
land Islands","shortname":":flag_ax:","moji":"๐ฆ๐ฝ"},"flag_az":{"unicode":"1F1E6-1F1FF","name":"Azerbaijan","shortname":":flag_az:","moji":"๐ฆ๐ฟ"},"flag_ba":{"unicode":"1F1E7-1F1E6","name":"Bosnia and Herzegovina","shortname":":flag_ba:","moji":"๐ง๐ฆ"},"flag_bb":{"unicode":"1F1E7-1F1E7","name":"Barbados","shortname":":flag_bb:","moji":"๐ง๐ง"},"flag_bd":{"unicode":"1F1E7-1F1E9","name":"Bangladesh","shortname":":flag_bd:","moji":"๐ง๐ฉ"},"flag_be":{"unicode":"1F1E7-1F1EA","name":"Belgium","shortname":":flag_be:","moji":"๐ง๐ช"},"flag_bf":{"unicode":"1F1E7-1F1EB","name":"Burkina Faso","shortname":":flag_bf:","moji":"๐ง๐ซ"},"flag_bg":{"unicode":"1F1E7-1F1EC","name":"Bulgaria","shortname":":flag_bg:","moji":"๐ง๐ฌ"},"flag_bh":{"unicode":"1F1E7-1F1ED","name":"Bahrain","shortname":":flag_bh:","moji":"๐ง๐ญ"},"flag_bi":{"unicode":"1F1E7-1F1EE","name":"Burundi","shortname":":flag_bi:","moji":"๐ง๐ฎ"},"flag_bj":{"unicode":"1F1E7-1F1EF","name":"Benin","shortname":":flag_bj:","moji":"๐ง๐ฏ"},"flag_bl":{"unicode":"1F1E7-1F1F1","name":"Saint Barthรฉlemy","shortname":":flag_bl:","moji":"๐ง๐ฑ"},"flag_black":{"unicode":"1F3F4","name":"flag black","shortname":":flag_black:","moji":"๐ด"},"flag_bm":{"unicode":"1F1E7-1F1F2","name":"Bermuda","shortname":":flag_bm:","moji":"๐ง๐ฒ"},"flag_bn":{"unicode":"1F1E7-1F1F3","name":"Brunei Darussalam","shortname":":flag_bn:","moji":"๐ง๐ณ"},"flag_bo":{"unicode":"1F1E7-1F1F4","name":"Plurinational State of Bolivia","shortname":":flag_bo:","moji":"๐ง๐ด"},"flag_bq":{"unicode":"1F1E7-1F1F6","name":"Bonaire, Sint Eustatius and Saba","shortname":":flag_bq:","moji":"๐ง๐ถ"},"flag_br":{"unicode":"1F1E7-1F1F7","name":"Brazil","shortname":":flag_br:","moji":"๐ง๐ท"},"flag_bs":{"unicode":"1F1E7-1F1F8","name":"Bahamas","shortname":":flag_bs:","moji":"๐ง๐ธ"},"flag_bt":{"unicode":"1F1E7-1F1F9","name":"Bhutan","shortname":":flag_bt:","moji":"๐ง๐น"},"flag_bv":{"unicode":"1F1E7-1F1FB","name":"Bouvet Island","shortname":":flag_bv:","moji":"๐ง๐ป"},"flag_bw":{"unicode":"1F1E7-1F1FC","name":"Botswana","shortname":":flag_bw:","moji":"๐ง๐ผ"},"flag_by":{"unicode":"1F1E7-1F1FE","name":"Belarus","shortname":":flag_by:","moji":"๐ง๐พ"},"flag_bz":{"unicode":"1F1E7-1F1FF","name":"Belize","shortname":":flag_bz:","moji":"๐ง๐ฟ"},"flag_ca":{"unicode":"1F1E8-1F1E6","name":"Canada","shortname":":flag_ca:","moji":"๐จ๐ฆ"},"flag_cc":{"unicode":"1F1E8-1F1E8","name":"Cocos (Keeling) Islands","shortname":":flag_cc:","moji":"๐จ๐จ"},"flag_cd":{"unicode":"1F1E8-1F1E9","name":"Democratic Republic of the Congo","shortname":":flag_cd:","moji":"๐จ๐ฉ"},"flag_cf":{"unicode":"1F1E8-1F1EB","name":"Central African Republic","shortname":":flag_cf:","moji":"๐จ๐ซ"},"flag_cg":{"unicode":"1F1E8-1F1EC","name":"Congo","shortname":":flag_cg:","moji":"๐จ๐ฌ"},"flag_ch":{"unicode":"1F1E8-1F1ED","name":"Switzerland","shortname":":flag_ch:","moji":"๐จ๐ญ"},"flag_ci":{"unicode":"1F1E8-1F1EE","name":"Cรดte d'Ivoire","shortname":":flag_ci:","moji":"๐จ๐ฎ"},"flag_ck":{"unicode":"1F1E8-1F1F0","name":"Cook Islands","shortname":":flag_ck:","moji":"๐จ๐ฐ"},"flag_cl":{"unicode":"1F1E8-1F1F1","name":"Chile","shortname":":flag_cl:","moji":"๐จ๐ฑ"},"flag_cm":{"unicode":"1F1E8-1F1F2","name":"Cameroon","shortname":":flag_cm:","moji":"๐จ๐ฒ"},"flag_cn":{"unicode":"1F1E8-1F1F3","name":"China","shortname":":flag_cn:","moji":"๐จ๐ณ"},"flag_co":{"unicode":"1F1E8-1F1F4","name":"Colombia","shortname":":flag_co:","moji":"๐จ๐ด"},"flag_cr":{"unicode":"1F1E8-1F1F7","name":"Costa Rica","shortname":":flag_cr:","moji":"๐จ๐ท"},"flag_cu":{"unicode":"1F1E8-1F1FA","name":"Cuba","shortname":":flag_cu:","moji":"๐จ๐บ"},"flag_cv":{"unicode":"1F1E8-1F1FB","name":"Cabo Verde","shortname":":flag_cv:","moji":"๐จ๐ป"},"flag_cw":{"unicode":"1F1E8-1F1FC","name":"Curaรงao","shortname":":flag_cw:","moji":"๐จ๐ผ"},"flag_cx":{"unicode":"1F1E8-1F1FD","name":"Christmas Island","shortname":":flag_cx:","moji":"๐จ๐ฝ"},"flag_cy":{"unicode":"1F1E8-1F1FE","name":"Cyprus","shortname":":flag_cy:","moji":"๐จ๐พ"},"flag_cz":{"unicode":"1F1E8-1F1FF","name":"Czechia","shortname":":flag_cz:","moji":"๐จ๐ฟ"},"flag_de":{"unicode":"1F1E9-1F1EA","name":"Germany","shortname":":flag_de:","moji":"๐ฉ๐ช"},"flag_dj":{"unicode":"1F1E9-1F1EF","name":"Djibouti","shortname":":flag_dj:","moji":"๐ฉ๐ฏ"},"flag_dk":{"unicode":"1F1E9-1F1F0","name":"Denmark","shortname":":flag_dk:","moji":"๐ฉ๐ฐ"},"flag_dm":{"unicode":"1F1E9-1F1F2","name":"Dominica","shortname":":flag_dm:","moji":"๐ฉ๐ฒ"},"flag_do":{"unicode":"1F1E9-1F1F4","name":"Dominican Republic","shortname":":flag_do:","moji":"๐ฉ๐ด"},"flag_dz":{"unicode":"1F1E9-1F1FF","name":"Algeria","shortname":":flag_dz:","moji":"๐ฉ๐ฟ"},"flag_ec":{"unicode":"1F1EA-1F1E8","name":"Ecuador","shortname":":flag_ec:","moji":"๐ช๐จ"},"flag_ee":{"unicode":"1F1EA-1F1EA","name":"Estonia","shortname":":flag_ee:","moji":"๐ช๐ช"},"flag_eg":{"unicode":"1F1EA-1F1EC","name":"Egypt","shortname":":flag_eg:","moji":"๐ช๐ฌ"},"flag_eh":{"unicode":"1F1EA-1F1ED","name":"Western Sahara","shortname":":flag_eh:","moji":"๐ช๐ญ"},"flag_er":{"unicode":"1F1EA-1F1F7","name":"Eritrea","shortname":":flag_er:","moji":"๐ช๐ท"},"flag_es":{"unicode":"1F1EA-1F1F8","name":"Spain","shortname":":flag_es:","moji":"๐ช๐ธ"},"flag_et":{"unicode":"1F1EA-1F1F9","name":"Ethiopia","shortname":":flag_et:","moji":"๐ช๐น"},"flag_eu":{"unicode":"1F1EA-1F1FA","name":"European Union","shortname":":flag_eu:","moji":"๐ช๐บ"},"flag_fi":{"unicode":"1F1EB-1F1EE","name":"Finland","shortname":":flag_fi:","moji":"๐ซ๐ฎ"},"flag_fj":{"unicode":"1F1EB-1F1EF","name":"Fiji","shortname":":flag_fj:","moji":"๐ซ๐ฏ"},"flag_fk":{"unicode":"1F1EB-1F1F0","name":"Falkland Islands (Malvinas)","shortname":":flag_fk:","moji":"๐ซ๐ฐ"},"flag_fm":{"unicode":"1F1EB-1F1F2","name":"Federated States of Micronesia","shortname":":flag_fm:","moji":"๐ซ๐ฒ"},"flag_fo":{"unicode":"1F1EB-1F1F4","name":"Faroe Islands","shortname":":flag_fo:","moji":"๐ซ๐ด"},"flag_fr":{"unicode":"1F1EB-1F1F7","name":"France","shortname":":flag_fr:","moji":"๐ซ๐ท"},"flag_ga":{"unicode":"1F1EC-1F1E6","name":"Gabon","shortname":":flag_ga:","moji":"๐ฌ๐ฆ"},"flag_gb":{"unicode":"1F1EC-1F1E7","name":"United Kingdom of Great Britain and Northern Ireland","shortname":":flag_gb:","moji":"๐ฌ๐ง"},"flag_gd":{"unicode":"1F1EC-1F1E9","name":"Grenada","shortname":":flag_gd:","moji":"๐ฌ๐ฉ"},"flag_ge":{"unicode":"1F1EC-1F1EA","name":"Georgia","shortname":":flag_ge:","moji":"๐ฌ๐ช"},"flag_gf":{"unicode":"1F1EC-1F1EB","name":"French Guiana","shortname":":flag_gf:","moji":"๐ฌ๐ซ"},"flag_gg":{"unicode":"1F1EC-1F1EC","name":"Guernsey","shortname":":flag_gg:","moji":"๐ฌ๐ฌ"},"flag_gh":{"unicode":"1F1EC-1F1ED","name":"Ghana","shortname":":flag_gh:","moji":"๐ฌ๐ญ"},"flag_gi":{"unicode":"1F1EC-1F1EE","name":"Gibraltar","shortname":":flag_gi:","moji":"๐ฌ๐ฎ"},"flag_gl":{"unicode":"1F1EC-1F1F1","name":"Greenland","shortname":":flag_gl:","moji":"๐ฌ๐ฑ"},"flag_gm":{"unicode":"1F1EC-1F1F2","name":"Gambia","shortname":":flag_gm:","moji":"๐ฌ๐ฒ"},"flag_gn":{"unicode":"1F1EC-1F1F3","name":"Guinea","shortname":":flag_gn:","moji":"๐ฌ๐ณ"},"flag_gp":{"unicode":"1F1EC-1F1F5","name":"Guadeloupe","shortname":":flag_gp:","moji":"๐ฌ๐ต"},"flag_gq":{"unicode":"1F1EC-1F1F6","name":"Equatorial Guinea","shortname":":flag_gq:","moji":"๐ฌ๐ถ"},"flag_gr":{"unicode":"1F1EC-1F1F7","name":"Greece","shortname":":flag_gr:","moji":"๐ฌ๐ท"},"flag_gs":{"unicode":"1F1EC-1F1F8","name":"South Georgia and the South Sandwich Islands","shortname":":flag_gs:","moji":"๐ฌ๐ธ"},"flag_gt":{"unicode":"1F1EC-1F1F9","name":"Guatemala","shortname":":flag_gt:","moji":"๐ฌ๐น"},"flag_gu":{"unicode":"1F1EC-1F1FA","name":"Guam","shortname":":flag_gu:","moji":"๐ฌ๐บ"},"flag_gw":{"unicode":"1F1EC-1F1FC","name":"Guinea-Bissau","shortname":":flag_gw:","moji":"๐ฌ๐ผ"},"flag_gy":{"unicode":"1F1EC-1F1FE","name":"Guyana","shortname":":flag_gy:","moji":"๐ฌ๐พ"},"flag_hk":{"unicode":"1F1ED-1F1F0","name":"Hong Kong","shortname":":flag_hk:","moji":"๐ญ๐ฐ"},"flag_hm":{"unicode":"1F1ED-1F1F2","name":"Heard Island and McDonald Islands","shortname":":flag_hm:","moji":"๐ญ๐ฒ"},"flag_hn":{"unicode":"1F1ED-1F1F3","name":"Honduras","shortname":":flag_hn:","moji":"๐ญ๐ณ"},"flag_hr":{"unicode":"1F1ED-1F1F7","name":"Croatia","shortname":":flag_hr:","moji":"๐ญ๐ท"},"flag_ht":{"unicode":"1F1ED-1F1F9","name":"Haiti","shortname":":flag_ht:","moji":"๐ญ๐น"},"flag_hu":{"unicode":"1F1ED-1F1FA","name":"Hungary","shortname":":flag_hu:","moji":"๐ญ๐บ"},"flag_ic":{"unicode":"1F1EE-1F1E8","name":"Canary Islands","shortname":":flag_ic:","moji":"๐ฎ๐จ"},"flag_id":{"unicode":"1F1EE-1F1E9","name":"Indonesia","shortname":":flag_id:","moji":"๐ฎ๐ฉ"},"flag_ie":{"unicode":"1F1EE-1F1EA","name":"Ireland","shortname":":flag_ie:","moji":"๐ฎ๐ช"},"flag_il":{"unicode":"1F1EE-1F1F1","name":"Israel","shortname":":flag_il:","moji":"๐ฎ๐ฑ"},"flag_im":{"unicode":"1F1EE-1F1F2","name":"Isle of Man","shortname":":flag_im:","moji":"๐ฎ๐ฒ"},"flag_in":{"unicode":"1F1EE-1F1F3","name":"India","shortname":":flag_in:","moji":"๐ฎ๐ณ"},"flag_io":{"unicode":"1F1EE-1F1F4","name":"British Indian Ocean Territory","shortname":":flag_io:","moji":"๐ฎ๐ด"},"flag_iq":{"unicode":"1F1EE-1F1F6","name":"Iraq","shortname":":flag_iq:","moji":"๐ฎ๐ถ"},"flag_ir":{"unicode":"1F1EE-1F1F7","name":"Islamic Republic of Iran","shortname":":flag_ir:","moji":"๐ฎ๐ท"},"flag_is":{"unicode":"1F1EE-1F1F8","name":"Iceland","shortname":":flag_is:","moji":"๐ฎ๐ธ"},"flag_it":{"unicode":"1F1EE-1F1F9","name":"Italy","shortname":":flag_it:","moji":"๐ฎ๐น"},"flag_je":{"unicode":"1F1EF-1F1EA","name":"Jersey","shortname":":flag_je:","moji":"๐ฏ๐ช"},"flag_jm":{"unicode":"1F1EF-1F1F2","name":"Jamaica","shortname":":flag_jm:","moji":"๐ฏ๐ฒ"},"flag_jo":{"unicode":"1F1EF-1F1F4","name":"Jordan","shortname":":flag_jo:","moji":"๐ฏ๐ด"},"flag_jp":{"unicode":"1F1EF-1F1F5","name":"Japan","shortname":":flag_jp:","moji":"๐ฏ๐ต"},"flag_ke":{"unicode":"1F1F0-1F1EA","name":"Kenya","shortname":":flag_ke:","moji":"๐ฐ๐ช"},"flag_kg":{"unicode":"1F1F0-1F1EC","name":"Kyrgyzstan","shortname":":flag_kg:","moji":"๐ฐ๐ฌ"},"flag_kh":{"unicode":"1F1F0-1F1ED","name":"Cambodia","shortname":":flag_kh:","moji":"๐ฐ๐ญ"},"flag_ki":{"unicode":"1F1F0-1F1EE","name":"Kiribati","shortname":":flag_ki:","moji":"๐ฐ๐ฎ"},"flag_km":{"unicode":"1F1F0-1F1F2","name":"Comoros","shortname":":flag_km:","moji":"๐ฐ๐ฒ"},"flag_kn":{"unicode":"1F1F0-1F1F3","name":"Saint Kitts and Nevis","shortname":":flag_kn:","moji":"๐ฐ๐ณ"},"flag_kp":{"unicode":"1F1F0-1F1F5","name":"Democratic People's Republic of Korea","shortname":":flag_kp:","moji":"๐ฐ๐ต"},"flag_kr":{"unicode":"1F1F0-1F1F7","name":"Republic of Korea","shortname":":flag_kr:","moji":"๐ฐ๐ท"},"flag_kw":{"unicode":"1F1F0-1F1FC","name":"Kuwait","shortname":":flag_kw:","moji":"๐ฐ๐ผ"},"flag_ky":{"unicode":"1F1F0-1F1FE","name":"Cayman Islands","shortname":":flag_ky:","moji":"๐ฐ๐พ"},"flag_kz":{"unicode":"1F1F0-1F1FF","name":"Kazakhstan","shortname":":flag_kz:","moji":"๐ฐ๐ฟ"},"flag_la":{"unicode":"1F1F1-1F1E6","name":"Lao People's Democratic Republic","shortname":":flag_la:","moji":"๐ฑ๐ฆ"},"flag_lb":{"unicode":"1F1F1-1F1E7","name":"Lebanon","shortname":":flag_lb:","moji":"๐ฑ๐ง"},"flag_lc":{"unicode":"1F1F1-1F1E8","name":"Saint Lucia","shortname":":flag_lc:","moji":"๐ฑ๐จ"},"flag_li":{"unicode":"1F1F1-1F1EE","name":"Liechtenstein","shortname":":flag_li:","moji":"๐ฑ๐ฎ"},"flag_lk":{"unicode":"1F1F1-1F1F0","name":"Sri Lanka","shortname":":flag_lk:","moji":"๐ฑ๐ฐ"},"flag_lr":{"unicode":"1F1F1-1F1F7","name":"Liberia","shortname":":flag_lr:","moji":"๐ฑ๐ท"},"flag_ls":{"unicode":"1F1F1-1F1F8","name":"Lesotho","shortname":":flag_ls:","moji":"๐ฑ๐ธ"},"flag_lt":{"unicode":"1F1F1-1F1F9","name":"Lithuania","shortname":":flag_lt:","moji":"๐ฑ๐น"},"flag_lu":{"unicode":"1F1F1-1F1FA","name":"Luxembourg","shortname":":flag_lu:","moji":"๐ฑ๐บ"},"flag_lv":{"unicode":"1F1F1-1F1FB","name":"Latvia","shortname":":flag_lv:","moji":"๐ฑ๐ป"},"flag_ly":{"unicode":"1F1F1-1F1FE","name":"Libya","shortname":":flag_ly:","moji":"๐ฑ๐พ"},"flag_ma":{"unicode":"1F1F2-1F1E6","name":"Morocco","shortname":":flag_ma:","moji":"๐ฒ๐ฆ"},"flag_mc":{"unicode":"1F1F2-1F1E8","name":"Monaco","shortname":":flag_mc:","moji":"๐ฒ๐จ"},"flag_md":{"unicode":"1F1F2-1F1E9","name":"Republic of Moldova","shortname":":flag_md:","moji":"๐ฒ๐ฉ"},"flag_me":{"unicode":"1F1F2-1F1EA","name":"Montenegro","shortname":":flag_me:","moji":"๐ฒ๐ช"},"flag_mf":{"unicode":"1F1F2-1F1EB","name":"Saint Martin","shortname":":flag_mf:","moji":"๐ฒ๐ซ"},"flag_mg":{"unicode":"1F1F2-1F1EC","name":"Madagascar","shortname":":flag_mg:","moji":"๐ฒ๐ฌ"},"flag_mh":{"unicode":"1F1F2-1F1ED","name":"Marshall Islands","shortname":":flag_mh:","moji":"๐ฒ๐ญ"},"flag_mk":{"unicode":"1F1F2-1F1F0","name":"North Macedonia","shortname":":flag_mk:","moji":"๐ฒ๐ฐ"},"flag_ml":{"unicode":"1F1F2-1F1F1","name":"Mali","shortname":":flag_ml:","moji":"๐ฒ๐ฑ"},"flag_mm":{"unicode":"1F1F2-1F1F2","name":"Myanmar","shortname":":flag_mm:","moji":"๐ฒ๐ฒ"},"flag_mn":{"unicode":"1F1F2-1F1F3","name":"Mongolia","shortname":":flag_mn:","moji":"๐ฒ๐ณ"},"flag_mo":{"unicode":"1F1F2-1F1F4","name":"Macao","shortname":":flag_mo:","moji":"๐ฒ๐ด"},"flag_mp":{"unicode":"1F1F2-1F1F5","name":"Northern Mariana Islands","shortname":":flag_mp:","moji":"๐ฒ๐ต"},"flag_mq":{"unicode":"1F1F2-1F1F6","name":"Martinique","shortname":":flag_mq:","moji":"๐ฒ๐ถ"},"flag_mr":{"unicode":"1F1F2-1F1F7","name":"Mauritania","shortname":":flag_mr:","moji":"๐ฒ๐ท"},"flag_ms":{"unicode":"1F1F2-1F1F8","name":"Montserrat","shortname":":flag_ms:","moji":"๐ฒ๐ธ"},"flag_mt":{"unicode":"1F1F2-1F1F9","name":"Malta","shortname":":flag_mt:","moji":"๐ฒ๐น"},"flag_mu":{"unicode":"1F1F2-1F1FA","name":"Mauritius","shortname":":flag_mu:","moji":"๐ฒ๐บ"},"flag_mv":{"unicode":"1F1F2-1F1FB","name":"Maldives","shortname":":flag_mv:","moji":"๐ฒ๐ป"},"flag_mw":{"unicode":"1F1F2-1F1FC","name":"Malawi","shortname":":flag_mw:","moji":"๐ฒ๐ผ"},"flag_mx":{"unicode":"1F1F2-1F1FD","name":"Mexico","shortname":":flag_mx:","moji":"๐ฒ๐ฝ"},"flag_my":{"unicode":"1F1F2-1F1FE","name":"Malaysia","shortname":":flag_my:","moji":"๐ฒ๐พ"},"flag_mz":{"unicode":"1F1F2-1F1FF","name":"Mozambique","shortname":":flag_mz:","moji":"๐ฒ๐ฟ"},"flag_na":{"unicode":"1F1F3-1F1E6","name":"Namibia","shortname":":flag_na:","moji":"๐ณ๐ฆ"},"flag_nc":{"unicode":"1F1F3-1F1E8","name":"New Caledonia","shortname":":flag_nc:","moji":"๐ณ๐จ"},"flag_ne":{"unicode":"1F1F3-1F1EA","name":"Niger","shortname":":flag_ne:","moji":"๐ณ๐ช"},"flag_nf":{"unicode":"1F1F3-1F1EB","name":"Norfolk Island","shortname":":flag_nf:","moji":"๐ณ๐ซ"},"flag_ng":{"unicode":"1F1F3-1F1EC","name":"Nigeria","shortname":":flag_ng:","moji":"๐ณ๐ฌ"},"flag_ni":{"unicode":"1F1F3-1F1EE","name":"Nicaragua","shortname":":flag_ni:","moji":"๐ณ๐ฎ"},"flag_nl":{"unicode":"1F1F3-1F1F1","name":"Kingdom of the Netherlands","shortname":":flag_nl:","moji":"๐ณ๐ฑ"},"flag_no":{"unicode":"1F1F3-1F1F4","name":"Norway","shortname":":flag_no:","moji":"๐ณ๐ด"},"flag_np":{"unicode":"1F1F3-1F1F5","name":"Nepal","shortname":":flag_np:","moji":"๐ณ๐ต"},"flag_nr":{"unicode":"1F1F3-1F1F7","name":"Nauru","shortname":":flag_nr:","moji":"๐ณ๐ท"},"flag_nu":{"unicode":"1F1F3-1F1FA","name":"Niue","shortname":":flag_nu:","moji":"๐ณ๐บ"},"flag_nz":{"unicode":"1F1F3-1F1FF","name":"New Zealand","shortname":":flag_nz:","moji":"๐ณ๐ฟ"},"flag_om":{"unicode":"1F1F4-1F1F2","name":"Oman","shortname":":flag_om:","moji":"๐ด๐ฒ"},"flag_pa":{"unicode":"1F1F5-1F1E6","name":"Panama","shortname":":flag_pa:","moji":"๐ต๐ฆ"},"flag_pe":{"unicode":"1F1F5-1F1EA","name":"Peru","shortname":":flag_pe:","moji":"๐ต๐ช"},"flag_pf":{"unicode":"1F1F5-1F1EB","name":"French Polynesia","shortname":":flag_pf:","moji":"๐ต๐ซ"},"flag_pg":{"unicode":"1F1F5-1F1EC","name":"Papua New Guinea","shortname":":flag_pg:","moji":"๐ต๐ฌ"},"flag_ph":{"unicode":"1F1F5-1F1ED","name":"Philippines","shortname":":flag_ph:","moji":"๐ต๐ญ"},"flag_pk":{"unicode":"1F1F5-1F1F0","name":"Pakistan","shortname":":flag_pk:","moji":"๐ต๐ฐ"},"flag_pl":{"unicode":"1F1F5-1F1F1","name":"Poland","shortname":":flag_pl:","moji":"๐ต๐ฑ"},"flag_pm":{"unicode":"1F1F5-1F1F2","name":"Saint Pierre and Miquelon","shortname":":flag_pm:","moji":"๐ต๐ฒ"},"flag_pn":{"unicode":"1F1F5-1F1F3","name":"Pitcairn","shortname":":flag_pn:","moji":"๐ต๐ณ"},"flag_pr":{"unicode":"1F1F5-1F1F7","name":"Puerto Rico","shortname":":flag_pr:","moji":"๐ต๐ท"},"flag_ps":{"unicode":"1F1F5-1F1F8","name":"State of Palestine","shortname":":flag_ps:","moji":"๐ต๐ธ"},"flag_pt":{"unicode":"1F1F5-1F1F9","name":"Portugal","shortname":":flag_pt:","moji":"๐ต๐น"},"flag_pw":{"unicode":"1F1F5-1F1FC","name":"Palau","shortname":":flag_pw:","moji":"๐ต๐ผ"},"flag_py":{"unicode":"1F1F5-1F1FE","name":"Paraguay","shortname":":flag_py:","moji":"๐ต๐พ"},"flag_qa":{"unicode":"1F1F6-1F1E6","name":"Qatar","shortname":":flag_qa:","moji":"๐ถ๐ฆ"},"flag_re":{"unicode":"1F1F7-1F1EA","name":"Rรฉunion","shortname":":flag_re:","moji":"๐ท๐ช"},"flag_ro":{"unicode":"1F1F7-1F1F4","name":"Romania","shortname":":flag_ro:","moji":"๐ท๐ด"},"flag_rs":{"unicode":"1F1F7-1F1F8","name":"Serbia","shortname":":flag_rs:","moji":"๐ท๐ธ"},"flag_ru":{"unicode":"1F1F7-1F1FA","name":"Russian Federation","shortname":":flag_ru:","moji":"๐ท๐บ"},"flag_rw":{"unicode":"1F1F7-1F1FC","name":"Rwanda","shortname":":flag_rw:","moji":"๐ท๐ผ"},"flag_sa":{"unicode":"1F1F8-1F1E6","name":"Saudi Arabia","shortname":":flag_sa:","moji":"๐ธ๐ฆ"},"flag_sb":{"unicode":"1F1F8-1F1E7","name":"Solomon Islands","shortname":":flag_sb:","moji":"๐ธ๐ง"},"flag_sc":{"unicode":"1F1F8-1F1E8","name":"Seychelles","shortname":":flag_sc:","moji":"๐ธ๐จ"},"flag_sd":{"unicode":"1F1F8-1F1E9","name":"Sudan","shortname":":flag_sd:","moji":"๐ธ๐ฉ"},"flag_se":{"unicode":"1F1F8-1F1EA","name":"Sweden","shortname":":flag_se:","moji":"๐ธ๐ช"},"flag_sg":{"unicode":"1F1F8-1F1EC","name":"Singapore","shortname":":flag_sg:","moji":"๐ธ๐ฌ"},"flag_sh":{"unicode":"1F1F8-1F1ED","name":"Saint Helena, Ascension and Tristan da Cunha","shortname":":flag_sh:","moji":"๐ธ๐ญ"},"flag_si":{"unicode":"1F1F8-1F1EE","name":"Slovenia","shortname":":flag_si:","moji":"๐ธ๐ฎ"},"flag_sj":{"unicode":"1F1F8-1F1EF","name":"Svalbard and Jan Mayen","shortname":":flag_sj:","moji":"๐ธ๐ฏ"},"flag_sk":{"unicode":"1F1F8-1F1F0","name":"Slovakia","shortname":":flag_sk:","moji":"๐ธ๐ฐ"},"flag_sl":{"unicode":"1F1F8-1F1F1","name":"Sierra Leone","shortname":":flag_sl:","moji":"๐ธ๐ฑ"},"flag_sm":{"unicode":"1F1F8-1F1F2","name":"San Marino","shortname":":flag_sm:","moji":"๐ธ๐ฒ"},"flag_sn":{"unicode":"1F1F8-1F1F3","name":"Senegal","shortname":":flag_sn:","moji":"๐ธ๐ณ"},"flag_so":{"unicode":"1F1F8-1F1F4","name":"Somalia","shortname":":flag_so:","moji":"๐ธ๐ด"},"flag_sr":{"unicode":"1F1F8-1F1F7","name":"Suriname","shortname":":flag_sr:","moji":"๐ธ๐ท"},"flag_ss":{"unicode":"1F1F8-1F1F8","name":"South Sudan","shortname":":flag_ss:","moji":"๐ธ๐ธ"},"flag_st":{"unicode":"1F1F8-1F1F9","name":"Sao Tome and Principe","shortname":":flag_st:","moji":"๐ธ๐น"},"flag_sv":{"unicode":"1F1F8-1F1FB","name":"El Salvador","shortname":":flag_sv:","moji":"๐ธ๐ป"},"flag_sx":{"unicode":"1F1F8-1F1FD","name":"Sint Maarten","shortname":":flag_sx:","moji":"๐ธ๐ฝ"},"flag_sy":{"unicode":"1F1F8-1F1FE","name":"Syrian Arab Republic","shortname":":flag_sy:","moji":"๐ธ๐พ"},"flag_sz":{"unicode":"1F1F8-1F1FF","name":"Eswatini","shortname":":flag_sz:","moji":"๐ธ๐ฟ"},"flag_tc":{"unicode":"1F1F9-1F1E8","name":"Turks and Caicos Islands","shortname":":flag_tc:","moji":"๐น๐จ"},"flag_td":{"unicode":"1F1F9-1F1E9","name":"Chad","shortname":":flag_td:","moji":"๐น๐ฉ"},"flag_tf":{"unicode":"1F1F9-1F1EB","name":"French Southern Territories","shortname":":flag_tf:","moji":"๐น๐ซ"},"flag_tg":{"unicode":"1F1F9-1F1EC","name":"Togo","shortname":":flag_tg:","moji":"๐น๐ฌ"},"flag_th":{"unicode":"1F1F9-1F1ED","name":"Thailand","shortname":":flag_th:","moji":"๐น๐ญ"},"flag_tj":{"unicode":"1F1F9-1F1EF","name":"Tajikistan","shortname":":flag_tj:","moji":"๐น๐ฏ"},"flag_tk":{"unicode":"1F1F9-1F1F0","name":"Tokelau","shortname":":flag_tk:","moji":"๐น๐ฐ"},"flag_tl":{"unicode":"1F1F9-1F1F1","name":"Timor-Leste","shortname":":flag_tl:","moji":"๐น๐ฑ"},"flag_tm":{"unicode":"1F1F9-1F1F2","name":"Turkmenistan","shortname":":flag_tm:","moji":"๐น๐ฒ"},"flag_tn":{"unicode":"1F1F9-1F1F3","name":"Tunisia","shortname":":flag_tn:","moji":"๐น๐ณ"},"flag_to":{"unicode":"1F1F9-1F1F4","name":"Tonga","shortname":":flag_to:","moji":"๐น๐ด"},"flag_tr":{"unicode":"1F1F9-1F1F7","name":"Tรผrkiye","shortname":":flag_tr:","moji":"๐น๐ท"},"flag_tt":{"unicode":"1F1F9-1F1F9","name":"Trinidad and Tobago","shortname":":flag_tt:","moji":"๐น๐น"},"flag_tv":{"unicode":"1F1F9-1F1FB","name":"Tuvalu","shortname":":flag_tv:","moji":"๐น๐ป"},"flag_tw":{"unicode":"1F1F9-1F1FC","name":"Taiwan","shortname":":flag_tw:","moji":"๐น๐ผ"},"flag_tz":{"unicode":"1F1F9-1F1FF","name":"United Republic of Tanzania","shortname":":flag_tz:","moji":"๐น๐ฟ"},"flag_ua":{"unicode":"1F1FA-1F1E6","name":"Ukraine","shortname":":flag_ua:","moji":"๐บ๐ฆ"},"flag_ug":{"unicode":"1F1FA-1F1EC","name":"Uganda","shortname":":flag_ug:","moji":"๐บ๐ฌ"},"flag_um":{"unicode":"1F1FA-1F1F2","name":"United States Minor Outlying Islands","shortname":":flag_um:","moji":"๐บ๐ฒ"},"flag_us":{"unicode":"1F1FA-1F1F8","name":"United States of America","shortname":":flag_us:","moji":"๐บ๐ธ"},"flag_uy":{"unicode":"1F1FA-1F1FE","name":"Uruguay","shortname":":flag_uy:","moji":"๐บ๐พ"},"flag_uz":{"unicode":"1F1FA-1F1FF","name":"Uzbekistan","shortname":":flag_uz:","moji":"๐บ๐ฟ"},"flag_va":{"unicode":"1F1FB-1F1E6","name":"Holy See","shortname":":flag_va:","moji":"๐ป๐ฆ"},"flag_vc":{"unicode":"1F1FB-1F1E8","name":"Saint Vincent and the Grenadines","shortname":":flag_vc:","moji":"๐ป๐จ"},"flag_ve":{"unicode":"1F1FB-1F1EA","name":"Bolivarian Republic of Venezuela","shortname":":flag_ve:","moji":"๐ป๐ช"},"flag_vg":{"unicode":"1F1FB-1F1EC","name":"Virgin Islands (British)","shortname":":flag_vg:","moji":"๐ป๐ฌ"},"flag_vi":{"unicode":"1F1FB-1F1EE","name":"Virgin Islands (U.S.)","shortname":":flag_vi:","moji":"๐ป๐ฎ"},"flag_vn":{"unicode":"1F1FB-1F1F3","name":"Viet Nam","shortname":":flag_vn:","moji":"๐ป๐ณ"},"flag_vu":{"unicode":"1F1FB-1F1FA","name":"Vanuatu","shortname":":flag_vu:","moji":"๐ป๐บ"},"flag_wf":{"unicode":"1F1FC-1F1EB","name":"Wallis and Futuna","shortname":":flag_wf:","moji":"๐ผ๐ซ"},"flag_white":{"unicode":"1F3F3","name":"flag white","shortname":":flag_white:","moji":"๐ณ"},"flag_ws":{"unicode":"1F1FC-1F1F8","name":"Samoa","shortname":":flag_ws:","moji":"๐ผ๐ธ"},"flag_xk":{"unicode":"1F1FD-1F1F0","name":"Kosovo","shortname":":flag_xk:","moji":"๐ฝ๐ฐ"},"flag_ye":{"unicode":"1F1FE-1F1EA","name":"Yemen","shortname":":flag_ye:","moji":"๐พ๐ช"},"flag_yt":{"unicode":"1F1FE-1F1F9","name":"Mayotte","shortname":":flag_yt:","moji":"๐พ๐น"},"flag_za":{"unicode":"1F1FF-1F1E6","name":"South Africa","shortname":":flag_za:","moji":"๐ฟ๐ฆ"},"flag_zm":{"unicode":"1F1FF-1F1F2","name":"Zambia","shortname":":flag_zm:","moji":"๐ฟ๐ฒ"},"flag_zw":{"unicode":"1F1FF-1F1FC","name":"Zimbabwe","shortname":":flag_zw:","moji":"๐ฟ๐ผ"},"flags":{"unicode":"1F38F","name":"flags","shortname":":flags:","moji":"๐"},"flashlight":{"unicode":"1F526","name":"flashlight","shortname":":flashlight:","moji":"๐ฆ"},"fleur-de-lis":{"unicode":"269C-FE0F","name":"fleur-de-lis","shortname":":fleur-de-lis:","moji":"โ๏ธ"},"floppy_disk":{"unicode":"1F4BE","name":"floppy disk","shortname":":floppy_disk:","moji":"๐พ"},"flower_playing_cards":{"unicode":"1F3B4","name":"flower playing cards","shortname":":flower_playing_cards:","moji":"๐ด"},"flushed":{"unicode":"1F633","name":"flushed face","shortname":":flushed:","moji":"๐ณ"},"flying_disc":{"unicode":"1F94F","name":"flying disc","shortname":":flying_disc:","moji":"๐ฅ"},"flying_saucer":{"unicode":"1F6F8","name":"flying saucer","shortname":":flying_saucer:","moji":"๐ธ"},"fog":{"unicode":"1F32B","name":"fog","shortname":":fog:","moji":"๐ซ"},"foggy":{"unicode":"1F301","name":"foggy","shortname":":foggy:","moji":"๐"},"foot":{"unicode":"1F9B6","name":"foot","shortname":":foot:","moji":"๐ฆถ"},"football":{"unicode":"1F3C8","name":"football","shortname":":football:","moji":"๐"},"footprints":{"unicode":"1F463","name":"footprints","shortname":":footprints:","moji":"๐ฃ"},"fork_and_knife":{"unicode":"1F374","name":"fork and knife","shortname":":fork_and_knife:","moji":"๐ด"},"fork_knife_plate":{"unicode":"1F37D","name":"fork knife plate","shortname":":fork_knife_plate:","moji":"๐ฝ"},"fortune_cookie":{"unicode":"1F960","name":"fortune cookie","shortname":":fortune_cookie:","moji":"๐ฅ "},"fountain":{"unicode":"26F2","name":"fountain","shortname":":fountain:","moji":"โฒ"},"four":{"unicode":"34-FE0F-20E3","name":"four","shortname":":four:","moji":"4๏ธโฃ"},"four_leaf_clover":{"unicode":"1F340","name":"four leaf clover","shortname":":four_leaf_clover:","moji":"๐"},"fox":{"unicode":"1F98A","name":"fox","shortname":":fox:","moji":"๐ฆ"},"frame_photo":{"unicode":"1F5BC","name":"frame photo","shortname":":frame_photo:","moji":"๐ผ"},"free":{"unicode":"1F193","name":"free","shortname":":free:","moji":"๐"},"french_bread":{"unicode":"1F956","name":"french bread","shortname":":french_bread:","moji":"๐ฅ"},"fried_shrimp":{"unicode":"1F364","name":"fried shrimp","shortname":":fried_shrimp:","moji":"๐ค"},"fries":{"unicode":"1F35F","name":"fries","shortname":":fries:","moji":"๐"},"frog":{"unicode":"1F438","name":"frog","shortname":":frog:","moji":"๐ธ"},"frowning":{"unicode":"1F626","name":"frowning face with open mouth","shortname":":frowning:","moji":"๐ฆ"},"frowning2":{"unicode":"2639-FE0F","name":"white frowning face","shortname":":frowning2:","moji":"โน๏ธ"},"fu":{"unicode":"1F595","name":"fu","shortname":":fu:","moji":"๐"},"fuelpump":{"unicode":"26FD","name":"fuelpump","shortname":":fuelpump:","moji":"โฝ"},"full_moon":{"unicode":"1F315","name":"full moon","shortname":":full_moon:","moji":"๐"},"full_moon_with_face":{"unicode":"1F31D","name":"full moon with face","shortname":":full_moon_with_face:","moji":"๐"},"game_die":{"unicode":"1F3B2","name":"game die","shortname":":game_die:","moji":"๐ฒ"},"gay_pride_flag":{"unicode":"1F3F3-1F308","name":"gay pride flag","shortname":":gay_pride_flag:","moji":"๐ณ๐"},"gear":{"unicode":"2699-FE0F","name":"gear","shortname":":gear:","moji":"โ๏ธ"},"gem":{"unicode":"1F48E","name":"gem","shortname":":gem:","moji":"๐"},"gemini":{"unicode":"264A","name":"gemini","shortname":":gemini:","moji":"โ"},"genie":{"unicode":"1F9DE","name":"genie","shortname":":genie:","moji":"๐ง"},"ghost":{"unicode":"1F47B","name":"ghost","shortname":":ghost:","moji":"๐ป"},"gift":{"unicode":"1F381","name":"gift","shortname":":gift:","moji":"๐"},"gift_heart":{"unicode":"1F49D","name":"gift heart","shortname":":gift_heart:","moji":"๐"},"giraffe":{"unicode":"1F992","name":"giraffe","shortname":":giraffe:","moji":"๐ฆ"},"girl":{"unicode":"1F467","name":"girl","shortname":":girl:","moji":"๐ง"},"girl_tone1":{"unicode":"1F467-1F3FB","name":"girl tone 1","shortname":":girl_tone1:","moji":"๐ง๐ป"},"girl_tone2":{"unicode":"1F467-1F3FC","name":"girl tone 2","shortname":":girl_tone2:","moji":"๐ง๐ผ"},"girl_tone3":{"unicode":"1F467-1F3FD","name":"girl tone 3","shortname":":girl_tone3:","moji":"๐ง๐ฝ"},"girl_tone4":{"unicode":"1F467-1F3FE","name":"girl tone 4","shortname":":girl_tone4:","moji":"๐ง๐พ"},"girl_tone5":{"unicode":"1F467-1F3FF","name":"girl tone 5","shortname":":girl_tone5:","moji":"๐ง๐ฟ"},"globe_with_meridians":{"unicode":"1F310","name":"globe with meridians","shortname":":globe_with_meridians:","moji":"๐"},"gloves":{"unicode":"1F9E4","name":"gloves","shortname":":gloves:","moji":"๐งค"},"goal":{"unicode":"1F945","name":"goal","shortname":":goal:","moji":"๐ฅ
"},"goat":{"unicode":"1F410","name":"goat","shortname":":goat:","moji":"๐"},"goggles":{"unicode":"1F97D","name":"goggles","shortname":":goggles:","moji":"๐ฅฝ"},"golf":{"unicode":"26F3","name":"golf","shortname":":golf:","moji":"โณ"},"golfer":{"unicode":"1F3CC","name":"golfer","shortname":":golfer:","moji":"๐"},"gorilla":{"unicode":"1F98D","name":"gorilla","shortname":":gorilla:","moji":"๐ฆ"},"grapes":{"unicode":"1F347","name":"grapes","shortname":":grapes:","moji":"๐"},"green_apple":{"unicode":"1F34F","name":"green apple","shortname":":green_apple:","moji":"๐"},"green_book":{"unicode":"1F4D7","name":"green book","shortname":":green_book:","moji":"๐"},"green_heart":{"unicode":"1F49A","name":"green heart","shortname":":green_heart:","moji":"๐"},"grey_exclamation":{"unicode":"2755","name":"grey exclamation","shortname":":grey_exclamation:","moji":"โ"},"grey_question":{"unicode":"2754","name":"grey question","shortname":":grey_question:","moji":"โ"},"grimacing":{"unicode":"1F62C","name":"grimacing face","shortname":":grimacing:","moji":"๐ฌ"},"grin":{"unicode":"1F601","name":"grinning face with smiling eyes","shortname":":grin:","moji":"๐"},"grinning":{"unicode":"1F600","name":"grinning face","shortname":":grinning:","moji":"๐"},"guardsman":{"unicode":"1F482","name":"guardsman","shortname":":guardsman:","moji":"๐"},"guardsman_tone1":{"unicode":"1F482-1F3FB","name":"guardsman tone 1","shortname":":guardsman_tone1:","moji":"๐๐ป"},"guardsman_tone2":{"unicode":"1F482-1F3FC","name":"guardsman tone 2","shortname":":guardsman_tone2:","moji":"๐๐ผ"},"guardsman_tone3":{"unicode":"1F482-1F3FD","name":"guardsman tone 3","shortname":":guardsman_tone3:","moji":"๐๐ฝ"},"guardsman_tone4":{"unicode":"1F482-1F3FE","name":"guardsman tone 4","shortname":":guardsman_tone4:","moji":"๐๐พ"},"guardsman_tone5":{"unicode":"1F482-1F3FF","name":"guardsman tone 5","shortname":":guardsman_tone5:","moji":"๐๐ฟ"},"guitar":{"unicode":"1F3B8","name":"guitar","shortname":":guitar:","moji":"๐ธ"},"gun":{"unicode":"1F52B","name":"gun","shortname":":gun:","moji":"๐ซ"},"haircut":{"unicode":"1F487","name":"haircut","shortname":":haircut:","moji":"๐"},"haircut_tone1":{"unicode":"1F487-1F3FB","name":"haircut tone 1","shortname":":haircut_tone1:","moji":"๐๐ป"},"haircut_tone2":{"unicode":"1F487-1F3FC","name":"haircut tone 2","shortname":":haircut_tone2:","moji":"๐๐ผ"},"haircut_tone3":{"unicode":"1F487-1F3FD","name":"haircut tone 3","shortname":":haircut_tone3:","moji":"๐๐ฝ"},"haircut_tone4":{"unicode":"1F487-1F3FE","name":"haircut tone 4","shortname":":haircut_tone4:","moji":"๐๐พ"},"haircut_tone5":{"unicode":"1F487-1F3FF","name":"haircut tone 5","shortname":":haircut_tone5:","moji":"๐๐ฟ"},"hamburger":{"unicode":"1F354","name":"hamburger","shortname":":hamburger:","moji":"๐"},"hammer":{"unicode":"1F528","name":"hammer","shortname":":hammer:","moji":"๐จ"},"hammer_pick":{"unicode":"2692-FE0F","name":"hammer pick","shortname":":hammer_pick:","moji":"โ๏ธ"},"hamster":{"unicode":"1F439","name":"hamster","shortname":":hamster:","moji":"๐น"},"hand":{"unicode":"270B","name":"hand","shortname":":hand:","moji":"โ"},"hand_splayed":{"unicode":"1F590","name":"raised hand with fingers splayed","shortname":":hand_splayed:","moji":"๐"},"hand_splayed_tone1":{"unicode":"1F590-1F3FB","name":"raised hand with fingers splayed tone 1","shortname":":hand_splayed_tone1:","moji":"๐๐ป"},"hand_splayed_tone2":{"unicode":"1F590-1F3FC","name":"raised hand with fingers splayed tone 2","shortname":":hand_splayed_tone2:","moji":"๐๐ผ"},"hand_splayed_tone3":{"unicode":"1F590-1F3FD","name":"raised hand with fingers splayed tone 3","shortname":":hand_splayed_tone3:","moji":"๐๐ฝ"},"hand_splayed_tone4":{"unicode":"1F590-1F3FE","name":"raised hand with fingers splayed tone 4","shortname":":hand_splayed_tone4:","moji":"๐๐พ"},"hand_splayed_tone5":{"unicode":"1F590-1F3FF","name":"raised hand with fingers splayed tone 5","shortname":":hand_splayed_tone5:","moji":"๐๐ฟ"},"handbag":{"unicode":"1F45C","name":"handbag","shortname":":handbag:","moji":"๐"},"handball":{"unicode":"1F93E","name":"handball","shortname":":handball:","moji":"๐คพ"},"handshake":{"unicode":"1F91D","name":"handshake","shortname":":handshake:","moji":"๐ค"},"hankey":{"unicode":"1F4A9","name":"hankey","shortname":":hankey:","moji":"๐ฉ"},"hash":{"unicode":"23-FE0F-20E3","name":"hash","shortname":":hash:","moji":"#๏ธโฃ"},"hatched_chick":{"unicode":"1F425","name":"hatched chick","shortname":":hatched_chick:","moji":"๐ฅ"},"hatching_chick":{"unicode":"1F423","name":"hatching chick","shortname":":hatching_chick:","moji":"๐ฃ"},"head_bandage":{"unicode":"1F915","name":"face with head-bandage","shortname":":head_bandage:","moji":"๐ค"},"headphones":{"unicode":"1F3A7","name":"headphones","shortname":":headphones:","moji":"๐ง"},"hear_no_evil":{"unicode":"1F649","name":"hear no evil","shortname":":hear_no_evil:","moji":"๐"},"heart":{"unicode":"2764-FE0F","name":"heart","shortname":":heart:","moji":"โค๏ธ"},"heart_decoration":{"unicode":"1F49F","name":"heart decoration","shortname":":heart_decoration:","moji":"๐"},"heart_exclamation":{"unicode":"2763-FE0F","name":"heart exclamation","shortname":":heart_exclamation:","moji":"โฃ๏ธ"},"heart_eyes":{"unicode":"1F60D","name":"smiling face with heart-shaped eyes","shortname":":heart_eyes:","moji":"๐"},"heart_eyes_cat":{"unicode":"1F63B","name":"smiling cat face with heart-shaped eyes","shortname":":heart_eyes_cat:","moji":"๐ป"},"heartbeat":{"unicode":"1F493","name":"heartbeat","shortname":":heartbeat:","moji":"๐"},"heartpulse":{"unicode":"1F497","name":"heartpulse","shortname":":heartpulse:","moji":"๐"},"hearts":{"unicode":"2764-FE0F","name":"hearts","shortname":":hearts:","moji":"โค๏ธ"},"heavy_check_mark":{"unicode":"2714-FE0F","name":"heavy check mark","shortname":":heavy_check_mark:","moji":"โ๏ธ"},"heavy_division_sign":{"unicode":"2797","name":"heavy division sign","shortname":":heavy_division_sign:","moji":"โ"},"heavy_dollar_sign":{"unicode":"1F4B2","name":"heavy dollar sign","shortname":":heavy_dollar_sign:","moji":"๐ฒ"},"heavy_exclamation_mark":{"unicode":"2757","name":"heavy exclamation mark","shortname":":heavy_exclamation_mark:","moji":"โ"},"heavy_minus_sign":{"unicode":"2796","name":"heavy minus sign","shortname":":heavy_minus_sign:","moji":"โ"},"heavy_multiplication_x":{"unicode":"2716-FE0F","name":"heavy multiplication x","shortname":":heavy_multiplication_x:","moji":"โ๏ธ"},"heavy_plus_sign":{"unicode":"2795","name":"heavy plus sign","shortname":":heavy_plus_sign:","moji":"โ"},"hedgehog":{"unicode":"1F994","name":"hedgehog","shortname":":hedgehog:","moji":"๐ฆ"},"helicopter":{"unicode":"1F681","name":"helicopter","shortname":":helicopter:","moji":"๐"},"helmet_with_cross":{"unicode":"26D1","name":"helmet with white cross","shortname":":helmet_with_cross:","moji":"โ"},"herb":{"unicode":"1F33F","name":"herb","shortname":":herb:","moji":"๐ฟ"},"hibiscus":{"unicode":"1F33A","name":"hibiscus","shortname":":hibiscus:","moji":"๐บ"},"high_brightness":{"unicode":"1F506","name":"high brightness","shortname":":high_brightness:","moji":"๐"},"high_heel":{"unicode":"1F460","name":"high-heeled shoe","shortname":":high_heel:","moji":"๐ "},"hiking_boot":{"unicode":"1F97E","name":"hiking boot","shortname":":hiking_boot:","moji":"๐ฅพ"},"hippopotamus":{"unicode":"1F99B","name":"hippopotamus","shortname":":hippopotamus:","moji":"๐ฆ"},"hocho":{"unicode":"1F52A","name":"hocho","shortname":":hocho:","moji":"๐ช"},"hockey":{"unicode":"1F3D2","name":"hockey","shortname":":hockey:","moji":"๐"},"hole":{"unicode":"1F573","name":"hole","shortname":":hole:","moji":"๐ณ"},"homes":{"unicode":"1F3D8","name":"homes","shortname":":homes:","moji":"๐"},"honey_pot":{"unicode":"1F36F","name":"honey pot","shortname":":honey_pot:","moji":"๐ฏ"},"honeybee":{"unicode":"1F41D","name":"honeybee","shortname":":honeybee:","moji":"๐"},"horse":{"unicode":"1F434","name":"horse","shortname":":horse:","moji":"๐ด"},"horse_racing":{"unicode":"1F3C7","name":"horse racing","shortname":":horse_racing:","moji":"๐"},"hospital":{"unicode":"1F3E5","name":"hospital","shortname":":hospital:","moji":"๐ฅ"},"hot_face":{"unicode":"1F975","name":"hot face","shortname":":hot_face:","moji":"๐ฅต"},"hot_pepper":{"unicode":"1F336","name":"hot pepper","shortname":":hot_pepper:","moji":"๐ถ"},"hotdog":{"unicode":"1F32D","name":"hotdog","shortname":":hotdog:","moji":"๐ญ"},"hotel":{"unicode":"1F3E8","name":"hotel","shortname":":hotel:","moji":"๐จ"},"hotsprings":{"unicode":"2668-FE0F","name":"hotsprings","shortname":":hotsprings:","moji":"โจ๏ธ"},"hourglass":{"unicode":"231B","name":"hourglass","shortname":":hourglass:","moji":"โ"},"hourglass_flowing_sand":{"unicode":"23F3","name":"hourglass flowing sand","shortname":":hourglass_flowing_sand:","moji":"โณ"},"house":{"unicode":"1F3E0","name":"house","shortname":":house:","moji":"๐ "},"house_abandoned":{"unicode":"1F3DA","name":"house abandoned","shortname":":house_abandoned:","moji":"๐"},"house_with_garden":{"unicode":"1F3E1","name":"house with garden","shortname":":house_with_garden:","moji":"๐ก"},"hugging":{"unicode":"1F917","name":"hugging face","shortname":":hugging:","moji":"๐ค"},"hushed":{"unicode":"1F62F","name":"hushed face","shortname":":hushed:","moji":"๐ฏ"},"ice_cream":{"unicode":"1F368","name":"ice cream","shortname":":ice_cream:","moji":"๐จ"},"ice_skate":{"unicode":"26F8","name":"ice skate","shortname":":ice_skate:","moji":"โธ"},"icecream":{"unicode":"1F366","name":"icecream","shortname":":icecream:","moji":"๐ฆ"},"id":{"unicode":"1F194","name":"id","shortname":":id:","moji":"๐"},"ideograph_advantage":{"unicode":"1F250","name":"ideograph advantage","shortname":":ideograph_advantage:","moji":"๐"},"imp":{"unicode":"1F47F","name":"imp","shortname":":imp:","moji":"๐ฟ"},"inbox_tray":{"unicode":"1F4E5","name":"inbox tray","shortname":":inbox_tray:","moji":"๐ฅ"},"incoming_envelope":{"unicode":"1F4E8","name":"incoming envelope","shortname":":incoming_envelope:","moji":"๐จ"},"infinity":{"unicode":"267E-FE0F","name":"infinity","shortname":":infinity:","moji":"โพ๏ธ"},"information_desk_person":{"unicode":"1F481","name":"information desk person","shortname":":information_desk_person:","moji":"๐"},"information_desk_person_tone1":{"unicode":"1F481-1F3FB","name":"information desk person tone 1","shortname":":information_desk_person_tone1:","moji":"๐๐ป"},"information_desk_person_tone2":{"unicode":"1F481-1F3FC","name":"information desk person tone 2","shortname":":information_desk_person_tone2:","moji":"๐๐ผ"},"information_desk_person_tone3":{"unicode":"1F481-1F3FD","name":"information desk person tone 3","shortname":":information_desk_person_tone3:","moji":"๐๐ฝ"},"information_desk_person_tone4":{"unicode":"1F481-1F3FE","name":"information desk person tone 4","shortname":":information_desk_person_tone4:","moji":"๐๐พ"},"information_desk_person_tone5":{"unicode":"1F481-1F3FF","name":"information desk person tone 5","shortname":":information_desk_person_tone5:","moji":"๐๐ฟ"},"information_source":{"unicode":"2139-FE0F","name":"information source","shortname":":information_source:","moji":"โน๏ธ"},"innocent":{"unicode":"1F607","name":"smiling face with halo","shortname":":innocent:","moji":"๐"},"interrobang":{"unicode":"2049-FE0F","name":"interrobang","shortname":":interrobang:","moji":"โ๏ธ"},"iphone":{"unicode":"1F4F1","name":"iphone","shortname":":iphone:","moji":"๐ฑ"},"island":{"unicode":"1F3DD","name":"island","shortname":":island:","moji":"๐"},"izakaya_lantern":{"unicode":"1F3EE","name":"izakaya lantern","shortname":":izakaya_lantern:","moji":"๐ฎ"},"jack_o_lantern":{"unicode":"1F383","name":"jack o lantern","shortname":":jack_o_lantern:","moji":"๐"},"japan":{"unicode":"1F5FE","name":"japan","shortname":":japan:","moji":"๐พ"},"japanese_castle":{"unicode":"1F3EF","name":"japanese castle","shortname":":japanese_castle:","moji":"๐ฏ"},"japanese_goblin":{"unicode":"1F47A","name":"japanese goblin","shortname":":japanese_goblin:","moji":"๐บ"},"japanese_ogre":{"unicode":"1F479","name":"japanese ogre","shortname":":japanese_ogre:","moji":"๐น"},"jeans":{"unicode":"1F456","name":"jeans","shortname":":jeans:","moji":"๐"},"jigsaw":{"unicode":"1F9E9","name":"jigsaw","shortname":":jigsaw:","moji":"๐งฉ"},"joy":{"unicode":"1F602","name":"face with tears of joy","shortname":":joy:","moji":"๐"},"joy_cat":{"unicode":"1F639","name":"cat face with tears of joy","shortname":":joy_cat:","moji":"๐น"},"joystick":{"unicode":"1F579","name":"joystick","shortname":":joystick:","moji":"๐น"},"juggling":{"unicode":"1F939","name":"juggling","shortname":":juggling:","moji":"๐คน"},"kaaba":{"unicode":"1F54B","name":"kaaba","shortname":":kaaba:","moji":"๐"},"kangaroo":{"unicode":"1F998","name":"kangaroo","shortname":":kangaroo:","moji":"๐ฆ"},"key":{"unicode":"1F511","name":"key","shortname":":key:","moji":"๐"},"key2":{"unicode":"1F5DD","name":"key2","shortname":":key2:","moji":"๐"},"keyboard":{"unicode":"2328-FE0F","name":"keyboard","shortname":":keyboard:","moji":"โจ๏ธ"},"keycap_ten":{"unicode":"1F51F","name":"keycap ten","shortname":":keycap_ten:","moji":"๐"},"kimono":{"unicode":"1F458","name":"kimono","shortname":":kimono:","moji":"๐"},"kiss":{"unicode":"1F48B","name":"kiss mark","shortname":":kiss:","moji":"๐"},"kiss_mm":{"unicode":"1F468-2764-1F48B-1F468","name":"kiss (man,man)","shortname":":kiss_mm:","moji":"๐จโโค๏ธโ๐โ๐จ"},"kiss_ww":{"unicode":"1F469-2764-1F48B-1F469","name":"kiss (woman,woman)","shortname":":kiss_ww:","moji":"๐ฉโโค๏ธโ๐โ๐ฉ"},"kissing":{"unicode":"1F617","name":"kissing face","shortname":":kissing:","moji":"๐"},"kissing_cat":{"unicode":"1F63D","name":"kissing cat face with closed eyes","shortname":":kissing_cat:","moji":"๐ฝ"},"kissing_closed_eyes":{"unicode":"1F61A","name":"kissing face with closed eyes","shortname":":kissing_closed_eyes:","moji":"๐"},"kissing_heart":{"unicode":"1F618","name":"face throwing a kiss","shortname":":kissing_heart:","moji":"๐"},"kissing_smiling_eyes":{"unicode":"1F619","name":"kissing face with smiling eyes","shortname":":kissing_smiling_eyes:","moji":"๐"},"kiwi":{"unicode":"1F95D","name":"kiwi","shortname":":kiwi:","moji":"๐ฅ"},"knife":{"unicode":"1F52A","name":"knife","shortname":":knife:","moji":"๐ช"},"koala":{"unicode":"1F428","name":"koala","shortname":":koala:","moji":"๐จ"},"koko":{"unicode":"1F201","name":"koko","shortname":":koko:","moji":"๐"},"lab_coat":{"unicode":"1F97C","name":"lab coat","shortname":":lab_coat:","moji":"๐ฅผ"},"label":{"unicode":"1F3F7","name":"label","shortname":":label:","moji":"๐ท"},"lacrosse":{"unicode":"1F94D","name":"lacrosse","shortname":":lacrosse:","moji":"๐ฅ"},"large_blue_circle":{"unicode":"1F535","name":"large blue circle","shortname":":large_blue_circle:","moji":"๐ต"},"large_blue_diamond":{"unicode":"1F537","name":"large blue diamond","shortname":":large_blue_diamond:","moji":"๐ท"},"large_orange_diamond":{"unicode":"1F536","name":"large orange diamond","shortname":":large_orange_diamond:","moji":"๐ถ"},"last_quarter_moon":{"unicode":"1F317","name":"last quarter moon","shortname":":last_quarter_moon:","moji":"๐"},"last_quarter_moon_with_face":{"unicode":"1F31C","name":"last quarter moon with face","shortname":":last_quarter_moon_with_face:","moji":"๐"},"laughing":{"unicode":"1F606","name":"smiling face with open mouth and tightly-closed eye","shortname":":laughing:","moji":"๐"},"leafy_green":{"unicode":"1F96C","name":"leafy green","shortname":":leafy_green:","moji":"๐ฅฌ"},"leaves":{"unicode":"1F343","name":"leaves","shortname":":leaves:","moji":"๐"},"ledger":{"unicode":"1F4D2","name":"ledger","shortname":":ledger:","moji":"๐"},"left_facing_fist":{"unicode":"1F91B","name":"left-facing fist","shortname":":left_facing_fist:","moji":"๐ค"},"left_facing_fist_tone1":{"unicode":"1F91B-1F3FB","name":"left facing fist tone 1","shortname":":left_facing_fist_tone1:","moji":"๐ค๐ป"},"left_facing_fist_tone2":{"unicode":"1F91B-1F3FC","name":"left facing fist tone 2","shortname":":left_facing_fist_tone2:","moji":"๐ค๐ผ"},"left_facing_fist_tone3":{"unicode":"1F91B-1F3FD","name":"left facing fist tone 3","shortname":":left_facing_fist_tone3:","moji":"๐ค๐ฝ"},"left_facing_fist_tone4":{"unicode":"1F91B-1F3FE","name":"left facing fist tone 4","shortname":":left_facing_fist_tone4:","moji":"๐ค๐พ"},"left_facing_fist_tone5":{"unicode":"1F91B-1F3FF","name":"left facing fist tone 5","shortname":":left_facing_fist_tone5:","moji":"๐ค๐ฟ"},"left_luggage":{"unicode":"1F6C5","name":"left luggage","shortname":":left_luggage:","moji":"๐
"},"left_right_arrow":{"unicode":"2194-FE0F","name":"left right arrow","shortname":":left_right_arrow:","moji":"โ๏ธ"},"leftwards_arrow_with_hook":{"unicode":"21A9-FE0F","name":"leftwards arrow with hook","shortname":":leftwards_arrow_with_hook:","moji":"โฉ๏ธ"},"leg":{"unicode":"1F9B5","name":"leg","shortname":":leg:","moji":"๐ฆต"},"lemon":{"unicode":"1F34B","name":"lemon","shortname":":lemon:","moji":"๐"},"leo":{"unicode":"264C","name":"leo","shortname":":leo:","moji":"โ"},"leopard":{"unicode":"1F406","name":"leopard","shortname":":leopard:","moji":"๐"},"level_slider":{"unicode":"1F39A","name":"level slider","shortname":":level_slider:","moji":"๐"},"levitate":{"unicode":"1F574","name":"levitate","shortname":":levitate:","moji":"๐ด"},"libra":{"unicode":"264E","name":"libra","shortname":":libra:","moji":"โ"},"lifter":{"unicode":"1F3CB","name":"lifter","shortname":":lifter:","moji":"๐"},"light_rail":{"unicode":"1F688","name":"light rail","shortname":":light_rail:","moji":"๐"},"link":{"unicode":"1F517","name":"link","shortname":":link:","moji":"๐"},"lion_face":{"unicode":"1F981","name":"lion face","shortname":":lion_face:","moji":"๐ฆ"},"lips":{"unicode":"1F444","name":"mouth","shortname":":lips:","moji":"๐"},"lipstick":{"unicode":"1F484","name":"lipstick","shortname":":lipstick:","moji":"๐"},"lizard":{"unicode":"1F98E","name":"lizard","shortname":":lizard:","moji":"๐ฆ"},"llama":{"unicode":"1F999","name":"llama","shortname":":llama:","moji":"๐ฆ"},"lobster":{"unicode":"1F99E","name":"lobster","shortname":":lobster:","moji":"๐ฆ"},"lock":{"unicode":"1F512","name":"lock","shortname":":lock:","moji":"๐"},"lock_with_ink_pen":{"unicode":"1F50F","name":"lock with ink pen","shortname":":lock_with_ink_pen:","moji":"๐"},"lollipop":{"unicode":"1F36D","name":"lollipop","shortname":":lollipop:","moji":"๐ญ"},"loop":{"unicode":"27BF","name":"loop","shortname":":loop:","moji":"โฟ"},"loud_sound":{"unicode":"1F50A","name":"loud sound","shortname":":loud_sound:","moji":"๐"},"loudspeaker":{"unicode":"1F4E2","name":"loudspeaker","shortname":":loudspeaker:","moji":"๐ข"},"love_hotel":{"unicode":"1F3E9","name":"love hotel","shortname":":love_hotel:","moji":"๐ฉ"},"love_letter":{"unicode":"1F48C","name":"love letter","shortname":":love_letter:","moji":"๐"},"love_you_gesture":{"unicode":"1F91F","name":"love you gesture","shortname":":love_you_gesture:","moji":"๐ค"},"low_brightness":{"unicode":"1F505","name":"low brightness","shortname":":low_brightness:","moji":"๐
"},"luggage":{"unicode":"1F9F3","name":"luggage","shortname":":luggage:","moji":"๐งณ"},"lying_face":{"unicode":"1F925","name":"lying face","shortname":":lying_face:","moji":"๐คฅ"},"m":{"unicode":"24C2-FE0F","name":"m","shortname":":m:","moji":"โ๏ธ"},"mag":{"unicode":"1F50D","name":"mag","shortname":":mag:","moji":"๐"},"mag_right":{"unicode":"1F50E","name":"mag right","shortname":":mag_right:","moji":"๐"},"mage":{"unicode":"1F9D9","name":"mage","shortname":":mage:","moji":"๐ง"},"magnet":{"unicode":"1F9F2","name":"magnet","shortname":":magnet:","moji":"๐งฒ"},"mahjong":{"unicode":"1F004","name":"mahjong","shortname":":mahjong:","moji":"๐"},"mailbox":{"unicode":"1F4EB","name":"mailbox","shortname":":mailbox:","moji":"๐ซ"},"mailbox_closed":{"unicode":"1F4EA","name":"mailbox closed","shortname":":mailbox_closed:","moji":"๐ช"},"mailbox_with_mail":{"unicode":"1F4EC","name":"mailbox with mail","shortname":":mailbox_with_mail:","moji":"๐ฌ"},"mailbox_with_no_mail":{"unicode":"1F4ED","name":"mailbox with no mail","shortname":":mailbox_with_no_mail:","moji":"๐ญ"},"male_sign":{"unicode":"2642-FE0F","name":"male sign","shortname":":male_sign:","moji":"โ๏ธ"},"man":{"unicode":"1F468","name":"man","shortname":":man:","moji":"๐จ"},"man_dancing":{"unicode":"1F57A","name":"man dancing","shortname":":man_dancing:","moji":"๐บ"},"man_in_tuxedo":{"unicode":"1F935","name":"man in tuxedo","shortname":":man_in_tuxedo:","moji":"๐คต"},"man_in_tuxedo_tone1":{"unicode":"1F935-1F3FB","name":"man in tuxedo tone 1","shortname":":man_in_tuxedo_tone1:","moji":"๐คต๐ป"},"man_in_tuxedo_tone2":{"unicode":"1F935-1F3FC","name":"man in tuxedo tone 2","shortname":":man_in_tuxedo_tone2:","moji":"๐คต๐ผ"},"man_in_tuxedo_tone3":{"unicode":"1F935-1F3FD","name":"man in tuxedo tone 3","shortname":":man_in_tuxedo_tone3:","moji":"๐คต๐ฝ"},"man_in_tuxedo_tone4":{"unicode":"1F935-1F3FE","name":"man in tuxedo tone 4","shortname":":man_in_tuxedo_tone4:","moji":"๐คต๐พ"},"man_in_tuxedo_tone5":{"unicode":"1F935-1F3FF","name":"man in tuxedo tone 5","shortname":":man_in_tuxedo_tone5:","moji":"๐คต๐ฟ"},"man_tone1":{"unicode":"1F468-1F3FB","name":"man tone 1","shortname":":man_tone1:","moji":"๐จ๐ป"},"man_tone2":{"unicode":"1F468-1F3FC","name":"man tone 2","shortname":":man_tone2:","moji":"๐จ๐ผ"},"man_tone3":{"unicode":"1F468-1F3FD","name":"man tone 3","shortname":":man_tone3:","moji":"๐จ๐ฝ"},"man_tone4":{"unicode":"1F468-1F3FE","name":"man tone 4","shortname":":man_tone4:","moji":"๐จ๐พ"},"man_tone5":{"unicode":"1F468-1F3FF","name":"man tone 5","shortname":":man_tone5:","moji":"๐จ๐ฟ"},"man_with_gua_pi_mao":{"unicode":"1F472","name":"man with gua pi mao","shortname":":man_with_gua_pi_mao:","moji":"๐ฒ"},"man_with_gua_pi_mao_tone1":{"unicode":"1F472-1F3FB","name":"man with gua pi mao tone 1","shortname":":man_with_gua_pi_mao_tone1:","moji":"๐ฒ๐ป"},"man_with_gua_pi_mao_tone2":{"unicode":"1F472-1F3FC","name":"man with gua pi mao tone 2","shortname":":man_with_gua_pi_mao_tone2:","moji":"๐ฒ๐ผ"},"man_with_gua_pi_mao_tone3":{"unicode":"1F472-1F3FD","name":"man with gua pi mao tone 3","shortname":":man_with_gua_pi_mao_tone3:","moji":"๐ฒ๐ฝ"},"man_with_gua_pi_mao_tone4":{"unicode":"1F472-1F3FE","name":"man with gua pi mao tone 4","shortname":":man_with_gua_pi_mao_tone4:","moji":"๐ฒ๐พ"},"man_with_gua_pi_mao_tone5":{"unicode":"1F472-1F3FF","name":"man with gua pi mao tone 5","shortname":":man_with_gua_pi_mao_tone5:","moji":"๐ฒ๐ฟ"},"man_with_turban":{"unicode":"1F473","name":"man with turban","shortname":":man_with_turban:","moji":"๐ณ"},"man_with_turban_tone1":{"unicode":"1F473-1F3FB","name":"man with turban tone 1","shortname":":man_with_turban_tone1:","moji":"๐ณ๐ป"},"man_with_turban_tone2":{"unicode":"1F473-1F3FC","name":"man with turban tone 2","shortname":":man_with_turban_tone2:","moji":"๐ณ๐ผ"},"man_with_turban_tone3":{"unicode":"1F473-1F3FD","name":"man with turban tone 3","shortname":":man_with_turban_tone3:","moji":"๐ณ๐ฝ"},"man_with_turban_tone4":{"unicode":"1F473-1F3FE","name":"man with turban tone 4","shortname":":man_with_turban_tone4:","moji":"๐ณ๐พ"},"man_with_turban_tone5":{"unicode":"1F473-1F3FF","name":"man with turban tone 5","shortname":":man_with_turban_tone5:","moji":"๐ณ๐ฟ"},"mango":{"unicode":"1F96D","name":"mango","shortname":":mango:","moji":"๐ฅญ"},"mans_shoe":{"unicode":"1F45E","name":"mans shoe","shortname":":mans_shoe:","moji":"๐"},"map":{"unicode":"1F5FA","name":"map","shortname":":map:","moji":"๐บ"},"maple_leaf":{"unicode":"1F341","name":"maple leaf","shortname":":maple_leaf:","moji":"๐"},"martial_arts_uniform":{"unicode":"1F94B","name":"martial arts uniform","shortname":":martial_arts_uniform:","moji":"๐ฅ"},"mask":{"unicode":"1F637","name":"face with medical mask","shortname":":mask:","moji":"๐ท"},"massage":{"unicode":"1F486","name":"face massage","shortname":":massage:","moji":"๐"},"massage_tone1":{"unicode":"1F486-1F3FB","name":"face massage tone 1","shortname":":massage_tone1:","moji":"๐๐ป"},"massage_tone2":{"unicode":"1F486-1F3FC","name":"face massage tone 2","shortname":":massage_tone2:","moji":"๐๐ผ"},"massage_tone3":{"unicode":"1F486-1F3FD","name":"face massage tone 3","shortname":":massage_tone3:","moji":"๐๐ฝ"},"massage_tone4":{"unicode":"1F486-1F3FE","name":"face massage tone 4","shortname":":massage_tone4:","moji":"๐๐พ"},"massage_tone5":{"unicode":"1F486-1F3FF","name":"face massage tone 5","shortname":":massage_tone5:","moji":"๐๐ฟ"},"meat_on_bone":{"unicode":"1F356","name":"meat on bone","shortname":":meat_on_bone:","moji":"๐"},"medal":{"unicode":"1F3C5","name":"medal","shortname":":medal:","moji":"๐
"},"medical_symbol":{"unicode":"2695-FE0F","name":"medical symbol","shortname":":medical_symbol:","moji":"โ๏ธ"},"mega":{"unicode":"1F4E3","name":"mega","shortname":":mega:","moji":"๐ฃ"},"melon":{"unicode":"1F348","name":"melon","shortname":":melon:","moji":"๐"},"memo":{"unicode":"1F4DD","name":"memo","shortname":":memo:","moji":"๐"},"menorah":{"unicode":"1F54E","name":"menorah","shortname":":menorah:","moji":"๐"},"mens":{"unicode":"1F6B9","name":"mens","shortname":":mens:","moji":"๐น"},"merperson":{"unicode":"1F9DC","name":"merperson","shortname":":merperson:","moji":"๐ง"},"metal":{"unicode":"1F918","name":"sign of the horns","shortname":":metal:","moji":"๐ค"},"metal_tone1":{"unicode":"1F918-1F3FB","name":"sign of the horns tone 1","shortname":":metal_tone1:","moji":"๐ค๐ป"},"metal_tone2":{"unicode":"1F918-1F3FC","name":"sign of the horns tone 2","shortname":":metal_tone2:","moji":"๐ค๐ผ"},"metal_tone3":{"unicode":"1F918-1F3FD","name":"sign of the horns tone 3","shortname":":metal_tone3:","moji":"๐ค๐ฝ"},"metal_tone4":{"unicode":"1F918-1F3FE","name":"sign of the horns tone 4","shortname":":metal_tone4:","moji":"๐ค๐พ"},"metal_tone5":{"unicode":"1F918-1F3FF","name":"sign of the horns tone 5","shortname":":metal_tone5:","moji":"๐ค๐ฟ"},"metro":{"unicode":"1F687","name":"metro","shortname":":metro:","moji":"๐"},"microbe":{"unicode":"1F9A0","name":"microbe","shortname":":microbe:","moji":"๐ฆ "},"microphone":{"unicode":"1F3A4","name":"microphone","shortname":":microphone:","moji":"๐ค"},"microphone2":{"unicode":"1F399","name":"microphone2","shortname":":microphone2:","moji":"๐"},"microscope":{"unicode":"1F52C","name":"microscope","shortname":":microscope:","moji":"๐ฌ"},"middle_finger":{"unicode":"1F595","name":"reversed hand with middle finger extended","shortname":":middle_finger:","moji":"๐"},"middle_finger_tone1":{"unicode":"1F595-1F3FB","name":"reversed hand with middle finger extended tone 1","shortname":":middle_finger_tone1:","moji":"๐๐ป"},"middle_finger_tone2":{"unicode":"1F595-1F3FC","name":"reversed hand with middle finger extended tone 2","shortname":":middle_finger_tone2:","moji":"๐๐ผ"},"middle_finger_tone3":{"unicode":"1F595-1F3FD","name":"reversed hand with middle finger extended tone 3","shortname":":middle_finger_tone3:","moji":"๐๐ฝ"},"middle_finger_tone4":{"unicode":"1F595-1F3FE","name":"reversed hand with middle finger extended tone 4","shortname":":middle_finger_tone4:","moji":"๐๐พ"},"middle_finger_tone5":{"unicode":"1F595-1F3FF","name":"reversed hand with middle finger extended tone 5","shortname":":middle_finger_tone5:","moji":"๐๐ฟ"},"military_medal":{"unicode":"1F396","name":"military medal","shortname":":military_medal:","moji":"๐"},"milk":{"unicode":"1F95B","name":"milk","shortname":":milk:","moji":"๐ฅ"},"milky_way":{"unicode":"1F30C","name":"milky way","shortname":":milky_way:","moji":"๐"},"minibus":{"unicode":"1F690","name":"minibus","shortname":":minibus:","moji":"๐"},"minidisc":{"unicode":"1F4BD","name":"minidisc","shortname":":minidisc:","moji":"๐ฝ"},"mobile_phone_off":{"unicode":"1F4F4","name":"mobile phone off","shortname":":mobile_phone_off:","moji":"๐ด"},"money_mouth":{"unicode":"1F911","name":"money-mouth face","shortname":":money_mouth:","moji":"๐ค"},"money_with_wings":{"unicode":"1F4B8","name":"money with wings","shortname":":money_with_wings:","moji":"๐ธ"},"moneybag":{"unicode":"1F4B0","name":"moneybag","shortname":":moneybag:","moji":"๐ฐ"},"monkey":{"unicode":"1F412","name":"monkey","shortname":":monkey:","moji":"๐"},"monkey_face":{"unicode":"1F435","name":"monkey face","shortname":":monkey_face:","moji":"๐ต"},"monorail":{"unicode":"1F69D","name":"monorail","shortname":":monorail:","moji":"๐"},"moon":{"unicode":"1F314","name":"moon","shortname":":moon:","moji":"๐"},"moon_cake":{"unicode":"1F96E","name":"moon cake","shortname":":moon_cake:","moji":"๐ฅฎ"},"mortar_board":{"unicode":"1F393","name":"graduation cap","shortname":":mortar_board:","moji":"๐"},"mosque":{"unicode":"1F54C","name":"mosque","shortname":":mosque:","moji":"๐"},"mosquito":{"unicode":"1F99F","name":"mosquito","shortname":":mosquito:","moji":"๐ฆ"},"motor_scooter":{"unicode":"1F6F5","name":"motor scooter","shortname":":motor_scooter:","moji":"๐ต"},"motorboat":{"unicode":"1F6E5","name":"motorboat","shortname":":motorboat:","moji":"๐ฅ"},"motorcycle":{"unicode":"1F3CD","name":"motorcycle","shortname":":motorcycle:","moji":"๐"},"motorway":{"unicode":"1F6E3","name":"motorway","shortname":":motorway:","moji":"๐ฃ"},"mount_fuji":{"unicode":"1F5FB","name":"mount fuji","shortname":":mount_fuji:","moji":"๐ป"},"mountain":{"unicode":"26F0","name":"mountain","shortname":":mountain:","moji":"โฐ"},"mountain_bicyclist":{"unicode":"1F6B5","name":"mountain bicyclist","shortname":":mountain_bicyclist:","moji":"๐ต"},"mountain_cableway":{"unicode":"1F6A0","name":"mountain cableway","shortname":":mountain_cableway:","moji":"๐ "},"mountain_railway":{"unicode":"1F69E","name":"mountain railway","shortname":":mountain_railway:","moji":"๐"},"mountain_snow":{"unicode":"1F3D4","name":"mountain snow","shortname":":mountain_snow:","moji":"๐"},"mouse":{"unicode":"1F42D","name":"mouse","shortname":":mouse:","moji":"๐ญ"},"mouse2":{"unicode":"1F401","name":"mouse2","shortname":":mouse2:","moji":"๐"},"mouse_three_button":{"unicode":"1F5B1","name":"mouse three button","shortname":":mouse_three_button:","moji":"๐ฑ"},"movie_camera":{"unicode":"1F3A5","name":"movie camera","shortname":":movie_camera:","moji":"๐ฅ"},"moyai":{"unicode":"1F5FF","name":"moyai","shortname":":moyai:","moji":"๐ฟ"},"mrs_claus":{"unicode":"1F936","name":"mother christmas","shortname":":mrs_claus:","moji":"๐คถ"},"mrs_claus_tone1":{"unicode":"1F936-1F3FB","name":"mother christmas tone 1","shortname":":mrs_claus_tone1:","moji":"๐คถ๐ป"},"mrs_claus_tone2":{"unicode":"1F936-1F3FC","name":"mother christmas tone 2","shortname":":mrs_claus_tone2:","moji":"๐คถ๐ผ"},"mrs_claus_tone3":{"unicode":"1F936-1F3FD","name":"mother christmas tone 3","shortname":":mrs_claus_tone3:","moji":"๐คถ๐ฝ"},"mrs_claus_tone4":{"unicode":"1F936-1F3FE","name":"mother christmas tone 4","shortname":":mrs_claus_tone4:","moji":"๐คถ๐พ"},"mrs_claus_tone5":{"unicode":"1F936-1F3FF","name":"mother christmas tone 5","shortname":":mrs_claus_tone5:","moji":"๐คถ๐ฟ"},"muscle":{"unicode":"1F4AA","name":"flexed biceps","shortname":":muscle:","moji":"๐ช"},"muscle_tone1":{"unicode":"1F4AA-1F3FB","name":"flexed biceps tone 1","shortname":":muscle_tone1:","moji":"๐ช๐ป"},"muscle_tone2":{"unicode":"1F4AA-1F3FC","name":"flexed biceps tone 2","shortname":":muscle_tone2:","moji":"๐ช๐ผ"},"muscle_tone3":{"unicode":"1F4AA-1F3FD","name":"flexed biceps tone 3","shortname":":muscle_tone3:","moji":"๐ช๐ฝ"},"muscle_tone4":{"unicode":"1F4AA-1F3FE","name":"flexed biceps tone 4","shortname":":muscle_tone4:","moji":"๐ช๐พ"},"muscle_tone5":{"unicode":"1F4AA-1F3FF","name":"flexed biceps tone 5","shortname":":muscle_tone5:","moji":"๐ช๐ฟ"},"mushroom":{"unicode":"1F344","name":"mushroom","shortname":":mushroom:","moji":"๐"},"musical_keyboard":{"unicode":"1F3B9","name":"musical keyboard","shortname":":musical_keyboard:","moji":"๐น"},"musical_note":{"unicode":"1F3B5","name":"musical note","shortname":":musical_note:","moji":"๐ต"},"musical_score":{"unicode":"1F3BC","name":"musical score","shortname":":musical_score:","moji":"๐ผ"},"mute":{"unicode":"1F507","name":"mute","shortname":":mute:","moji":"๐"},"nail_care":{"unicode":"1F485","name":"nail polish","shortname":":nail_care:","moji":"๐
"},"nail_care_tone1":{"unicode":"1F485-1F3FB","name":"nail polish tone 1","shortname":":nail_care_tone1:","moji":"๐
๐ป"},"nail_care_tone2":{"unicode":"1F485-1F3FC","name":"nail polish tone 2","shortname":":nail_care_tone2:","moji":"๐
๐ผ"},"nail_care_tone3":{"unicode":"1F485-1F3FD","name":"nail polish tone 3","shortname":":nail_care_tone3:","moji":"๐
๐ฝ"},"nail_care_tone4":{"unicode":"1F485-1F3FE","name":"nail polish tone 4","shortname":":nail_care_tone4:","moji":"๐
๐พ"},"nail_care_tone5":{"unicode":"1F485-1F3FF","name":"nail polish tone 5","shortname":":nail_care_tone5:","moji":"๐
๐ฟ"},"name_badge":{"unicode":"1F4DB","name":"name badge","shortname":":name_badge:","moji":"๐"},"nauseated_face":{"unicode":"1F922","name":"nauseated face","shortname":":nauseated_face:","moji":"๐คข"},"nazar_amulet":{"unicode":"1F9FF","name":"nazar amulet","shortname":":nazar_amulet:","moji":"๐งฟ"},"necktie":{"unicode":"1F454","name":"necktie","shortname":":necktie:","moji":"๐"},"negative_squared_cross_mark":{"unicode":"274E","name":"negative squared cross mark","shortname":":negative_squared_cross_mark:","moji":"โ"},"nerd":{"unicode":"1F913","name":"nerd face","shortname":":nerd:","moji":"๐ค"},"neutral_face":{"unicode":"1F610","name":"neutral face","shortname":":neutral_face:","moji":"๐"},"new":{"unicode":"1F195","name":"new","shortname":":new:","moji":"๐"},"new_moon":{"unicode":"1F311","name":"new moon","shortname":":new_moon:","moji":"๐"},"new_moon_with_face":{"unicode":"1F31A","name":"new moon with face","shortname":":new_moon_with_face:","moji":"๐"},"newspaper":{"unicode":"1F4F0","name":"newspaper","shortname":":newspaper:","moji":"๐ฐ"},"newspaper2":{"unicode":"1F5DE","name":"newspaper2","shortname":":newspaper2:","moji":"๐"},"ng":{"unicode":"1F196","name":"ng","shortname":":ng:","moji":"๐"},"night_with_stars":{"unicode":"1F303","name":"night with stars","shortname":":night_with_stars:","moji":"๐"},"nine":{"unicode":"39-FE0F-20E3","name":"nine","shortname":":nine:","moji":"9๏ธโฃ"},"no_bell":{"unicode":"1F515","name":"no bell","shortname":":no_bell:","moji":"๐"},"no_bicycles":{"unicode":"1F6B3","name":"no bicycles","shortname":":no_bicycles:","moji":"๐ณ"},"no_entry":{"unicode":"26D4","name":"no entry","shortname":":no_entry:","moji":"โ"},"no_entry_sign":{"unicode":"1F6AB","name":"no entry sign","shortname":":no_entry_sign:","moji":"๐ซ"},"no_good":{"unicode":"1F645","name":"face with no good gesture","shortname":":no_good:","moji":"๐
"},"no_good_tone1":{"unicode":"1F645-1F3FB","name":"face with no good gesture tone 1","shortname":":no_good_tone1:","moji":"๐
๐ป"},"no_good_tone2":{"unicode":"1F645-1F3FC","name":"face with no good gesture tone 2","shortname":":no_good_tone2:","moji":"๐
๐ผ"},"no_good_tone3":{"unicode":"1F645-1F3FD","name":"face with no good gesture tone 3","shortname":":no_good_tone3:","moji":"๐
๐ฝ"},"no_good_tone4":{"unicode":"1F645-1F3FE","name":"face with no good gesture tone 4","shortname":":no_good_tone4:","moji":"๐
๐พ"},"no_good_tone5":{"unicode":"1F645-1F3FF","name":"face with no good gesture tone 5","shortname":":no_good_tone5:","moji":"๐
๐ฟ"},"no_mobile_phones":{"unicode":"1F4F5","name":"no mobile phones","shortname":":no_mobile_phones:","moji":"๐ต"},"no_mouth":{"unicode":"1F636","name":"face without mouth","shortname":":no_mouth:","moji":"๐ถ"},"no_pedestrians":{"unicode":"1F6B7","name":"no pedestrians","shortname":":no_pedestrians:","moji":"๐ท"},"no_smoking":{"unicode":"1F6AD","name":"no smoking","shortname":":no_smoking:","moji":"๐ญ"},"non-potable_water":{"unicode":"1F6B1","name":"non-potable water","shortname":":non-potable_water:","moji":"๐ฑ"},"nose":{"unicode":"1F443","name":"nose","shortname":":nose:","moji":"๐"},"nose_tone1":{"unicode":"1F443-1F3FB","name":"nose tone 1","shortname":":nose_tone1:","moji":"๐๐ป"},"nose_tone2":{"unicode":"1F443-1F3FC","name":"nose tone 2","shortname":":nose_tone2:","moji":"๐๐ผ"},"nose_tone3":{"unicode":"1F443-1F3FD","name":"nose tone 3","shortname":":nose_tone3:","moji":"๐๐ฝ"},"nose_tone4":{"unicode":"1F443-1F3FE","name":"nose tone 4","shortname":":nose_tone4:","moji":"๐๐พ"},"nose_tone5":{"unicode":"1F443-1F3FF","name":"nose tone 5","shortname":":nose_tone5:","moji":"๐๐ฟ"},"notebook":{"unicode":"1F4D3","name":"notebook","shortname":":notebook:","moji":"๐"},"notebook_with_decorative_cover":{"unicode":"1F4D4","name":"notebook with decorative cover","shortname":":notebook_with_decorative_cover:","moji":"๐"},"notepad_spiral":{"unicode":"1F5D2","name":"notepad spiral","shortname":":notepad_spiral:","moji":"๐"},"notes":{"unicode":"1F3B6","name":"notes","shortname":":notes:","moji":"๐ถ"},"nut_and_bolt":{"unicode":"1F529","name":"nut and bolt","shortname":":nut_and_bolt:","moji":"๐ฉ"},"o":{"unicode":"2B55","name":"o","shortname":":o:","moji":"โญ"},"o2":{"unicode":"1F17E-FE0F","name":"o2","shortname":":o2:","moji":"๐
พ๏ธ"},"ocean":{"unicode":"1F30A","name":"ocean","shortname":":ocean:","moji":"๐"},"octagonal_sign":{"unicode":"1F6D1","name":"octagonal sign","shortname":":octagonal_sign:","moji":"๐"},"octopus":{"unicode":"1F419","name":"octopus","shortname":":octopus:","moji":"๐"},"oden":{"unicode":"1F362","name":"oden","shortname":":oden:","moji":"๐ข"},"office":{"unicode":"1F3E2","name":"office","shortname":":office:","moji":"๐ข"},"oil":{"unicode":"1F6E2","name":"oil","shortname":":oil:","moji":"๐ข"},"ok":{"unicode":"1F197","name":"ok","shortname":":ok:","moji":"๐"},"ok_hand":{"unicode":"1F44C","name":"ok hand sign","shortname":":ok_hand:","moji":"๐"},"ok_hand_tone1":{"unicode":"1F44C-1F3FB","name":"ok hand sign tone 1","shortname":":ok_hand_tone1:","moji":"๐๐ป"},"ok_hand_tone2":{"unicode":"1F44C-1F3FC","name":"ok hand sign tone 2","shortname":":ok_hand_tone2:","moji":"๐๐ผ"},"ok_hand_tone3":{"unicode":"1F44C-1F3FD","name":"ok hand sign tone 3","shortname":":ok_hand_tone3:","moji":"๐๐ฝ"},"ok_hand_tone4":{"unicode":"1F44C-1F3FE","name":"ok hand sign tone 4","shortname":":ok_hand_tone4:","moji":"๐๐พ"},"ok_hand_tone5":{"unicode":"1F44C-1F3FF","name":"ok hand sign tone 5","shortname":":ok_hand_tone5:","moji":"๐๐ฟ"},"ok_woman":{"unicode":"1F646","name":"face with ok gesture","shortname":":ok_woman:","moji":"๐"},"ok_woman_tone1":{"unicode":"1F646-1F3FB","name":"face with ok gesture tone1","shortname":":ok_woman_tone1:","moji":"๐๐ป"},"ok_woman_tone2":{"unicode":"1F646-1F3FC","name":"face with ok gesture tone2","shortname":":ok_woman_tone2:","moji":"๐๐ผ"},"ok_woman_tone3":{"unicode":"1F646-1F3FD","name":"face with ok gesture tone3","shortname":":ok_woman_tone3:","moji":"๐๐ฝ"},"ok_woman_tone4":{"unicode":"1F646-1F3FE","name":"face with ok gesture tone4","shortname":":ok_woman_tone4:","moji":"๐๐พ"},"ok_woman_tone5":{"unicode":"1F646-1F3FF","name":"face with ok gesture tone5","shortname":":ok_woman_tone5:","moji":"๐๐ฟ"},"older_adult":{"unicode":"1F9D3","name":"older adult","shortname":":older_adult:","moji":"๐ง"},"older_man":{"unicode":"1F474","name":"older man","shortname":":older_man:","moji":"๐ด"},"older_man_tone1":{"unicode":"1F474-1F3FB","name":"older man tone 1","shortname":":older_man_tone1:","moji":"๐ด๐ป"},"older_man_tone2":{"unicode":"1F474-1F3FC","name":"older man tone 2","shortname":":older_man_tone2:","moji":"๐ด๐ผ"},"older_man_tone3":{"unicode":"1F474-1F3FD","name":"older man tone 3","shortname":":older_man_tone3:","moji":"๐ด๐ฝ"},"older_man_tone4":{"unicode":"1F474-1F3FE","name":"older man tone 4","shortname":":older_man_tone4:","moji":"๐ด๐พ"},"older_man_tone5":{"unicode":"1F474-1F3FF","name":"older man tone 5","shortname":":older_man_tone5:","moji":"๐ด๐ฟ"},"older_woman":{"unicode":"1F475","name":"older woman","shortname":":older_woman:","moji":"๐ต"},"older_woman_tone1":{"unicode":"1F475-1F3FB","name":"older woman tone 1","shortname":":older_woman_tone1:","moji":"๐ต๐ป"},"older_woman_tone2":{"unicode":"1F475-1F3FC","name":"older woman tone 2","shortname":":older_woman_tone2:","moji":"๐ต๐ผ"},"older_woman_tone3":{"unicode":"1F475-1F3FD","name":"older woman tone 3","shortname":":older_woman_tone3:","moji":"๐ต๐ฝ"},"older_woman_tone4":{"unicode":"1F475-1F3FE","name":"older woman tone 4","shortname":":older_woman_tone4:","moji":"๐ต๐พ"},"older_woman_tone5":{"unicode":"1F475-1F3FF","name":"older woman tone 5","shortname":":older_woman_tone5:","moji":"๐ต๐ฟ"},"om_symbol":{"unicode":"1F549","name":"om symbol","shortname":":om_symbol:","moji":"๐"},"on":{"unicode":"1F51B","name":"on","shortname":":on:","moji":"๐"},"oncoming_automobile":{"unicode":"1F698","name":"oncoming automobile","shortname":":oncoming_automobile:","moji":"๐"},"oncoming_bus":{"unicode":"1F68D","name":"oncoming bus","shortname":":oncoming_bus:","moji":"๐"},"oncoming_police_car":{"unicode":"1F694","name":"oncoming police car","shortname":":oncoming_police_car:","moji":"๐"},"oncoming_taxi":{"unicode":"1F696","name":"oncoming taxi","shortname":":oncoming_taxi:","moji":"๐"},"one":{"unicode":"31-FE0F-20E3","name":"one","shortname":":one:","moji":"1๏ธโฃ"},"open_file_folder":{"unicode":"1F4C2","name":"open file folder","shortname":":open_file_folder:","moji":"๐"},"open_hands":{"unicode":"1F450","name":"open hands sign","shortname":":open_hands:","moji":"๐"},"open_hands_tone1":{"unicode":"1F450-1F3FB","name":"open hands sign tone 1","shortname":":open_hands_tone1:","moji":"๐๐ป"},"open_hands_tone2":{"unicode":"1F450-1F3FC","name":"open hands sign tone 2","shortname":":open_hands_tone2:","moji":"๐๐ผ"},"open_hands_tone3":{"unicode":"1F450-1F3FD","name":"open hands sign tone 3","shortname":":open_hands_tone3:","moji":"๐๐ฝ"},"open_hands_tone4":{"unicode":"1F450-1F3FE","name":"open hands sign tone 4","shortname":":open_hands_tone4:","moji":"๐๐พ"},"open_hands_tone5":{"unicode":"1F450-1F3FF","name":"open hands sign tone 5","shortname":":open_hands_tone5:","moji":"๐๐ฟ"},"open_mouth":{"unicode":"1F62E","name":"face with open mouth","shortname":":open_mouth:","moji":"๐ฎ"},"open_umbrella":{"unicode":"2602-FE0F","name":"open umbrella","shortname":":open_umbrella:","moji":"โ๏ธ"},"ophiuchus":{"unicode":"26CE","name":"ophiuchus","shortname":":ophiuchus:","moji":"โ"},"orange_book":{"unicode":"1F4D9","name":"orange book","shortname":":orange_book:","moji":"๐"},"orange_heart":{"unicode":"1F9E1","name":"orange heart","shortname":":orange_heart:","moji":"๐งก"},"orthodox_cross":{"unicode":"2626-FE0F","name":"orthodox cross","shortname":":orthodox_cross:","moji":"โฆ๏ธ"},"outbox_tray":{"unicode":"1F4E4","name":"outbox tray","shortname":":outbox_tray:","moji":"๐ค"},"owl":{"unicode":"1F989","name":"owl","shortname":":owl:","moji":"๐ฆ"},"ox":{"unicode":"1F402","name":"ox","shortname":":ox:","moji":"๐"},"package":{"unicode":"1F4E6","name":"package","shortname":":package:","moji":"๐ฆ"},"page_facing_up":{"unicode":"1F4C4","name":"page facing up","shortname":":page_facing_up:","moji":"๐"},"page_with_curl":{"unicode":"1F4C3","name":"page with curl","shortname":":page_with_curl:","moji":"๐"},"pager":{"unicode":"1F4DF","name":"pager","shortname":":pager:","moji":"๐"},"paintbrush":{"unicode":"1F58C","name":"paintbrush","shortname":":paintbrush:","moji":"๐"},"palm_tree":{"unicode":"1F334","name":"palm tree","shortname":":palm_tree:","moji":"๐ด"},"palms_up_together":{"unicode":"1F932","name":"palms up together","shortname":":palms_up_together:","moji":"๐คฒ"},"pancakes":{"unicode":"1F95E","name":"pancakes","shortname":":pancakes:","moji":"๐ฅ"},"panda_face":{"unicode":"1F43C","name":"panda face","shortname":":panda_face:","moji":"๐ผ"},"paperclip":{"unicode":"1F4CE","name":"paperclip","shortname":":paperclip:","moji":"๐"},"paperclips":{"unicode":"1F587","name":"paperclips","shortname":":paperclips:","moji":"๐"},"park":{"unicode":"1F3DE","name":"park","shortname":":park:","moji":"๐"},"parking":{"unicode":"1F17F-FE0F","name":"parking","shortname":":parking:","moji":"๐
ฟ๏ธ"},"parrot":{"unicode":"1F99C","name":"parrot","shortname":":parrot:","moji":"๐ฆ"},"part_alternation_mark":{"unicode":"303D-FE0F","name":"part alternation mark","shortname":":part_alternation_mark:","moji":"ใฝ๏ธ"},"partly_sunny":{"unicode":"26C5","name":"partly sunny","shortname":":partly_sunny:","moji":"โ
"},"partying_face":{"unicode":"1F973","name":"partying face","shortname":":partying_face:","moji":"๐ฅณ"},"passport_control":{"unicode":"1F6C2","name":"passport control","shortname":":passport_control:","moji":"๐"},"pause_button":{"unicode":"23F8","name":"pause button","shortname":":pause_button:","moji":"โธ"},"paw_prints":{"unicode":"1F43E","name":"paw prints","shortname":":paw_prints:","moji":"๐พ"},"peace":{"unicode":"262E-FE0F","name":"peace","shortname":":peace:","moji":"โฎ๏ธ"},"peach":{"unicode":"1F351","name":"peach","shortname":":peach:","moji":"๐"},"peacock":{"unicode":"1F99A","name":"peacock","shortname":":peacock:","moji":"๐ฆ"},"peanuts":{"unicode":"1F95C","name":"peanuts","shortname":":peanuts:","moji":"๐ฅ"},"pear":{"unicode":"1F350","name":"pear","shortname":":pear:","moji":"๐"},"pen_ballpoint":{"unicode":"1F58A","name":"pen ballpoint","shortname":":pen_ballpoint:","moji":"๐"},"pen_fountain":{"unicode":"1F58B","name":"pen fountain","shortname":":pen_fountain:","moji":"๐"},"pencil":{"unicode":"1F4DD","name":"pencil","shortname":":pencil:","moji":"๐"},"pencil2":{"unicode":"270F-FE0F","name":"pencil2","shortname":":pencil2:","moji":"โ๏ธ"},"penguin":{"unicode":"1F427","name":"penguin","shortname":":penguin:","moji":"๐ง"},"pensive":{"unicode":"1F614","name":"pensive face","shortname":":pensive:","moji":"๐"},"performing_arts":{"unicode":"1F3AD","name":"performing arts","shortname":":performing_arts:","moji":"๐ญ"},"persevere":{"unicode":"1F623","name":"persevering face","shortname":":persevere:","moji":"๐ฃ"},"person_climbing":{"unicode":"1F9D7","name":"person climbing","shortname":":person_climbing:","moji":"๐ง"},"person_frowning":{"unicode":"1F64D","name":"person frowning","shortname":":person_frowning:","moji":"๐"},"person_frowning_tone1":{"unicode":"1F64D-1F3FB","name":"person frowning tone 1","shortname":":person_frowning_tone1:","moji":"๐๐ป"},"person_frowning_tone2":{"unicode":"1F64D-1F3FC","name":"person frowning tone 2","shortname":":person_frowning_tone2:","moji":"๐๐ผ"},"person_frowning_tone3":{"unicode":"1F64D-1F3FD","name":"person frowning tone 3","shortname":":person_frowning_tone3:","moji":"๐๐ฝ"},"person_frowning_tone4":{"unicode":"1F64D-1F3FE","name":"person frowning tone 4","shortname":":person_frowning_tone4:","moji":"๐๐พ"},"person_frowning_tone5":{"unicode":"1F64D-1F3FF","name":"person frowning tone 5","shortname":":person_frowning_tone5:","moji":"๐๐ฟ"},"person_in_lotus_position":{"unicode":"1F9D8","name":"person in lotus position","shortname":":person_in_lotus_position:","moji":"๐ง"},"person_in_steamy_room":{"unicode":"1F9D6","name":"person in steamy room","shortname":":person_in_steamy_room:","moji":"๐ง"},"person_with_blond_hair":{"unicode":"1F471","name":"person with blond hair","shortname":":person_with_blond_hair:","moji":"๐ฑ"},"person_with_blond_hair_tone1":{"unicode":"1F471-1F3FB","name":"person with blond hair tone 1","shortname":":person_with_blond_hair_tone1:","moji":"๐ฑ๐ป"},"person_with_blond_hair_tone2":{"unicode":"1F471-1F3FC","name":"person with blond hair tone 2","shortname":":person_with_blond_hair_tone2:","moji":"๐ฑ๐ผ"},"person_with_blond_hair_tone3":{"unicode":"1F471-1F3FD","name":"person with blond hair tone 3","shortname":":person_with_blond_hair_tone3:","moji":"๐ฑ๐ฝ"},"person_with_blond_hair_tone4":{"unicode":"1F471-1F3FE","name":"person with blond hair tone 4","shortname":":person_with_blond_hair_tone4:","moji":"๐ฑ๐พ"},"person_with_blond_hair_tone5":{"unicode":"1F471-1F3FF","name":"person with blond hair tone 5","shortname":":person_with_blond_hair_tone5:","moji":"๐ฑ๐ฟ"},"person_with_pouting_face":{"unicode":"1F64E","name":"person with pouting face","shortname":":person_with_pouting_face:","moji":"๐"},"person_with_pouting_face_tone1":{"unicode":"1F64E-1F3FB","name":"person with pouting face tone1","shortname":":person_with_pouting_face_tone1:","moji":"๐๐ป"},"person_with_pouting_face_tone2":{"unicode":"1F64E-1F3FC","name":"person with pouting face tone2","shortname":":person_with_pouting_face_tone2:","moji":"๐๐ผ"},"person_with_pouting_face_tone3":{"unicode":"1F64E-1F3FD","name":"person with pouting face tone3","shortname":":person_with_pouting_face_tone3:","moji":"๐๐ฝ"},"person_with_pouting_face_tone4":{"unicode":"1F64E-1F3FE","name":"person with pouting face tone4","shortname":":person_with_pouting_face_tone4:","moji":"๐๐พ"},"person_with_pouting_face_tone5":{"unicode":"1F64E-1F3FF","name":"person with pouting face tone5","shortname":":person_with_pouting_face_tone5:","moji":"๐๐ฟ"},"petri_dish":{"unicode":"1F9EB","name":"petri dish","shortname":":petri_dish:","moji":"๐งซ"},"phone":{"unicode":"260E-FE0F","name":"phone","shortname":":phone:","moji":"โ๏ธ"},"pick":{"unicode":"26CF","name":"pick","shortname":":pick:","moji":"โ"},"pie":{"unicode":"1F967","name":"pie","shortname":":pie:","moji":"๐ฅง"},"pig":{"unicode":"1F437","name":"pig","shortname":":pig:","moji":"๐ท"},"pig2":{"unicode":"1F416","name":"pig2","shortname":":pig2:","moji":"๐"},"pig_nose":{"unicode":"1F43D","name":"pig nose","shortname":":pig_nose:","moji":"๐ฝ"},"pill":{"unicode":"1F48A","name":"pill","shortname":":pill:","moji":"๐"},"pineapple":{"unicode":"1F34D","name":"pineapple","shortname":":pineapple:","moji":"๐"},"ping_pong":{"unicode":"1F3D3","name":"ping pong","shortname":":ping_pong:","moji":"๐"},"pisces":{"unicode":"2653","name":"pisces","shortname":":pisces:","moji":"โ"},"pizza":{"unicode":"1F355","name":"pizza","shortname":":pizza:","moji":"๐"},"place_of_worship":{"unicode":"1F6D0","name":"place of worship","shortname":":place_of_worship:","moji":"๐"},"play_pause":{"unicode":"23EF","name":"play pause","shortname":":play_pause:","moji":"โฏ"},"pleading_face":{"unicode":"1F97A","name":"pleading face","shortname":":pleading_face:","moji":"๐ฅบ"},"point_down":{"unicode":"1F447","name":"white down pointing backhand index","shortname":":point_down:","moji":"๐"},"point_down_tone1":{"unicode":"1F447-1F3FB","name":"white down pointing backhand index tone 1","shortname":":point_down_tone1:","moji":"๐๐ป"},"point_down_tone2":{"unicode":"1F447-1F3FC","name":"white down pointing backhand index tone 2","shortname":":point_down_tone2:","moji":"๐๐ผ"},"point_down_tone3":{"unicode":"1F447-1F3FD","name":"white down pointing backhand index tone 3","shortname":":point_down_tone3:","moji":"๐๐ฝ"},"point_down_tone4":{"unicode":"1F447-1F3FE","name":"white down pointing backhand index tone 4","shortname":":point_down_tone4:","moji":"๐๐พ"},"point_down_tone5":{"unicode":"1F447-1F3FF","name":"white down pointing backhand index tone 5","shortname":":point_down_tone5:","moji":"๐๐ฟ"},"point_left":{"unicode":"1F448","name":"white left pointing backhand index","shortname":":point_left:","moji":"๐"},"point_left_tone1":{"unicode":"1F448-1F3FB","name":"white left pointing backhand index tone 1","shortname":":point_left_tone1:","moji":"๐๐ป"},"point_left_tone2":{"unicode":"1F448-1F3FC","name":"white left pointing backhand index tone 2","shortname":":point_left_tone2:","moji":"๐๐ผ"},"point_left_tone3":{"unicode":"1F448-1F3FD","name":"white left pointing backhand index tone 3","shortname":":point_left_tone3:","moji":"๐๐ฝ"},"point_left_tone4":{"unicode":"1F448-1F3FE","name":"white left pointing backhand index tone 4","shortname":":point_left_tone4:","moji":"๐๐พ"},"point_left_tone5":{"unicode":"1F448-1F3FF","name":"white left pointing backhand index tone 5","shortname":":point_left_tone5:","moji":"๐๐ฟ"},"point_right":{"unicode":"1F449","name":"white right pointing backhand index","shortname":":point_right:","moji":"๐"},"point_right_tone1":{"unicode":"1F449-1F3FB","name":"white right pointing backhand index tone 1","shortname":":point_right_tone1:","moji":"๐๐ป"},"point_right_tone2":{"unicode":"1F449-1F3FC","name":"white right pointing backhand index tone 2","shortname":":point_right_tone2:","moji":"๐๐ผ"},"point_right_tone3":{"unicode":"1F449-1F3FD","name":"white right pointing backhand index tone 3","shortname":":point_right_tone3:","moji":"๐๐ฝ"},"point_right_tone4":{"unicode":"1F449-1F3FE","name":"white right pointing backhand index tone 4","shortname":":point_right_tone4:","moji":"๐๐พ"},"point_right_tone5":{"unicode":"1F449-1F3FF","name":"white right pointing backhand index tone 5","shortname":":point_right_tone5:","moji":"๐๐ฟ"},"point_up":{"unicode":"261D-FE0F","name":"white up pointing index","shortname":":point_up:","moji":"โ๏ธ"},"point_up_2":{"unicode":"1F446","name":"white up pointing backhand index","shortname":":point_up_2:","moji":"๐"},"point_up_2_tone1":{"unicode":"1F446-1F3FB","name":"white up pointing backhand index tone 1","shortname":":point_up_2_tone1:","moji":"๐๐ป"},"point_up_2_tone2":{"unicode":"1F446-1F3FC","name":"white up pointing backhand index tone 2","shortname":":point_up_2_tone2:","moji":"๐๐ผ"},"point_up_2_tone3":{"unicode":"1F446-1F3FD","name":"white up pointing backhand index tone 3","shortname":":point_up_2_tone3:","moji":"๐๐ฝ"},"point_up_2_tone4":{"unicode":"1F446-1F3FE","name":"white up pointing backhand index tone 4","shortname":":point_up_2_tone4:","moji":"๐๐พ"},"point_up_2_tone5":{"unicode":"1F446-1F3FF","name":"white up pointing backhand index tone 5","shortname":":point_up_2_tone5:","moji":"๐๐ฟ"},"point_up_tone1":{"unicode":"261D-FE0F-1F3FB","name":"white up pointing index tone 1","shortname":":point_up_tone1:","moji":"โ๏ธ๐ป"},"point_up_tone2":{"unicode":"261D-FE0F-1F3FC","name":"white up pointing index tone 2","shortname":":point_up_tone2:","moji":"โ๏ธ๐ผ"},"point_up_tone3":{"unicode":"261D-FE0F-1F3FD","name":"white up pointing index tone 3","shortname":":point_up_tone3:","moji":"โ๏ธ๐ฝ"},"point_up_tone4":{"unicode":"261D-FE0F-1F3FE","name":"white up pointing index tone 4","shortname":":point_up_tone4:","moji":"โ๏ธ๐พ"},"point_up_tone5":{"unicode":"261D-FE0F-1F3FF","name":"white up pointing index tone 5","shortname":":point_up_tone5:","moji":"โ๏ธ๐ฟ"},"police_car":{"unicode":"1F693","name":"police car","shortname":":police_car:","moji":"๐"},"poodle":{"unicode":"1F429","name":"poodle","shortname":":poodle:","moji":"๐ฉ"},"poop":{"unicode":"1F4A9","name":"pile of poo","shortname":":poop:","moji":"๐ฉ"},"popcorn":{"unicode":"1F37F","name":"popcorn","shortname":":popcorn:","moji":"๐ฟ"},"post_office":{"unicode":"1F3E3","name":"post office","shortname":":post_office:","moji":"๐ฃ"},"postal_horn":{"unicode":"1F4EF","name":"postal horn","shortname":":postal_horn:","moji":"๐ฏ"},"postbox":{"unicode":"1F4EE","name":"postbox","shortname":":postbox:","moji":"๐ฎ"},"potable_water":{"unicode":"1F6B0","name":"potable water","shortname":":potable_water:","moji":"๐ฐ"},"potato":{"unicode":"1F954","name":"potato","shortname":":potato:","moji":"๐ฅ"},"pouch":{"unicode":"1F45D","name":"pouch","shortname":":pouch:","moji":"๐"},"poultry_leg":{"unicode":"1F357","name":"poultry leg","shortname":":poultry_leg:","moji":"๐"},"pound":{"unicode":"1F4B7","name":"pound","shortname":":pound:","moji":"๐ท"},"pouting_cat":{"unicode":"1F63E","name":"pouting cat face","shortname":":pouting_cat:","moji":"๐พ"},"pray":{"unicode":"1F64F","name":"person with folded hands","shortname":":pray:","moji":"๐"},"pray_tone1":{"unicode":"1F64F-1F3FB","name":"person with folded hands tone 1","shortname":":pray_tone1:","moji":"๐๐ป"},"pray_tone2":{"unicode":"1F64F-1F3FC","name":"person with folded hands tone 2","shortname":":pray_tone2:","moji":"๐๐ผ"},"pray_tone3":{"unicode":"1F64F-1F3FD","name":"person with folded hands tone 3","shortname":":pray_tone3:","moji":"๐๐ฝ"},"pray_tone4":{"unicode":"1F64F-1F3FE","name":"person with folded hands tone 4","shortname":":pray_tone4:","moji":"๐๐พ"},"pray_tone5":{"unicode":"1F64F-1F3FF","name":"person with folded hands tone 5","shortname":":pray_tone5:","moji":"๐๐ฟ"},"prayer_beads":{"unicode":"1F4FF","name":"prayer beads","shortname":":prayer_beads:","moji":"๐ฟ"},"pregnant_woman":{"unicode":"1F930","name":"pregnant woman","shortname":":pregnant_woman:","moji":"๐คฐ"},"pregnant_woman_tone1":{"unicode":"1F930-1F3FB","name":"pregnant woman tone 1","shortname":":pregnant_woman_tone1:","moji":"๐คฐ๐ป"},"pregnant_woman_tone2":{"unicode":"1F930-1F3FC","name":"pregnant woman tone 2","shortname":":pregnant_woman_tone2:","moji":"๐คฐ๐ผ"},"pregnant_woman_tone3":{"unicode":"1F930-1F3FD","name":"pregnant woman tone 3","shortname":":pregnant_woman_tone3:","moji":"๐คฐ๐ฝ"},"pregnant_woman_tone4":{"unicode":"1F930-1F3FE","name":"pregnant woman tone 4","shortname":":pregnant_woman_tone4:","moji":"๐คฐ๐พ"},"pregnant_woman_tone5":{"unicode":"1F930-1F3FF","name":"pregnant woman tone 5","shortname":":pregnant_woman_tone5:","moji":"๐คฐ๐ฟ"},"pretzel":{"unicode":"1F968","name":"pretzel","shortname":":pretzel:","moji":"๐ฅจ"},"prince":{"unicode":"1F934","name":"prince","shortname":":prince:","moji":"๐คด"},"prince_tone1":{"unicode":"1F934-1F3FB","name":"prince tone 1","shortname":":prince_tone1:","moji":"๐คด๐ป"},"prince_tone2":{"unicode":"1F934-1F3FC","name":"prince tone 2","shortname":":prince_tone2:","moji":"๐คด๐ผ"},"prince_tone3":{"unicode":"1F934-1F3FD","name":"prince tone 3","shortname":":prince_tone3:","moji":"๐คด๐ฝ"},"prince_tone4":{"unicode":"1F934-1F3FE","name":"prince tone 4","shortname":":prince_tone4:","moji":"๐คด๐พ"},"prince_tone5":{"unicode":"1F934-1F3FF","name":"prince tone 5","shortname":":prince_tone5:","moji":"๐คด๐ฟ"},"princess":{"unicode":"1F478","name":"princess","shortname":":princess:","moji":"๐ธ"},"princess_tone1":{"unicode":"1F478-1F3FB","name":"princess tone 1","shortname":":princess_tone1:","moji":"๐ธ๐ป"},"princess_tone2":{"unicode":"1F478-1F3FC","name":"princess tone 2","shortname":":princess_tone2:","moji":"๐ธ๐ผ"},"princess_tone3":{"unicode":"1F478-1F3FD","name":"princess tone 3","shortname":":princess_tone3:","moji":"๐ธ๐ฝ"},"princess_tone4":{"unicode":"1F478-1F3FE","name":"princess tone 4","shortname":":princess_tone4:","moji":"๐ธ๐พ"},"princess_tone5":{"unicode":"1F478-1F3FF","name":"princess tone 5","shortname":":princess_tone5:","moji":"๐ธ๐ฟ"},"printer":{"unicode":"1F5A8","name":"printer","shortname":":printer:","moji":"๐จ"},"projector":{"unicode":"1F4FD","name":"projector","shortname":":projector:","moji":"๐ฝ"},"punch":{"unicode":"1F44A","name":"fisted hand sign","shortname":":punch:","moji":"๐"},"punch_tone1":{"unicode":"1F44A-1F3FB","name":"fisted hand sign tone 1","shortname":":punch_tone1:","moji":"๐๐ป"},"punch_tone2":{"unicode":"1F44A-1F3FC","name":"fisted hand sign tone 2","shortname":":punch_tone2:","moji":"๐๐ผ"},"punch_tone3":{"unicode":"1F44A-1F3FD","name":"fisted hand sign tone 3","shortname":":punch_tone3:","moji":"๐๐ฝ"},"punch_tone4":{"unicode":"1F44A-1F3FE","name":"fisted hand sign tone 4","shortname":":punch_tone4:","moji":"๐๐พ"},"punch_tone5":{"unicode":"1F44A-1F3FF","name":"fisted hand sign tone 5","shortname":":punch_tone5:","moji":"๐๐ฟ"},"purple_heart":{"unicode":"1F49C","name":"purple heart","shortname":":purple_heart:","moji":"๐"},"purse":{"unicode":"1F45B","name":"purse","shortname":":purse:","moji":"๐"},"pushpin":{"unicode":"1F4CC","name":"pushpin","shortname":":pushpin:","moji":"๐"},"put_litter_in_its_place":{"unicode":"1F6AE","name":"put litter in its place","shortname":":put_litter_in_its_place:","moji":"๐ฎ"},"question":{"unicode":"2753","name":"question","shortname":":question:","moji":"โ"},"rabbit":{"unicode":"1F430","name":"rabbit","shortname":":rabbit:","moji":"๐ฐ"},"rabbit2":{"unicode":"1F407","name":"rabbit2","shortname":":rabbit2:","moji":"๐"},"raccoon":{"unicode":"1F99D","name":"raccoon","shortname":":raccoon:","moji":"๐ฆ"},"race_car":{"unicode":"1F3CE","name":"race car","shortname":":race_car:","moji":"๐"},"racehorse":{"unicode":"1F40E","name":"racehorse","shortname":":racehorse:","moji":"๐"},"radio":{"unicode":"1F4FB","name":"radio","shortname":":radio:","moji":"๐ป"},"radio_button":{"unicode":"1F518","name":"radio button","shortname":":radio_button:","moji":"๐"},"radioactive":{"unicode":"2622-FE0F","name":"radioactive","shortname":":radioactive:","moji":"โข๏ธ"},"rage":{"unicode":"1F621","name":"pouting face","shortname":":rage:","moji":"๐ก"},"railway_car":{"unicode":"1F683","name":"railway car","shortname":":railway_car:","moji":"๐"},"railway_track":{"unicode":"1F6E4","name":"railway track","shortname":":railway_track:","moji":"๐ค"},"rainbow":{"unicode":"1F308","name":"rainbow","shortname":":rainbow:","moji":"๐"},"raised_back_of_hand":{"unicode":"1F91A","name":"raised back of hand","shortname":":raised_back_of_hand:","moji":"๐ค"},"raised_back_of_hand_tone1":{"unicode":"1F91A-1F3FB","name":"raised back of hand tone 1","shortname":":raised_back_of_hand_tone1:","moji":"๐ค๐ป"},"raised_back_of_hand_tone2":{"unicode":"1F91A-1F3FC","name":"raised back of hand tone 2","shortname":":raised_back_of_hand_tone2:","moji":"๐ค๐ผ"},"raised_back_of_hand_tone3":{"unicode":"1F91A-1F3FD","name":"raised back of hand tone 3","shortname":":raised_back_of_hand_tone3:","moji":"๐ค๐ฝ"},"raised_back_of_hand_tone4":{"unicode":"1F91A-1F3FE","name":"raised back of hand tone 4","shortname":":raised_back_of_hand_tone4:","moji":"๐ค๐พ"},"raised_back_of_hand_tone5":{"unicode":"1F91A-1F3FF","name":"raised back of hand tone 5","shortname":":raised_back_of_hand_tone5:","moji":"๐ค๐ฟ"},"raised_hand":{"unicode":"270B","name":"raised hand","shortname":":raised_hand:","moji":"โ"},"raised_hand_tone1":{"unicode":"270B-1F3FB","name":"raised hand tone 1","shortname":":raised_hand_tone1:","moji":"โ๐ป"},"raised_hand_tone2":{"unicode":"270B-1F3FC","name":"raised hand tone 2","shortname":":raised_hand_tone2:","moji":"โ๐ผ"},"raised_hand_tone3":{"unicode":"270B-1F3FD","name":"raised hand tone 3","shortname":":raised_hand_tone3:","moji":"โ๐ฝ"},"raised_hand_tone4":{"unicode":"270B-1F3FE","name":"raised hand tone 4","shortname":":raised_hand_tone4:","moji":"โ๐พ"},"raised_hand_tone5":{"unicode":"270B-1F3FF","name":"raised hand tone 5","shortname":":raised_hand_tone5:","moji":"โ๐ฟ"},"raised_hands":{"unicode":"1F64C","name":"person raising both hands in celebration","shortname":":raised_hands:","moji":"๐"},"raised_hands_tone1":{"unicode":"1F64C-1F3FB","name":"person raising both hands in celebration tone 1","shortname":":raised_hands_tone1:","moji":"๐๐ป"},"raised_hands_tone2":{"unicode":"1F64C-1F3FC","name":"person raising both hands in celebration tone 2","shortname":":raised_hands_tone2:","moji":"๐๐ผ"},"raised_hands_tone3":{"unicode":"1F64C-1F3FD","name":"person raising both hands in celebration tone 3","shortname":":raised_hands_tone3:","moji":"๐๐ฝ"},"raised_hands_tone4":{"unicode":"1F64C-1F3FE","name":"person raising both hands in celebration tone 4","shortname":":raised_hands_tone4:","moji":"๐๐พ"},"raised_hands_tone5":{"unicode":"1F64C-1F3FF","name":"person raising both hands in celebration tone 5","shortname":":raised_hands_tone5:","moji":"๐๐ฟ"},"raising_hand":{"unicode":"1F64B","name":"happy person raising one hand","shortname":":raising_hand:","moji":"๐"},"raising_hand_tone1":{"unicode":"1F64B-1F3FB","name":"happy person raising one hand tone1","shortname":":raising_hand_tone1:","moji":"๐๐ป"},"raising_hand_tone2":{"unicode":"1F64B-1F3FC","name":"happy person raising one hand tone2","shortname":":raising_hand_tone2:","moji":"๐๐ผ"},"raising_hand_tone3":{"unicode":"1F64B-1F3FD","name":"happy person raising one hand tone3","shortname":":raising_hand_tone3:","moji":"๐๐ฝ"},"raising_hand_tone4":{"unicode":"1F64B-1F3FE","name":"happy person raising one hand tone4","shortname":":raising_hand_tone4:","moji":"๐๐พ"},"raising_hand_tone5":{"unicode":"1F64B-1F3FF","name":"happy person raising one hand tone5","shortname":":raising_hand_tone5:","moji":"๐๐ฟ"},"ram":{"unicode":"1F40F","name":"ram","shortname":":ram:","moji":"๐"},"ramen":{"unicode":"1F35C","name":"ramen","shortname":":ramen:","moji":"๐"},"rat":{"unicode":"1F400","name":"rat","shortname":":rat:","moji":"๐"},"receipt":{"unicode":"1F9FE","name":"receipt","shortname":":receipt:","moji":"๐งพ"},"record_button":{"unicode":"23FA","name":"record button","shortname":":record_button:","moji":"โบ"},"recycle":{"unicode":"267B-FE0F","name":"recycle","shortname":":recycle:","moji":"โป๏ธ"},"red_car":{"unicode":"1F697","name":"red car","shortname":":red_car:","moji":"๐"},"red_circle":{"unicode":"1F534","name":"red circle","shortname":":red_circle:","moji":"๐ด"},"red_envelope":{"unicode":"1F9E7","name":"red envelope","shortname":":red_envelope:","moji":"๐งง"},"red_haired":{"unicode":"1F9B0","name":"red haired","shortname":":red_haired:","moji":"๐ฆฐ"},"registered":{"unicode":"AE-FE0F","name":"registered","shortname":":registered:","moji":"ยฎ๏ธ"},"relaxed":{"unicode":"263A-FE0F","name":"white smiling face","shortname":":relaxed:","moji":"โบ๏ธ"},"relieved":{"unicode":"1F60C","name":"relieved face","shortname":":relieved:","moji":"๐"},"reminder_ribbon":{"unicode":"1F397","name":"reminder ribbon","shortname":":reminder_ribbon:","moji":"๐"},"repeat":{"unicode":"1F501","name":"repeat","shortname":":repeat:","moji":"๐"},"repeat_one":{"unicode":"1F502","name":"repeat one","shortname":":repeat_one:","moji":"๐"},"restroom":{"unicode":"1F6BB","name":"restroom","shortname":":restroom:","moji":"๐ป"},"revolving_hearts":{"unicode":"1F49E","name":"revolving hearts","shortname":":revolving_hearts:","moji":"๐"},"rewind":{"unicode":"23EA","name":"rewind","shortname":":rewind:","moji":"โช"},"rhino":{"unicode":"1F98F","name":"rhino","shortname":":rhino:","moji":"๐ฆ"},"ribbon":{"unicode":"1F380","name":"ribbon","shortname":":ribbon:","moji":"๐"},"rice":{"unicode":"1F35A","name":"rice","shortname":":rice:","moji":"๐"},"rice_ball":{"unicode":"1F359","name":"rice ball","shortname":":rice_ball:","moji":"๐"},"rice_cracker":{"unicode":"1F358","name":"rice cracker","shortname":":rice_cracker:","moji":"๐"},"rice_scene":{"unicode":"1F391","name":"rice scene","shortname":":rice_scene:","moji":"๐"},"right_facing_fist":{"unicode":"1F91C","name":"right-facing fist","shortname":":right_facing_fist:","moji":"๐ค"},"right_facing_fist_tone1":{"unicode":"1F91C-1F3FB","name":"right facing fist tone 1","shortname":":right_facing_fist_tone1:","moji":"๐ค๐ป"},"right_facing_fist_tone2":{"unicode":"1F91C-1F3FC","name":"right facing fist tone 2","shortname":":right_facing_fist_tone2:","moji":"๐ค๐ผ"},"right_facing_fist_tone3":{"unicode":"1F91C-1F3FD","name":"right facing fist tone 3","shortname":":right_facing_fist_tone3:","moji":"๐ค๐ฝ"},"right_facing_fist_tone4":{"unicode":"1F91C-1F3FE","name":"right facing fist tone 4","shortname":":right_facing_fist_tone4:","moji":"๐ค๐พ"},"right_facing_fist_tone5":{"unicode":"1F91C-1F3FF","name":"right facing fist tone 5","shortname":":right_facing_fist_tone5:","moji":"๐ค๐ฟ"},"ring":{"unicode":"1F48D","name":"ring","shortname":":ring:","moji":"๐"},"robot":{"unicode":"1F916","name":"robot face","shortname":":robot:","moji":"๐ค"},"robot_face":{"unicode":"1F916","name":"robot face","shortname":":robot_face:","moji":"๐ค"},"rocket":{"unicode":"1F680","name":"rocket","shortname":":rocket:","moji":"๐"},"rofl":{"unicode":"1F923","name":"rolling on the floor laughing","shortname":":rofl:","moji":"๐คฃ"},"roll_of_paper":{"unicode":"1F9FB","name":"roll of paper","shortname":":roll_of_paper:","moji":"๐งป"},"roller_coaster":{"unicode":"1F3A2","name":"roller coaster","shortname":":roller_coaster:","moji":"๐ข"},"rolling_eyes":{"unicode":"1F644","name":"face with rolling eyes","shortname":":rolling_eyes:","moji":"๐"},"rooster":{"unicode":"1F413","name":"rooster","shortname":":rooster:","moji":"๐"},"rose":{"unicode":"1F339","name":"rose","shortname":":rose:","moji":"๐น"},"rosette":{"unicode":"1F3F5","name":"rosette","shortname":":rosette:","moji":"๐ต"},"rotating_light":{"unicode":"1F6A8","name":"rotating light","shortname":":rotating_light:","moji":"๐จ"},"round_pushpin":{"unicode":"1F4CD","name":"round pushpin","shortname":":round_pushpin:","moji":"๐"},"rowboat":{"unicode":"1F6A3","name":"rowboat","shortname":":rowboat:","moji":"๐ฃ"},"rugby_football":{"unicode":"1F3C9","name":"rugby football","shortname":":rugby_football:","moji":"๐"},"runner":{"unicode":"1F3C3","name":"runner","shortname":":runner:","moji":"๐"},"runner_tone1":{"unicode":"1F3C3-1F3FB","name":"runner tone 1","shortname":":runner_tone1:","moji":"๐๐ป"},"runner_tone2":{"unicode":"1F3C3-1F3FC","name":"runner tone 2","shortname":":runner_tone2:","moji":"๐๐ผ"},"runner_tone3":{"unicode":"1F3C3-1F3FD","name":"runner tone 3","shortname":":runner_tone3:","moji":"๐๐ฝ"},"runner_tone4":{"unicode":"1F3C3-1F3FE","name":"runner tone 4","shortname":":runner_tone4:","moji":"๐๐พ"},"runner_tone5":{"unicode":"1F3C3-1F3FF","name":"runner tone 5","shortname":":runner_tone5:","moji":"๐๐ฟ"},"running":{"unicode":"1F3C3","name":"running","shortname":":running:","moji":"๐"},"running_shirt_with_sash":{"unicode":"1F3BD","name":"running shirt with sash","shortname":":running_shirt_with_sash:","moji":"๐ฝ"},"sa":{"unicode":"1F202-FE0F","name":"sa","shortname":":sa:","moji":"๐๏ธ"},"safety_pin":{"unicode":"1F9F7","name":"safety pin","shortname":":safety_pin:","moji":"๐งท"},"sagittarius":{"unicode":"2650","name":"sagittarius","shortname":":sagittarius:","moji":"โ"},"sailboat":{"unicode":"26F5","name":"sailboat","shortname":":sailboat:","moji":"โต"},"sake":{"unicode":"1F376","name":"sake","shortname":":sake:","moji":"๐ถ"},"salad":{"unicode":"1F957","name":"salad","shortname":":salad:","moji":"๐ฅ"},"salt":{"unicode":"1F9C2","name":"salt","shortname":":salt:","moji":"๐ง"},"sandal":{"unicode":"1F461","name":"womans sandal","shortname":":sandal:","moji":"๐ก"},"sandwich":{"unicode":"1F96A","name":"sandwich","shortname":":sandwich:","moji":"๐ฅช"},"santa":{"unicode":"1F385","name":"father christmas","shortname":":santa:","moji":"๐
"},"santa_tone1":{"unicode":"1F385-1F3FB","name":"father christmas tone 1","shortname":":santa_tone1:","moji":"๐
๐ป"},"santa_tone2":{"unicode":"1F385-1F3FC","name":"father christmas tone 2","shortname":":santa_tone2:","moji":"๐
๐ผ"},"santa_tone3":{"unicode":"1F385-1F3FD","name":"father christmas tone 3","shortname":":santa_tone3:","moji":"๐
๐ฝ"},"santa_tone4":{"unicode":"1F385-1F3FE","name":"father christmas tone 4","shortname":":santa_tone4:","moji":"๐
๐พ"},"santa_tone5":{"unicode":"1F385-1F3FF","name":"father christmas tone 5","shortname":":santa_tone5:","moji":"๐
๐ฟ"},"satellite":{"unicode":"1F4E1","name":"satellite","shortname":":satellite:","moji":"๐ก"},"satellite_orbital":{"unicode":"1F6F0","name":"satellite orbital","shortname":":satellite_orbital:","moji":"๐ฐ"},"satisfied":{"unicode":"1F606","name":"satisfied","shortname":":satisfied:","moji":"๐"},"sauropod":{"unicode":"1F995","name":"sauropod","shortname":":sauropod:","moji":"๐ฆ"},"saxophone":{"unicode":"1F3B7","name":"saxophone","shortname":":saxophone:","moji":"๐ท"},"scales":{"unicode":"2696-FE0F","name":"scales","shortname":":scales:","moji":"โ๏ธ"},"scarf":{"unicode":"1F9E3","name":"scarf","shortname":":scarf:","moji":"๐งฃ"},"school":{"unicode":"1F3EB","name":"school","shortname":":school:","moji":"๐ซ"},"school_satchel":{"unicode":"1F392","name":"school satchel","shortname":":school_satchel:","moji":"๐"},"scissors":{"unicode":"2702-FE0F","name":"scissors","shortname":":scissors:","moji":"โ๏ธ"},"scooter":{"unicode":"1F6F4","name":"scooter","shortname":":scooter:","moji":"๐ด"},"scorpion":{"unicode":"1F982","name":"scorpion","shortname":":scorpion:","moji":"๐ฆ"},"scorpius":{"unicode":"264F","name":"scorpius","shortname":":scorpius:","moji":"โ"},"scotland":{"unicode":"1F3F4-E0067-E0062-E0073-E0063-E0074-E007F","name":"scotland","shortname":":scotland:","moji":"๐ด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ"},"scream":{"unicode":"1F631","name":"face screaming in fear","shortname":":scream:","moji":"๐ฑ"},"scream_cat":{"unicode":"1F640","name":"weary cat face","shortname":":scream_cat:","moji":"๐"},"scroll":{"unicode":"1F4DC","name":"scroll","shortname":":scroll:","moji":"๐"},"seat":{"unicode":"1F4BA","name":"seat","shortname":":seat:","moji":"๐บ"},"second_place":{"unicode":"1F948","name":"second place","shortname":":second_place:","moji":"๐ฅ"},"secret":{"unicode":"3299-FE0F","name":"secret","shortname":":secret:","moji":"ใ๏ธ"},"see_no_evil":{"unicode":"1F648","name":"see no evil","shortname":":see_no_evil:","moji":"๐"},"seedling":{"unicode":"1F331","name":"seedling","shortname":":seedling:","moji":"๐ฑ"},"selfie":{"unicode":"1F933","name":"selfie","shortname":":selfie:","moji":"๐คณ"},"selfie_tone1":{"unicode":"1F933-1F3FB","name":"selfie tone 1","shortname":":selfie_tone1:","moji":"๐คณ๐ป"},"selfie_tone2":{"unicode":"1F933-1F3FC","name":"selfie tone 2","shortname":":selfie_tone2:","moji":"๐คณ๐ผ"},"selfie_tone3":{"unicode":"1F933-1F3FD","name":"selfie tone 3","shortname":":selfie_tone3:","moji":"๐คณ๐ฝ"},"selfie_tone4":{"unicode":"1F933-1F3FE","name":"selfie tone 4","shortname":":selfie_tone4:","moji":"๐คณ๐พ"},"selfie_tone5":{"unicode":"1F933-1F3FF","name":"selfie tone 5","shortname":":selfie_tone5:","moji":"๐คณ๐ฟ"},"seven":{"unicode":"37-FE0F-20E3","name":"seven","shortname":":seven:","moji":"7๏ธโฃ"},"shallow_pan_of_food":{"unicode":"1F958","name":"shallow pan of food","shortname":":shallow_pan_of_food:","moji":"๐ฅ"},"shamrock":{"unicode":"2618-FE0F","name":"shamrock","shortname":":shamrock:","moji":"โ๏ธ"},"shark":{"unicode":"1F988","name":"shark","shortname":":shark:","moji":"๐ฆ"},"shaved_ice":{"unicode":"1F367","name":"shaved ice","shortname":":shaved_ice:","moji":"๐ง"},"sheep":{"unicode":"1F411","name":"sheep","shortname":":sheep:","moji":"๐"},"shell":{"unicode":"1F41A","name":"shell","shortname":":shell:","moji":"๐"},"shield":{"unicode":"1F6E1","name":"shield","shortname":":shield:","moji":"๐ก"},"shinto_shrine":{"unicode":"26E9","name":"shinto shrine","shortname":":shinto_shrine:","moji":"โฉ"},"ship":{"unicode":"1F6A2","name":"ship","shortname":":ship:","moji":"๐ข"},"shirt":{"unicode":"1F455","name":"t-shirt","shortname":":shirt:","moji":"๐"},"shit":{"unicode":"1F4A9","name":"shit","shortname":":shit:","moji":"๐ฉ"},"shoe":{"unicode":"1F45E","name":"shoe","shortname":":shoe:","moji":"๐"},"shopping_bags":{"unicode":"1F6CD","name":"shopping bags","shortname":":shopping_bags:","moji":"๐"},"shopping_cart":{"unicode":"1F6D2","name":"shopping cart","shortname":":shopping_cart:","moji":"๐"},"shower":{"unicode":"1F6BF","name":"shower","shortname":":shower:","moji":"๐ฟ"},"shrimp":{"unicode":"1F990","name":"shrimp","shortname":":shrimp:","moji":"๐ฆ"},"shrug":{"unicode":"1F937","name":"shrug","shortname":":shrug:","moji":"๐คท"},"shrug_tone1":{"unicode":"1F937-1F3FB","name":"shrug tone 1","shortname":":shrug_tone1:","moji":"๐คท๐ป"},"shrug_tone2":{"unicode":"1F937-1F3FC","name":"shrug tone 2","shortname":":shrug_tone2:","moji":"๐คท๐ผ"},"shrug_tone3":{"unicode":"1F937-1F3FD","name":"shrug tone 3","shortname":":shrug_tone3:","moji":"๐คท๐ฝ"},"shrug_tone4":{"unicode":"1F937-1F3FE","name":"shrug tone 4","shortname":":shrug_tone4:","moji":"๐คท๐พ"},"shrug_tone5":{"unicode":"1F937-1F3FF","name":"shrug tone 5","shortname":":shrug_tone5:","moji":"๐คท๐ฟ"},"shushing_face":{"unicode":"1F92B","name":"shushing face","shortname":":shushing_face:","moji":"๐คซ"},"signal_strength":{"unicode":"1F4F6","name":"signal strength","shortname":":signal_strength:","moji":"๐ถ"},"six":{"unicode":"36-FE0F-20E3","name":"six","shortname":":six:","moji":"6๏ธโฃ"},"six_pointed_star":{"unicode":"1F52F","name":"six pointed star","shortname":":six_pointed_star:","moji":"๐ฏ"},"skateboard":{"unicode":"1F6F9","name":"skateboard","shortname":":skateboard:","moji":"๐น"},"ski":{"unicode":"1F3BF","name":"ski","shortname":":ski:","moji":"๐ฟ"},"skier":{"unicode":"26F7","name":"skier","shortname":":skier:","moji":"โท"},"skull":{"unicode":"1F480","name":"skull","shortname":":skull:","moji":"๐"},"skull_crossbones":{"unicode":"2620-FE0F","name":"skull crossbones","shortname":":skull_crossbones:","moji":"โ ๏ธ"},"sled":{"unicode":"1F6F7","name":"sled","shortname":":sled:","moji":"๐ท"},"sleeping":{"unicode":"1F634","name":"sleeping face","shortname":":sleeping:","moji":"๐ด"},"sleeping_accommodation":{"unicode":"1F6CC","name":"sleeping accommodation","shortname":":sleeping_accommodation:","moji":"๐"},"sleepy":{"unicode":"1F62A","name":"sleepy face","shortname":":sleepy:","moji":"๐ช"},"slight_frown":{"unicode":"1F641","name":"slightly frowning face","shortname":":slight_frown:","moji":"๐"},"slight_smile":{"unicode":"1F642","name":"slightly smiling face","shortname":":slight_smile:","moji":"๐"},"slot_machine":{"unicode":"1F3B0","name":"slot machine","shortname":":slot_machine:","moji":"๐ฐ"},"small_blue_diamond":{"unicode":"1F539","name":"small blue diamond","shortname":":small_blue_diamond:","moji":"๐น"},"small_orange_diamond":{"unicode":"1F538","name":"small orange diamond","shortname":":small_orange_diamond:","moji":"๐ธ"},"small_red_triangle":{"unicode":"1F53A","name":"small red triangle","shortname":":small_red_triangle:","moji":"๐บ"},"small_red_triangle_down":{"unicode":"1F53B","name":"small red triangle down","shortname":":small_red_triangle_down:","moji":"๐ป"},"smile":{"unicode":"1F604","name":"smiling face with open mouth and smiling eyes","shortname":":smile:","moji":"๐"},"smile_cat":{"unicode":"1F638","name":"grinning cat face with smiling eyes","shortname":":smile_cat:","moji":"๐ธ"},"smiley":{"unicode":"1F603","name":"smiling face with open mouth","shortname":":smiley:","moji":"๐"},"smiley_cat":{"unicode":"1F63A","name":"smiling cat face with open mouth","shortname":":smiley_cat:","moji":"๐บ"},"smiling_face_with_3_hearts":{"unicode":"1F970","name":"smiling face with 3 hearts","shortname":":smiling_face_with_3_hearts:","moji":"๐ฅฐ"},"smiling_imp":{"unicode":"1F608","name":"smiling face with horns","shortname":":smiling_imp:","moji":"๐"},"smirk":{"unicode":"1F60F","name":"smirking face","shortname":":smirk:","moji":"๐"},"smirk_cat":{"unicode":"1F63C","name":"cat face with wry smile","shortname":":smirk_cat:","moji":"๐ผ"},"smoking":{"unicode":"1F6AC","name":"smoking","shortname":":smoking:","moji":"๐ฌ"},"snail":{"unicode":"1F40C","name":"snail","shortname":":snail:","moji":"๐"},"snake":{"unicode":"1F40D","name":"snake","shortname":":snake:","moji":"๐"},"sneezing_face":{"unicode":"1F927","name":"sneezing face","shortname":":sneezing_face:","moji":"๐คง"},"snowboarder":{"unicode":"1F3C2","name":"snowboarder","shortname":":snowboarder:","moji":"๐"},"snowflake":{"unicode":"2744-FE0F","name":"snowflake","shortname":":snowflake:","moji":"โ๏ธ"},"snowman":{"unicode":"26C4","name":"snowman","shortname":":snowman:","moji":"โ"},"snowman_with_snow":{"unicode":"2603-FE0F","name":"snowman with snow","shortname":":snowman_with_snow:","moji":"โ๏ธ"},"soap":{"unicode":"1F9FC","name":"soap","shortname":":soap:","moji":"๐งผ"},"sob":{"unicode":"1F62D","name":"loudly crying face","shortname":":sob:","moji":"๐ญ"},"soccer":{"unicode":"26BD","name":"soccer","shortname":":soccer:","moji":"โฝ"},"socks":{"unicode":"1F9E6","name":"socks","shortname":":socks:","moji":"๐งฆ"},"softball":{"unicode":"1F94E","name":"softball","shortname":":softball:","moji":"๐ฅ"},"soon":{"unicode":"1F51C","name":"soon","shortname":":soon:","moji":"๐"},"sos":{"unicode":"1F198","name":"sos","shortname":":sos:","moji":"๐"},"sound":{"unicode":"1F509","name":"sound","shortname":":sound:","moji":"๐"},"space_invader":{"unicode":"1F47E","name":"space invader","shortname":":space_invader:","moji":"๐พ"},"spades":{"unicode":"2660-FE0F","name":"spades","shortname":":spades:","moji":"โ ๏ธ"},"spaghetti":{"unicode":"1F35D","name":"spaghetti","shortname":":spaghetti:","moji":"๐"},"sparkle":{"unicode":"2747-FE0F","name":"sparkle","shortname":":sparkle:","moji":"โ๏ธ"},"sparkler":{"unicode":"1F387","name":"sparkler","shortname":":sparkler:","moji":"๐"},"sparkles":{"unicode":"2728","name":"sparkles","shortname":":sparkles:","moji":"โจ"},"sparkling_heart":{"unicode":"1F496","name":"sparkling heart","shortname":":sparkling_heart:","moji":"๐"},"speak_no_evil":{"unicode":"1F64A","name":"speak no evil","shortname":":speak_no_evil:","moji":"๐"},"speaker":{"unicode":"1F508","name":"speaker","shortname":":speaker:","moji":"๐"},"speaking_head":{"unicode":"1F5E3","name":"speaking head in silhouette","shortname":":speaking_head:","moji":"๐ฃ"},"speech_balloon":{"unicode":"1F4AC","name":"speech balloon","shortname":":speech_balloon:","moji":"๐ฌ"},"speech_left":{"unicode":"1F5E8","name":"speech left","shortname":":speech_left:","moji":"๐จ"},"speedboat":{"unicode":"1F6A4","name":"speedboat","shortname":":speedboat:","moji":"๐ค"},"spider":{"unicode":"1F577","name":"spider","shortname":":spider:","moji":"๐ท"},"spider_web":{"unicode":"1F578","name":"spider web","shortname":":spider_web:","moji":"๐ธ"},"sponge":{"unicode":"1F9FD","name":"sponge","shortname":":sponge:","moji":"๐งฝ"},"spoon":{"unicode":"1F944","name":"spoon","shortname":":spoon:","moji":"๐ฅ"},"spy":{"unicode":"1F575","name":"sleuth or spy","shortname":":spy:","moji":"๐ต"},"spy_tone1":{"unicode":"1F575-1F3FB","name":"sleuth or spy tone 1","shortname":":spy_tone1:","moji":"๐ต๐ป"},"spy_tone2":{"unicode":"1F575-1F3FC","name":"sleuth or spy tone 2","shortname":":spy_tone2:","moji":"๐ต๐ผ"},"spy_tone3":{"unicode":"1F575-1F3FD","name":"sleuth or spy tone 3","shortname":":spy_tone3:","moji":"๐ต๐ฝ"},"spy_tone4":{"unicode":"1F575-1F3FE","name":"sleuth or spy tone 4","shortname":":spy_tone4:","moji":"๐ต๐พ"},"spy_tone5":{"unicode":"1F575-1F3FF","name":"sleuth or spy tone 5","shortname":":spy_tone5:","moji":"๐ต๐ฟ"},"squeeze_bottle":{"unicode":"1F9F4","name":"squeeze bottle","shortname":":squeeze_bottle:","moji":"๐งด"},"squid":{"unicode":"1F991","name":"squid","shortname":":squid:","moji":"๐ฆ"},"stadium":{"unicode":"1F3DF","name":"stadium","shortname":":stadium:","moji":"๐"},"star":{"unicode":"2B50","name":"star","shortname":":star:","moji":"โญ"},"star2":{"unicode":"1F31F","name":"star2","shortname":":star2:","moji":"๐"},"star_and_crescent":{"unicode":"262A-FE0F","name":"star and crescent","shortname":":star_and_crescent:","moji":"โช๏ธ"},"star_of_david":{"unicode":"2721-FE0F","name":"star of david","shortname":":star_of_david:","moji":"โก๏ธ"},"star_struck":{"unicode":"1F929","name":"star struck","shortname":":star_struck:","moji":"๐คฉ"},"stars":{"unicode":"1F320","name":"stars","shortname":":stars:","moji":"๐ "},"station":{"unicode":"1F689","name":"station","shortname":":station:","moji":"๐"},"statue_of_liberty":{"unicode":"1F5FD","name":"statue of liberty","shortname":":statue_of_liberty:","moji":"๐ฝ"},"steam_locomotive":{"unicode":"1F682","name":"steam locomotive","shortname":":steam_locomotive:","moji":"๐"},"stew":{"unicode":"1F372","name":"stew","shortname":":stew:","moji":"๐ฒ"},"stop_button":{"unicode":"23F9","name":"stop button","shortname":":stop_button:","moji":"โน"},"stopwatch":{"unicode":"23F1","name":"stopwatch","shortname":":stopwatch:","moji":"โฑ"},"straight_ruler":{"unicode":"1F4CF","name":"straight ruler","shortname":":straight_ruler:","moji":"๐"},"strawberry":{"unicode":"1F353","name":"strawberry","shortname":":strawberry:","moji":"๐"},"stuck_out_tongue":{"unicode":"1F61B","name":"face with stuck-out tongue","shortname":":stuck_out_tongue:","moji":"๐"},"stuck_out_tongue_closed_eyes":{"unicode":"1F61D","name":"face with stuck-out tongue and tightly-closed eyes","shortname":":stuck_out_tongue_closed_eyes:","moji":"๐"},"stuck_out_tongue_winking_eye":{"unicode":"1F61C","name":"face with stuck-out tongue and winking eye","shortname":":stuck_out_tongue_winking_eye:","moji":"๐"},"stuffed_flatbread":{"unicode":"1F959","name":"stuffed flatbread","shortname":":stuffed_flatbread:","moji":"๐ฅ"},"sun_with_face":{"unicode":"1F31E","name":"sun with face","shortname":":sun_with_face:","moji":"๐"},"sunflower":{"unicode":"1F33B","name":"sunflower","shortname":":sunflower:","moji":"๐ป"},"sunglasses":{"unicode":"1F60E","name":"smiling face with sunglasses","shortname":":sunglasses:","moji":"๐"},"sunny":{"unicode":"2600-FE0F","name":"sunny","shortname":":sunny:","moji":"โ๏ธ"},"sunrise":{"unicode":"1F305","name":"sunrise","shortname":":sunrise:","moji":"๐
"},"sunrise_over_mountains":{"unicode":"1F304","name":"sunrise over mountains","shortname":":sunrise_over_mountains:","moji":"๐"},"superhero":{"unicode":"1F9B8","name":"superhero","shortname":":superhero:","moji":"๐ฆธ"},"supervillain":{"unicode":"1F9B9","name":"supervillain","shortname":":supervillain:","moji":"๐ฆน"},"surfer":{"unicode":"1F3C4","name":"surfer","shortname":":surfer:","moji":"๐"},"sushi":{"unicode":"1F363","name":"sushi","shortname":":sushi:","moji":"๐ฃ"},"suspension_railway":{"unicode":"1F69F","name":"suspension railway","shortname":":suspension_railway:","moji":"๐"},"swan":{"unicode":"1F9A2","name":"swan","shortname":":swan:","moji":"๐ฆข"},"sweat":{"unicode":"1F613","name":"face with cold sweat","shortname":":sweat:","moji":"๐"},"sweat_drops":{"unicode":"1F4A6","name":"sweat drops","shortname":":sweat_drops:","moji":"๐ฆ"},"sweat_smile":{"unicode":"1F605","name":"smiling face with open mouth and cold sweat","shortname":":sweat_smile:","moji":"๐
"},"sweet_potato":{"unicode":"1F360","name":"sweet potato","shortname":":sweet_potato:","moji":"๐ "},"swimmer":{"unicode":"1F3CA","name":"swimmer","shortname":":swimmer:","moji":"๐"},"symbols":{"unicode":"1F523","name":"symbols","shortname":":symbols:","moji":"๐ฃ"},"synagogue":{"unicode":"1F54D","name":"synagogue","shortname":":synagogue:","moji":"๐"},"syringe":{"unicode":"1F489","name":"syringe","shortname":":syringe:","moji":"๐"},"t_rex":{"unicode":"1F996","name":"t rex","shortname":":t_rex:","moji":"๐ฆ"},"taco":{"unicode":"1F32E","name":"taco","shortname":":taco:","moji":"๐ฎ"},"tada":{"unicode":"1F389","name":"party popper as a 'tada' celebration","shortname":":tada:","moji":"๐"},"takeout_box":{"unicode":"1F961","name":"takeout box","shortname":":takeout_box:","moji":"๐ฅก"},"tanabata_tree":{"unicode":"1F38B","name":"tanabata tree","shortname":":tanabata_tree:","moji":"๐"},"tangerine":{"unicode":"1F34A","name":"tangerine","shortname":":tangerine:","moji":"๐"},"taurus":{"unicode":"2649","name":"taurus","shortname":":taurus:","moji":"โ"},"taxi":{"unicode":"1F695","name":"taxi","shortname":":taxi:","moji":"๐"},"tea":{"unicode":"1F375","name":"tea","shortname":":tea:","moji":"๐ต"},"teddy_bear":{"unicode":"1F9F8","name":"teddy bear","shortname":":teddy_bear:","moji":"๐งธ"},"telephone":{"unicode":"260E-FE0F","name":"telephone","shortname":":telephone:","moji":"โ๏ธ"},"telephone_receiver":{"unicode":"1F4DE","name":"telephone receiver","shortname":":telephone_receiver:","moji":"๐"},"telescope":{"unicode":"1F52D","name":"telescope","shortname":":telescope:","moji":"๐ญ"},"ten":{"unicode":"1F51F","name":"ten","shortname":":ten:","moji":"๐"},"tennis":{"unicode":"1F3BE","name":"tennis","shortname":":tennis:","moji":"๐พ"},"tent":{"unicode":"26FA","name":"tent","shortname":":tent:","moji":"โบ"},"test_tube":{"unicode":"1F9EA","name":"test tube","shortname":":test_tube:","moji":"๐งช"},"thermometer":{"unicode":"1F321","name":"thermometer","shortname":":thermometer:","moji":"๐ก"},"thermometer_face":{"unicode":"1F912","name":"face with thermometer","shortname":":thermometer_face:","moji":"๐ค"},"thinking":{"unicode":"1F914","name":"thinking face","shortname":":thinking:","moji":"๐ค"},"third_place":{"unicode":"1F949","name":"third place","shortname":":third_place:","moji":"๐ฅ"},"thought_balloon":{"unicode":"1F4AD","name":"thought balloon","shortname":":thought_balloon:","moji":"๐ญ"},"thread":{"unicode":"1F9F5","name":"thread","shortname":":thread:","moji":"๐งต"},"three":{"unicode":"33-FE0F-20E3","name":"three","shortname":":three:","moji":"3๏ธโฃ"},"thumbsdown":{"unicode":"1F44E","name":"thumbs down sign","shortname":":thumbsdown:","moji":"๐"},"thumbsdown_tone1":{"unicode":"1F44E-1F3FB","name":"thumbs down sign tone 1","shortname":":thumbsdown_tone1:","moji":"๐๐ป"},"thumbsdown_tone2":{"unicode":"1F44E-1F3FC","name":"thumbs down sign tone 2","shortname":":thumbsdown_tone2:","moji":"๐๐ผ"},"thumbsdown_tone3":{"unicode":"1F44E-1F3FD","name":"thumbs down sign tone 3","shortname":":thumbsdown_tone3:","moji":"๐๐ฝ"},"thumbsdown_tone4":{"unicode":"1F44E-1F3FE","name":"thumbs down sign tone 4","shortname":":thumbsdown_tone4:","moji":"๐๐พ"},"thumbsdown_tone5":{"unicode":"1F44E-1F3FF","name":"thumbs down sign tone 5","shortname":":thumbsdown_tone5:","moji":"๐๐ฟ"},"thumbsup":{"unicode":"1F44D","name":"thumbs up sign","shortname":":thumbsup:","moji":"๐"},"thumbsup_tone1":{"unicode":"1F44D-1F3FB","name":"thumbs up sign tone 1","shortname":":thumbsup_tone1:","moji":"๐๐ป"},"thumbsup_tone2":{"unicode":"1F44D-1F3FC","name":"thumbs up sign tone 2","shortname":":thumbsup_tone2:","moji":"๐๐ผ"},"thumbsup_tone3":{"unicode":"1F44D-1F3FD","name":"thumbs up sign tone 3","shortname":":thumbsup_tone3:","moji":"๐๐ฝ"},"thumbsup_tone4":{"unicode":"1F44D-1F3FE","name":"thumbs up sign tone 4","shortname":":thumbsup_tone4:","moji":"๐๐พ"},"thumbsup_tone5":{"unicode":"1F44D-1F3FF","name":"thumbs up sign tone 5","shortname":":thumbsup_tone5:","moji":"๐๐ฟ"},"thunder_cloud_rain":{"unicode":"26C8","name":"thunder cloud rain","shortname":":thunder_cloud_rain:","moji":"โ"},"ticket":{"unicode":"1F3AB","name":"ticket","shortname":":ticket:","moji":"๐ซ"},"tickets":{"unicode":"1F39F","name":"tickets","shortname":":tickets:","moji":"๐"},"tiger":{"unicode":"1F42F","name":"tiger","shortname":":tiger:","moji":"๐ฏ"},"tiger2":{"unicode":"1F405","name":"tiger2","shortname":":tiger2:","moji":"๐
"},"timer":{"unicode":"23F2","name":"timer","shortname":":timer:","moji":"โฒ"},"tired_face":{"unicode":"1F62B","name":"tired face","shortname":":tired_face:","moji":"๐ซ"},"tm":{"unicode":"2122-FE0F","name":"tm","shortname":":tm:","moji":"โข๏ธ"},"toilet":{"unicode":"1F6BD","name":"toilet","shortname":":toilet:","moji":"๐ฝ"},"tokyo_tower":{"unicode":"1F5FC","name":"tokyo tower","shortname":":tokyo_tower:","moji":"๐ผ"},"tomato":{"unicode":"1F345","name":"tomato","shortname":":tomato:","moji":"๐
"},"tongue":{"unicode":"1F445","name":"tongue","shortname":":tongue:","moji":"๐
"},"toolbox":{"unicode":"1F9F0","name":"toolbox","shortname":":toolbox:","moji":"๐งฐ"},"tools":{"unicode":"1F6E0","name":"tools","shortname":":tools:","moji":"๐ "},"tooth":{"unicode":"1F9B7","name":"tooth","shortname":":tooth:","moji":"๐ฆท"},"top":{"unicode":"1F51D","name":"top","shortname":":top:","moji":"๐"},"tophat":{"unicode":"1F3A9","name":"top hat","shortname":":tophat:","moji":"๐ฉ"},"track_next":{"unicode":"23ED","name":"track next","shortname":":track_next:","moji":"โญ"},"track_previous":{"unicode":"23EE","name":"track previous","shortname":":track_previous:","moji":"โฎ"},"trackball":{"unicode":"1F5B2","name":"trackball","shortname":":trackball:","moji":"๐ฒ"},"tractor":{"unicode":"1F69C","name":"tractor","shortname":":tractor:","moji":"๐"},"traffic_light":{"unicode":"1F6A5","name":"traffic light","shortname":":traffic_light:","moji":"๐ฅ"},"train":{"unicode":"1F68B","name":"train","shortname":":train:","moji":"๐"},"train2":{"unicode":"1F686","name":"train2","shortname":":train2:","moji":"๐"},"tram":{"unicode":"1F68A","name":"tram","shortname":":tram:","moji":"๐"},"triangular_flag_on_post":{"unicode":"1F6A9","name":"triangular flag on post","shortname":":triangular_flag_on_post:","moji":"๐ฉ"},"triangular_ruler":{"unicode":"1F4D0","name":"triangular ruler","shortname":":triangular_ruler:","moji":"๐"},"trident":{"unicode":"1F531","name":"trident","shortname":":trident:","moji":"๐ฑ"},"triumph":{"unicode":"1F624","name":"face with look of triumph","shortname":":triumph:","moji":"๐ค"},"trolleybus":{"unicode":"1F68E","name":"trolleybus","shortname":":trolleybus:","moji":"๐"},"trophy":{"unicode":"1F3C6","name":"trophy","shortname":":trophy:","moji":"๐"},"tropical_drink":{"unicode":"1F379","name":"tropical drink","shortname":":tropical_drink:","moji":"๐น"},"tropical_fish":{"unicode":"1F420","name":"tropical fish","shortname":":tropical_fish:","moji":"๐ "},"truck":{"unicode":"1F69A","name":"truck","shortname":":truck:","moji":"๐"},"trumpet":{"unicode":"1F3BA","name":"trumpet","shortname":":trumpet:","moji":"๐บ"},"tshirt":{"unicode":"1F455","name":"tshirt","shortname":":tshirt:","moji":"๐"},"tulip":{"unicode":"1F337","name":"tulip","shortname":":tulip:","moji":"๐ท"},"tumbler_glass":{"unicode":"1F943","name":"tumbler glass","shortname":":tumbler_glass:","moji":"๐ฅ"},"turkey":{"unicode":"1F983","name":"turkey","shortname":":turkey:","moji":"๐ฆ"},"turtle":{"unicode":"1F422","name":"turtle","shortname":":turtle:","moji":"๐ข"},"tv":{"unicode":"1F4FA","name":"tv","shortname":":tv:","moji":"๐บ"},"twisted_rightwards_arrows":{"unicode":"1F500","name":"twisted rightwards arrows","shortname":":twisted_rightwards_arrows:","moji":"๐"},"two":{"unicode":"32-FE0F-20E3","name":"two","shortname":":two:","moji":"2๏ธโฃ"},"two_hearts":{"unicode":"1F495","name":"two hearts","shortname":":two_hearts:","moji":"๐"},"two_men_holding_hands":{"unicode":"1F46C","name":"two men holding hands","shortname":":two_men_holding_hands:","moji":"๐ฌ"},"two_women_holding_hands":{"unicode":"1F46D","name":"two women holding hands","shortname":":two_women_holding_hands:","moji":"๐ญ"},"u5272":{"unicode":"1F239","name":"u5272","shortname":":u5272:","moji":"๐น"},"u5408":{"unicode":"1F234","name":"u5408","shortname":":u5408:","moji":"๐ด"},"u55b6":{"unicode":"1F23A","name":"u55b6","shortname":":u55b6:","moji":"๐บ"},"u6307":{"unicode":"1F22F","name":"u6307","shortname":":u6307:","moji":"๐ฏ"},"u6708":{"unicode":"1F237-FE0F","name":"u6708","shortname":":u6708:","moji":"๐ท๏ธ"},"u6709":{"unicode":"1F236","name":"u6709","shortname":":u6709:","moji":"๐ถ"},"u6e80":{"unicode":"1F235","name":"u6e80","shortname":":u6e80:","moji":"๐ต"},"u7121":{"unicode":"1F21A","name":"u7121","shortname":":u7121:","moji":"๐"},"u7533":{"unicode":"1F238","name":"u7533","shortname":":u7533:","moji":"๐ธ"},"u7981":{"unicode":"1F232","name":"u7981","shortname":":u7981:","moji":"๐ฒ"},"u7a7a":{"unicode":"1F233","name":"u7a7a","shortname":":u7a7a:","moji":"๐ณ"},"umbrella":{"unicode":"2614","name":"umbrella","shortname":":umbrella:","moji":"โ"},"unamused":{"unicode":"1F612","name":"unamused face","shortname":":unamused:","moji":"๐"},"underage":{"unicode":"1F51E","name":"underage","shortname":":underage:","moji":"๐"},"unicorn":{"unicode":"1F984","name":"unicorn","shortname":":unicorn:","moji":"๐ฆ"},"united_nations":{"unicode":"1F1FA-1F1F3","name":"united nations","shortname":":united_nations:","moji":"๐บ๐ณ"},"unlock":{"unicode":"1F513","name":"unlock","shortname":":unlock:","moji":"๐"},"up":{"unicode":"1F199","name":"up","shortname":":up:","moji":"๐"},"upside_down":{"unicode":"1F643","name":"upside-down face","shortname":":upside_down:","moji":"๐"},"urn":{"unicode":"26B1-FE0F","name":"urn","shortname":":urn:","moji":"โฑ๏ธ"},"v":{"unicode":"270C-FE0F","name":"victory hand","shortname":":v:","moji":"โ๏ธ"},"v_tone1":{"unicode":"270C-FE0F-1F3FB","name":"victory hand tone 1","shortname":":v_tone1:","moji":"โ๏ธ๐ป"},"v_tone2":{"unicode":"270C-FE0F-1F3FC","name":"victory hand tone 2","shortname":":v_tone2:","moji":"โ๏ธ๐ผ"},"v_tone3":{"unicode":"270C-FE0F-1F3FD","name":"victory hand tone 3","shortname":":v_tone3:","moji":"โ๏ธ๐ฝ"},"v_tone4":{"unicode":"270C-FE0F-1F3FE","name":"victory hand tone 4","shortname":":v_tone4:","moji":"โ๏ธ๐พ"},"v_tone5":{"unicode":"270C-FE0F-1F3FF","name":"victory hand tone 5","shortname":":v_tone5:","moji":"โ๏ธ๐ฟ"},"vampire":{"unicode":"1F9DB","name":"vampire","shortname":":vampire:","moji":"๐ง"},"vertical_traffic_light":{"unicode":"1F6A6","name":"vertical traffic light","shortname":":vertical_traffic_light:","moji":"๐ฆ"},"vhs":{"unicode":"1F4FC","name":"vhs","shortname":":vhs:","moji":"๐ผ"},"vibration_mode":{"unicode":"1F4F3","name":"vibration mode","shortname":":vibration_mode:","moji":"๐ณ"},"video_camera":{"unicode":"1F4F9","name":"video camera","shortname":":video_camera:","moji":"๐น"},"video_game":{"unicode":"1F3AE","name":"video game","shortname":":video_game:","moji":"๐ฎ"},"violin":{"unicode":"1F3BB","name":"violin","shortname":":violin:","moji":"๐ป"},"virgo":{"unicode":"264D","name":"virgo","shortname":":virgo:","moji":"โ"},"volcano":{"unicode":"1F30B","name":"volcano","shortname":":volcano:","moji":"๐"},"volleyball":{"unicode":"1F3D0","name":"volleyball","shortname":":volleyball:","moji":"๐"},"vs":{"unicode":"1F19A","name":"vs","shortname":":vs:","moji":"๐"},"vulcan":{"unicode":"1F596","name":"raised hand with part between middle and ring fingers","shortname":":vulcan:","moji":"๐"},"vulcan_tone1":{"unicode":"1F596-1F3FB","name":"raised hand with part between middle and ring fingers tone 1","shortname":":vulcan_tone1:","moji":"๐๐ป"},"vulcan_tone2":{"unicode":"1F596-1F3FC","name":"raised hand with part between middle and ring fingers tone 2","shortname":":vulcan_tone2:","moji":"๐๐ผ"},"vulcan_tone3":{"unicode":"1F596-1F3FD","name":"raised hand with part between middle and ring fingers tone 3","shortname":":vulcan_tone3:","moji":"๐๐ฝ"},"vulcan_tone4":{"unicode":"1F596-1F3FE","name":"raised hand with part between middle and ring fingers tone 4","shortname":":vulcan_tone4:","moji":"๐๐พ"},"vulcan_tone5":{"unicode":"1F596-1F3FF","name":"raised hand with part between middle and ring fingers tone 5","shortname":":vulcan_tone5:","moji":"๐๐ฟ"},"wales":{"unicode":"1F3F4-E0067-E0062-E0077-E006C-E0073-E007F","name":"wales","shortname":":wales:","moji":"๐ด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ"},"walking":{"unicode":"1F6B6","name":"pedestrian","shortname":":walking:","moji":"๐ถ"},"walking_tone1":{"unicode":"1F6B6-1F3FB","name":"pedestrian tone 1","shortname":":walking_tone1:","moji":"๐ถ๐ป"},"walking_tone2":{"unicode":"1F6B6-1F3FC","name":"pedestrian tone 2","shortname":":walking_tone2:","moji":"๐ถ๐ผ"},"walking_tone3":{"unicode":"1F6B6-1F3FD","name":"pedestrian tone 3","shortname":":walking_tone3:","moji":"๐ถ๐ฝ"},"walking_tone4":{"unicode":"1F6B6-1F3FE","name":"pedestrian tone 4","shortname":":walking_tone4:","moji":"๐ถ๐พ"},"walking_tone5":{"unicode":"1F6B6-1F3FF","name":"pedestrian tone 5","shortname":":walking_tone5:","moji":"๐ถ๐ฟ"},"waning_crescent_moon":{"unicode":"1F318","name":"waning crescent moon","shortname":":waning_crescent_moon:","moji":"๐"},"waning_gibbous_moon":{"unicode":"1F316","name":"waning gibbous moon","shortname":":waning_gibbous_moon:","moji":"๐"},"warning":{"unicode":"26A0-FE0F","name":"warning","shortname":":warning:","moji":"โ ๏ธ"},"wastebasket":{"unicode":"1F5D1","name":"wastebasket","shortname":":wastebasket:","moji":"๐"},"watch":{"unicode":"231A","name":"watch","shortname":":watch:","moji":"โ"},"water_buffalo":{"unicode":"1F403","name":"water buffalo","shortname":":water_buffalo:","moji":"๐"},"water_polo":{"unicode":"1F93D","name":"water polo","shortname":":water_polo:","moji":"๐คฝ"},"watermelon":{"unicode":"1F349","name":"watermelon","shortname":":watermelon:","moji":"๐"},"wave":{"unicode":"1F44B","name":"waving hand sign","shortname":":wave:","moji":"๐"},"wave_tone1":{"unicode":"1F44B-1F3FB","name":"waving hand sign tone 1","shortname":":wave_tone1:","moji":"๐๐ป"},"wave_tone2":{"unicode":"1F44B-1F3FC","name":"waving hand sign tone 2","shortname":":wave_tone2:","moji":"๐๐ผ"},"wave_tone3":{"unicode":"1F44B-1F3FD","name":"waving hand sign tone 3","shortname":":wave_tone3:","moji":"๐๐ฝ"},"wave_tone4":{"unicode":"1F44B-1F3FE","name":"waving hand sign tone 4","shortname":":wave_tone4:","moji":"๐๐พ"},"wave_tone5":{"unicode":"1F44B-1F3FF","name":"waving hand sign tone 5","shortname":":wave_tone5:","moji":"๐๐ฟ"},"wavy_dash":{"unicode":"3030-FE0F","name":"wavy dash","shortname":":wavy_dash:","moji":"ใฐ๏ธ"},"waxing_crescent_moon":{"unicode":"1F312","name":"waxing crescent moon","shortname":":waxing_crescent_moon:","moji":"๐"},"waxing_gibbous_moon":{"unicode":"1F314","name":"waxing gibbous moon","shortname":":waxing_gibbous_moon:","moji":"๐"},"wc":{"unicode":"1F6BE","name":"wc","shortname":":wc:","moji":"๐พ"},"weary":{"unicode":"1F629","name":"weary face","shortname":":weary:","moji":"๐ฉ"},"wedding":{"unicode":"1F492","name":"wedding","shortname":":wedding:","moji":"๐"},"whale":{"unicode":"1F433","name":"whale","shortname":":whale:","moji":"๐ณ"},"whale2":{"unicode":"1F40B","name":"whale2","shortname":":whale2:","moji":"๐"},"wheel_of_dharma":{"unicode":"2638-FE0F","name":"wheel of dharma","shortname":":wheel_of_dharma:","moji":"โธ๏ธ"},"wheelchair":{"unicode":"267F","name":"wheelchair","shortname":":wheelchair:","moji":"โฟ"},"white_check_mark":{"unicode":"2705","name":"white check mark","shortname":":white_check_mark:","moji":"โ
"},"white_circle":{"unicode":"26AA","name":"white circle","shortname":":white_circle:","moji":"โช"},"white_flag":{"unicode":"1F3F3-FE0F","name":"white flag","shortname":":white_flag:","moji":"๐ณ๏ธ"},"white_flower":{"unicode":"1F4AE","name":"white flower","shortname":":white_flower:","moji":"๐ฎ"},"white_haired":{"unicode":"1F9B3","name":"white haired","shortname":":white_haired:","moji":"๐ฆณ"},"white_large_square":{"unicode":"2B1C","name":"white large square","shortname":":white_large_square:","moji":"โฌ"},"white_square_button":{"unicode":"1F533","name":"white square button","shortname":":white_square_button:","moji":"๐ณ"},"white_sun_cloud":{"unicode":"1F325","name":"white sun cloud","shortname":":white_sun_cloud:","moji":"๐ฅ"},"white_sun_rain_cloud":{"unicode":"1F326","name":"white sun rain cloud","shortname":":white_sun_rain_cloud:","moji":"๐ฆ"},"white_sun_small_cloud":{"unicode":"1F324","name":"white sun small cloud","shortname":":white_sun_small_cloud:","moji":"๐ค"},"wilted_rose":{"unicode":"1F940","name":"wilted rose","shortname":":wilted_rose:","moji":"๐ฅ"},"wind_blowing_face":{"unicode":"1F32C","name":"wind blowing face","shortname":":wind_blowing_face:","moji":"๐ฌ"},"wind_chime":{"unicode":"1F390","name":"wind chime","shortname":":wind_chime:","moji":"๐"},"wine_glass":{"unicode":"1F377","name":"wine glass","shortname":":wine_glass:","moji":"๐ท"},"wink":{"unicode":"1F609","name":"winking face","shortname":":wink:","moji":"๐"},"wolf":{"unicode":"1F43A","name":"wolf","shortname":":wolf:","moji":"๐บ"},"woman":{"unicode":"1F469","name":"woman","shortname":":woman:","moji":"๐ฉ"},"woman_tone1":{"unicode":"1F469-1F3FB","name":"woman tone 1","shortname":":woman_tone1:","moji":"๐ฉ๐ป"},"woman_tone2":{"unicode":"1F469-1F3FC","name":"woman tone 2","shortname":":woman_tone2:","moji":"๐ฉ๐ผ"},"woman_tone3":{"unicode":"1F469-1F3FD","name":"woman tone 3","shortname":":woman_tone3:","moji":"๐ฉ๐ฝ"},"woman_tone4":{"unicode":"1F469-1F3FE","name":"woman tone 4","shortname":":woman_tone4:","moji":"๐ฉ๐พ"},"woman_tone5":{"unicode":"1F469-1F3FF","name":"woman tone 5","shortname":":woman_tone5:","moji":"๐ฉ๐ฟ"},"woman_with_headscarf":{"unicode":"1F9D5","name":"woman with headscarf","shortname":":woman_with_headscarf:","moji":"๐ง"},"womans_clothes":{"unicode":"1F45A","name":"womans clothes","shortname":":womans_clothes:","moji":"๐"},"womans_flat_shoe":{"unicode":"1F97F","name":"womans flat shoe","shortname":":womans_flat_shoe:","moji":"๐ฅฟ"},"womans_hat":{"unicode":"1F452","name":"womans hat","shortname":":womans_hat:","moji":"๐"},"womens":{"unicode":"1F6BA","name":"womens","shortname":":womens:","moji":"๐บ"},"woozy_face":{"unicode":"1F974","name":"woozy face","shortname":":woozy_face:","moji":"๐ฅด"},"worried":{"unicode":"1F61F","name":"worried face","shortname":":worried:","moji":"๐"},"wrench":{"unicode":"1F527","name":"wrench","shortname":":wrench:","moji":"๐ง"},"wrestlers":{"unicode":"1F93C","name":"wrestlers","shortname":":wrestlers:","moji":"๐คผ"},"writing_hand":{"unicode":"270D-FE0F","name":"writing hand","shortname":":writing_hand:","moji":"โ๏ธ"},"writing_hand_tone1":{"unicode":"270D-FE0F-1F3FB","name":"writing hand tone 1","shortname":":writing_hand_tone1:","moji":"โ๏ธ๐ป"},"writing_hand_tone2":{"unicode":"270D-FE0F-1F3FC","name":"writing hand tone 2","shortname":":writing_hand_tone2:","moji":"โ๏ธ๐ผ"},"writing_hand_tone3":{"unicode":"270D-FE0F-1F3FD","name":"writing hand tone 3","shortname":":writing_hand_tone3:","moji":"โ๏ธ๐ฝ"},"writing_hand_tone4":{"unicode":"270D-FE0F-1F3FE","name":"writing hand tone 4","shortname":":writing_hand_tone4:","moji":"โ๏ธ๐พ"},"writing_hand_tone5":{"unicode":"270D-FE0F-1F3FF","name":"writing hand tone 5","shortname":":writing_hand_tone5:","moji":"โ๏ธ๐ฟ"},"x":{"unicode":"274C","name":"x","shortname":":x:","moji":"โ"},"yarn":{"unicode":"1F9F6","name":"yarn","shortname":":yarn:","moji":"๐งถ"},"yellow_heart":{"unicode":"1F49B","name":"yellow heart","shortname":":yellow_heart:","moji":"๐"},"yen":{"unicode":"1F4B4","name":"yen","shortname":":yen:","moji":"๐ด"},"yin_yang":{"unicode":"262F-FE0F","name":"yin yang","shortname":":yin_yang:","moji":"โฏ๏ธ"},"yum":{"unicode":"1F60B","name":"face savouring delicious food","shortname":":yum:","moji":"๐"},"zany_face":{"unicode":"1F92A","name":"zany face","shortname":":zany_face:","moji":"๐คช"},"zap":{"unicode":"26A1","name":"zap","shortname":":zap:","moji":"โก"},"zebra":{"unicode":"1F993","name":"zebra","shortname":":zebra:","moji":"๐ฆ"},"zero":{"unicode":"30-FE0F-20E3","name":"zero","shortname":":zero:","moji":"0๏ธโฃ"},"zipper_mouth":{"unicode":"1F910","name":"zipper-mouth face","shortname":":zipper_mouth:","moji":"๐ค"},"zombie":{"unicode":"1F9DF","name":"zombie","shortname":":zombie:","moji":"๐ง"},"zzz":{"unicode":"1F4A4","name":"sleeping symbol","shortname":":zzz:","moji":"๐ค"}}
diff --git a/doc/gitlab.nvim.txt b/doc/gitlab.nvim.txt
index a657e744..cdabea9a 100644
--- a/doc/gitlab.nvim.txt
+++ b/doc/gitlab.nvim.txt
@@ -266,6 +266,17 @@ you call this function with no values the defaults will be used:
winbar = nil -- Custom function to return winbar title, should return a string. Provided with WinbarTable (defined in annotations.lua)
-- If using lualine, please add "gitlab" to disabled file types, otherwise you will not see the winbar.
},
+ emojis = {
+ -- Function for modifying how emojis are displayed in the picker. This does not affect the actual selected emoji.
+ -- The function is passed an emoji object as a paramter, e.g.,
+ -- {"unicode": "1F44D","name": "thumbs up sign", "shortname": ":thumbsup:", "moji": "๐"}
+ -- This is useful if your editor/terminal/font/tmux does not render some emojis properly,
+ -- e.g., you can remove skin tones and additionally show the shortname with
+ -- formatter = function(val)
+ -- return string.format("%s %s %s", val.moji:gsub("[\240][\159][\143][\187-\191]", ""), val.shortname, val.name)
+ -- end
+ formatter = nil,
+ },
choose_merge_request = {
open_reviewer = true, -- Open the reviewer window automatically after switching merge requests
},
diff --git a/lua/gitlab/emoji.lua b/lua/gitlab/emoji.lua
index e1c9cf54..c7fc644b 100644
--- a/lua/gitlab/emoji.lua
+++ b/lua/gitlab/emoji.lua
@@ -132,6 +132,9 @@ M.pick_emoji = function(options, cb)
vim.ui.select(options, {
prompt = "Choose emoji",
format_item = function(val)
+ if type(state.settings.emojis.formatter) == "function" then
+ return state.settings.emojis.formatter(val)
+ end
return string.format("%s %s", val.moji, val.name)
end,
}, function(choice)
diff --git a/lua/gitlab/state.lua b/lua/gitlab/state.lua
index 12686151..2989cd9a 100644
--- a/lua/gitlab/state.lua
+++ b/lua/gitlab/state.lua
@@ -162,6 +162,9 @@ M.settings = {
tree_type = "simple",
draft_mode = false,
},
+ emojis = {
+ formatter = nil,
+ },
create_mr = {
target = nil,
template_file = nil,
From c44daf5381a2cb161de04601f6120d4ee390d2c6 Mon Sep 17 00:00:00 2001
From: "Harrison (Harry) Cramer"
<32515581+harrisoncramer@users.noreply.github.com>
Date: Sun, 10 Nov 2024 10:46:00 -0500
Subject: [PATCH 19/21] fix: comment creation should not be possible for
renamed and moved files (#416)
---
cmd/app/comment_helpers.go | 9 ++++++-
lua/gitlab/actions/comment.lua | 11 ++++++--
lua/gitlab/annotations.lua | 2 ++
lua/gitlab/hunks.lua | 38 ++++++++++++++++++++--------
lua/gitlab/indicators/common.lua | 2 +-
lua/gitlab/reviewer/init.lua | 43 +++++++++++++++++++++++++-------
lua/gitlab/reviewer/location.lua | 24 +++++++++++++-----
7 files changed, 99 insertions(+), 30 deletions(-)
diff --git a/cmd/app/comment_helpers.go b/cmd/app/comment_helpers.go
index e6ba633f..d6548bd5 100644
--- a/cmd/app/comment_helpers.go
+++ b/cmd/app/comment_helpers.go
@@ -23,6 +23,7 @@ type LineRange struct {
/* PositionData represents the position of a comment or note (relative to a file diff) */
type PositionData struct {
FileName string `json:"file_name"`
+ OldFileName string `json:"old_file_name"`
NewLine *int `json:"new_line,omitempty"`
OldLine *int `json:"old_line,omitempty"`
HeadCommitSHA string `json:"head_commit_sha"`
@@ -41,13 +42,19 @@ type RequestWithPosition interface {
func buildCommentPosition(commentWithPositionData RequestWithPosition) *gitlab.PositionOptions {
positionData := commentWithPositionData.GetPositionData()
+ // If the file has been renamed, then this is a relevant part of the payload
+ oldFileName := positionData.OldFileName
+ if oldFileName == "" {
+ oldFileName = positionData.FileName
+ }
+
opt := &gitlab.PositionOptions{
PositionType: &positionData.Type,
StartSHA: &positionData.StartCommitSHA,
HeadSHA: &positionData.HeadCommitSHA,
BaseSHA: &positionData.BaseCommitSHA,
NewPath: &positionData.FileName,
- OldPath: &positionData.FileName,
+ OldPath: &oldFileName,
NewLine: positionData.NewLine,
OldLine: positionData.OldLine,
}
diff --git a/lua/gitlab/actions/comment.lua b/lua/gitlab/actions/comment.lua
index 77045b1f..fbc3ad01 100644
--- a/lua/gitlab/actions/comment.lua
+++ b/lua/gitlab/actions/comment.lua
@@ -80,6 +80,7 @@ local confirm_create_comment = function(text, visual_range, unlinked, discussion
local revision = state.MR_REVISIONS[1]
local position_data = {
file_name = reviewer_data.file_name,
+ old_file_name = reviewer_data.old_file_name,
base_commit_sha = revision.base_commit_sha,
start_commit_sha = revision.start_commit_sha,
head_commit_sha = revision.head_commit_sha,
@@ -179,6 +180,12 @@ M.create_comment_layout = function(opts)
return
end
+ -- Check that the file has not been renamed
+ if reviewer.is_file_renamed() and not reviewer.does_file_have_changes() then
+ u.notify("Commenting on (unchanged) renamed or moved files is not supported", vim.log.levels.WARN)
+ return
+ end
+
-- Check that we are hovering over the code
local filetype = vim.bo[0].filetype
if not opts.reply and (filetype == "DiffviewFiles" or filetype == "gitlab") then
@@ -249,7 +256,6 @@ end
--- This function will open a comment popup in order to create a comment on the changed/updated
--- line in the current MR
M.create_comment = function()
- vim.print("Creating comment...")
local has_clean_tree, err = git.has_clean_tree()
if err ~= nil then
return
@@ -293,7 +299,6 @@ end
--- This function will open a a popup to create a "note" (e.g. unlinked comment)
--- on the changed/updated line in the current MR
M.create_note = function()
- vim.print("Creating note...")
local layout = M.create_comment_layout({ ranged = false, unlinked = true })
if layout ~= nil then
layout:mount()
@@ -354,6 +359,8 @@ M.create_comment_suggestion = function()
local layout = M.create_comment_layout({ ranged = range_length > 0, unlinked = false })
if layout ~= nil then
layout:mount()
+ else
+ return -- Failure in creating the comment layout
end
vim.schedule(function()
if suggestion_lines then
diff --git a/lua/gitlab/annotations.lua b/lua/gitlab/annotations.lua
index a544b44e..9b1ae923 100644
--- a/lua/gitlab/annotations.lua
+++ b/lua/gitlab/annotations.lua
@@ -116,6 +116,8 @@
---@class DiffviewInfo
---@field modification_type string
---@field file_name string
+---Relevant for renamed files only, the name of the file in the previous commit
+---@field old_file_name string
---@field current_bufnr integer
---@field new_sha_win_id integer
---@field old_sha_win_id integer
diff --git a/lua/gitlab/hunks.lua b/lua/gitlab/hunks.lua
index cd6e5896..81465c60 100644
--- a/lua/gitlab/hunks.lua
+++ b/lua/gitlab/hunks.lua
@@ -90,18 +90,28 @@ local line_was_added = function(linnr, hunk, all_diff_output)
end
---Parse git diff hunks.
----@param file_path string Path to file.
---@param base_sha string Git base SHA of merge request.
---@return HunksAndDiff
-local parse_hunks_and_diff = function(file_path, base_sha)
+local parse_hunks_and_diff = function(base_sha)
local hunks = {}
local all_diff_output = {}
- local Job = require("plenary.job")
+ local reviewer = require("gitlab.reviewer")
+ local cmd = {
+ "diff",
+ "--minimal",
+ "--unified=0",
+ "--no-color",
+ base_sha,
+ "--",
+ reviewer.get_current_file_oldpath(),
+ reviewer.get_current_file_path(),
+ }
+ local Job = require("plenary.job")
local diff_job = Job:new({
command = "git",
- args = { "diff", "--minimal", "--unified=0", "--no-color", base_sha, "--", file_path },
+ args = cmd,
on_exit = function(j, return_code)
if return_code == 0 then
all_diff_output = j:result()
@@ -139,8 +149,7 @@ end
--- Processes the number of changes until the target is reached. This returns
--- a negative or positive number indicating the number of lines in the hunk
---that have been added or removed prior to the target line
----comment
+--- that have been added or removed prior to the target line
---@param line_number number
---@param hunk Hunk
---@param lines table
@@ -221,11 +230,10 @@ end
---This is in order to build the payload for Gitlab correctly by setting the old line and new line.
---@param old_line number|nil
---@param new_line number|nil
----@param current_file string
---@param is_current_sha_focused boolean
---@return string|nil
-function M.get_modification_type(old_line, new_line, current_file, is_current_sha_focused)
- local hunk_and_diff_data = parse_hunks_and_diff(current_file, state.INFO.diff_refs.base_sha)
+function M.get_modification_type(old_line, new_line, is_current_sha_focused)
+ local hunk_and_diff_data = parse_hunks_and_diff(state.INFO.diff_refs.base_sha)
if hunk_and_diff_data.hunks == nil then
return
end
@@ -240,11 +248,19 @@ end
---@param old_sha string
---@param new_sha string
---@param file_path string
+---@param old_file_path string
---@param line_number number
---@return number|nil
-M.calculate_matching_line_new = function(old_sha, new_sha, file_path, line_number)
+M.calculate_matching_line_new = function(old_sha, new_sha, file_path, old_file_path, line_number)
local net_change = 0
- local diff_cmd = string.format("git diff --minimal --unified=0 --no-color %s %s -- %s", old_sha, new_sha, file_path)
+ local diff_cmd = string.format(
+ "git diff --minimal --unified=0 --no-color %s %s -- %s %s",
+ old_sha,
+ new_sha,
+ old_file_path,
+ file_path
+ )
+
local handle = io.popen(diff_cmd)
if handle == nil then
u.notify(string.format("Error running git diff command for %s", file_path), vim.log.levels.ERROR)
diff --git a/lua/gitlab/indicators/common.lua b/lua/gitlab/indicators/common.lua
index 6a72be47..c57a5cf9 100644
--- a/lua/gitlab/indicators/common.lua
+++ b/lua/gitlab/indicators/common.lua
@@ -41,7 +41,7 @@ M.filter_placeable_discussions = function()
draft_notes = {}
end
- local file = reviewer.get_current_file()
+ local file = reviewer.get_current_file_path()
if not file then
return {}
end
diff --git a/lua/gitlab/reviewer/init.lua b/lua/gitlab/reviewer/init.lua
index 89654c97..41c00478 100644
--- a/lua/gitlab/reviewer/init.lua
+++ b/lua/gitlab/reviewer/init.lua
@@ -152,7 +152,7 @@ M.get_reviewer_data = function()
return
end
- local current_file = M.get_current_file()
+ local current_file = M.get_current_file_path()
if current_file == nil then
u.notify("Error getting current file from Diffview", vim.log.levels.ERROR)
return
@@ -163,7 +163,7 @@ M.get_reviewer_data = function()
local is_current_sha_focused = M.is_current_sha_focused()
- local modification_type = hunks.get_modification_type(old_line, new_line, current_file, is_current_sha_focused)
+ local modification_type = hunks.get_modification_type(old_line, new_line, is_current_sha_focused)
if modification_type == nil then
u.notify("Error getting modification type", vim.log.levels.ERROR)
return
@@ -180,6 +180,7 @@ M.get_reviewer_data = function()
return {
file_name = layout.a.file.path,
+ old_file_name = M.is_file_renamed() and layout.b.file.path or "",
old_line_from_buf = old_line,
new_line_from_buf = new_line,
modification_type = modification_type,
@@ -205,14 +206,38 @@ M.is_current_sha_focused = function()
return current_win == b_win
end
----Get currently shown file
----@return string|nil
-M.get_current_file = function()
+---Get currently shown file data
+M.get_current_file_data = function()
local view = diffview_lib.get_current_view()
- if not view or not view.panel or not view.panel.cur_file then
- return
- end
- return view.panel.cur_file.path
+ return view and view.panel and view.panel.cur_file
+end
+
+---Get currently shown file path
+---@return string|nil
+M.get_current_file_path = function()
+ local file_data = M.get_current_file_data()
+ return file_data and file_data.path
+end
+
+---Get currently shown file's old path
+---@return string|nil
+M.get_current_file_oldpath = function()
+ local file_data = M.get_current_file_data()
+ return file_data and file_data.oldpath
+end
+
+---Tell whether current file is renamed or not
+---@return boolean|nil
+M.is_file_renamed = function()
+ local file_data = M.get_current_file_data()
+ return file_data and file_data.status == "R"
+end
+
+---Tell whether current file has changes or not
+---@return boolean|nil
+M.does_file_have_changes = function()
+ local file_data = M.get_current_file_data()
+ return file_data.stats.additions > 0 or file_data.stats.deletions > 0
end
---Diffview exposes events which can be used to setup autocommands.
diff --git a/lua/gitlab/reviewer/location.lua b/lua/gitlab/reviewer/location.lua
index b0299be9..2cbc8d76 100755
--- a/lua/gitlab/reviewer/location.lua
+++ b/lua/gitlab/reviewer/location.lua
@@ -96,7 +96,13 @@ function Location:get_line_number_from_new_sha(line)
return line
end
-- Otherwise we want to get the matching line in the opposite buffer
- return hunks.calculate_matching_line_new(self.base_sha, self.head_sha, self.reviewer_data.file_name, line)
+ return hunks.calculate_matching_line_new(
+ self.base_sha,
+ self.head_sha,
+ self.reviewer_data.file_name,
+ self.reviewer_data.old_file_name,
+ line
+ )
end
-- Returns the matching line from the old SHA.
@@ -112,7 +118,13 @@ function Location:get_line_number_from_old_sha(line)
end
-- Otherwise we want to get the matching line in the opposite buffer
- return hunks.calculate_matching_line_new(self.head_sha, self.base_sha, self.reviewer_data.file_name, line)
+ return hunks.calculate_matching_line_new(
+ self.head_sha,
+ self.base_sha,
+ self.reviewer_data.file_name,
+ self.reviewer_data.old_file_name,
+ line
+ )
end
-- Returns the current line number from whatever SHA (new or old)
@@ -135,7 +147,7 @@ end
---@param visual_range LineRange
---@return ReviewerLineInfo|nil
function Location:set_start_range(visual_range)
- local current_file = require("gitlab.reviewer").get_current_file()
+ local current_file = require("gitlab.reviewer").get_current_file_path()
if current_file == nil then
u.notify("Error getting current file from Diffview", vim.log.levels.ERROR)
return
@@ -165,7 +177,7 @@ function Location:set_start_range(visual_range)
return
end
- local modification_type = hunks.get_modification_type(old_line, new_line, current_file, is_current_sha_focused)
+ local modification_type = hunks.get_modification_type(old_line, new_line, is_current_sha_focused)
if modification_type == nil then
u.notify("Error getting modification type for start of range", vim.log.levels.ERROR)
return
@@ -182,7 +194,7 @@ end
-- for the Gitlab payload
---@param visual_range LineRange
function Location:set_end_range(visual_range)
- local current_file = require("gitlab.reviewer").get_current_file()
+ local current_file = require("gitlab.reviewer").get_current_file_path()
if current_file == nil then
u.notify("Error getting current file from Diffview", vim.log.levels.ERROR)
return
@@ -207,7 +219,7 @@ function Location:set_end_range(visual_range)
local reviewer = require("gitlab.reviewer")
local is_current_sha_focused = reviewer.is_current_sha_focused()
- local modification_type = hunks.get_modification_type(old_line, new_line, current_file, is_current_sha_focused)
+ local modification_type = hunks.get_modification_type(old_line, new_line, is_current_sha_focused)
if modification_type == nil then
u.notify("Error getting modification type for end of range", vim.log.levels.ERROR)
return
From b606ceb7cd57a0cbf3850fb95d5e8b7e77791058 Mon Sep 17 00:00:00 2001
From: "Harrison (Harry) Cramer"
<32515581+harrisoncramer@users.noreply.github.com>
Date: Sun, 10 Nov 2024 11:25:17 -0500
Subject: [PATCH 20/21] fix: color highlight groups are invalid (#421)
---
lua/gitlab/colors.lua | 32 +++++++++++++++++++++-----------
lua/gitlab/utils/init.lua | 6 ------
2 files changed, 21 insertions(+), 17 deletions(-)
diff --git a/lua/gitlab/colors.lua b/lua/gitlab/colors.lua
index 36b0b00a..a5b92f10 100644
--- a/lua/gitlab/colors.lua
+++ b/lua/gitlab/colors.lua
@@ -1,5 +1,4 @@
local state = require("gitlab.state")
-local u = require("gitlab.utils")
local colors = state.settings.colors
@@ -12,13 +11,24 @@ vim.g.gitlab_discussion_tree_resolved = "โ"
vim.g.gitlab_discussion_tree_unresolved = "-"
local discussion = colors.discussion_tree
-vim.api.nvim_set_hl(0, "GitlabUsername", u.get_colors_for_group(discussion.username))
-vim.api.nvim_set_hl(0, "GitlabMention", u.get_colors_for_group(discussion.mention))
-vim.api.nvim_set_hl(0, "GitlabDate", u.get_colors_for_group(discussion.date))
-vim.api.nvim_set_hl(0, "GitlabExpander", u.get_colors_for_group(discussion.expander))
-vim.api.nvim_set_hl(0, "GitlabDirectory", u.get_colors_for_group(discussion.directory))
-vim.api.nvim_set_hl(0, "GitlabDirectoryIcon", u.get_colors_for_group(discussion.directory_icon))
-vim.api.nvim_set_hl(0, "GitlabFileName", u.get_colors_for_group(discussion.file_name))
-vim.api.nvim_set_hl(0, "GitlabResolved", u.get_colors_for_group(discussion.resolved))
-vim.api.nvim_set_hl(0, "GitlabUnresolved", u.get_colors_for_group(discussion.unresolved))
-vim.api.nvim_set_hl(0, "GitlabDraft", u.get_colors_for_group(discussion.draft))
+
+local function get_colors_for_group(group)
+ local normal_fg = vim.fn.synIDattr(vim.fn.synIDtrans(vim.fn.hlID(group)), "fg")
+ local normal_bg = vim.fn.synIDattr(vim.fn.synIDtrans(vim.fn.hlID(group)), "bg")
+ return { fg = normal_fg, bg = normal_bg }
+end
+
+vim.api.nvim_create_autocmd("VimEnter", {
+ callback = function()
+ vim.api.nvim_set_hl(0, "GitlabUsername", get_colors_for_group(discussion.username))
+ vim.api.nvim_set_hl(0, "GitlabMention", get_colors_for_group(discussion.mention))
+ vim.api.nvim_set_hl(0, "GitlabDate", get_colors_for_group(discussion.date))
+ vim.api.nvim_set_hl(0, "GitlabExpander", get_colors_for_group(discussion.expander))
+ vim.api.nvim_set_hl(0, "GitlabDirectory", get_colors_for_group(discussion.directory))
+ vim.api.nvim_set_hl(0, "GitlabDirectoryIcon", get_colors_for_group(discussion.directory_icon))
+ vim.api.nvim_set_hl(0, "GitlabFileName", get_colors_for_group(discussion.file_name))
+ vim.api.nvim_set_hl(0, "GitlabResolved", get_colors_for_group(discussion.resolved))
+ vim.api.nvim_set_hl(0, "GitlabUnresolved", get_colors_for_group(discussion.unresolved))
+ vim.api.nvim_set_hl(0, "GitlabDraft", get_colors_for_group(discussion.draft))
+ end,
+})
diff --git a/lua/gitlab/utils/init.lua b/lua/gitlab/utils/init.lua
index 49f15239..aa71136b 100644
--- a/lua/gitlab/utils/init.lua
+++ b/lua/gitlab/utils/init.lua
@@ -335,12 +335,6 @@ M.notify = function(msg, lvl)
vim.notify("gitlab.nvim: " .. msg, lvl)
end
-M.get_colors_for_group = function(group)
- local normal_fg = vim.fn.synIDattr(vim.fn.synIDtrans((vim.fn.hlID(group))), "fg")
- local normal_bg = vim.fn.synIDattr(vim.fn.synIDtrans((vim.fn.hlID(group))), "bg")
- return { fg = normal_fg, bg = normal_bg }
-end
-
M.get_current_line_number = function()
return vim.api.nvim_call_function("line", { "." })
end
From ddf0f41582cc0fd13dcb6f2a23f21904ac396979 Mon Sep 17 00:00:00 2001
From: "Harrison (Harry) Cramer"
<32515581+harrisoncramer@users.noreply.github.com>
Date: Tue, 12 Nov 2024 08:58:33 -0500
Subject: [PATCH 21/21] fix: plugin failing to build on Windows (#419)
---
cmd/app/emoji.go | 6 +++---
{config => cmd/config}/emojis.json | 0
lua/gitlab/emoji.lua | 6 ++++--
lua/gitlab/server.lua | 20 ++++++++++----------
4 files changed, 17 insertions(+), 15 deletions(-)
rename {config => cmd/config}/emojis.json (100%)
diff --git a/cmd/app/emoji.go b/cmd/app/emoji.go
index 2dbfe6fb..5b2db76e 100644
--- a/cmd/app/emoji.go
+++ b/cmd/app/emoji.go
@@ -7,7 +7,7 @@ import (
"io"
"net/http"
"os"
- "path"
+ "path/filepath"
"strconv"
"strings"
@@ -157,8 +157,8 @@ func attachEmojis(a *data, fr FileReader) error {
return err
}
- binPath := path.Dir(e)
- filePath := fmt.Sprintf("%s/config/emojis.json", binPath)
+ binPath := filepath.Dir(e)
+ filePath := filepath.Join(binPath, "config", "emojis.json")
reader, err := fr.ReadFile(filePath)
diff --git a/config/emojis.json b/cmd/config/emojis.json
similarity index 100%
rename from config/emojis.json
rename to cmd/config/emojis.json
diff --git a/lua/gitlab/emoji.lua b/lua/gitlab/emoji.lua
index c7fc644b..342de148 100644
--- a/lua/gitlab/emoji.lua
+++ b/lua/gitlab/emoji.lua
@@ -10,8 +10,10 @@ local M = {
}
M.init = function()
- local bin_path = state.settings.bin_path
- local emoji_path = bin_path
+ local root_path = state.settings.root_path
+ local emoji_path = root_path
+ .. state.settings.file_separator
+ .. "cmd"
.. state.settings.file_separator
.. "config"
.. state.settings.file_separator
diff --git a/lua/gitlab/server.lua b/lua/gitlab/server.lua
index aa739b45..6e77c8ac 100644
--- a/lua/gitlab/server.lua
+++ b/lua/gitlab/server.lua
@@ -80,8 +80,10 @@ end
M.build = function(override)
local file_path = u.current_file_path()
local parent_dir = vim.fn.fnamemodify(file_path, ":h:h:h:h")
- state.settings.bin_path = parent_dir
- state.settings.bin = parent_dir .. (u.is_windows() and "\\bin.exe" or "/bin")
+
+ local bin_name = u.is_windows() and "bin.exe" or "bin"
+ state.settings.root_path = parent_dir
+ state.settings.bin = parent_dir .. u.path_separator .. "cmd" .. u.path_separator .. bin_name
if not override then
local binary_exists = vim.loop.fs_stat(state.settings.bin)
@@ -90,17 +92,15 @@ M.build = function(override)
end
end
- local cmd = u.is_windows() and "cd %s\\cmd && go build -o bin.exe && move bin.exe ..\\"
- or "cd %s/cmd && go build -o bin && mv bin ../bin"
+ local res = vim
+ .system({ "go", "build", "-o", bin_name }, { cwd = state.settings.root_path .. u.path_separator .. "cmd" })
+ :wait()
- local command = string.format(cmd, state.settings.bin_path)
- local null = u.is_windows() and " >NUL" or " > /dev/null"
- local installCode = os.execute(command .. null)
- if installCode ~= 0 then
- u.notify("Could not install gitlab.nvim!", vim.log.levels.ERROR)
+ if res.code ~= 0 then
+ u.notify(string.format("Failed to install with status code %d:\n%s", res.code, res.stderr), vim.log.levels.ERROR)
return false
end
- u.notify("Gitlab.nvim installed successfully!", vim.log.levels.INFO)
+ u.notify("Installed successfully!", vim.log.levels.INFO)
return true
end