[AD]Travala 암호화폐로 유명호텔 싸게 예약하자

굳헬로의 스팀 프로그램 일기!! 여덟번째 #8 텔레그램 봇을 이용해 알림을 받아보자!! && 무한 반복 자동 클레임의 정보를 텔레그램으로 받아보기!!

in sct •  7 months ago 

steem.jpg

안녕하세요. 굳헬로 @goodhello 입니다.

장마가 끝난줄 알았더니... 또 며칠동안 장마비가 내린다고 하는군요.

비가 내리면서 조금 시원해지면 좋으련만 너무 후덥지근한게... 밖에 나가기가 두렵습니다.

그럼 오늘도 힘내서 프로그램 일기를 남겨보겠습니다.


어제는 무한 반복 작업을 수행하면서 스팀엔진에 클레임 할 수 있는 토큰이 생기면 자동으로 클레임 하는 코드를 작성해 보았는데요.

이게 클레임은 자동으로 되어 편리한 점도 있지만, 직접 터미널 창을 확인 하지 않으면 언제 얼마나 클레임이 되었는지 알수 없으니 심심한 감이 많습니다.

그래서 이번에는 자동으로 클레임 될때 그 결과를 텔레그램으로 알림 받을 수 있도록 텔레그램 봇을 연구해 보도록 하겠습니다.

먼저 텔레그램 봇을 이용하려면 기본적인 셋팅이 필요한데요.

제일 처음으로 할 일은 텔레그램 봇 아이디를 발급 받는 일입니다.

텔레그램을 실행하고 검색창에 botfather을 입력하여 botfather을 해보겠습니다.

그러면 botfather이 몇개가 보일텐데요... 그 중에서 남자(father??) 프로필이 있는 계정을 누르시고 START를 눌러줍니다.

BotFather, [24.07.19 10:40]
I can help you create and manage Telegram bots. If you're new to the Bot API, please see the manual (https://core.telegram.org/bots).

You can control me by sending these commands:

/newbot - create a new bot
/mybots - edit your bots [beta]

Edit Bots
/setname - change a bot's name
/setdescription - change bot description
/setabouttext - change bot about info
/setuserpic - change bot profile photo
/setcommands - change the list of commands
/deletebot - delete a bot

Bot Settings
/token - generate authorization token
/revoke - revoke bot access token
/setinline - toggle inline mode (https://core.telegram.org/bots/inline)
/setinlinegeo - toggle inline location requests (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - change inline feedback (https://core.telegram.org/bots/inline#collecting-feedback) settings
/setjoingroups - can your bot be added to groups?
/setprivacy - toggle privacy mode (https://core.telegram.org/bots#privacy-mode) in groups

Games
/mygames - edit your games (https://core.telegram.org/bots/games) [beta]
/newgame - create a new game (https://core.telegram.org/bots/games)
/listgames - get a list of your games
/editgame - edit a game
/deletegame - delete an existing game

그러면 위와 같이 텔레그램 봇을 이용하기 위한 안내문과 다양한 명령어들이 출력됩니다.

텔레그램 봇을 만들기 위해 먼저 /newbot 을 입력해 보겠습니다.

혹은 위에서 출력된 명령어들중 /newbot 을 찾아서 클릭을 하셔도 되겠습니다.

새로운 봇이 생성되었다면서 이를 이용하려면 이름을 지어줘야 한다고 합니다.

이름을 hihello라고 해보려고 했는데... 봇이라는걸 명시하기 위해서인지 일므의 마지막은 bot로 끝나야 한다고 하네요.

그래서 `goodhello_bot'으로 해보려고 했지만... 이미 다른 사람이 만들었다고 다른걸로 만들라고 하네요. ㅠㅠ

그래서 저는 goodhihello_bot으로 만드는데 성공하였네요.

봇을 사용하기 위해 발급되는 token은 다른 사람이 제가 만든 봇을 컨트롤 하지 못하도록 안전하게 보관하라고 합니다.

다음으로 할일은 방금 만든 봇을 검색하여 /start 해주시면 이제 텔레그램 봇이 동작하기 시작합니다.

이제 이 봇을 파이썬으로 연동시켜 보겠습니다.

파이썬에서 텔레그램 봇을 다루려면 파이썬 텔레그램 패키지가 필요합니다.

pip install python-telegram-bot --upgrade 라고 커맨드 창에 입력해 주시면

자동으로 파이썬 텔레그램 패키지가 설치가 된답니다.

혹시 오류가 나시는 분이 계시면 문의주시기 바랍니다.

여기까지 작업이 완료되었다면 이제 파이썬으로 봇을 사용해 보도록 하겠습니다.

import telegram   

my_token = '텔레그램 봇 토큰'
bot = telegram.Bot(token = my_token)

updates = bot.getUpdates()
for u in updates :   
    print(u.message)

위의 코드를 작성하시고 my_token 에는 위에서 발급받은 텔레그램 봇의 토큰을 넣어주시면 됩니다.

bot = telegram.Bot(token = my_token) 내 토큰으로 텔레그램 봇을 만들고 u.message를 통해 메시지를 출력하는 예제입니다.

그런데 그냥 실행 시키면 아무것도 출력되지 않을것입니다.

먼저 텔레그램을 켜고 방금 만든 봇에게 뭔가 말을 걸어 보시기 바랍니다.

hihello 라고 메시지를 입력해 보았습니다.

그리고 위의 코드를 작동 시키면

방금 제가 제 봇에게 보낸 메시지 정보를 가지고 옵니다. 일부 개인정보가 들어있어서 그 부분은 가렸습니다.

누가 언제 어떤 메시지를 봇에게 보냈는지 그 정보를 잘 가지고 오는군요.

이제 파이썬을 이용하여 텔레그램으로 메시지를 보내보도록 하겠습니다.

메시지를 보내려면 받는 사람의 chat_id를 알아야 합니다.

방금 만든 봇에게 메시지를 보내려면 봇의 chat_id를 이용하면 되겠죠.

방금전 예제를 실행한 결과를 보시면

chat를 찾을수 있는데, 여기 id 다음에 출력되는 값이 chat_id 입니다.

이제 봇의 chat_id를 알았으니 메시지를 보내보도록 하겠습니다.

import telegram   

my_token = '텔레그램 봇 토큰'
bot = telegram.Bot(token = my_token)
chat_id = '봇의 chat_id'

bot.sendMessage(chat_id = chat_id, text="봇에게 보내는 메시지!!")

코드를 실행하면 봇에게 메시지를 보내게 됩니다.

텔레그램을 확인해 보니 메시지가 잘 도착하였네요.

이제 텔레그램 봇과 성공적으로 메시지를 주고 받는걸 마쳤으니, 실전에 들어가 보도록 하겠습니다.

어제 작성했던 무한 반복 자동 클레임 하는 소스를 수정하여 클레임이 진행될때마다 텔레그램으로 메시지를 받을 수 있도록 해보겠습니다.

def run():
    while True:
        print(time.strftime('%Y-%m-%d %HH:%MM:%SS', time.localtime(time.time())))
        scot_claim_token()
        print("무한 반복 작업중...")
        time.sleep(60)

1분마다 클레임 할 토큰이 있는지 검사하여 클레임 할 토큰이 있으면 클레임을 진행하는 작업을 계속 반복하는 코드였습니다.

stm.custom_json("scot_claim_token", json_data, required_posting_auths=[username])
print("%s has been claimed" % (json_data[0]['symbol']))     

클레임을 진행하는 코드 이곳에 텔레그램으로 클레임을 했다는 알림을 보내는 코드를 넣으면 될 것 같네요.

import time
from beem import Steem
from beem.nodelist import NodeList
import json
import requests
import telegram

def scot_claim_token():    

    my_token = '텔레그램 봇 토큰'
    bot = telegram.Bot(token = my_token)
    chat_id = '봇의 chat_id'
    pending_token = ""

    username = "goodhello"

    url = "http://scot-api.steem-engine.com/@" + username
    r = requests.get(url)
    result = r.json()    
    
    json_data = []
    for token in result:
        scot = result[token]
        if int(scot["pending_token"]) > 0:
            json_data.append({"symbol": token})
            pending_token = str(scot["pending_token"])
            print("%s can be claimed " % (token), pending_token)
            break
    
    if len(json_data) > 0:
        nodes = NodeList()
        nodes.update_nodes()
        stm = Steem(nodes.get_nodes())    
        pwd = "포스팅 키"
        
        try:
            stm.unlock(pwd)
        except:
            stm = Steem(node=nodes.get_nodes(), keys=[pwd])        
        stm.custom_json("scot_claim_token", json_data, required_posting_auths=[username])
        print("%s has been claimed" % (json_data[0]['symbol']), pending_token)
        bot.sendMessage(chat_id = chat_id, text = json_data[0]['symbol'] + " 토큰이 " + pending_token + "개 클레임되었습니다.")        

    else:
        print("Nothing to claim")


def run():
    while True:
        print(time.strftime('%Y-%m-%d %HH:%MM:%SS', time.localtime(time.time())))
        scot_claim_token()
        print("무한 반복 작업중...")
        time.sleep(60)

if __name__ == '__main__':
    run()

자 드디어 어제 소스에 토큰 클레임을 하게되면 텔레그램으로 알림을 받을 수 있는 코드를 완성했습니다.

오늘 공부했던 텔레그램 봇으로 메시지를 보내는 코드를 삽입하고

bot.sendMessage(chat_id = chat_id, text = json_data[0]['symbol'] + " 토큰이 " + pending_token + "개 클레임되었습니다.")        

클레임되는 토큰과 수량을 텔레그램으로 보내는 코드를 추가하였습니다.

마침 스팀엔진에 클레임을 기다리는 토큰이 보이는군요.

프로그램을 실행하면 클레임 가능한 SCT 토큰을 발견하고 1756개를 클레임 하였네요.

그리고 텔레그램으로 SCT 토큰이 1756개 클레임되었다고 메시지가 잘 도착하였습니다.

참... SCT 토큰이 1756개는 아니고 소수점 3째자리에서 1로 출력되는거라.. 실제로는 1.756개를 클레임 한 것입니다.

이 부분은 토큰별로 설정이 다르다 보니, 다음 시간에 정확한 수치로 나올 수 있게 수정을 해야겠네요.

그나저나 하필 지금 이시간에 SCOT 이 또 아픈가 보네요.

https://steemd.com/@goodhello

steemd 사이트를 살펴보면 토큰 클레임 custom_json은 성공적으로 전송이 되었지만 실행은 안되고 있습니다. ㅠㅠ

일단 동작이 잘 되는걸 확인했으니, 계속 돌려보면서 다음 결과를 기다려 보겠습니다.

다행히도 SCOT 봇이 살아나고 있나 봅니다.

무사히 클레임이 잘 되었네요.

이제 이 프로그램 가동시켜 놓으면 토큰이 생길때마다 자동으로 클레임 되고, 그 내역을 텔레그램 봇을 통해 받아보실 수 있게 됩니다.


어느덧 프로그램 일기 8일차 텔레그램 봇을 이용하여 스팀엔진 토큰을 자동으로 클레임하고 그 내용을 텔레그램을 통해 받는것까지 작업이 끝이 났네요.

이제 다음 시간에는 파이썬과 스팀엔진 api를 이용해 토큰을 전송하고 그 내역을 텔레그램으로 받는 것을 시도해보려고 합니다.

쉽지 않을거라는 생각이 들지만, 하나씩 하나씩 해결해 나가다 보면 충분히 할 수 있을거라 생각합니다.

그럼 여러분들 목요일 오후도 잘 보내시구요.

언제나 파이팅입니다!!


굳헬로의 스팀 프로그램 일기!! 시리즈

#1 굳헬로의 스팀 프로그램 일기!! 대망의 시작 #1 Python 프로그램 설치 && steemengine 파이썬 api 설치 && 간단한 steemengine 예제

#2 굳헬로의 스팀 프로그램 일기!! 그 두번째 #2 비주얼 스튜디오 코드 프로그램 설치 && 비주얼 스튜디오 코드를 사용하여 파이썬 다루기 && 간단한 steemengine 예제

#3 굳헬로의 스팀 프로그램 일기!! 세번째 #3 스팀엔진 토큰의 정보를 가져오는 findOne() && 누군가의 토큰 사용 내역을 가져오는 get_history() && JSON 데이터 출력

#4 굳헬로의 스팀 프로그램 일기!! 네번째 #4 steemengine Token 클래스 && Token.get_holder() && Token.get_market_info() && Token.get_buy_book() && Token.get_sell_book()

#5 굳헬로의 스팀 프로그램 일기!! 다섯번째 #5 스팀엔진 블록을 뒤져서 원하는 정보를 찾아보자!! 스팀엔진 마켓 거래 내역을 뽑아내는 예제

#6 굳헬로의 스팀 프로그램 일기!! 여섯번째 #6 파이썬으로 스팀엔진 토큰들을 클레임 해보자.

#7 굳헬로의 스팀 프로그램 일기!! 일곱번째 #7 프로그램 일기도 어느덧 1주일!! 드디어 첫 실전!! 무한 반복 작업 수행하기!! 이제 직접 클레임 하는 손맛은 잊자. 무한 반복 자동 클레임!!

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

stylegold님이 goodhello님을 멘션하셨습니당. 아래 링크를 누르시면 연결되용~ ^^
stylegold님의 스팀엔진 토큰 자동 클레임 하기 (feat. holger80, goodhello 코드에 꿀빨기)

...안되서 한번더 올린글인데... 다시 뜨네요 ㅜㅜ
그래서 부랴부랴 글 하나 더 올립니다.
오늘 올라온 글에 goodhello님의 최신글의 코드를 python에 설치하고 적용해봤습니다. 아주 잘되더군요.!
근데, 문제가 하나 있었습...

요새 굿헬로님 포스팅에 푹 빠져 있습니다 ㅎㅎㅎ 감사합니다^^

와우~ 좋게 봐주시니 너무 너무 감사합니다~

앞으로도 열심히 진도 나가 보겠습니다.

조만간 스몬 봇도 만들 수 있겠네요

스몬 봇은 룰에 따른 카드 선택 만드는게 완전 노가다라....

그래도 조만간 스몬 봇 만드는 연재도 한번 해보겠습니다.

Thank you for your continued support towards JJM. For each 1000 JJM you are holding, you can get an additional 1% of upvote. 10,000JJM would give you a 11% daily voting from the 700K SP virus707 account.

나날이 발전 하시는 군요 ㅎ

ㅎㅎ 조금씩 레벨업 하고 있는 것 같습니다.

우와~ 8일 만에 이만큼이나요!! 꾸준한 막걸리의 경험과 내공이 꾸준한 코딩과 포스팅으로 연결되시나 봅니다~ 화이팅이에요~^^

아직까지는 다 쉬운 단계라 별탈없이 잘 왔네요..

앞으로가 문제인것 같습니다.

점점 어려워지네요... ㅎㅎ

헬로님 조만간 스팀잇 하나 만드시는거 아닌가요^^?

하하.. 거기까지 가려면 100년은 걸릴지도 모릅니다...

naha.sct님이 goodhello님을 멘션하셨습니당. 아래 링크를 누르시면 연결되용~ ^^
naha.sct님의 나풀나풀 나하풀 소식 190725.2001

...100
feelsogood.cur 450
fur2002ks 100
garamee21 100
goodhello 3000
hyokhyok 3000
iieeiieeii 360
influencer07 4...

union.sct님이 goodhello님을 멘션하셨습니당. 아래 링크를 누르시면 연결되용~ ^^
union.sct님의 [공지] 스판유니언 조합원 대상 9차 큐레이션 수익배분 완료 안내

...% 7 30 2차 추가 goodhello/td> 1000 1.28% 7 ...

Hi @goodhello!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 3.946 which ranks you at #4248 across all Steem accounts.
Your rank has improved 29 places in the last three days (old rank 4277).

In our last Algorithmic Curation Round, consisting of 154 contributions, your post is ranked at #72.

Evaluation of your UA score:
  • You're on the right track, try to gather more followers.
  • The readers like your work!
  • Good user engagement!

Feel free to join our @steem-ua Discord server