반응형
@17_텔레그램 자동화
1. 텔레그램에 외부로부터 메시지를 받을 수 있는 bot을 만든다.
2. bot에 접근할 수 있는 API_token과 bot ID를 알아낸다.
3. bot에 메시지를 전달해 보자
4. 받은 메시지를 확인하고 원하는 메시지라면 자동으로 응답을 해 보자.
1. 텔레그램에 외부로부터 메시지를 받을 수 있는 bot을 만든다.
>1. 텔레그램에서 BotFather를 검색한다.
- 체크표시가 있는 봇파더 선택
>2. 봇 파더를 시작하고, /newbot을 눌러 새로운 봇을 만든다.
>3. 새로운 이름을 입력하고, username을 끝에 '_bot' 을 추가해 만든다.
>4. API 키를 복사해 놓는다. : 파이썬에서 이 API로 접근해 메시지를 전달한다.
2. API 토큰값으로 bot의 새로운 메시지 있는지 확인하고 ID 알아내기
# 텔레그램에서 봇을 만든 뒤 API token을 받는다.
# 그 토큰을 사용하여 bot의 ID를 알아내는 코드
import telegram
# 봇을 만들어서 알게 된 API
token = '53790***00:AAEtOhN****Hs0SJDGqUs-tiphFavpL1ptI'
bot = telegram.Bot(token=token)
# 새로운 내용이 있는지 확인하는 것 같음
updates = bot.getUpdates()
# 새로운 내용을 출력하는데, 이때 ID값도 같이 나옴
for u in updates:
print(u.message)
결과
- 텔레그램에서 새로생긴 봇 창에 '?'를 입력한 뒤 파이썬을 실행시키면 다음과 같이 업데이트 된 나온다.
- 여기서 id를 찾아 사용하게 된다. (5876**31)
{'new_chat_photo': [], 'message_id': 39, 'text': '?', 'date': 1650229813,
'new_chat_members': [], 'channel_chat_created': False, 'caption_entities': [],
'delete_chat_photo': False, 'group_chat_created': False,
'chat': {'last_name': '***', 'username': 'NaraDora', 'type': 'private', 'id': 5876**31,
'first_name': '****'}, 'entities': [], 'supergroup_chat_created': False,
'photo': [], 'from': {'language_code': 'ko', 'last_name': '***', 'is_bot': False,
'id': 5876**31, 'username': 'NaraDora', 'first_name': '****'}}
3. 텔레그램에 자동으로 메시지 보내기
import telegram
token = '내 봇의 API 토큰정도'
id = '5876**31'
bot = telegram.Bot(token)
bot.sendMessage(chat_id=id, text = '파이썬에서 온 메시지')
결과
쉽게 잘 간다.
4. 자동응답 하기
import telegram
from telegram.ext import Updater
from telegram.ext import MessageHandler, Filters
token = '내 봇의 API token 정보'
id = '내 봇의 ID'
bot = telegram.Bot(token)
bot.sendMessage(chat_id=id, text = '자동으로 응답해줍니다. "안녕" 또는 "뭐해"를 입력해 보세요.')
# 업데이트 된 정보 가져오기(새로운 채팅)
updater = Updater(token=token, use_context= True)
dispatcher = updater.dispatcher
# 계속해서 업데이트 됐는지 확인하는 듯.
updater.start_polling()
# 업데이트 내용 중 텍스트를 확인함
def handler(update, context):
user_text = update.message.text
if user_text == "안녕":
bot.send_message(chat_id = id, text = '어~ 안녕~ ㅎㅎㅎ')
elif user_text == "뭐해":
bot.send_message(chat_id = id, text = '파이썬 공부중이야~')
else:
bot.send_message(chat_id = id, text = '무슨 말인지 모르겠어~')
# 업데이트 됐을 때 자동응답하는 함수로 연결(핸들러 설정)
echo_handler = MessageHandler(Filters.text, handler)
dispatcher.add_handler(echo_handler)
결과
- 신기하네~
- 정확한 텍스트만 인식 "안녕?"은 모르는 텍스트로 인식
자동응답 기능이 신기하네
그리고 무엇보다 쉽게 되고...
특정 텍스트가 포함되어 있는지 확인해서 있으면 알려주면 어떨까?
if "안녕" in user_text:
bot.send_message(chat_id = id, text = '어~ 안녕~ ㅎㅎㅎ')
결과
- 잘 된다.
- "안녕" in user_text 라는 구문은 그냥 이렇게 하면 될까? 해서 해본건데 된다.
- 쉽다. 파이썬... 근데 애매하다.
반응형
최근댓글