온라인 알고리즘 콘테스트 일정을 Slack에 알려주는 WebHook
- Codeforces
- Atcoder
-
Be sure to install these things on your local:
- Python 3.8
- Pipenv
- serverless
-
Clone this repository.
$ git clone https://github.com/Dogdriip/CP-Contest-Bot $ cd CP-Contest-Bot
-
Install packages from Pipfile via pipenv.
$ pipenv install
-
Install serverless-python-requirements plugin.
$ serverless plugin install -n serverless-python-requirements
-
Set configuration in config.json. It should be like this:
$ vi config.json $ cat config.json { "INCOMING_WEBHOOK_URL": "(SLACK INCOMING WEBHOOK URL HERE)", "LIMIT": 5 }
- INCOMING_WEBHOOK_URL : Slack Incoming WebHook's URL.
- LIMIT : Max. number of contests that bot will return.
See
config.sample.json
for example. -
Test and deploy.
$ serverless invoke local -f lambda_func $ serverless deploy
You can customize provider settings in
serverless.yml
(default setting is AWS with ap-northeast-2 region).
- Slack에 Incoming WebHooks, Outgoing WebHooks 하나씩 설치
- Incoming WebHooks는 POST로 들어온 json을 Slack에 메시지로 뿌려주는 역할이고,
- Outgoing WebHooks는 Slack에서 trigger가 발생하면(누군가 특정 메시지를 입력한다던가), 지정된 URL로 GET 요청을 보낸다
- Slack의 Outgoing에 Lambda API Gateway 트리거 URL을 붙여주고
- Lambda에서 POST request를 Incoming에다가 보내주면 된다
- 여러 대회 일정 모아서 API로 제공하는 사설 사이트도 있더라. (https://clist.by/ ) 따로 크롤링 안 하고 이걸 썼으면 더 편했을 테지만, 어차피 안 찾아봤을 듯. 그냥 내가 만들어보는 것에 의의가 있으니 뭐...