Dokeey / emoji_rank

This is slack bot for emoji ranking

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

πŸ€©πŸ† emoji_rank πŸ†πŸ‘‹

개발자의 ν•œλ§ˆλ”” πŸ‘¨πŸ»β€πŸ’»

λ§ν¬λ“œμΈμ—μ„œ 맀프 멀버듀이 μ„œλ‘œ ν† λ§ˆν† λ₯Ό μ£ΌλŠ” μ΄μœ λŠ”? λΌλŠ” 글을 읽고, μŠ¬λž™ 이λͺ¨μ§€(Emoji)둜 λ©€λ²„λ“€μ—κ²Œ μΉ­μ°¬μ΄λ‚˜ λ¦¬μŠ€νŽ™ ν•  수 μžˆλŠ” λ¬Έν™”κ°€ 생긴닀면 μž¬λ°ŒκΈ°λ„ ν•˜κ³  κ³ λ§ˆμ›€λ„ ν‘œν˜„ν•  수 μžˆμ„ 것 κ°™μ•˜μŠ΅λ‹ˆλ‹€.

κ·Έλž˜μ„œ 이런 μž¬λ―Έλ‚œ κΈ°λŠ₯은 μ˜€ν”ˆμ†ŒμŠ€λ‘œ κ³΅κ°œν•˜λ©΄ 쒋을 것 κ°™λ‹€κ³  μƒκ°ν•΄μ„œ 토이 ν”„λ‘œμ νŠΈλ‘œ λ§Œλ“€μ–΄ λ³΄μ•˜μŠ΅λ‹ˆλ‹€.
(근데 Nodejs둜 λ§Œλ“€μ–΄μ§„κ²Œ 이미 μžˆμ—ˆλ„€μš” heyburrito)

κ·Έλž˜λ„ λ§Œλ“€μ–΄ 보면 μž¬λ°Œμ„ 것 κ°™μ•„μ„œ FastAPIλ₯Ό ν•œλ²ˆ 곡뢀해볼 κ²Έ ν•΄μ„œ 이틀정도 μ‚½μ§ˆ ν•˜λ©΄μ„œ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.πŸ˜…
(Django에 μŠ€λ©°λ“€μ–΄ μžˆμ–΄μ„œ, 생각보닀 μ–΄λ €μ› λ„€μš”)

μ’€ 더 μž¬λ―Έλ‚œ κΈ°λŠ₯ + 완성도 μžˆλŠ” ν”„λ‘œμ νŠΈκ°€ λ˜κΈ°μœ„ν•΄ μœ μ§€λ³΄μˆ˜λŠ” μ§€μ†μ μœΌλ‘œ ν•  μ˜ˆμ •μž…λ‹ˆλ‹€.πŸ’ͺ
FastAPI에 κ΅¬μ‘°λ‚˜ ν”„λ‘œμ νŠΈ κ΄€λ ¨λœ μΆ”κ°€κΈ°λŠ₯, κ°œμ„ μ‚¬ν•­ PR은 μ–Έμ œλ‚˜ ν™˜μ˜μž…λ‹ˆλ‹€!
TMI: μ•„μ΄μ½˜μ€ 이λͺ¨μ§€ λž­ν¬λΌμ„œ... κ°‘μžκΈ° LoLλž­ν¬κ°€ λ– μ˜¬λžκ³ , μ œκ°€ κ³¨λ“œλΌμ„œ...πŸ˜‚ λ””μžμΈ μž˜ν•˜μ‹œλŠ”λΆ„...κΈ°μ—¬ ν•΄μ£Όμ‹­μ‡Ό!

Server πŸ–₯

1. κ°œμš” πŸ‘‹

emoji_rankλŠ” Python 3.7.9, FastAPI 둜 κ°œλ°œλ˜μ—ˆμŠ΅λ‹ˆλ‹€.
κ·Έ μ™Έ λ²„μ „μ—μ„œ νŒ¨ν‚€μ§€ 및 λ™μž‘μ— λŒ€ν•œ ν˜Έν™˜μ€ 보μž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. (근데 거의 λ‹€ λ κ±°μ—μš” python 3 이상이면...μ•„λ§ˆλ‘~😁 )

2. νŒ¨ν‚€μ§€ μ„€μΉ˜ βš™οΈ

pip install -r requirements

3. μ„ΈνŒ… πŸ’Ύ

.envνŒŒμΌμ„ 톡해 ν™˜κ²½λ³€μˆ˜ 등을 μ„ΈνŒ… ν•  수 μžˆμŠ΅λ‹ˆλ‹€. .env_sample을 μ°Έκ³ ν•˜μ…”μ„œ μ›ν•˜μ‹œλŠ” νƒ€μž…μ˜ 이λͺ¨μ§€λ“±μ„ μ„ΈνŒ…ν•΄ λ³΄μ„Έμš”! settings.pyμ—μ„œ DBμ„ΈνŒ… 및 ν™˜κ²½λ³€μˆ˜λ“±μ„ μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€
DBλŠ” MySQL을 μ‚¬μš©ν•©λ‹ˆλ‹€. 비동기 처리λ₯Ό μœ„ν•΄ aiomysql 와 ν•¨κ»˜ μ‚¬μš©ν•©λ‹ˆλ‹€.
λ‹€λ₯Έ DB μ‚¬μš©ν•˜λ €λ©΄ config 섀정이 쑰금 λ‹¬λΌμ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

이름 μ„€λͺ…
BEST_TYPES emojiλ₯Ό κ°€μž₯ 많이 받은 멀버λ₯Ό μΆ”μΆœν• λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.
REACTION_LIST reaction 카운트 ν—ˆμš©ν•  Emoji list
DAY_MAX_REACTION ν•˜λ£¨ μ΅œλŒ€ μ‚¬μš©ν•  수 μžˆλŠ” Reacion 개수 (ν˜„μž¬ λ²„μ „μ—μ„œλŠ” μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€)
HOST DB 호슀트
PORT DB 포트
DATABASE DB 이름
USERNAME DB 접속 μœ μ €λ„€μž„
PASSWORD DB νŒ¨μŠ€μ›Œλ“œ)

4. μ‹€ν–‰ πŸ’‘

main.pyκ°€ μžˆλŠ” rootκ²½λ‘œμ— κ°€μ„œ uvicorn으둜 μ„œλ²„λ₯Ό μ‹€ν–‰μ‹œν‚΅λ‹ˆλ‹€.
λ°±κ·ΈλΌμš΄λ“œλ‘œ μ‹€ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” &λ₯Ό λ§ˆμ§€λ§‰μ— λΆ™μ—¬μ£Όμ„Έμš”.

uvicorn app.main:app --port 8080

λ§Œμ•½ λ°±κ·ΈλΌμš΄λ“œμ—μ„œ μ‹€ν–‰λ˜κ³  μžˆλŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό μ œκ±°ν•˜κ³ μ‹Άμ€ 경우

1. ps aux | grep uvicorn
2. kill -9 {PID} 

잘λͺ»λœ ν”„λ‘œμ„ΈμŠ€ kill을 μ£Όμ˜ν•˜μ„Έμš”!

5. ν”„λ‘œμ„ΈμŠ€ Live 체크 πŸ§Ÿβ€β™‚οΈ

shell script둜 κ°„λ‹¨ν•˜κ²Œ Live 체크λ₯Ό 진행 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.. 크둠탭에 1λΆ„λ§ˆλ‹€ μ‹€ν–‰ν•˜λ„λ‘ 등둝.
λ‘œκΉ…λ„ μΆ”κ°€ν•˜λ©΄ μ’‹μŠ΅λ‹ˆλ‹€.

#! /bin/bash
PYTHON_PATH=/{{ path }}/venv/bin/python
SCRIPT_PATH=/{{ path }}/emoji_rank/app

checker=`ps aux | grep -v "grep" | grep "{{ 검색할 이름}}" | wc -l`

if [ "$checker" == "0" ]; then
	source '{{ path }}/venv/bin/activate'
	cd $SCRIPT_PATH && `uvicorn main:app --port 8080 &`
fi

6. API λ¬Έμ„œ 및 ν…ŒμŠ€νŠΈ πŸ“

HOST_URL/docs둜 μ ‘μ†ν•˜λ©΄ Swagger둜 λ§Œλ“€μ–΄μ§„ web νŽ˜μ΄μ§€λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. (FastAPIλŠ” swagger, redoc 지원)

7. μŠ¬λž™ μ»€λ§¨λ“œ πŸ‘Ύ

이름 μ„€λͺ…
help μ»€λ©˜λ“œ κ΄€λ ¨ help
create_user user 생성
update_user user 정보 μ—…λ°μ΄νŠΈ
show_user μœ μ € is_display = True (λ…ΈμΆœ)
hide_user μœ μ € is_display = False (μˆ¨κΉ€)
show_best_member ν•΄λ‹Ήμ›” 베슀트 멀버 μΆ”μΆœ
ex) μ‹€μ œ μ‚¬μš©μ‹œ '{{ }}' λŠ” μ œκ±°ν•΄μ£Όμ„Έμš”
@μŠ¬λž™λ΄‡ --create_user --name={{이름}} --slack_id={{μŠ¬λž™ID}} --avatar_url={{이미지URL}}

8. 배치 슀크립트 크둠탭 등둝 πŸƒπŸ»β€β™‚οΈ

멀버당 ν•˜λ£¨μ— 5κ°œμ”© μ§€μ •ν•œ Emojiλ₯Ό λ‹€λ₯Έ λ©€λ²„μ—κ²Œ 쀄 수 μžˆλ„λ‘ ν–ˆμŠ΅λ‹ˆλ‹€.
맀일 μžμ •μ— λ‹€μ‹œ 5개둜 λ¦¬μ…‹ν•˜λŠ” 배치 슀크립트λ₯Ό 크둠탭에 λ“±λ‘ν•©λ‹ˆλ‹€.
μ €λŠ” μ‰˜μŠ€ν¬λ¦½νŠΈλ₯Ό λ§Œλ“€μ–΄μ„œ 크둠탭에 λ“±λ‘ν–ˆμŠ΅λ‹ˆλ‹€.

#!/bin/bash

PYTHON_PATH=/{{ path }}/venv/bin/python
SCRIPT_PATH=/{{ path }}/emoji_rank/scripts/update_emoji_count.py

source '{{ path }}/venv/bin/activate'

$PYTHON_PATH $SCRIPT_PATH

Slack Bot πŸ€–

https://api.slack.com/apps에 μ ‘μ†ν•˜μ—¬ create app λ²„νŠΌμ„ ν΄λ¦­ν•œ ν›„,
μ›ν•˜λŠ” workspace에 app을 μƒμ„±ν•΄μ£Όμ„Έμš”!

Basic Information 탭을 클릭후 ν•˜λ‹¨μ—μ„œ app의 ν”„λ‘œν•„ 이미지λ₯Ό μΆ”κ°€ν•˜κ³  Save ν•΄μ€λ‹ˆλ‹€.
이건 μ•ˆν•΄λ„ λ˜μ§€λ§Œ ν•˜λŠ”κ²Œ μ’‹μ•„μš”. μ™œλƒν•˜λ©΄ λ©‹μžˆκ±°λ“ μš”πŸ˜Ž

Add features and functionalityμ—μ„œ 'Event Subscriptions'을 ν΄λ¦­ν•©λ‹ˆλ‹€.

Eventλ₯Ό Enable(ν™œμ„±ν™”) μ‹œν‚¨ν›„ Requst URL을 λ„£μ–΄μ„œ 인증을 ν•©λ‹ˆλ‹€.
λ‘œμ»¬μ—μ„œ ν…ŒμŠ€νŠΈ ν•˜κΈ° μœ„ν•΄ ngrok을 μ‚¬μš©ν•˜μ‹œλ©΄ νŽΈν•©λ‹ˆλ‹€.μ‹€μ œ prod ν™˜κ²½μ—μ„œλŠ” Nginx + uvicorn으둜 μ‹€ν–‰ν•˜λ©΄ λ˜μš”!
Nginx Config μ—μ„œ proxy_pass 만 uvicorn으둜 μ‹€ν–‰ν•œ 둜컬 μ„œλ²„λ‘œ μ—°κ²°ν•΄μ£Όλ©΄ λ©λ‹ˆλ‹€!

ngrok을 톡해 μ™ΈλΆ€λ§μ—μ„œ 둜컬둜 연결이 된 λͺ¨μŠ΅

emoji_rankλŠ” μŠ¬λž™ λ©€λ²„λ“€μ˜ reaction_added, reaction_removed μ΄λ²€νŠΈμ™€ bot을 ν˜ΈμΆœν•˜λŠ” app_mention μ΄λ ‡κ²Œ 3가지 이벀트λ₯Ό λ°›μŠ΅λ‹ˆλ‹€.
λ§ˆμ§€λ§‰μœΌλ‘œ app을 workspace에 install ν•˜λ©΄ μ„€μ •ν•œ μ΄λ²€νŠΈκ°€ μΌμ–΄λ‚ λ•Œλ§ˆλ‹€ slack μ„œλ²„μ—μ„œ emoji_rankμ„œλ²„λ‘œ apiλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.(WebHook)

ν”„λ‘ νŠΈ 예제 πŸ“²

vllo 5

κ°„λ‹¨ν•˜κ²Œ vueν”„λ‘œμ νŠΈμ—μ„œ emoji_rank의 apiλ₯Ό ν˜ΈμΆœν•΄ User listλ₯Ό 보여주도둝 λ§Œλ“€μ–΄ λ΄€μŠ΅λ‹ˆλ‹€.
이λͺ¨μ§€ μΆ”κ°€, 제거 event에 따라 μ„œλ²„μ—μ„œ count λ‘œμ§μ„ μ²˜λ¦¬ν•΄μ£ΌλŠ”κ±Έ 확인 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. Emoji rank web ν”„λ‘œμ νŠΈλ₯Ό clone ν•΄μ„œ ν™•μΈν•΄λ³΄μ„Έμš”πŸ˜ƒ

About

This is slack bot for emoji ranking

License:MIT License


Languages

Language:Python 99.7%Language:Dockerfile 0.3%