앞서 작성한 출장자 명단을 텔레그램으로 보내기 는 혼자쓰기는 문제 없으나, 다른 사람과 공유하려면, chat ID를 일일이 등록해야 한다. 자동으로 반응 하게도 할 수 있을 듯 싶은데, 더 이상 알아 보진 않았다.


우연히 bothub.studio를 클리앙 - 텔레그램 봇 만들기 - 에서 접하고, 이것을 이용해 보기로 했다.

추후 bothub.studio 사용에 대한 글도 작성해 보려 한다.


참고로 bothub는 월 5천개 메세지 발송이 무료. 

때문에, 메세지 발송 횟수를 줄일 필요가 있었다. 

기존의 것은 출장자 1명씩 말풍선 하나로 나눠 메세지를 보내줬다.

출장자가 월 50명이면, 50개의 메세지가 보내주기 때문에, 이것을 한번에 묶어서 보내는 것으로 수정 하였다.

아래 56~60행 부분이 이것을 수정한 부분 이다. 


1. space와 tap 혼용으로 에러가 많았다. space 4칸 습관 들이는 중.


2. 함수 정의와 호출에서 헤맸다.


3. 31 행 -message.add_keyboard_button('출장자명단') - 이것으로 '출장자명단' 버튼 생성. 누르면 '출장자명단' 을 send.


4. 휴가자 명단도 만들 생각이였는데, 인원이 너무 많아 list 출력은 의미 없어 보여 보류.




아래는 말풍선 구분에 따른 차이. 개인적으로 말풍선 1개에 1명이 보기 좋은데...




# -*- coding: utf-8 -*-

from __future__ import (absolute_import, division, print_function, unicode_literals) 

from bothub_client.bot import BaseBot
from bothub_client.decorators import channel, command
from bothub_client.messages import Message
import requests
from bs4 import BeautifulSoup

class Bot(BaseBot):
    """Represent a Bot logic which interacts with a user.

    BaseBot superclass have methods belows:

    * Send message
    * self.send_message(message, chat_id=None, channel=None)
    * Data Storage
    * self.set_project_data(data)
    * self.get_project_data()
    * self.set_user_data(data, user_id=None, channel=None)
    * self.get_user_data(user_id=None, channel=None)

    When you omit user_id and channel argument, it regarded as a user
    who triggered a bot.
    """

    @command('start')
    def start_handler(self, event, context, content):
        message = Message(event).set_text('챗봇을 시작합니다.')
        message.add_keyboard_button('출장자명단')
        self.send_message(message)

    @channel()
    def default_handler(self, event, context):
        message = event.get('content')
        if message == '출장자명단':
            self.business_trip()
        else:
            self.vacation()

    def business_trip(self):
        self.send_message('출장자 명단입니다.')
        url_login = "http://~~~~"
        url_business = "http://~~~~"
        login_info = {
            "id": "~~~~",
            "password": "~~~~",
        }
        with requests.Session() as s:
            login_req = s.post(url_login, data=login_info)
            business = s.get(url_business)
            html = business.text
            soup = BeautifulSoup(html, "html.parser")
            tbody = soup.find("tbody")
            self.send_message(tbody.text)  #출장자명단 전부를 한번에 출력
			#tr = tbody.find_all("tr")     
            #for t in tr:                  #출장자명단 1명씩 말풍선으로 각각 출력  
            #    content = t.text
            #    self.send_message(content)

    def vacation(self):
        self.send_message('휴가자명단은 복구중입니다.')


+ Recent posts