카테고리: Programming

봇 소스 공개

텔레그램의 소녀전선 봇 (telegram @girlsfrontline_krbot) 의 소스를 github에 공개했습니다.

다소 코드가 더러운 부분이 있어 적당히 리팩토링해서 올렸습니다.

심심하실 때 확인해보셔도 좋습니다. 링크

마인드맵 업그레이드 기능 추가

텔레그램의 소녀전선 봇 (telegram @girlsfrontline_krbot) 에 마인드맵 업그레이드 (속칭 개장) 관련 기능을 추가했습니다.

이번 소녀전선의 마인드맵 업그레이드는 1. 대부분의 인형은 업그레이드가 제공되지 않기 때문에 2. 마인드맵 자체의 코스트가 커서 시도하려는 사람이 많지 않기 때문에 기존의 기능에 정보를 추가하는 방식이 아니라 별도의 기능으로 추가할 필요성이 있었습니다.

또한 마인드맵 업그레이드에서 각 인형당 추가되는 정보가 너무 많기 때문에 이를 잘 처리할 방법이 필요했습니다. 1단계에서는 버프 효과와 기존 스킬 효과가 강화되고, 2단계에서는 새로운 스킬이 추가되며, 3단계에서는 전용 장비가 추가됩니다. 그리고 각 단계에서 능력치의 최대값이 변화하며 마인드맵 업그레이드의 한 단계 한 단계가 비용이 큰 작업이기 때문에 각 단계의 정보를 별도로 제공할 필요성이 있었습니다.

그렇기 때문에 이를 처리하기 위해서 Inline keyboard button과 Callback query를 사용했습니다. 이에 대한 Telegram API 정보는 다음 링크에서 확인해주세요: Inline button  Callback query

사용 예는 아래 이미지와 같습니다.

버튼을 누르면 메세지가 수정됩니다. (버튼을 여러번 누를 여지를 없앱니다.)

 

API 문서에 따르면 callback query가 다소 취약한 것으로 보이는데, 어떤 방식으로 봇을 악용할 소지를 줄일 수 있을 지 더 살펴봐야 할 것 같습니다.

tweepy Streaming Problem in version 3.5.0

현재 PyPI에 올라가있는 tweepy는 3.5.0으로 최신 버전이 아닙니다.  (https://pypi.python.org/pypi/tweepy/3.5.0)

3.5.0 버전에서 생기는 문제 중 하나는 streaming 기능에 있습니다.

 

streaming.py에 정의된 ReadBuffer class를 살펴보면, read_line()이 다음과 같이 정의되어 있습니다.

해당 method의 문제는 self._stream.closed라면 아무 것도 return하지 않아 None을 return하게 됩니다.

그리고 이는 Stream class의 _read_loop()에서 문제를 일으킵니다. buf.read_line()이 None을 반환하고, None은 strip() method를 가지지 않아 exception이 발생합니다.  특정 시점에서 Stream이 닫히면 이를 정상적으로 handling 하지 못하는 것입니다.

3.6.0에서는 해당 문제가 발생하지 않습니다. github에서 직접 다운로드받아 설치하세요.

 

© 2019 RBTree.insert()

Theme by Anders NorenUp ↑