[개발이야기#005] 파이썬으로 스팀잇 리워드를 자동으로 클레임 해보자. 3탄

in kr •  7 months ago  (edited)

[개발이야기#005] 파이썬으로 스팀잇 리워드를 자동으로 클레임 해보자. 3탄

No. 004
2024.05.03.금 | Written by @talkit

    Python  
    스팀잇 자동 클레임  

오늘도 두서 없이 개발 글을 하나 적어 보겠습니다.

스팀 보상 자동 클레임 프로그램 개선하기

오늘도 어제에 이어 스팀 보상을 자동으로 클레임하는 프로그램의 개선 작업에 대해 이야기해보려 합니다. 이 프로그램은 사용자의 스팀 보상을 주기적으로 확인하고 자동으로 클레임하는 기능을 수행합니다.

개선된 코드 설명

기존 코드에서는 스팀(Steem), 스팀달러(SBD), 스팀파워(SP)의 보상 잔액이 있는 경우에만 클레임을 실행하도록 로직을 추가했습니다. 이를 위해 보상 잔액 확인 로직에 reward_sbd_balancereward_vesting_steem을 추가하여 세 가지 종류의 보상이 하나라도 존재할 경우에만 클레임을 진행하도록 했습니다.

또한, 로그 보기 기능과 프로그램 종료 기능이 제대로 동작하지 않는 문제를 해결하기 위해 이들 기능을 별도의 스레드에서 실행되도록 변경하였습니다. 이는 프로그램의 안정성과 사용자 경험을 향상시키기 위한 중요한 개선점입니다.

로그 보기 기능 개선

기존에는 콘솔에서 로그를 출력하는 방식이었지만, 이번에는 로그를 별도의 윈도우에서 볼 수 있도록 개선했습니다. 이를 위해 Tkinter 라이브러리를 사용하여 로그를 표시하는 새 창을 만들고, 로그 내용을 텍스트 박스에 삽입하여 사용자가 직접 확인할 수 있도록 했습니다.

전체 코드

import time
from datetime import datetime
from steem import Steem
from steem.account import Account
from PIL import Image
import pystray
import sys
import threading
import tkinter as tk

# 사용자 이름과 개인 포스팅 키를 입력하세요
username = 'your_username'
posting_key = 'your_posting_key'

def log_message(message):
    with open('log.txt', 'a') as f:
        f.write(message + '\n')

# 보상 클레임 함수
def claim_rewards(icon, item):
    def claim():
        while True:
            try:
                s = Steem(keys=[posting_key])
                account = Account(username)
                reward_balance = account["reward_steem_balance"]
                reward_balance_sbd = account["reward_sbd_balance"]
                reward_balance_sp = account["reward_vesting_steem"]
                log_message(f"{datetime.now()}: Current reward steem balance: {reward_balance}")
                log_message(f"{datetime.now()}: Current reward sbd balance: {reward_balance_sbd}")
                log_message(f"{datetime.now()}: Current reward sp balance: {reward_balance_sp}")
                #if reward_balance.amount > 0.0 or reward_balance_sbd.amount > 0.0 or reward_balance_sp.amount > 0.0:
                # .amount 가 없고, 문자열로 되어 있어서 위 코드를 아래와 같이 수정 함. 
                if float(reward_balance.split(" ")[0]) > 0.0 or float(reward_balance_sbd.split(" ")[0]) > 0.0 or float(reward_balance_sp.split(" ")[0]) > 0.0:
                    s.claim_reward_balance(account=username)
                    new_reward_balance = Account(username)["reward_steem_balance"]
                    log_message(f"{datetime.now()}: New reward balance: {new_reward_balance}")
            except Exception as e:
                log_message(f"{datetime.now()}: An error occurred: {e}")
            finally:
                time.sleep(300)
    thread = threading.Thread(target=claim)
    thread.daemon = True
    thread.start()

# 로그 보기 함수
def view_logs(icon, item):
    with open('log.txt', 'r') as f:
        logs = f.read()
    window = tk.Tk()
    window.title("Logs")
    text_box = tk.Text(window)
    text_box.pack()
    text_box.insert(tk.END, logs)
    window.mainloop()

# 아이콘 생성 및 트레이 아이콘 메뉴 설정
image = Image.open('icon.png')
icon = pystray.Icon("name", image, "Steem Tray @talkit", menu=pystray.Menu(
    pystray.MenuItem('Claim Rewards', claim

_rewards),
    pystray.MenuItem('View Logs', view_logs),
    pystray.MenuItem('Exit', lambda icon, item: icon.stop())
))
icon.run()

실행 방법

개발 환경에 따라 다음과 같이 실행할 수 있습니다:

conda activate steemit
python claim_steem_rewards.py

마무리

이 프로그램은 윈도우 시스템 트레이에서 동작하며, Tkinter GUI 툴킷을 사용해 로그를 보여주고, 사용자가 원할 때 프로그램을 종료할 수 있도록 개선되었습니다. 다음 번에는 보상을 자동으로 파워업하는 기능을 추가해볼 예정입니다.

위글은 초고를 제가 적고 ChatGPT 4.0을 통해서 탈고를 해봤습니다. ^^

오 프로그램은 github 코파일럿이 짜고 글 탈고는 ChatGPT 4.0에게 시키고

편안한 세상입니다.




Layout provided by Steemit Enhancer hommage by ayogom


Posted through the ECblog app (https://blog.etain.club)
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:  

안녕하세요.
SteemitKorea팀에서 제공하는 'steemit-enhancer'를 사용해 주셔서 감사합니다. 개선 사항이 있으면 언제나 저에게 연락을 주시면 되고, 관심이 있으신 분들은 https://cafe.naver.com/steemitkorea/425 에서 받아보실 수 있습니다. 사용시 @응원해 가 포함이 되며, 악용시에는 모든 서비스에서 제외될 수 있음을 알려드립니다.

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.


안녕하세요.
이 글은 SteemitKorea팀(@ayogom)님께서 저자이신 @talkit님을 응원하는 글입니다.
소정의 보팅을 해드렸습니다 ^^ 항상 좋은글 부탁드립니다
SteemitKorea팀에서는 보다 즐거운 steemit 생활을 위해 노력하고 있습니다.
이 글은 다음날 다시 한번 포스팅을 통해 소개 될 예정입니다. 감사합니다!

오 멋지네요.

몇가지 프로그램을 더 작성해 볼껀데 ^^ 굉장히 멋진 경험이었습니다. ^^

AI가 program을 짜는 세상이 왔군요.

넵 AI 직원에게 열심히 시키고 있습니다.
품질도 나름 괜찮습니다.