굳헬로의 스팀 프로그램 일기!! 마흔일곱번째 #47 뉴스를 구독해보자!! 명령어 입력없이 특정 시간 챗 봇이 뉴스를 자동으로 보내 드립니다.

in sct •  4 years ago 

steem.jpg

어느덧 올해도 2/3가 지나가고 9월의 첫 월요일이 되었습니다.

2019년 돌이켜 보면 별로 하는것도 없이 금새 시간이 다 지나버린 것 같습니다

그래도 남은 1/3은 뭔가를 남겨보기 위해 힘을 좀 내봐야 겠습니다.

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


월요일 아침부터 스팀이 죽어라.... 돌아가는게 아니고, 그냥 죽어버려서....

복구 될때까지 스팀관련 코드는 못 건드리고, 주말동안 만들었던 굳스팀 챗봇 코인뉴스 받아보기, 최신 헤드라인 뉴스 받아보기를 업그레이드 해 보았습니다.

기존에는 파이썬 텔레그램 CommandHandlerMessageHandler에 명령어를 등록하여 챗봇에 메시지를 보내면 그 응답을 받는 서비스였는데, 이번에는 구독 기능을 추가해 보았습니다.

그리고 구독기능은 오늘 새로 공부한 InlineKeyboardButtonInlineKeyboardMarkup을 이용하여 만들어 보았습니다.

InlineKeyboardMarkupInlineKeyboardButton은 텔레그램에서 인라인 키보드 버튼 기능을 제공하여, 좀 더 직관적으로 텔레그램을 이용할 수 있도록 도와줍니다.

from telegram import InlineKeyboardButton, InlineKeyboardMarkup

def build_menu(buttons, n_cols, header_buttons=None, footer_buttons=None):
    menu = [buttons[i:i + n_cols] for i in range(0, len(buttons), n_cols)]
    if header_buttons:
        menu.insert(0, header_buttons)
    if footer_buttons:
        menu.append(footer_buttons)
    return menu
        

def set_command(bot, update, args):
    print("set")
    set_menu = []
    set_menu.append(InlineKeyboardButton("구독", callback_data="on")) 
    set_menu.append(InlineKeyboardButton("구독해제", callback_data="off"))
    set_menu.append(InlineKeyboardButton("닫기", callback_data="cancel")) 
    set_menu_markup = InlineKeyboardMarkup(build_menu(set_menu, len(set_menu) - 1)) 

    update.message.reply_text("뉴스 구독을 신청하시겠습니까?", reply_markup=set_menu_markup)

배열에 인라인키보드 버튼 InlineKeyboardButton을 축하고 InlineKeyboardMarkup을 이용하여 버튼을 배치합니다.

updater.dispatcher.add_handler(CommandHandler('set', set_command, pass_args=True))

그리고 위의 set_command 함수를 챗봇으로 호출하기 위하여 '/set 명령어를 CommandHandler로 등록하였습니다.

이제 텔레그램 챗봇에게 /set 이라고 치면 위와 같이 뉴스 구독 신청을 묻는 인라인 키보드가 뜨게 됩니다.

그럼 각 버튼에 기능을 넣어보도록 하겠습니다.

먼저 버튼을 누르게 될때 발생하는 이벤트를 처리하기 위하여 CallbackQueryHandler를 등록하고

updater.dispatcher.add_handler(CallbackQueryHandler(callback_set))

버튼을 누른경우 callback_set 함수가 호출되게 됩니다.

def callback_set(bot, update):
    data_selected = update.callback_query.data
    chat_id = update.callback_query.message.chat_id
    telegram_id = update.callback_query.from_user.name
    message_id = update.callback_query.message.message_id

    if data_selected.find("cancel") != -1 :
        bot.edit_message_text(text="취소하였습니다.", chat_id=chat_id, message_id=message_id)
        return

    if data_selected == "on" :
        try:
            db = pymysql.connect(host=host, port=3306, user=user, passwd=passwd, db=db_name, charset='utf8')
            with db.cursor() as cursor:        
                sql = "select chat_id, get_news from telegram_alram_bot where chat_id = " + str(chat_id)
                cursor.execute(sql)
                rows = cursor.fetchone()
                check_id = ""
                if rows != None :
                    check_id = rows[0]

            if(chat_id == check_id) :
                with db.cursor() as cursor:        
                    sql = "update telegram_alram_bot set get_news = '" + data_selected + "', telegram_id = '" + telegram_id + "' where chat_id = " + str(chat_id)
                    print(sql, end='')
                    cursor.execute(sql)
                    db.commit()
            else :            
                with db.cursor() as cursor: 
                    sql = "INSERT INTO telegram_alram_bot (chat_id, telegram_id, get_news) VALUES(" + str(chat_id) +", '" +telegram_id + "', '" + data_selected + "')"
                    print(sql, end='')
                    cursor.execute(sql)
                    db.commit()
        except Exception as e:
            print('오류발생 : ' + str(e))
        finally:
            db.close()
            bot.edit_message_text(text="뉴스 구독 신청이 되었습니다", chat_id=chat_id, message_id=message_id)
    else :
        try:
            db = pymysql.connect(host=host, port=3306, user=user, passwd=passwd, db=db_name, charset='utf8')
            with db.cursor() as cursor:        
                sql = "select chat_id, get_news from telegram_alram_bot where chat_id = " + str(chat_id)
                print(sql, end='')
                cursor.execute(sql)
                rows = cursor.fetchone()
                check_id = ""
                if rows != None :
                    check_id = rows[0]

            if(chat_id == check_id) :
                with db.cursor() as cursor:        
                    sql = "update telegram_alram_bot set get_news = '" + data_selected + "', telegram_id = '" + telegram_id + "' where chat_id = " + str(chat_id)
                    print(sql, end='')
                    cursor.execute(sql)
                    db.commit()
            else :            
                with db.cursor() as cursor: 
                    sql = "INSERT INTO telegram_alram_bot (chat_id, telegram_id, get_news) VALUES(" + str(chat_id) +", '" +telegram_id + "', '" + data_selected + "')"
                    print(sql, end='')
                    cursor.execute(sql)
                    db.commit()
        except Exception as e:
            print('오류발생 : ' + str(e))
            #raise  
        finally:
            print(cursor.lastrowid)
            db.close()
            bot.edit_message_text(text="뉴스 구독 신청이 해제되었습니다", chat_id=chat_id, message_id=message_id)

닫기 버튼을 누르면

취소하였습니다 말과 함께 버튼이 사라지며

구독 버튼을 누르면

뉴스 구독이 신청이 되고

구독해제 버튼을 누르면

뉴스 구독 신청이 해제되게 됩니다.

이제 뉴스 구독을 신청을 하게 되면 특정 시간에 챗봇이 자동으로 뉴스를 올려줍니다.

굳스팀 챗봇은 다음 링크를 통해 사용하실 수 있으며

https://t.me/goodsteem_bot

현재 다음과 같은 기능들을 사용하실 수 있습니다.

오늘은 새롭게 InlineKeyboardMarkupInlineKeyboardButton를 이용하여 인라인 키보드 버튼 기능을 만들어 보고, 코인 뉴스와, 최신 헤드라인 뉴스를 특정시간에 자동으로 받아볼 수 있는 구독 기능을 만들어 보았네요.

그나저나 또 무슨 기능이 있으면 좋을까요??

새로운 기능을 계속 만들어 나가고 싶은데, 아이템이 떨어지고 있네요.

많은 생각을 해봐야 할 것 같아요.

그리고 앞으로 며칠간은 스팀코인판 조합의 자동보팅 시스템을 한번 만들어 보고자 합니다.

원피스 조합과 유니온 조합에서 자동 보팅 프로그램을 사용하고는 있다고 하는데, 오류가 나는 경우도 많은 것 같고, 수동으로 보팅을 하는 경우도 많은 것 같은데, 제가 한번 열심히 공부해서 조합에 도움이 되도록 조합원 자동 보팅 프로그램을 만들어 보려고 합니다.

아마 쉽지 않을것 같긴 한데, 열심히 해보겠습니다.

그럼 오늘 하루도 행복하시고, 이번 한주도 파이팅입니다~


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

#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주일!! 드디어 첫 실전!! 무한 반복 작업 수행하기!! 이제 직접 클레임 하는 손맛은 잊자. 무한 반복 자동 클레임!!

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

#9 굳헬로의 스팀 프로그램 일기!! 아홉번째 #9 무한 반복 자동 클레임 업그레이드!! && 토큰 잔고 확인 && 토큰 전송과 토큰 전송 내역을 텔레그램으로 받아보기!!

#10 굳헬로의 스팀 프로그램 일기!! 열번째 #10 토큰 전송내역을 검사하고, 토큰을 전송 받으면 텔레그램으로 알림을 받아보기!!

#11 굳헬로의 스팀 프로그램 일기!! 열한번째 #11 스팀엔진 토큰 임대내역 추적. 쉽지 않았던 머나먼 여정 (1/2)

#12 굳헬로의 스팀 프로그램 일기!! 열두번째 #12 스팀엔진 토큰 임대내역 추적. 쉽지 않았던 머나먼 여정 (2/2) 스팀엔진 토큰 임대내역 추적 완료!!

#13 굳헬로의 스팀 프로그램 일기!! 열세번째 #13 웹 프로그래밍의 시작!! 파이썬을 이용하여 정보를 MySQL 데이터 베이스에 저장해보기!!

#14 굳헬로의 스팀 프로그램 일기!! 열네번째 #14 파이썬을 이용하여 데이터베이스로부터 정보를 가져오기 && 스팀코인판 3대풀 임대내역 데이터베이스 작업 완료!!

#15 굳헬로의 스팀 프로그램 일기!! 열다섯번째 #15 웹 프로그래밍을 이용하여 스팀코인판 3대조합의 임대 내역을 웹으로 확인해보자 !!

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

#17 굳헬로의 스팀 프로그램 일기!! 열일곱번째 #17 조합들이 필요한 기능 드디어 완성!! 자동 클레임과 자동 분배 기능!!

#18 굳헬로의 스팀 프로그램 일기!! 열여덟번째 #18 스팀코인판 3대 조합의 임대내역과 실시간 예상 분배 금액을 웹으로 확인해보자!!

#19 굳헬로의 스팀 프로그램 일기!! 열아홉번째 #19 어제 만든 프로그램 업그레이드!! 개별 상세내역보기 기능 추가!!

#20 굳헬로의 스팀 프로그램 일기!! 어느덧 스물번째 #20 시행착오... 그리고 시련... 하지만 원사마님 덕분으로 엄청난 레벨업!! 감사합니다. 더욱 발전하겠습니다.

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

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

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

#24 굳헬로의 스팀 프로그램 일기!! 스물네번째 #24 스팀코인판 3대조합의 임대내역을 웹으로 확인해보자!! 업그레이드!!

#25 굳헬로의 스팀 프로그램 일기!! 스물다섯번째 #25 스팀코인판 3대조합의 임대내역을 웹으로 확인해보자!! 업그레이드 2!! 그리고 개발 예정 사항 공개!!

#26 굳헬로의 스팀 프로그램 일기!! 스물여섯번째 #26 드디어 첫 실전 가동 준비중... 스팀코인판 유니온 조합의 수익 자동분배 작업 완료중...

#27 굳헬로의 스팀 프로그램 일기!! 스물일곱번째 #27 스팀코인판 유니온 조합 첫 자동 분배 결과!! 그리고 보완!!

#28 굳헬로의 스팀 프로그램 일기!! 스물여덟번째 #28 스팀코인판 유니온 조합 자동 분배 프로그램의 결과를 웹으로 확인해 보자!!

#29 굳헬로의 스팀 프로그램 일기!! 스물아홉번째 #29 스팀코인판 유니온 조합 자동 분배 상황을 텔레그램으로 확인!! 임내 확인 페이지 정렬 기능 추가!!

#30 굳헬로의 스팀 프로그램 일기!! 서른번째 #30 스팀코인판 조합의 임대량 페이지 정렬 기능 업그레이드!! 그리고 임대량 파이 차트 완성!!

#31 굳헬로의 스팀 프로그램 일기!! 서른한번째 #31 스팀코인판 조합의 하루하루 임대량 변화를 차트로 확인해보자!!

#32 굳헬로의 스팀 프로그램 일기!! 서른두번째 #32 트리플A를 이용하면서 그동안 번거로웠던 클레임 스테이킹 전송 작업 이젠 안녕!! 자동으로 AAA를 전송하고 클레임하고 스테이킹을 해보자!!

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

#34 굳헬로의 스팀 프로그램 일기!! 서른네번째 #34 스팀코인판 조합 원피스 자동 클레임과 자동 분배 프로그램 업그레이드!! 텔레그램 봇으로 그룹 메시지를 받아보자!!

#35 굳헬로의 스팀 프로그램 일기!! 서른다섯번째 #35 스팀에서 새글 정보를 텔레그램으로 받아보자!! 함께 정보를 받아보는 텔레그램 그룹방 개설!!

#36 굳헬로의 스팀 프로그램 일기!! 서른여섯번째 #36 스팀엔진 블록 검사 놓치는 블록이 없도록 해보자!! 파일 입출력 기능 활용!!

#37 굳헬로의 스팀 프로그램 일기!! 서른일곱번째 #37 스팀엔진 블록을 검사하여 본인글의 댓글을 텔레그램 알람으로 받아보자!!

#38 굳헬로의 스팀 프로그램 일기!! 서른여덟번째 #38 드디어 완성!! 보팅 알람봇!! 스팀엔진 블록을 검사하여 본인글에 보팅이 찍히면 텔레그램 알람으로 받아보자!!

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

#40 굳헬로의 스팀 프로그램 일기!! 마흔번째 #40 파이썬과 텔레그램을 이용한 챗봇 프로그래밍!! 파이썬에 CommandHandler를 사용하여 특정 명령어를 내려보자!!

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

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

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

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

#45 굳헬로의 스팀 프로그램 일기!! 마흔다섯번째 #45 텔레그램 챗봇을 이용하여 최신 코인 주요 뉴스를 받아보자!! 굳스팀 챗봇 소개!!

#46 굳헬로의 스팀 프로그램 일기!! 마흔여섯번째 #46 굳스팀 텔레그램 챗봇 새 기능 추가!! 굳스팀 챗봇을 이용하여 최신 헤드라인 뉴스 정보를 받아보자!!

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:  

jcar토큰 9월 구독 보팅입니다.

가을로 접어드는 9월, 결실 맺는 한달 되시기 바랍니다. ^^

와~~ 정말 나중에 굳헬로님 글쓰기 봇도 만드실듯요! ^^

글쓰기 봇도 만들어 볼까요?? ㅎㅎㅎㅎ

Congratulations @goodhello! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You published a post every day of the week

You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

Vote for @Steemitboard as a witness to get one more award and increased upvotes!

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.

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.009 which ranks you at #4005 across all Steem accounts.
Your rank has dropped 19 places in the last three days (old rank 3986).

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

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