

나만의 서버 정보 알람 봇을 만들어보자
아무래도 코인을 하고, 여러가지 Airdrop 이라던가 프로젝트를 참여 하다보면 서버를 사서 쓰게 됩니다.
그럴때, 서버의 트래픽에 따라 지불 가격이 이리저리 움직이는 상황이 올 때가 있답니다.
이러한 상황을 미리 대비하기 위해 만들었던, 트래픽이 얼마나 나오는지
매일
마다 메시지를 자동으로 보내주는 토이프로젝트 입니다.
토이프로젝트 만드는건 참 재미있는것 같아요.
학교 과제랑 다르게 본인에게 쓸모있는 물건을 만드는 느낌이라, 왠지 어릴때 레고 놀이를 하던 느낌?
GitHub에 사용설명서를 작성할 때 마다 가장 고민되는 것
어떻게 설명해야 이 프로그램을 처음보는, 컴퓨터를 어려워 하는 사람에게 한번에 사용할 수 있게 알려줄 수 있을까?
라는 것을, 항상 고민하고 있습니다.
매번 토이 프로젝트를 작성할때마다 설명서와 같은 경우에는 점점 발전하는 형태를 보인다고 생각하고 있지만...실제 사용할때는 항상 의문점이 드니까요.
오랜만에 코인을 위해서 가상머신을 사용해 Validator 등의 행위를 참여하고 있어, Testnet 이기 때문에 혹시라도 트래픽이 미친듯이 나올까봐 (요금이 엄청나게 나올까봐)
봇을 개인적으로 사용하고 있는 Oracle Cloud에 올렸습니다.
그런데, 저도 오랜만에 보는 코드라서 그런가 초반 설정에서 잘못된 점을 파악하기 어려웠던거같아요.
이런 경험이 있었기 때문에, 설명을 해보겠습니다.
{
"telegram": {
"token": "<YOUR BOT TOKEN>",
"chatID": "<YOUR CHAT ID>"
},
"hetzner": {
"token": "<YOUR HETZNER CLOUD API TOKEN>"
}
}
먼저 텔레그램 봇 토큰을 받아야 합니다.
그 다음에는 Hetzner 클라우드의 API 토큰을 발급받아야 합니다.


발급받은 API 키 입니다. 어짜피 수정할 일이 없으니, 안전을 위해 Read-Only로 발급받으면 좋겠죠?
def main():
#Initialize HetznerTrafficAlertBot class
hetznerTraffic = HetznerTrafficAlertBot()
#Set Schedule. You can adjust.
#Schedule LINK: schedule.readthedocs.io/en/stable/examples.html
schedule.every().day.at("09:00").do(hetznerTraffic.SendAlerts) # AM 9:00 Send lert everyday.
schedule.every().day.at("21:00").do(hetznerTraffic.SendAlerts) # PM 9:99 Send alert everyday.
#Runnig Bot
while True:
schedule.run_pending()
time.sleep(1)
프로그램이 구동될 메인 코드입니다.
Class로 쪼개놨기 때문에, 어짜피 작업은 Class 내부에서 돌아갈 예정이고, schedule을 사용해서 매일
에 알람이 오게 설정해두었습니다.
이 schedule 코드를 수정하면 매 시간마다, 혹은 매 분, 매 초 단위로 알람을 보내줄 수도 있겠죠?
핵심 기능은 Class에 들어있습니다.
def __init__(self):
#Open Json file
with open("keys.json") as f:
keys_data = json.load(f)
#Initialize Hetzner Traffic Alert Bot Class
self.bot = telegram.Bot(token=keys_data["telegram"]["token"])
self.chatID = keys_data["telegram"]["chatID"]
#Send Telegram Message "Starting Bot"
print("Starting Bot")
self.bot.sendMessage(chat_id=self.chatID, text="Starting Bot...")
#Initialize client object
self.client = Client(token=keys_data["hetzner"]["token"])
#Get List of BoundServer
self.boundServer = self.client.servers.get_all()
#Get First server from Bound Server List
#If you have a lot of server from project, use list to get server.
self.server = self.boundServer[0] # Get first server from list
Class Initialize 작업을 진행하는 부분입니다.
이 코드에서는 서버 1개를 기준으로 잡고있기 때문에,
만약, 서버가 여러개 이고 모든 서버의 트래픽 값을 받고싶다면,
Personal 폴더의 bot.py 코드를 참조할 수 있습니다.
client_1 = Client(token=keys_data["hetzner"]["서버1_token"])
client_2 = Client(token=keys_data["hetzner"]["서버2_token"])
client_3 = Client(token=keys_data["hetzner"]["서버3_token"])
이런식으로 클라이언트를 여러개 만들어서 호출하면 됩니다.
이렇게 client의 갯수를 설정하고 keys.json 파일을 올바르게 구성하게 되면, 나머지는 자동으로 동작합니다!
확실히 설명하는 재주는 그리 좋진 않은것같네요...
아니면 오랜만에 보는 코드라서 기억이 잘 안나는것인지 잘 모르겠지만......
간단히 만들어본 토이프로젝트, 트래픽 봇 입니다.
역시 여기서 배운점은
정도가 될 것 같아요.
카카오 봇 서비스는 안써봤지만 아마 비슷하지 않을까요?
Telegram 봇 서비스는 간편해서 여러가지 프로그램을 만들어서 사용하고 있습니다.
제일 편리하게 사용했던건 일론 머스크의 API 유료화 때문에 사용하지 못하게 되었지만...
다음 글에는 나머지 Telegram 봇에 대한 소개글을 써볼게요!
Paddie 개발 일기도 포함입니다!