-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathslack-emoji
More file actions
executable file
·61 lines (56 loc) · 1.81 KB
/
slack-emoji
File metadata and controls
executable file
·61 lines (56 loc) · 1.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/env python3
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
import emoji
import unicodedata
import ansi.iterm
import ansi.cursor
import os
import sys
import requests
import argparse
parser = argparse.ArgumentParser(description="Show a slack emoji")
parser.add_argument("--size", type=int, default=1)
parser.add_argument('emoji', nargs='+')
args = parser.parse_args()
client = WebClient(token=os.getenv("SLACK_TOKEN"))
custom_emoji = client.emoji_list()['emoji']
modifiers = {
'skin-tone-1': '\U0001F3FB',
'skin-tone-2': '\U0001F3FC',
'skin-tone-3': '\U0001F3FD',
'skin-tone-4': '\U0001F3FE',
'skin-tone-5': '\U0001F3FF',
}
def find_emoji(name, custom_emoji={}, fallback=None, size=1):
if not fallback:
fallback = ':' + name + ':'
if name in modifiers:
return modifiers[name]
if name in custom_emoji:
val = custom_emoji[name]
if val.startswith('alias:'):
return find_emoji(val[6:], custom_emoji, fallback, size)
if val.startswith('https://'):
img = requests.get(val)
if not img.ok:
return fallback
val = custom_emoji[name] = ansi.iterm.image(img.content, name=fallback, height=args.size)
return val
text = ':' + name + ':'
val = emoji.emojize(text, language='alias')
if val != text:
return val
try:
return unicodedata.lookup(name)
except KeyError:
try:
return unicodedata.lookup(name.replace('_', ' '))
except KeyError:
return fallback
for e in args.emoji:
e = find_emoji(e, custom_emoji, size=args.size)
print(e, end="", flush=True)
if e.startswith('\033') and args.size > 1:
print(ansi.cursor.up(args.size-1), end="", flush=True)
print(ansi.cursor.down(args.size-1))