본문 바로가기

개발(합니다)/Python

[python] 파이썬으로 텔레그램 봇 만들기

반응형

정기적으로 특정 알림을 받고 싶을 때 봇이 알려주면 좋겠다는 생각이 들어서 텔레그램 봇을 만들었습니다.

 


1. 텔레그램에서 'BotFather'을 찾습니다.

2. '/start'를 입력하고 할 수 있는 명령어를 확인합니다.

3. '/newbot' 을 입력하고 봇의 이름을 입력합니다.

두번째 사진은 중복되는 봇의 이름이 있다고 하니 다른 이름을 입력해야 합니다.

4. 정상적으로 이름을 등록하면 아래와 같은 내용이 나옵니다.

'1234:abcd' 형태의 토큰이 발행되며 이 토큰은 아무도 알려주면 안됩니다.

5. 봇에 대한 정보를 확인하려면 '/mybots'를 입력하면 됩니다.

6. python에서 telegram을 설치합니다.

pip install python-telegram-bot --upgrade

7. 채널 생성(+공개 후 비공개)

채널을 생성할 때 공개를 해야지 ID를 확인할 수 있습니다.

공개로 채널을 만들고 ID를 확인한 후 비공개로 전환하면 됩니다.

8. 채널 정보 얻기(+ 채널 ID)

채널에 대한 정보를 얻기 위해 Postman이나 web에 아래 형태로 요청합니다.

 

 

api.telegram.org/bot{토큰}/getUpdates

 

위 정보를 얻었으면 채널을 비공개 해줍니다.

9. python에서 telegram을 설치합니다.

 

class TelegramBot:
    def __init__(self):
        token = "" # 토큰 정보
        name = "" # 봇 이름
        self.core = telegram.Bot(token)
        self.updater = Updater(token)
        self.id = "" # 개인 아이디 
        self.name = name
        self.sendMessage("엠게임 챗봇을 생성 및 시작합니다.")


    def sendMessage(self, text):
        self.core.sendMessage(chat_id=self.id, text=text)
        
    def stop(self):
        self.updater.start_polling()
        self.updater.dispatcher.stop()
        self.updater.job_queue.stop()
        self.updater.stop()
    
    def showText(self):
        updates = self.core.getUpdates()
        for m in updates:
            print(m.message)

    def addHandler(self, cmd, func):
        self.updater.dispatcher.add_handler(CommandHandler(cmd, func,))

    def start(self):
        self.updater.start_polling()
        self.updater.idle()
        
        
        
        
## 태그 받아서 실행하는 방법
def test(bot, update):
    yongBot.sendMessage("test 함수 실행")


def stop(bot, update):
    yongBot.sendMessage("엠게임 챗봇을 종료합니다.")
    yongBot.stop()

def start(bot, update):
    yongBot.sendMessage("엠게임 챗봇을 시작합니다.")
    yongBot.start()


yongBot = TelegramBot()

yongBot.showText()
yongBot.addHandler("test", test)
yongBot.addHandler("stop", stop)
yongBot.addHandler("start", start)


yongBot.start()

반응형