Notice
Recent Posts
Recent Comments
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

아직도 텔레그램 안쓰니?

텔레그램 봇 API 소개 (ChatGPT 번역) 본문

python-telegram-bot

텔레그램 봇 API 소개 (ChatGPT 번역)

텔레그램사랑 2024. 1. 6. 20:26

https://github.com/python-telegram-bot/python-telegram-bot/wiki/Introduction-to-the-API

순수한 텔레그램 봇 API

봇 API는 telegram.Bot 클래스를 통해 노출됩니다. 이 메서드들은 공식 텔레그램 봇 API에서 설명된 메서드들의 snake_case 버전입니다. 텔레그램 문서에서와 같은 정확한 camelCase 메서드 이름도 편의를 위해 사용할 수 있습니다. 예를 들어, telegram.Bot.send_message는 telegram.Bot.sendMessage와 동일합니다. 봇 API의 모든 클래스는 telegram 모듈에서도 찾을 수 있으며, 예를 들어 Message 클래스는 telegram.Message로 사용할 수 있습니다.

액세스 토큰을 생성하려면 BotFather와 몇 가지 간단한 단계를 따라야 합니다(여기에 설명되어 있음).

자세한 내용은 개발자를 위한 공식 텔레그램 문서인 Bots: An introduction for developers에서 확인할 수 있습니다. 또한 텔레그램 API 작업 원리를 알아보기 위한 공식 자습서도 유용할 수 있습니다(해당 자습서에서는 Java를 사용하지만 Python 코드에 대한 링크를 찾을 수 있습니다).

안녕하세요, 텔레그램!

API를 사용하고 python-telegram-bot과 어떻게 사용하는지 알아보기 위해 새로운 Python 파일을 만들어보세요.

먼저 telegram.Bot의 인스턴스를 생성하고 자격 증명이 올바른지 확인하려고 합니다. 다음 코드를 파일에 붙여넣어주세요. 'TOKEN'은 @BotFather로부터 받은 API 토큰으로 대체해야 합니다.

import asyncio
import telegram


async def main():
    bot = telegram.Bot("TOKEN")
    async with bot:
        print(await bot.get_me())


if __name__ == '__main__':
    asyncio.run(main())

여기에서는 API 메서드 getMe를 호출하기만 합니다. 'async with bot:'는 PTB가 리소스를 올바르게 얻고 해제할 수 있도록합니다. 파일을 실행하면 다음과 유사한 출력을 얻어야합니다.

$ python main.py
User(first_name="Toledo's Palace Bot", is_bot=True, username="ToledosPalaceBot", ...)

지금까지는 잘 진행되었습니다. 이제 실제로 어떤 작업을 수행해 볼 수 있습니다. 메시지를 보내보겠습니다.

중요한 점

봇은 사용자와 대화를 시작할 수 없습니다. 사용자는 봇을 그룹에 추가하거나 먼저 봇에게 메시지를 보내야 합니다. 사람들은 t.me/<봇_사용자_이름> 링크 또는 사용자 이름 검색을 사용하여 봇을 찾을 수 있습니다.

 

 

그 제한 때문에, 먼저 봇에게 메시지를 보내야 합니다. 그렇게 한 후에는 파일의 main 함수를 다음과 같이 리팩토링하여 업데이트를 가져올 수 있습니다.

async def main():
    bot = telegram.Bot("TOKEN")
    async with bot:
        updates = (await bot.get_updates())[0]
        print(updates)

이제 출력은 다음과 같이 보일 것입니다 (출력을 약간 줄였습니다).

$ python main.py
Update(message=Message(chat=Chat(first_name='John', id=1234567890, last_name='Doe', ...), from_user=User(first_name='John', id=1234567890, last_name='Doe', ...), text='Hi!', ...), update_id=219017225)

채팅 ID를 복사하고, 여기서는 1234567890입니다. 업데이트[0].message.from_user.id와 같이 엑세스할 수도 있습니다. 이렇게 하면 업데이트[0]가 Update 클래스의 인스턴스이기 때문입니다. 이제 채팅 ID가 있으므로 main()을 다시 조정하여 메시지를 보낼 수 있습니다.

async def main():
    bot = telegram.Bot("TOKEN")
    async with bot:
        await bot.send_message(text='Hi John!', chat_id=1234567890)

이제 봇을 사용하여 메시지를 보낼 수 있게 되었습니다.

순수한 API를 넘어서

이 모든 것은 좋지만, 일반적으로 봇이 더 복잡한 사용자 입력에 실제로 반응하길 원합니다. 즉, 챗봇을 구축하길 원합니다. python-telegram-bot은 작업을 크게 간소화해주는 강력한 확장 모듈인 telegram.ext를 제공합니다. 이 모듈에 대한 소개는 "튜토리얼: 첫 번째 봇"에서 찾을 수 있습니다.