|
Á¦ ¸ñ : ÅÚ·¹±×·¥(Telegram)À¸·Î ¼¹ö ¸ð´ÏÅ͸µÇϱâ
ÀÛ¼ºÀÚ : ÁÁÀºÁøÈ£(truefeel, http://coffeenix.net/ )
ÀÛ¼ºÀÏ : 2014.10.6(¿ù)
Á¤¸®ÀÏ : 2014.10.13(¿ù)
¸Þ½ÅÀú °Ë¿·Î 'ÅÚ·¹±×·¥(Telegram)' ±¤Ç³ÀÌ ºÒ°í ÀÖ´Ù. °³ÀÎÀûÀ¸·Î Ä«ÅåÀ» ÀÚÁÖ »ç¿ëÇÏÁö ¾Ê¾Æ, ÅÚ·¹±×·¥ÀÌ Àý½Ç(?)ÇÏ°Ô ÇÊ¿äÇÏÁö ¾Ê´Ù. ÇÏÁö¸¸ ÅÚ·¹±×·¥À» »ç¿ëÇؾßÇÒ ÀÌÀ¯°¡ »ý°å´Ù. ÅÚ·¹±×·¥ÀÌ ¼¹ö¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ´Â CLI¸¦ Á¦°øÇÏ°í ÀÖ°í, lua³ª pythonÀ¸·Î ¼Õ½±°Ô ¸Þ½ÅÀú¿Í ¿¬µ¿ÇÒ ¼ö ÀÖ´Ù.
±×·¡¼ ÅÚ·¹±×·¥¿ë lua½ºÅ©¸³Æ®¸¦ ¸¸µé¾î¼ ¼¹ö »óŸ¦ Æù¿¡¼ ¹Þ¾Æº¼ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ƯÁ¤ ¼¹öÀÇ MRTG/RRD¸¦ ¸Þ½ÅÀú·Î ¿äûÇÏ¸é ±× À̹ÌÁö¸¦ ¹Þ¾Æ º¼ ¼ö ÀÖ´Ù. ¼¹öÀÇ load°ªµµ °°Àº ¹æ½ÄÀ¸·Î return¹ÞÀ» ¼ö ÀÖ´Ù. ¼¹öÀå¾Ö ¹®ÀÚ¸¦ ÅÚ·¹±×·¥À¸·Î ¹ÞÀ» ¼ö ÀÖµµ·Ï ÇϽźеµ ÀÖ´Ù. (¡Ø °³ÀÎÀûÀ¸·Î´Â ÀÌ¹Ì SMS·Î ¹Þ°í ÀÖ´Â °ÍÀ» ´Ù½Ã ÅÚ·¹±×·¥¿ëÀ¸·Î ¸¸µé ÇÊ¿ä´Â ¾ø¾ú´Ù.)
ÅÚ·¹±×·¥ CLI¼³Ä¡´Â '¸®´ª½º¿¡ ÅÚ·¹±×·¥(Telegram) CLI ¼³Ä¡' (http://coffeenix.net/board_view.php?bd_code=1759 , ±Û ÁÁÀºÁøÈ£)¸¦ Âü°íÇÏ°í, ÀÌ ±ÛÀº ¼¹ö ¸ð´ÏÅ͸µ¿ë ÅÚ·¹±×·¥ ½ºÅ©¸³Æ®¿Í ½ÇÁ¦ »ç¿ë ¿¹¸¦ º¸¿©ÁÙ °ÍÀÌ´Ù.
1. ÅÚ·¹±×·¥ lua ½ºÅ©¸³Æ® ±âº» ±¸Á¶
¸Þ½ÃÁö¸¦ ¼ö½ÅÇϸé on_msg_receive ÇÔ¼ö°¡ È£ÃâµÈ´Ù. ÀÌ ÇÔ¼ö³»¿¡¼ send_msg, send_photo, send_text µîÀÇ ÇÔ¼ö¸¦ ÀÌ¿ëÇؼ ¸Þ½ÃÁö¸¦ »ó´ë¿¡¼ º¸³¾ ¼ö ÀÖ´Ù. ´ÙÀ½Àº 'hello'¸¦ ¼ö½ÅÇϸé, °á°ú¸¦ º¸³»ÁØ´Ù.
[ ½ºÅ©¸³Æ® ±âº» ±¸Á¶ : hello.lua ]
|
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
| |
|
$ bin/telegram-cli -s hello.lua
... »ý·« ...
[14:21] Jinho >>> aa
User Jinho is typing
[14:22] Jinho >>> bb
User Jinho is typing
User Jinho is typing
[14:22] Jinho >>> Çï·Î¿ì
User Jinho is typing
[14:22] Jinho >>> hello
[14:22] Jinho <<< world
User Jinho marked read 1 outbox and 0 inbox messages
>
| |
[ telegram-cli ½ÇÇàȸé ]
[ ½º¸¶Æ®Æù ¾îÇà ȸé ]
2. ¼¹ö¸ð´ÏÅ͸µ¿ë ½ºÅ©¸³Æ® »ìÆ캸±â
[ ¸ð´ÏÅ͸µ¿ë ½ºÅ©¸³Æ® ÀϺΠ: server_mon.lua ]
|
now = os.time()
dir_cmd¡¡¡¡¡¡¡¡¡¡¡¡= "/home/cnx/cmd"
cmd_ping¡¡¡¡¡¡= "cd ".. dir_cmd .."; sh ping.sh"
cmd_load¡¡¡¡¡¡= "cd ".. dir_cmd .."; sh load.sh"
cmd_netlog¡¡¡¡¡¡= "cd ".. dir_cmd .."; sh show_netlog.sh"
cmd_mrtg¡¡¡¡¡¡= "cd ".. dir_cmd .."; perl mrtg.pl"
cmd_404¡¡¡¡¡¡¡¡¡¡¡¡= "cd ".. dir_cmd .."; perl 404.pl"
mrtg_res¡¡¡¡¡¡= {"load", "swap", "public_if", "private_if", "disk_io", "memory_free", "memory_inactive"}
auth_phone¡¡¡¡¡¡= {["821012345678"] = true, ["821087654321"] = true }
-- ¸Þ½ÃÁö ¼ö½Å ó¸®
function on_msg_receive (msg)
¡¡¡¡¡¡if msg.date < now then
¡¡¡¡¡¡¡¡¡¡¡¡return
¡¡¡¡¡¡end
¡¡¡¡¡¡if msg.out then
¡¡¡¡¡¡¡¡¡¡¡¡return
¡¡¡¡¡¡end
¡¡¡¡¡¡-- command
¡¡¡¡¡¡local recv_msg = ""
¡¡¡¡¡¡if ( msg.text ~= nil ) then
¡¡¡¡¡¡¡¡¡¡¡¡recv_msg = string.gsub(msg.text,"[;|<>]","")¡¡¡¡¡¡-- ¹ÞÀº msgÁß¿¡ ;, |, <, > µîÀÇ ¹®ÀÚ´Â Áö¿ò
¡¡¡¡¡¡end
¡¡¡¡¡¡local cmd, arg = split(recv_msg)¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡-- exam : ping a b c d => cmd = "ping", arg = "a b c d"
¡¡¡¡¡¡local file_name = ""
¡¡¡¡¡¡cmd = string.lower(cmd)
¡¡¡¡¡¡print("receive : ", cmd, "\n")
¡¡¡¡¡¡-- user_info
¡¡¡¡¡¡print("Name : ", msg.from.print_name)¡¡¡¡¡¡¡¡¡¡¡¡-- ¸Þ½ÃÁö º¸³½»ç¶÷ real name (Jinho)
¡¡¡¡¡¡print("Phone : ", msg.from.phone)¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡-- ¸Þ½ÃÁö º¸³½»ç¶÷ ÀüȹøÈ£ (8210AAAABBBB)
¡¡¡¡¡¡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
¡¡¡¡¡¡-- auth (ÁöÁ¤ÇÑ Æù¹øÈ£¸¸ ÀÎÁõ)
¡¡¡¡¡¡if auth_phone[msg.from.phone] then
¡¡¡¡¡¡¡¡¡¡¡¡print "auth : OK "
¡¡¡¡¡¡else
¡¡¡¡¡¡¡¡¡¡¡¡print "auth : invalid user"
¡¡¡¡¡¡¡¡¡¡¡¡return
¡¡¡¡¡¡end
¡¡¡¡¡¡mark_read(user_id, ok_cb, false)¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡-- ÀÐÀº ¸Þ½ÃÁö·Î Ç¥½Ã
¡¡¡¡¡¡-- ping
¡¡¡¡¡¡if ( cmd == 'ping' ) then
¡¡¡¡¡¡¡¡¡¡¡¡os.execute(cmd_ping .. arg)
¡¡¡¡¡¡¡¡¡¡¡¡send_text(user_id, dir_cmd ..'/result_ping.txt', ok_cb, false)
¡¡¡¡¡¡¡¡¡¡¡¡return
¡¡¡¡¡¡end
¡¡¡¡¡¡-- load
¡¡¡¡¡¡if ( cmd == 'load' ) then
¡¡¡¡¡¡¡¡¡¡¡¡... »ý·« ...
¡¡¡¡¡¡end
¡¡¡¡¡¡-- netlog
¡¡¡¡¡¡if ( cmd == 'netlog' ) then
¡¡¡¡¡¡¡¡¡¡¡¡... »ý·« ...
¡¡¡¡¡¡end
¡¡¡¡¡¡-- MRTG
¡¡¡¡¡¡if ( cmd == 'mrtg' ) then
¡¡¡¡¡¡¡¡¡¡¡¡os.execute(cmd_mrtg .. arg)
¡¡¡¡¡¡¡¡¡¡¡¡arg = trim(arg)
¡¡¡¡¡¡¡¡¡¡¡¡for i=1, table.maxn(mrtg_res) do
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡file_name = dir_cmd .."/".. arg .."_".. mrtg_res[i] .."-day.png"¡¡¡¡¡¡-- DIR/FILE
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡-- print (file_name)
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if ( file_exists(file_name) ) then
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡send_photo(user_id, file_name, ok_cb, false)
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡end
¡¡¡¡¡¡¡¡¡¡¡¡end
¡¡¡¡¡¡¡¡¡¡¡¡return
¡¡¡¡¡¡end
¡¡¡¡¡¡-- web 403/404 status
¡¡¡¡¡¡if ( cmd == '404' ) then
¡¡¡¡¡¡¡¡¡¡¡¡... »ý·« ...
¡¡¡¡¡¡end
¡¡¡¡¡¡-- help
¡¡¡¡¡¡-- if ( cmd ~= '' ) then
¡¡¡¡¡¡if ( cmd == 'help' ) then
¡¡¡¡¡¡¡¡¡¡¡¡send_text(user_id, dir_cmd ..'/help.txt', ok_cb, false)
¡¡¡¡¡¡end
end
... »ý·« ...
| |
ÁÖ¿äºÎºÐÀ» »ìÆ캸ÀÚ.
|
if ( cmd == 'ping' ) then
¡¡¡¡¡¡os.execute(cmd_ping .. arg)
¡¡¡¡¡¡send_text(user_id, dir_cmd ..'/result_ping.txt', ok_cb, false)
¡¡¡¡¡¡return
end
| |
¸ð´ÏÅ͸µ¿ë ½ºÅ©¸³Æ®¿¡¼´Â °¢ ¸í·É¾î¸¶´Ù ¿ÜºÎ ¸í·ÉÀ» È£ÃâÇÏ°í °á°ú¸¦ textÆÄÀÏ·Î ÀúÀåÇß´Ù. ±×¸®°í, ±× textÆÄÀÏ ³»¿ëÀ» ¸Þ½ÃÁö·Î »Ñ·ÁÁöµµ·Ï Çß´Ù. ¸í·É¾î Ãß°¡´Â if ( cmd == '¸í·É¾î ' ) then ÇüÅ·ΠȮÀåÇØÁÖ°í, ¿ÜºÎ ¸í·É ó¸®ÇÒ ½ºÅ©¸³Æ®¸¸ ¸¸µé¾îÁÖ¸é µÈ´Ù.
|
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
| |
auth_phone ¿¡¼ ÁöÁ¤ÇÑ ÈÞ´ëÆù¿¡¼¸¸ ¸í·ÉÀ» ó¸®ÇÑ´Ù.
|
mark_read(user_id, ok_cb, false)
| |
¸Þ½ÃÁö¸¦ ÀÐÀº °ÍÀ¸·Î Ç¥½ÃÇÑ´Ù.
¡Ø lua½ºÅ©¸³Æ®¸¦ óÀ½ÇغôÙ. lua ¸Å´º¾óÀ» º¸¸é¼ ½ºÅ©¸³Æ®¸¦ ÇÏ·ç¿¡ ¸¸µé°í, ±× ÀÌÈÄ¿¡ Çѹø ±â´ÉÀ» Ãß°¡ÇÑ Á¤µµ´Ù. ±×·¡¼ ½ºÅ©¸³Æ® lua°³¹ßÀÚµéÀÌ º¸±â¿¡´Â ÁÁÁö ¾ÊÀº ºÎºÐµµ ÀÖÀ» °ÍÀÌ´Ù. lua°í¼ö¿¡°Ô´Â ¿¬Çʱï´Â Įó·³ »¶»¶ÇÏ°Ô º¸ÀÏ ¼ö ÀÖ°ÚÁö¸¸, ´©±º°¡ ´Ùµë¾î »ç¿ëÇÏ¸é »ý¼±È¸°¨¿ë Įó·³ ÈḢ(?)ÇÏ°Ô ¾²ÀÏ ¼ö ÀÖÀ» °Í °°´Ù.
¡Ø ping.sh, load.sh µîÀÇ ¿ÜºÎ È£Ãâ ½ºÅ©¸³Æ®´Â °ø°³ÇÏÁö ¾Ê°Ú´Ù. ³»ºÎ ¼¹öµéÀÇ µ¥ÀÌÅ͸¦ ÃßÃâÇÏ´Â ºÎºÐÀÌ¶ó¼ °ø°³ÇϱⰡ ½±Áö ¾Ê°í, ÀÌ ±ÛÀ» Àд ºÐµéÀÇ ¼¹ö»óȲÀÌ Àú¿Í´Â ´Ù¸¦Å×´Ï ½ºÅ©¸³Æ® ³»¿ëº¸´Ù´Â È£Ãâ ¹æ½Ä¸¸ ´«¿©°Ü º¸¸é ÁÁÀ» °Í °°´Ù.
3. ÅÚ·¹±×·¥ CLI ½ÇÇà
|
$ bin/telegram-cli -s server_mon.lua
¶Ç´Â
$ bin/telegram-cli -s server_mon.lua -d &
| |
Å×½ºÆ®À§Çؼ´Â -s ¿É¼Ç¸¸, ÃßÈÄ ¿î¿µÇϱâ À§Çؼ´Â -d ¿É¼ÇÀ¸·Î ³Ö¾î µ¥¸óÇüÅ·Π½ÇÇàÇÑ´Ù.
[ telegram-cli ȸé : help¸¦ º¸³»ÁÖ°í, ping °á°ú¸¦ º¸³»ÁØ È¸é ]
[ ½º¸¶Æ®Æù ¾îÇà ȸé : ¾Æ¹«Å°³ª ÀÔ·ÂÇؼ µµ¿ò¸»À» È®ÀÎ, ¼¹ö±×·ìº° ping°ú °³º° IPº° ping °á°ú ¿äû ]
¡Ø ½ºÅ©¸³Æ®¸¦ ¼öÁ¤Çؼ 'help'¸í·ÉÀ» ³»·ÈÀ» ¶§¸¸ µµ¿ò¸»À» º¸¿©ÁÖµµ·Ï ¹Ù²å´Ù. ½ºÅ©¸³Æ® ¼öÁ¤ Àü¿¡ ĸÃÄÇÑ °ÍÀÓ.
[ telegram-cli ȸé : load °á°ú, MRTG ±×·¡ÇÁ 7°³¸¦ º¸³»ÁØ È¸é ]
[ ½º¸¶Æ®Æù ¾îÇà ȸé : load °á°ú, MRTG ±×·¡ÇÁ¸¦ ¹ÞÀº ȸé ]
4. Âü°íÀÚ·á
* ÅÚ·¹±×·¥ CLI ¼Ò½º¿¡ µé¾îÀÖ´Â test.lua
* ÅÚ·¹±×·¥ README-LUA
https://github.com/vysheng/tg/blob/master/README-LUA
* Lua check if a file exists
http://stackoverflow.com/questions/4990990/lua-check-if-a-file-exists
* Telegram Messenger Client
http://www.forum-raspberrypi.de/Thread-tutorial-telegram-messenger-client-auf-dem-raspberry?page=2 |