메뉴 닫기

Telegram(텔레그램)_Cli Sample Souce code

1. telegram_cli 설치

* 소스 복사시 “(큰따옴표) ‘(작은따옴표)는 다시 입력해 주세요 

패키지소스 설치 및 설정

yum install libevent-devel openssl-devel readline-devel libconfig-devel lua lua-devel -y

ln -sf /usr/lib64/libncursesw.so /usr/lib/libncursesw.so

mkdir /tele

cd /tele

git clone –recursive https://github.com/vysheng/tg telegram_cli

export LDFLAGS=”-lncursesw”

./configure && make

cp /root/tele/telegram_cli/tg-server.pub /root/tele/telegram_cli/bin/

cd /root/tele/telegram_cli/bin/

./telegram-cli -k tg-server.pub

tele1

설치 및 구동이 완료 되었고 명령어를 통해 사용이 가능 합니다.

 

 

tele2

* help를 입력하면 해당 명령어 등으로 메시지를 전달할 수 있습니다.

tele3

 

* help에 있는 contact_list 명령어를 사용하게 되면 텔레그램에 등록되어 있는  유저 목록을 출력합니다.

tele6

* user_info 사용시 해당 계정정보가 출력 됩니다

여기서 중요한점은 텔레그램 명령어 사용시 공백이 불가 합니다대신 계 정등에 공백이 확인 되는 경우에는 “ _” (언더바)를 통해 유져명을 이어갑 니다.(현재는 공식한글이 지원되서 정상적으로 된다고 합니다.)

그리고 계정뒤에는 “ #코드넘버가 보이는데 코드넘버로 메세지 전송이 가 능합니다.

tele4

“msg user#코드넘버  

tele5

메세지 전송은 계정으로 가능하지만 계졍명은 핸드폰의 주소록을 통해 확인  됨으로 코드 넘버로 하는게 정확한것 같습니다.

* ex) msg 길동_홍 안녕하세요

msg user#코드넘버 안녕하세요

둘다 동일 인물에게 같은 내용이 전달 됩니다.

 

2. Telegram send, receive sample source

* sample source

============================================================

#!/usr/bin/lua

dir_cmd=”/tele/telegram_cli/bin/sh”

auth_phone={ [“82본인폰번호“] = true }

function on_msg_receive (msg)

if ( msg.text == ‘date’ ) then

send_msg(msg.from.print_name, os.date(), ok_cd, false)

return

end

 

local recv_msg = msg.text

local result = {}

function split(str, delim)

local i=1

if ( str ~= nil ) then

 

for tmp in string.gmatch(str, “[^%s]+”) do

table.insert( result, tmp )

i = i+1

end

end

return result

end

 

r = split(recv_msg,” “)

cmd = r[1]

cmd2 = r[2]

 

print(“receive : “, cmd, “\n”)

print(“Name    : “, msg.from.print_name)

print(“Phone   : “, msg.from.phone)

print(“Msg Num : “, msg.id)

print(“to.Name : “, msg.to.print_name)

 

if (msg.to.id == our_id) then

user_id = msg.from.print_name

else

user_id = msg.to.print_name

end

 

if auth_phone[msg.from.phone] then

print “auth    : OK “

else

print “auth    : invalid user”

return

end

 

mark_read(user_id, ok_cb, false)

 

if ( cmd == ‘Help’ ) then

send_text(user_id, dir_cmd ..’/help.txt’, ok_cd, false)

return

end

 

end

function ok_cb(extra, success, result)

end

============================================================

* telegram_cli를 통해 메세지 전송시 답문을 받게 만들었습니다.

모티브는 http://truefeel.tistory.com/ 바탕으로 진행 하였으며해당 홈페이지의  내용대 로 진행시 변수 다루는 부분에서 정상적으로 구동 되지 않아 수정 하였습니다.

 

* source 분석

============================================================

#!/usr/bin/lua

dir_cmd=”/tele/telegram_cli/bin/sh”

 auth_phone={ [“82본인폰번호“] = true }

 

============================================================

– 실행할 스트립트의 경로와 본인의 폰번호를 삽입하여 본인의 명령에만 실 행 가능하도록 하였습니다.

============================================================

function on_msg_receive (msg)

 if ( msg.text == ‘date’ ) then

send_msg(msg.from.print_name, os.date(), ok_cd, false)

return

end

 local recv_msg = msg.text

 local result = {}

function split(str, delim)

local i=1

if ( str ~= nil ) then

 

for tmp in string.gmatch(str, “[^%s]+”) do

table.insert( result, tmp )

i = i+1

end

end

return result

end

 

r = split(recv_msg,” “)

cmd = r[1]

cmd2 = r[2]

============================================================

– Cli 메신저로 송신을 할 때 변수 처리할 내용들을 저장하는 소스입니다.

Ex) ping 8.8.8.8

– 예제 실행시 cmd=ping cmd2=8.8.8.8 변수처리가 되어 구문을 진행 합니다.

– 변수 값들이 늘어나면 cmd3,cmd4 로 늘려도 되고간단하게는 cmd를 배열 처리 하면 될 것 같습니다.

 ============================================================ 

print(“receive : “, cmd, “\n”)

print(“Name    : “, msg.from.print_name)

print(“Phone   : “, msg.from.phone)

print(“Msg Num : “, msg.id)

print(“to.Name : “, msg.to.print_name)

============================================================

– 텔레그램에서 문자 입력시 상대의 상대이름번화번호메시지넘버본인이메시지내용이 출력 됩니다.

============================================================

if (msg.to.id == our_id) then

user_id = msg.from.print_name

else

user_id = msg.to.print_name

End

============================================================

– secret chat을 지원합니다msg.to.id == our_id 라면즉 받는 사람과 Cli 메신 저 유저가 같다면 일반대화창으로 대화중이고그렇지 않는 것은 비밀대화 이다비밀대화는 msg.from.print_name이 아닌 msg.to.print_name 에게 메시 지를 보내야 합니다. 아래 루틴이 없다면 폰에서 비밀대화로 메시지를 보 냈더라도 CLI에서는 응답을 일반대화창으로 보냅니다.

============================================================ 

if auth_phone[msg.from.phone] then

print “auth    : OK “

else

print “auth    : invalid user”

return

end

mark_read(user_id, ok_cb, false)

============================================================

– auth_phone={ [“82본인폰번호“] = true } 지정한 번호와 Cli 메신저로 보낸 번 호와 대조하여 해당 명령어를 수행할지 말지를 결정 합니다.

– 지정된 번호가 아니라면 Cli  메신저 내부에서만 해당 내용을 auth    :  invalid user” 출력하고메시지만 전송합니다.

============================================================

if ( cmd == ‘Help’ ) then

send_text(user_id, dir_cmd ..’/help.txt’, ok_cd, false)

return

end

end

function ok_cb(extra, success, result)

end

============================================================

– 위 지정된 번호로 정상 비교시해당 구문을 구동합니다

– 여러개의 비교문을 넣어 스크립트 및 mrtg 사진등을 불러와 모니터링이  가 능합니다.

============================================================

3. Telegram-Cli test

tele7

* # ./telegram-cli -k tg-server.pub -s test.lua    ==> 명령어를 입력하면 루아 스크 립트와 같이 실행이 됩니다.

tele8

* # ./telegram-cli -k tg-server.pub -s test.lua -d &  ==> 명령어를 입력 하면 데몬 형태로 구동이 가능 합니다.

tele9

핸드폰에서 Help입력시 수신으로 메시지가 날라옵니다.

tele10

* Cli 에서는 수신 받은 메시지와 송신한 메시지를 출력합니다.

tele11 tele13

Screenshot_2015-01-12-12-53-30

* 한글역시 출력이 됩니다.

* ping, nslookup 역시 가능 하고이는 사용될 쉘 스크립트를 간단 하게 작성  해 놓은 상태이고자동으로 실시간 모니터링을 원한다면, echo를 이용합니다.

예를들어 포트 체크시 오픈과 클로즈를 비교 하는 쉘 스크립트 작성 후

echo “msg 이름 할말 ” | /tele/telegram_cli/bin/telegram-cli -k  /tele/telegram_cli/bin/tg-server.pub -W

또는

echo “msg user#코드넘버 할말 ” | /tele/telegram_cli/bin/telegram-cli -k   /tele/telegram_cli/bin/tg-server.pub -W

내용을 삽입 하면 됩니다물론 크론텝에 등록 하여 1분에서 5분 주기로  등록 합니다.

* Telegram-Cli 의 장,단점

장점

반복 되는 단순한 작업은 외부에서 쉘 스크립트 작성을 통해 빠르게 작업이 가능 하고쉘스크립트 작성자의 역량에 따라 편리하고 쉽게 작업 및  모니터링이 가능합니다.

단점

1)  centos 5.x 어떤버젼 에서는 프로그램 실행을 종료 했다가 다시 들어가면  구동하는데 시간이 오래 걸리는 반면 5.11에서는 또 정상적으로 구동되는  부분 (그래서 centos 6.5를 사용정확하게 파악은 하지 않았습니다.)

 2) 본인 휴대폰으로 인증시 수신 메시지가 알람이 안울린 다는 점그래서  작업 폰으로 등록 하고본인 폰으로 받아야 되는것 같습니다.

 3) 리시브 받기 위해 데몬 형태로 구동을 하는 방법과,  크론에 등록 하여  에코로 발송하는 방법은 한 계정에서는 같이 사용을 할 수 없습니다.

테스트 결과 데몬형태 구동 후 에코를 날려보니 처음에는 메시지가 정상적으로 가지만 다음부터는 구동을 하지 않았습니다

동시에 사용하려면 폰이 두대 있어야 된다는 점.(데몬은 본인 폰으로 코는 작업폰으로 하면 될 것 같습니다.)

4) root에서 두개 이상을 인증해서 사용해 볼려고 했습니다. /bin 디렉토리 밑 에 generate 파일이 있어서 키값을 생성 해볼려고 했으나 실패 하였고

프로그램 다운시 제공하는 키는 한개지만같은 서버다른 계정으로는 구동이 가능 합니다.

 

* 원본 문서는 관리자 페이지 > 기술문서 > 서버운영 매뉴얼 에 올렸습니다.

☆작성자 대리 이용우 (http://hoguinside.com)☆

 

☆참고 자료☆

좋은진호님 블로그 – http://truefeel.tistory.com/224
텔레그램 README-LUA – https://github.com/vysheng/tg/blob/master/README-LUA
Lua Check if a file exits – http://stackoverflow.com/questions/4990990/lua-check-if-a-file-exists
텔레그램 Messenger Client – http://www.forum-raspberrypi.de/Thread-tutorial-telegram-messenger-client-auf-dem-raspberry?page=2

 

[polldaddy rating=”7739789″]

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다