telegram-cli 이걸로 뭐하지?
Telegram(https://telegram.org) 이 국내에서 흥하게 되었는데, 이 텔레그램이 OPEN API 입니다.
telegram-cli 란 linux 용 프로그램입니다. 스크립트나 콘솔명령으로 메세지를 보낼 수 있습니다.
그럼 이걸로 뭘 하나 생각해 보니
1. 심심이
2. 카톡 미연시
3. 서버 제어 : http://truefeel.tistory.com/224
4. 장애 알림
5. REST 를 이용한 MSG 발송
등등.. 서버 프로그래머 입장에서 해보고 싶은게 많습니다.
서론은 여기까지.. 텔레그램을 깔아 봅시다.
Linux 에서 늘 하던데로 소스받고, configure , make 하면 끝~
https://github.com/vysheng/tg 에 잘 설명 되있습니다.
OS 는 CentOS 에 설치 했습니다.
1. 소스받고 압축 풀고
wget https://github.com/vysheng/tg/archive/master.zip -O tg-master.zip
unzip tg-master.zip && cd tg-master
2. 빌드에 필요한 패키지 깔고
sudo yum install lua-devel openssl-devel libconfig-devel readline-devel libevent-devel
3. 빌드하면 끝 !
./configure
make
이건 CentOS 7 얘기... 현실은
event-old.h: In function 'event_new': event-old.h:16: error: implicit declaration of function 'malloc' event-old.h:16: error: incompatible implicit declaration of built-in function 'malloc' event-old.h: In function 'evtimer_new': event-old.h:24: error: incompatible implicit declaration of built-in function 'malloc' event-old.h: In function 'event_free': event-old.h:33: error: implicit declaration of function 'free' event-old.h:33: error: incompatible implicit declaration of built-in function 'free' tgl-timers.c: In function 'tgl_timer_free': tgl-timers.c:59: error: implicit declaration of function 'event_get_callback_arg' tgl-timers.c:59: error: initialization makes pointer from integer without a cast make: *** [objs/tgl-timers.o] Error 1
이럴땐 !! 예전이었다면 아둥바둥 왜 안되는지 알아보고, 이것저것 고쳐보고...했겠지만
이젠 Docker 를 사용합니다.
설치와 사용법은 나중에 자세히 알아보고 docker 로 CentOS 7 환경을 올립니다.
[root@localhost ~]# docker pull centos
로 이미지 받아와서 들어가면 CentOS7 환경에서 작업할 수 있습니다.
[root@localhost ~]# docker run -i -t centos:centos7 /bin/bash
bash-4.2# cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)
[root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED ...
cd2b01f5645f centos:centos7 /bin/bash 2 minutes ago ... 9b05fb4f5b8f centos:centos6 /bin/bash 12 minutes ago ... 62368a818401 9b9939481a40 /bin/bash 16 hours ago ... e9d15253d9d7 cc7c33cb9d68 /bin/bash 16 hours ago ...
당황하지 않고 사용한 컨테이너 ID를 찾아서 commit 하면 image 로 생성되어 다음에 작업했던데 부터 사용할 수 있습니다. 자세한 사용법은 나중에?
centos7 환경에선 잘 됩니다.
ar: creating libs/libtgl.a a - ./objs/net.o a - ./objs/mtproto-common.o ....... a - ./objs/updates.o a - ./objs/tgl-timers.o a - ./objs/tools.o gcc ./objs/main.o ./objs/loop.o ./objs/interface.o ./objs/lua-tg.o .........
bash-4.2# bin/telegram-cli
change_user_group: can't find the user telegramd to switch to
Telegram-cli version 1.1.0, Copyright (C) 2013-2014 Vitaly Valtman
Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show_license' for details.
I: config dir=[//.telegram-cli]
Telephone number (with '+' sign):
Telephone number (with '+' sign): +8210******** Code from sms (if you did not receive an SMS and want to be called, type "call"): 36692 >
help Prints this help
contact_list Prints contact list
stats For debug purpose
history <peer> [limit] [offset] Prints messages with this peer (most recent message lower). Also marks messages as read
dialog_list List of last conversations
send_photo <peer> <file> Sends photo to peer
send_video <peer> <file> Sends video to peer
send_audio <peer> <file> Sends audio to peer
send_document <peer> <file> Sends document to peer
send_text <peer> <file> Sends contents of text file as plain text message
chat_info <chat> Prints info about chat (id, members, admin, etc.)
user_info <user> Prints info about user (id, last online, phone)
fwd <peer> <msg-id> Forwards message to peer. Forward to secret chats is forbidden
fwd <peer> <msg-id> Forwards message media to peer. Forward to secret chats is forbidden. Result slightly differs from fwd
msg <peer> <text> Sends text message to peer
....
우선 주소를 등록하고 보내 봅니다.
> add_contact +8210******** yongdae kwon
yongdae kwon
> msg yongdae_kwon hello
[02:14] yongdae kwon <<< hello
bash-4.2# echo "msg yongdae_kwon hello" | bin/telegram-cli -k ./tg-server.pub -W
change_user_group: can't find the user telegramd to switch to
Telegram-cli version 1.1.0, Copyright (C) 2013-2014 Vitaly Valtman
Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show_license' for details.
I: config dir=[//.telegram-cli]
User Telegram updated photo
User SANGWOOK KWON updated photo
> msg yongdae_kwon hello
[03:22] yongdae kwon <<< hello
> All done. Exit
잘 보내집니다.
node.js 의 express 와 연결해서 보내봅시다.
javascript 를 추가 하고
var exec = require('child_process').exec; app.get('/msg', function( req, res ) { var _cmd = 'msg ' + req.param('id',null) + ' ' + req.param('msg',null); console.log( _cmd ); exec( "echo '" + _cmd + "' | telegram-cli -k /home/tg-master/tg-server.pub -W " ,
function(err, stdout, stderr) {
if(err) {
console.log(err.message);
}
} );
res.send('send msg');
});
잘 보내지네요.
Lua Script 를 이용하면 ( 참고 : http://truefeel.tistory.com/224 )
function on_msg_receive (msg)
if ( msg.text == 'hello' ) then
send_msg(msg.from.print_name, "world", ok_cb, false)
return
end
end
function ok_cb(extra, success, result)
end
스크립트와 함께 돌리면
bash-4.2# bin/telegram-cli -s ../hello.lua
change_user_group: can't find the user telegramd to switch to
Telegram-cli version 1.1.0, Copyright (C) 2013-2014 Vitaly Valtman
Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show_license' for details.
I: config dir=[//.telegram-cli]
*** lua: attempt to call a nil value
*** lua: attempt to call a nil value
*** lua: attempt to call a nil value
[03:30] yongdae kwon ««« hello
*** lua: attempt to call a nil value
[04:07] yongdae kwon <<< world
'hello world' 카테고리의 다른 글
Google Protocol Buffer 사용해보기 - 개정판 (1) | 2014.01.14 |
---|---|
Google Protocol Buffer 사용해보기 (2) | 2014.01.13 |
Release Build에서 변수 깨지지 않고 보는 방법 (4) | 2014.01.13 |
글 작성시 syntax highlighter 적용하기 (2) | 2014.01.13 |