자유 그리고 경험
텔레그램 봇, 명령어 링크 만들기(파라미터까지) 본문
반응형
개요
텔레그램은 메세지 내에 명령어가 있으면, 클릭하여 바로 실행할 수 있는 기능이 있습니다.
그런데 이 명령어에 파라미터가 필요한 경우에는, 공백으로 떨어져있는 파라미터 까지 같이 클릭되지 않는 문제점이 있습니다. 아래와 같은 방법이 있다는 것을 알게 되었습니다.
위와 같이 유동적으로 작동하는 명령어를 만들어서 해결할 수 있겠다는 생각이 들었습니다.
해결방법 요약
- CommandHandler가 아닌 MessageHandler 내부에서 Filters.regex('pattern')을 이용해 특정패턴의 메시지를 명령어 처럼 처리할 수 있습니다.
- 이 때 pattern앞에 명령어처럼 /명령어 붙여주고 파라미터간 구분은 언더스코어 (_) 로 함으로써 메시지 상에서 클릭 가능하게 만들 수 있습니다.
삽질방지 팁
- 위 링크에 예제로 들어가있는 RegexHandler는 더 이상 지원하지 않는 기능입니다. 대신에 CommandHandler에 Filters.regex 를 넣어 활용하는 방법이 있습니다.
- 텔레그램에서 현재 한글 명령어는 지원하지 않는 것 같습니다. 한글이 한글자라도 들어가면 중간에 클릭 링크가 끊기는 현상이 있습니다.
예제 코드
from telegram import ParseMode
from telegram.ext import Updater, Filters, MessageHandler, Defaults
TELEGRAM_TOKEN="토큰"
def findCommand(update, context):
parameter = update.message.text.replace('/f_', '') #명령어는 /f
parameters = parameter.split('_') #파라미터를 다시 list로 나누고 싶다면 이 코드를 사용할 수 있다.
update.message.reply_text(parameter)
if __name__ == '__main__':
updater = Updater(token=TELEGRAM_TOKEN, defaults=Defaults(parse_mode=ParseMode.HTML))
dispatcher = updater.dispatcher
dispatcher.add_handler(MessageHandler(Filters.regex(r'^(/f_[\w]+)$'),findCommand)) #/f_ 뒤에 명령어가 들어오는 경우 캡쳐한다.
updater.start_polling() # Start the bot
updater.idle() # Wait for the script to be stopped, this will stop the bot as well
활용 예제
지난번에 만들었던 텔레그램 단어장에서, 바로 클릭 가능하도록 기능을 추가하였습니다. 아쉽게도 한글은 지원되지 않아. 단어장 DB의 ID를 링크로 만들어 추가하였습니다.
2022.06.24 - [기술] - 텔레그램 봇 활용, 암기카드(사전) 만들기
이를 활용하면 나만의 작은 wiki를 만들수도 있겠습니다.
위에 소개된 코딩 강의 링크는 여기 있습니다.
감사합니다.
반응형
'기술' 카테고리의 다른 글
파이썬 플라스크 간단 코드, 빠르게 웹서비스 만들기 (0) | 2022.07.28 |
---|---|
ubuntu mariadb 설치 및 외부접속 기본 설정 (3) | 2022.06.27 |
텔레그램 봇 활용, 암기카드(사전) 만들기 (0) | 2022.06.24 |
저장장치의 용량이 달라요. (0) | 2022.06.04 |
SD카드 포맷하는 법 (0) | 2022.06.04 |
Comments