반응형

@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 라는 구문은 그냥 이렇게 하면 될까? 해서 해본건데 된다.

- 쉽다. 파이썬... 근데 애매하다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기