개발을 하다 보면 정작 중요한 것보다 그전에 개발하여야 할 여러 가지 필수적인 사항들이 나옵니다.
오늘은 이런 주변 사항들에 대하여 개발한 내용을 정리합니다.
일전에도 언급하였듯이 개발한 프로그램이 완벽할 수가 없습니다. 그래서 예상하지 못한 상황이 생기면 죽게 됩니다. 그럼 그 프로그램을 다시 돌리는 프로그램을 개발하면 됩니다. 이건 이전 글에서 언급을 하였고요[1].
프로그램이 다시 동작하게 되면 이전의 상태를 기억하고 있어야 하는 경우가 있습니다. 이른바 구성 정보들은 변경이 생기면 상시 저장을 하고, 프로그램이 처음 기동되었을 때 이 값들을 읽어들여 이전 동작 상태에서 시작을 해야 합니다. 이전 글에서는 저장하고 읽는 방법에 대해서만 언급을 하였는데, 이번에는 좀 더 자세하게 기술합니다.
파일에 저장할 때 json 형태로 저장하면 향후에 읽을 때 편합니다. OrderedDict라는 패키지가 이런 것을 쉽게 처리하게 해 주더군요. 기존에 사용하던 토큰list에 이름을 추가하는 개념입니다. 사용법은 아래와 같습니다.
from collections import OrderedDict
config_data = OrderedDict()
config_data["interest_symbols"] = ['SCT', 'SCTM', 'DEC', 'SPT']
#load
config_data = load_json_from_file(TELEBOT_CONFIG)
# save
save_to_file_json(TELEBOT_CONFIG, config_data)
그리고 파일에는 이런 형식으로 저장이 되어 있습니다.
명령어 체계도 중요합니다. 혼란스럽지 않으면서도 입력을 최소로 할 수 있는 방법이 필요합니다. 일단 명령어는 최대한 짧게 한 글자로 정의합니다. 그리고 대소문자 구분없이 모두 가능하도록 하였고요. steem-engine에서는 토큰 명을을 꼭 대문자로 입력을 해야하는데, 이런 것이 은근히 불편합니다.
사용 중에 명령어 양식을 잃어버릴 수 있으니, 명령어를 확인해 볼 수 있는 help도 추가합니다.
우선 p를 입력하면 현재 등록된 토큰들의 현재가를 보여줍니다.
토큰 명을 입력하면 특정 토큰의 현재 4 호가 정보를 보여줍니다. 공간이 제한적이어서 수량에서 소숫점 이하는 과감하게 생략을 했습니다. 여백이 많아져서 한결 보기가 편합니다.
토큰을 추가하고 삭제하는 명령어가 입력이 되면 토큰 리스트에서 해당 토큰을 추가(append) 혹은 삭제(remove) 합니다. 그 후 이 데이터를 파일에 기록해 놓습니다. 만약 지우고 하자 하는 토큰이 리스트에 없으면 오류 메세지를 돌려줍니다.
ans = "adding : "
save = 1
if ( symbol[0] == 'D' ) :
ans = "removing : "
if (token in config_data["interest_symbols"]) :
config_data["interest_symbols"].remove(token)
print("delete token", token, config_data["interest_symbols"])
else :
save = 0
ans = "removing fail(not exist): "
print("delete token not exist", token)
else :
config_data["interest_symbols"].append(token)
print("add token", token, config_data["interest_symbols"])
if (save) :
save_to_file_json(TELEBOT_CONFIG, config_data)
ans += token
bot.sendMessage(chat_id = update.message.chat_id, text=ans)
프로그램을 종료했다가 다시 돌려도 토큰 리스트가 최신 상태로 시작을 합니다.
만약 혼자만 쓰는 봇을 만든다면 간단하게 만들 수 있겠지만 여러 명이 함께 사용하는 봇을 만든다면 사용자별로 다른 토큰 리스트를 가질 수 있으므로, 이런 부분도 보강을 해야 합니다.
이제 주문을 낼 수 있는 준비 과정은 모두 마친 것 같습니다. 다음 편에서는 실제 주문을 내는 방법과 주의 사항에 대하여 기술할 예정입니다.