무엇을 할까?
작업
- 우선 기존 입력 시간에 맞춰 동작하는 코드를 사용자가 입력했을 때, 동작하도록 수정해야 한다.
python의 telegram-bot 모듈 사용법 홈페이지의 내용을 기반으로 작성하였음.
- 다음으로 해당 명령에서 뒤에 날짜를 입력하면 입력한 내용을 기반으로 해당 날짜의 IMAX 정보를 출력하도록 하자.
- 사용자가 start 명령어를 작성하고 띄어쓰기 후 쓴 내용들은 파라미터로 넘어오게 된다.
- 사용자 입력으로 넘어온 데이터를 확인하는 코드
def check_args(context) :
text_caps = context.args
if len(text_caps) > 0 :
if re.match(r'^([\s\d]+){8}$', text_caps[0]) and check_is_valid_date(text_caps[0]) :
return text_caps[0]
else :
return ''
else :
return ''
def check_is_valid_date(text) :
try :
datetime_format = "%Y%m%d"
datetime_result = datetime.datetime.strptime(text, datetime_format)
max_datetime = datetime.datetime.now() + datetime.timedelta(days=22)
if datetime_result > max_datetime or datetime_result < datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) :
return False
return True
except ValueError as e :
return False
- check_args : 사용자의 입력에 대한 유효성 검사를 진행하고 해당 내용에 대해 결과 값을 반환
(정규식을 통해 입력된 문자가 8자리수의 숫자로만 구성되어있는지 확인하기)
- check_is_valid_date : check_args에서 호출하는 메서드로 날짜 포맷이 맞는지 여부를 검사한다.
- 주의점으로 기존 asyncio.run을 통해 실행하던 내용들은 동일한 스레드에서 다른 asyncio 이벤트 루프가 실행중인 경우 해당 함수를 호출할 수 없기에 바로 호출하는 방식으로 사용.
- 전체코드는 깃허브에 올라가 있으니 보시면 됩니다.