[NodeJS] 간단한 텔레그램 봇 만들기

in SCT.암호화폐.Crypto4 months ago (edited)

안녕하세요 ayogom 입니다.
주말에는 Nodejs에 대한 글을 쓸 생각이없었다가 부랴부랴 한가지 이야기를 좀 해보고 싶어서 텔레그램 봇을 만드는 방법에 대해서 써 보려고 합니다.

텔레그램은 보안 및 개발에 활용하기 좋기 때문에 블럭체인 관련 프로젝트들이 많이 활용하고 있는 카카오톡과 유사한 채팅 프로그램입니다.

텔레그램에서 가서 BotFather를 찾은 후 /netbot을 등록합니다.

저는 ayogom_test_bot 으로 하나 만들었습니다.
저기서 HTTP API를 복사해서

https://api.telegram.org/입력/getUpdates

해줍니다. 그리고 조금 전에 만들었던 텔레그램 봇에 hello~ 하고 인사를 해봅시다.

그리고 조금전에 만들었던 웹페이지를 새로고침 해보면 마지막 메시지에 대한 기록을 볼 수 있습니다.

그럼 본격적인 코딩에 들어가보겠습니다.
일단 텔레그램 봇 라이브러리를 설치 해야 합니다.

npm install node-telegram-bot-api

그리고 샘플 소스를 하나 가져오겠습니다.

const TelegramBot = require('node-telegram-bot-api')

const token = '봇파더에게 받은 토큰입력'

// Create a bot that uses 'polling' to fetch new updates
const bot = new TelegramBot(token, {polling: true});

// Matches "/echo [whatever]"
bot.onText(/\/echo (.+)/, (msg, match) => {
    // 'msg' is the received Message from Telegram
    // 'match' is the result of executing the regexp above on the text content
    // of the message

    const chatId = msg.chat.id;
    const resp = match[1]; // the captured "whatever"

    // send back the matched "whatever" to the chat
    bot.sendMessage(chatId, resp);
});

// Listen for any kind of message. There are different kinds of
// messages.
bot.on('message', (msg) => {
    const chatId = msg.chat.id;

    // send a message to the chat acknowledging receipt of their message
    bot.sendMessage(chatId, 'Hi! Have a nice day!');
});

해당 코드는 메시지가 들어왔을 때 Hi! Have a nice day! 라고 답변을 해줍니다.

그리고 /echo 후 메시지를 입력하면 아래와 같이 동작합니다.

내가 쓴 메시지를 바로 받아서 응답 해주죠.
소스코드를 잠시 살펴보면 const resp = match[1]; 해당 부분에서 받은 메시지를 저장할 수 있습니다. 그래서 앵무새 처럼 대답을 할 수 있게 되는 것이죠.

텔레그램 자체는 매우 안정할 것입니다.
하지만 그 안에 봇들에게 접근하는 것 역시도 안전해야 합니다. 아무리 튼튼한 금고라도 내가 비밀번호를 다른 사람에게 알려준다면 그것은 더이상 안전하지 않습니다.

사실 이 글을 쓰게 된 배경은 어제 저녁에 아래와 같은 글을 읽었습니다.

스팀잇 오토보팅(auto voting) 서비스 사용 설명서 해당 내용을 살펴보면

포스팅키를 봇에 등록하는 형태를 가지고 있습니다. 하지만 앞서 설명을 드린것 처럼 텔레그램에 내가 입력하는 메시지는 모두 저장이 가능합니다. 즉 봇을 운영하시는 분은 그 해당 데이터를 확인 할 수 있다는 것 입니다.

물론 @joviansummer 님이 그것을 저장하고 있다는 이야기는 아닙니다. 정말 저장을 하고 있는지 아닌지 저는 알 수 없기 때문입니다. 하지만 그 가능성은 있지 않을까? 위험하지 않을까 생각을 해봅니다.

차라히 이렇게 포스팅키를 입력받는 형태가 아니라 steemlogin 을 통한 포스팅키를 위임 받는 형태로 만드시면 사용하는 입장에서도 더욱 안전하게 사용할 수 있지 않을까 싶습니다.

@luciferjin

작성 예정인 글 List

  • Nodejs 를 이용한 스팀 API 사용해보기 (계속)

누군가에게는 도움이 될 수 있는 글

스팀잇 기본 이야기

니트로스 (SCT, ZZAN 등 ) 이야기

스팀잇 심화 이야기

스팀잇 보상과 연결되는 이야기

해킹과 관련된 이야기

개발과 관련된 이야기
Sort:  

steemlogin을 100% 신뢰할 수 있는 근거나 이유가 어떤것이 있는지는 제가 잘 모르겠습니다만, 사실 깃허브에 소스가 공개되어 있다고 해도 그들이 운영하는 서버 사이드 코드가 해당 소스와 동일한지 확인할 수도 없고 그냥 믿는 수밖에 없죠. steemlogin에 문제가 있다는 뜻이 아니라, 어떤 종류의 서비스가 되었던지간에 사용자가 프라이빗 키를 입력해서 보내는 행위가 있으면 반드시 신뢰성에 대한 문제가 따라올 수밖에 없습니다.

제가 만든 오토보팅에 대해서 말씀드리자면, 텔레그램을 통해 등록하는 포스팅키는 파이썬 딕셔너리 형태로 서버 메모리에 올라가 있습니다. 서버 메모리를 덤프해서 열심히 찾아보면 나오긴 하겠지만, 제가 굳이 그렇게 할 필요도 이유도 없고 포스팅키로 하는 모든 활동이 블럭체인에 남기 때문에, 텔레그램 메신저 자체의 보안에 문제가 없다면 현재 상태가 큰 문제는 없다고 보고 있습니다.

하지만 어떤 이유던지 신뢰가 가지 않는다면 프라이빗 키는 절대로 위임하지 않는 것이 정답입니다. 의견 개진에 감사드리며, 편안한 주말 보내시기 바랍니다.

권한 위임은 스팀 api에서 제공하는 블럭체인 공식 api 입니다. steemlogin 은 그것을 손쉽게 ui를 제공하고 있고요(사실 이게 스팀커넥트 시절부터 가장 오래된 서비스다보니 언급을 하게되었습니다) 물론 그 그것도 불안하시다면 keychain 으로 진행 할 수도 있습니다.
스마트 컨트렉트가 없기에 ㅠㅠ

사실 프로그램적으로도 권한 위임 받아서 개발하는 편이 더 편리합니다. 예를들자면 제가 제 포스팅권한을 @joviansummer 님께 위임해드리면 joviansummer 계정의 포스팅키로 포스팅키 액션(보팅 등)이 가능하기 때문 입니다.

제 포스팅이 불편하셨을수도 있지만 프로그램 개선을 위한 개인적인 의견이기 때문에 참고를 부탁드리겠습니다. 편안한 주말 되시기 바랍니다

포스팅 권한을 위임하는 기능이 있는 모양이군요. 몰랐습니다. steem-python documentation을 공부해서 만들었는데 제가 아직 파악하지 못한 부분이 많아서 그런 것 같습니다.

포스팅 내용에 대해 불편하다고 생각한 적은 없으며, 저도 단지 제가 아는 한도내에서 의견을 말씀드린 것이고 이렇게 의견을 주고 받으면서 배우는 과정이라고 생각하고 있습니다. 감사합니다.

@ayogom transfered 10 KRWP to @krwp.burn. voting percent : 8.36%, voting power : 60.45%, steem power : 1782514.98, STU KRW : 1200.
@ayogom staking status : 800 KRWP
@ayogom limit for KRWP voting service : 1.6 KRWP (rate : 0.002)
What you sent : 10 KRWP
Refund balance : 8.4 KRWP [54360916 - 185f97b4875a3d479197a1345662d033f2ea14d7]

[US$80.50](▼16%)[SONGJING]SONGJING SJ-125E 제습기 / 송징 SJ-125E 제습기 / 36평적용 / 165W 고출력 / 대용량 물탱크 / 관부가

WWW.QOO10.COM

저는 텔레그램봇은 한번도 개발해본적이 없네요. 그래서 그런지 매우 흥미롭습니다.
예전에 clayop님이 만든 텔레그램봇을 잘 사용했었는데, 오랜만에 다시 찾아보니 서비스가 중단되었네요. ㅠ
혹시 ayogom님 멘션이나 댓글, 관심저자 글 등록 알림도 개발가능한가요?

해보진 않았지만 ㅋㅋ 가능하지 않을까요...
어짜피.. 원리는 다 똑같은거라... 최근에는 굿헬로님이 만든 것을 사용하고 있긴 합니다 ㅎㅎ;