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