굳헬로의 스팀 프로그램 일기!! 아흔일곱번째 #97 파이썬 스팀몬스터 프로그램!! 자동으로 퀘스트를 받고, 자동으로 퀘스트를 변경하고, 자동으로 배틀 시작!!

in sct •  last month  (edited)


지난 시간에는 파이썬 스팀몬스터 API의 기능중에 스팀 블록체인에서 스팀몬스터 트랜젝션의 정보를 출력해 주는 get_from_block(), 스팀몬스터 배틀을 진행할때 해당 트랜젝션이 정상적으로 동작하고 있는지 여부를 체크할 수 있는 get_transaction(), 배틀 상태를 출력해 주는 get_battle_status(), 배틀 결과를 출력해 주는 get_battle_result()에 대하여 알아보았습니다.

이제 이들을 잘 이용하면 스팀몬스터 자동 게임봇을 만들수 있을겁니다.

오늘은 먼저 퀘스트를 자동으로 받는 코드를 만들어 보겠습니다.

스팀몬스터에서 퀘스트는 퀘스트를 수락 후 퀘스트를 완료하게 된 후, 퀘스트를 수락한 시간으로부터 23시간이 지나면 다시 퀘스트를 받을 수 있습니다.

get_player_quests = api.get_player_quests(user)

completed_items = get_player_quests[0]['completed_items']
name = get_player_quests[0]['name']

created_date = get_player_quests[0]['created_date']
created_date = created_date.replace('T', ' ')
created_date = datetime.strptime(created_date, '%Y-%m-%d %H:%M:%S.%fZ')                                
created_date = created_date + timedelta(hours=9)
created_date = created_date + timedelta(hours=23)

now = datetime.now()

스팀몬스터 API로부터 퀘스트 정보를 받아서 퀘스트를 수락한 시간 created_date를 한국시간으로 변경 후 23시간을 더 해 줍니다.

이제 현재시간 now와 퀘스트 수락이 가능한 시간 created_date을 비교하여 현재시간 nowcreated_date를 지나게 되면 새로운 퀘스트를 받으면 됩니다.

if created_date < now :
    sm_start_quest()

현재시간이 퀘스트를 받을수 있는 시간이 되면 sm_start_quest() 함수를 호출 해 새로운 퀘스트를 받을 수 있습니다.

def sm_start_quest():
    json = {"type":"daily","app":"steemmonsters/0.7.0"}
    ops = [
        operations.CustomJson(**{
            "from": user,
            "id": "sm_start_quest",
            "json": json,
            "required_auths": [],
            "required_posting_auths": [user],
        }),
    ]
    tb = TransactionBuilder()
    tb.appendOps(ops)
    tb.appendSigner(user, "posting")
    tb.sign()
    tb.broadcast()

sm_start_quest()에서는 아이디 값이 sm_start_questCustomJson을 생성하여 스팀 블록에 기록하여 새로운 퀘스트를 받게됩니다.

그럼 코드를 돌려보도록 하겠습니다.

현재 퀘스트 수락까지 10여분 남은 제 부계정이 있습니다.

위의 코드를 while True : 문에 넣고, time.sleep(60) 1분마다 실행되도록 만들었습니다.

현재시간이 퀘스트를 받을 수 있는 시간이 되면 sm_start_quest()를 호출 해 새로운 퀘스트를 받게 됩니다.

새로운 퀘스트로 죽음 Death덱 퀘스트를 받았네요.

퀘스트가 맘에 들지 않으면 sm_refresh_quest를 이용하여 새로운 퀘스트를 받을 수 있습니다.

get_player_quests = api.get_player_quests(user)
name = get_player_quests[0]['name']

if name == "Rising Dead" :
    sm_refresh_quest()

죽음 퀘스트Rising Dead 가 나오게 되면 새로운 퀘스트를 받을 수 있는 sm_refresh_quest() 함수를 호출합니다.

def sm_refresh_quest():
    json = {"type":"daily","app":"steemmonsters/0.7.0"}
    ops = [
        operations.CustomJson(**{
            "from": user,
            "id": "sm_refresh_quest",
            "json": json,
            "required_auths": [],
            "required_posting_auths": [user],
        }),
    ]
    tb = TransactionBuilder()
    tb.appendOps(ops)
    tb.appendSigner(user, "posting")
    tb.sign()
    tb.broadcast()

sm_refresh_quest() 함수는 sm_refresh_quest CustomJson을 생성하여 스팀 블록에 기록해서 새로운 퀘스트를 받게 해 줍니다.

새로운 퀘스트로 생명 Life 퀘스트가 나왔네요.

이제 퀘스트를 진행하기 위해 배틀을 시작해야죠!!

지난 시간에 만든 sm_find_match() 함수를 호출 하여 상대를 찾으면 되겠죠.

sm_find_match()
lastblock = s.head_block_number
startblock = lastblock - 5

while True :
    get_from_block = api.get_from_block(startblock)
    
    for transaction in get_from_block:            
        transactiontype = transaction['type']
        trx_id = transaction['id']
        block_num = transaction['block_num']

        if transactiontype == "find_match":
            get_transaction = api.get_transaction(trx_id)
            success = get_transaction['trx_info']['success']
            
            if success :
                get_battle_status = api.get_battle_status(trx_id)
                player = get_battle_status['player']
                
                if player == user :
                    status = get_battle_status['status']

                    if status == 1 :
                        룰셋과 마나캡에 따른 덱 제출

    startblock = block_num

그럼 여기까지 해서 이제 자동으로 퀘스트를 받고, 맘에 들지 않는 퀘스트면 새로운 퀘스트로 변경하고, 퀘스트를 받으면 퀘스트 수행이 시작되며 상대방을 만나 룰셋과 마나캡 정보를 가져오는 부분까지 완성되었네요.

{
    "id": "a2cafacb3e6f7a13029dffc04c1e774e6a51bb4b",
    "created_block_num": 38132263,
    "expiration_block_num": 38132323,
    "player": "playsteemmonster",
    "team_hash": null,
    "match_type": "Ranked",
    "mana_cap": 17,
    "opponent": "2981987459748aefc3b1c738413efa44c3887305",
    "match_block_num": 38132263,
    "status": 1,
    "reveal_tx": null,
    "reveal_block_id": null,
    "team": null,
    "summoner_level": null,
    "ruleset": "Earthquake",
    "inactive": "White,Black",
    "opponent_player": "cl0ve",
    "opponent_team_hash": "1d4ce87d6a2086d8d9f622db6f9393e5",
    "submit_expiration_block_num": 38132329,
    "settings": null,
    "app": null,
    "created_date": "2019-11-13T07:06:30.000Z",
    "expiration_date": "2019-11-13T07:09:30.000Z",
    "match_date": "2019-11-13T07:06:30.000Z",
    "submit_expiration_date": "2019-11-13T07:09:48.000Z"
}

get_battle_status의 정보는 위와 같으며, mana_cap ruleset inactive를 잘 분석하여 덱을 제출하면 되겠습니다.

이를 조합하면 수많은 경우의 수가 나오는데....

앞으로 열심히 덱을 짜보도록 하겠습니다.

그럼 여러분들 오늘 하루도 행복하시고, 파이팅 하시기 바랍니다.


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

#1 Python 프로그램 설치 && steemengine 파이썬 api 설치 && 간단한 steemengine 예제

#2 비주얼 스튜디오 코드 프로그램 설치 && 비주얼 스튜디오 코드를 사용하여 파이썬 다루기 && 간단한 steemengine 예제

#3 스팀엔진 토큰의 정보를 가져오는 findOne() && 누군가의 토큰 사용 내역을 가져오는 get_history() && JSON 데이터 출력

#4 steemengine Token 클래스 && Token.get_holder() && Token.get_market_info() && Token.get_buy_book() && Token.get_sell_book()

#5 스팀엔진 블록을 뒤져서 원하는 정보를 찾아보자!! 스팀엔진 마켓 거래 내역을 뽑아내는 예제

#6 파이썬으로 스팀엔진 토큰들을 클레임 해보자.

#7 드디어 첫 실전!! 무한 반복 작업 수행하기!! 이제 직접 클레임 하는 손맛은 잊자. 무한 반복 자동 클레임!!

#8 텔레그램 봇을 이용해 알림을 받아보자!! && 무한 반복 자동 클레임의 정보를 텔레그램으로 받아보기!!

#9 무한 반복 자동 클레임 업그레이드!! && 토큰 잔고 확인 && 토큰 전송과 토큰 전송 내역을 텔레그램으로 받아보기!!

#10 토큰 전송내역을 검사하고, 토큰을 전송 받으면 텔레그램으로 알림을 받아보기!!

#11 스팀엔진 토큰 임대내역 추적. 쉽지 않았던 머나먼 여정 (1/2)

#12 스팀엔진 토큰 임대내역 추적. 쉽지 않았던 머나먼 여정 (2/2) 스팀엔진 토큰 임대내역 추적 완료!!

#13 웹 프로그래밍의 시작!! 파이썬을 이용하여 정보를 MySQL 데이터 베이스에 저장해보기!!

#14 파이썬을 이용하여 데이터베이스로부터 정보를 가져오기 && 스팀코인판 3대풀 임대내역 데이터베이스 작업 완료!!

#15 웹 프로그래밍을 이용하여 스팀코인판 3대조합의 임대 내역을 웹으로 확인해보자 !!

#16 스팀엔진 최신 블록을 검사하여 필요한 정보를 데이터베이스에 저장하기!! 3대 조합의 임대내역을 최신으로 저장하기!!

#17 조합들이 필요한 기능 드디어 완성!! 자동 클레임과 자동 분배 기능!!

#18 스팀코인판 3대 조합의 임대내역과 실시간 예상 분배 금액을 웹으로 확인해보자!!

#19 어제 만든 프로그램 업그레이드!! 개별 상세내역보기 기능 추가!!

#20 시행착오... 그리고 시련... 하지만 원사마님 덕분으로 엄청난 레벨업!! 감사합니다. 더욱 발전하겠습니다.

#21 레벨업을 했지만 또 다시 찾아온 시련!! 프로그램 결과와 블록체인에 기록된 결과가 다르다!! 어떻게 해야 할까...

#22 오늘부터 새로운 도전!! 자동 보팅 만들기!! 그 첫번째 스팀코인판의 소각글에 자동보팅을 해보자!! 첫번째 시간 (1/N)

#23 스팀코인판의 소각글의 정보를 가지고 와서 자동보팅을 해보자!! 그 두번째 시간 (2/N)

#24 스팀코인판 3대조합의 임대내역을 웹으로 확인해보자!! 업그레이드!!

#25 스팀코인판 3대조합의 임대내역을 웹으로 확인해보자!! 업그레이드 2!! 그리고 개발 예정 사항 공개!!

#26 드디어 첫 실전 가동 준비중... 스팀코인판 유니온 조합의 수익 자동분배 작업 완료중...

#27 스팀코인판 유니온 조합 첫 자동 분배 결과!! 그리고 보완!!

#28 스팀코인판 유니온 조합 자동 분배 프로그램의 결과를 웹으로 확인해 보자!!

#29 스팀코인판 유니온 조합 자동 분배 상황을 텔레그램으로 확인!! 임내 확인 페이지 정렬 기능 추가!!

#30 스팀코인판 조합의 임대량 페이지 정렬 기능 업그레이드!! 그리고 임대량 파이 차트 완성!!

#31 스팀코인판 조합의 하루하루 임대량 변화를 차트로 확인해보자!!

#32 트리플A를 이용하면서 그동안 번거로웠던 클레임 스테이킹 전송 작업 이젠 안녕!! 자동으로 AAA를 전송하고 클레임하고 스테이킹을 해보자!!

#33 굳헬로가 만든 스팀코인판 조합 자동 클레임과 자동 분배 프로그램 원피스 조합에도 사용 개시!!

#34 스팀코인판 조합 원피스 자동 클레임과 자동 분배 프로그램 업그레이드!! 텔레그램 봇으로 그룹 메시지를 받아보자!!

#35 스팀에서 새글 정보를 텔레그램으로 받아보자!! 함께 정보를 받아보는 텔레그램 그룹방 개설!!

#36 스팀엔진 블록 검사 놓치는 블록이 없도록 해보자!! 파일 입출력 기능 활용!!

#37 스팀엔진 블록을 검사하여 본인글의 댓글을 텔레그램 알람으로 받아보자!!

#38 드디어 완성!! 보팅 알람봇!! 스팀엔진 블록을 검사하여 본인글에 보팅이 찍히면 텔레그램 알람으로 받아보자!!

#39 파이썬과 텔레그램을 이용한 챗봇 프로그래밍의 시작!! 그 첫번째!! 챗봇과 대화를 해보고,특정 메시지에 반응을 해보자!!

#40 파이썬과 텔레그램을 이용한 챗봇 프로그래밍!! 파이썬에 CommandHandler를 사용하여 특정 명령어를 내려보자!!

#41 굳헬로의 텔레그램 보팅알람 서비스 일단은 완성!! 앞으로 다양한 기능 추가 예정!! 사용해보고 후기 남겨주세요!!

#42 업비트의 원화 마켓 코인들의 시세를 텔레그램으로 받아보자!! /get 비트코인, /get 스팀, /get 코인이름 명령어 등록!!

#43 업비트의 원화 마켓 코인들의 시세를 텔레그램으로 받아보자2!! 알려줘 비트코인, 알려줘 스팀 노노!! 이제 바로 비트코인 스팀 명령어 등록!!

#44 매일 매일 새로운 기능이 추가되고 있는 굳스팀 챗봇!! 챗봇을 이용하여 스팀엔진 토큰의 시세 정보를 받아보자!!

#45 텔레그램 챗봇을 이용하여 최신 코인 주요 뉴스를 받아보자!! 굳스팀 챗봇 소개!!

#46 굳스팀 텔레그램 챗봇 새 기능 추가!! 굳스팀 챗봇을 이용하여 최신 헤드라인 뉴스 정보를 받아보자!!

#47 뉴스를 구독해보자!! 명령어 입력없이 특정 시간 챗 봇이 뉴스를 자동으로 보내 드립니다.

#48 본격적으로 스팀코인판 조합의 자동 보팅시스템 제작 돌입!! 기본 설계 및 보팅 설정 페이지 작업 완료!!

#49 스팀코인판 조합의 자동 보팅시스템 제작 2번째 시간!! 보팅 설정에 따라 각 조합원 별로 보팅룰을 적용해 보자!!

#50 스팀코인판 조합의 자동 보팅시스템 제작 3번째 시간!! 설 정된 보팅룰을 파이썬 자동 보팅 프로그램에 가져오기!!

#51 스팀코인판 조합의 자동 보팅시스템 제작 4번째 시간!! 블록을 검사하여 설정된 보팅룰로 보팅하기!!

#52 스팀코인판 조합의 자동 보팅시스템 제작 5번째 시간!! 자동 보팅시스템 테스트 현황!! 굳!! 따봉~~

#53 스팀코인판 조합의 자동 보팅시스템 제작 6번째 시간!! 보팅룰 검사 프로그램과 자동 보팅 프로그램의 분리!!

#54 스팀코인판 조합의 자동 보팅시스템 제작 마지막 시간!! 드디어 실전 가동!! 오류 수정 및 보팅 현황 확인 웹 페이지 제작 완료!!

#55 이번에는 유니온 조합의 자동보팅 시스템을 만들어 보자!! 유니온 조합의 보팅설정 프로그램과 보팅 설정 결과 확인 기능 완료!!

#56 스팀 블록을 검사하여 유니온 조합의 조합원 글에 보팅 룰셋 적용 및 자동 보팅 수행!!

#57 유니온 조합 우량 임대자 우대 조치!! 특별 규칙에 따른 보팅 설정 적용!!

#58 유니온 조합 자동 보팅 프로그램 테스트 결과 성공!! 보팅 현황을 확인할 수 있는 웹 페이지 추가 완료!!

#59 새로운 프로그램 공부를 시작!! 스팀몬스터 자동화를 위해 스팀몬스터 API를 분석해보자!! 그 첫시간!!

#60 스팀몬스터 사용자 정보를 출력해보고, 사용자가 가진 카드 정보를 출력해보자.

#61 조합의 자동분배 프로그램 수정 및 유니온 자동보팅 프로그램 가동 시작!! 오늘도 파이썬으로 스팀몬스터 API를 공부해 보자!!

#62 조합의 자동보팅 프로그램 업그레이드!! 오늘은 스팀몬스터 마켓의 정보를 가져오는 API를 공부해 보자!!

#63 파이썬 스팀몬스터 API를 이용하여 사용자가 보유하고 있는 모든 카드의 값을 계산해보자!!

#64 파이썬 스팀몬스터 API를 이용하여 사용자가 보유하고 있는 모든 카드의 값을 웹 프로그램으로 확인해보자!!

#65 파이썬 스팀몬스터 API를 이용하여 카드 최저가 합산 프로그램 업그레이드!! 소팅 오류 수정 및 이미디 적용 완료!!

#66 파이썬 스팀몬스터 API를 이용하여 스팀몬스터 배틀 결과 정보를 출력해 보자!!

#67 오늘은 스팀몬스터 배틀 결과 정보를 확인할 수 있는 웹 페이지를 만들어 보자.

#68 스팀몬스터 배틀 결과 정보를 이미지로 보기 쉽게 만들어보자.

#69 스팀몬스터 API get_cards_stats()과 get_card_details()를 이용하여 리워드 카드 발매 수량을 확인해 보자!!

#70 스팀몬스터 리워드 카드의 발행량과 소각량을 웹 페이지에 출력해 보자.

#71 스팀몬스터 일일퀘스트 보상으로 받은 리워드카드의 정보를 웹 페이지에서 확인해 보자.

#72 스팀몬스터 일일퀘스트 보상으로 받은 리워드카드의 가치를 웹 페이지에서 확인해 보자.

#73 오늘은 트아 형님께서 만드신 나의 스팀 자산은? 프로그램을 웹 페이지로 확인할 수 있도록 만들어 보자!!

#74 나의 자산을 확인 하는 프로그램에 스팀파워 임대량 추가!!

#75 나의 스팀엔진 토큰들의 수량을 확인하고, 스팀 환 산 가치를 알아보자!!

#76 나의 스팀엔진 토큰들의 수량과 스팀 환산 가치를 웹 페이지에서 확인해 보자!!

#77 새로운 시작!! 파이썬 웹 프로그래밍을 위한 파이썬 웹 프레임워크 장고 설치 및 가동!!

#78 파이썬 웹 프레임워크 장고의 이해!! 장고 모델을 등록하고, 어플리케이션을 만들어 보자!!

#79 파이썬 웹 프레임워크 장고의 이해!! 장고 뷰를 이용해 모델을 템플릿으로 출력해 보자!!

#80 파이썬 웹 프레임워크 장고를 지원하는 개발 툴 파이참을 사용해 보자!!

#81 아니 이렇게 좋은걸 이제서야...프로그램 개발에 강력하게 도움이 되는 Git와 GitHub를 이용해 보자!!

#82 파이썬 장고를 이용해 웹 사이트 개발 착수!! mysql 데이터베이스를 연동 및 모델 생성!!

#83 스팀코인판 홍보글 보팅 운영방침 변경에 따른 새로운 눈치게임을 위해 일일 소각양을 체크해보자!!

#84 스팀코인판 홍보 소각 전쟁!! 홍보 소각 내역을 웹 페 이지에서 확인해 보자!!

#85 스팀코인판 홍보 소각 전쟁!! 홍보 소각 내역을 웹 페이지에서 확인해 보자2!! 금액별 상세내역 보기 업그레이드!!

#86 스팀코인판 홍보 소각 전쟁!! 홍보 소각 내역을 웹 페이지에서 확인해 보자3!! 일자별 소각 금액을 차트로 확인해 보자!!

#87 스팀코인판 유니온 조합의 유료 보팅 서비스 자동화 개발 착수!! 첫시간!!

#88 스팀코인판 유니온 조합의 유료 보팅 서비스 자동화 개발 두번째 시간!! 유료 보팅 신청 내역 데이터베이스에 저장 완료!!

#89 스팀코인판 유니온 조합의 유료 보팅 서비스 자동화 개발 세번째 시간!! 자동 보팅을 위한 오류 대비 및 자동 보팅 수행!!

#90 스팀코인판 유니온 조합의 유료 보팅 서비스 자동화 개발 완료!! 드디어 실전 투입!!

#91 스팀코인판 유니온 조합의 유료 보팅 서비스 자동화 서비스 오류 수정!! 유료 보팅 현황을 웹 페이지에서 화인해 보자!!

#92 파이썬 스팀 API를 이용하여 다양한 봇을 돌리면서 예 상 못한 오류로 대형사고(?) 발생!! 이렇게 또 하나씩 배워 나갑니다.

#93 유니온 조합의 유료보팅 자동화 서비스 오류 수정!! 예상치 못한 오류에 대한 대비!!

#94 다시 시작하는 파이썬 스팀몬스터 프로그램!! 오늘은 스팀몬스터 카드를 판매하는 코드를 만들어 보자!!

#95 파이썬 스팀몬스터 프로그램!! sm_start_quest, sm_refresh_quest, sm_find_match

#96 파이썬 스팀몬스터 프로그램!! get_from_block(), get_transaction(), get_battle_status(), get_battle_result()

Sort Order:  

카카 이벤트 당첨 축하드립니다. 회장님^^
좀 부족한데 이건 다음 기회에 보충^^

·

캄사캄사합니다~

Hi @goodhello!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 4.012 which ranks you at #3993 across all Steem accounts.
Your rank has not changed in the last three days.

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

Evaluation of your UA score:
  • Some people are already following you, keep going!
  • The readers like your work!
  • Try to work on user engagement: the more people that interact with you via the comments, the higher your UA score!

Feel free to join our @steem-ua Discord server

@goodhello

https://www.steemcoinpan.com/sct/@jacobyu/swap-6
요글 한번 체크해주실수있나요? 글 작성하고 union 태그르 busy에서 붙였는데 union이 안옵니당 ㅜㅜ

감사합니당.

·

앗... 제가 만든 코드는 처음 글 등록 후 2분 수정글까지만 인식되게 해놨어요...

이후에 태그 넣을때 시간이 지나버리면 인식이 안되서... 디온님에게 직접 요청을 하셔야 할 것 같아요...