slacker 기반 slackbot 만들기

재밌어보이길래 python으로 간단한 슬랙봇을 만들어볼까 하고 알아봤더니 slackbot이란 모듈을 사용하면 슬랙봇을 쉽게 만들 수 있을것 같아서 슬랙봇을 만들어봤다.

그런데 파이썬 프로세스는 멀쩡하게 살아있지만 하루 정도가 지나면 봇이 disconnected 상태로 바뀌는 문제가 지속적으로 발생하는 문제가 있었다. 관련해서 예제 코드들을 찾아봐도 별다른 부분이 없길래 며칠 동안 디버깅을 하면서 문제를 해결해봤다.

우선 인터넷에 떠도는 slacker 기반 echo 봇의 기본 골격은 아래와 같았는데…

따라해보니 되기는 되는데, 간헐적으로 죽어버리는 문제가 있었다. 그래서 while 문에 try exception를 추가해 봤다.

이렇게 하고 나니 죽는 이슈는 해결할 수 있었는데, 한동안 대화가 없어지면 프로세스는 살아있지만 슬랙 쪽에서는 봇이 사라지는 문제가 발생했다. 디버깅을 해보니 오류가 발생하지는 않은 상태로 recv()에서 block되어 있었다.

어떻게 해결해야하나 찾아봐도 별다른 방법이 검색이 되지 않길래 irc 등에서 접속 유지를 위해 사용하던 ping/pong 컨셉을 시도해보기로 했다.

그래서 recv에 타임아웃을 추가하고, 타임아웃 시에 ping command를 보내는 코드를 추가했다.

ping을 넣어놓고 나서 보니 recv에서는 connection closed 여부를 알지 못하고, ping을 보내려고 하는 시점에 connection closed 상태가 감지되는 걸로 봐서 connection이 close되었는데, recv에서는 이걸 감지하지 못하고 무한정 block되는 문제였던 것 같다.
어쨌든 여기까지 하고 나니 한달 넘게 안죽고 그냥 잘 동작하는거 같다.

다행이다. 아직 코딩은 재밌다.

Similar Posts:

Facebooktwitterlinkedinmail

Leave a Reply