免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1645 | 回复: 3
打印 上一主题 下一主题

[学习共享] [share] shell 版 irc 客户端更新: 增加TUI界面 [复制链接]

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-03-23 09:02 |只看该作者 |倒序浏览
本帖最后由 yjh777 于 2016-03-23 09:12 编辑
  1. #!/bin/bash
  2. # A simple irc client based pure bash
  3. # - used to send irc msg to notify some event
  4. # - or your can use -I option to talk with others
  5. # Author: yin-jianhong@163.com

  6. ##########################################################
  7. # Config
  8. SERVER="irc.devel.XX.com"
  9. PORT=6667

  10. NICK="testbot"
  11. CHANNEL="#kk-fs"

  12. [[ -f ~/.ircmsg/ircmsg.rc ]] && source ~/.ircmsg/ircmsg.rc
  13. ##########################################################
  14. # Main
  15. export LANG=C
  16. I=0
  17. msg=
  18. namelist=
  19. fix=$RANDOM

  20. P=${0##*/}
  21. #-------------------------------------------------------------------------------
  22. Usage() {
  23.         echo "Usage: $P [-hdinc] [-C channel] [-s serv -p port] msg"
  24.         echo "  Options:"
  25.         echo "    -n <nick>  used \$nick as nick name to JOIN channel"
  26.         echo "    -c <nick>  used to send private msg to \$nick"
  27.         echo "    -i         run as a deamon robot"
  28.         echo "    -I         work in interactive mode as a simple irc client"
  29.         echo "    -d         open debug mode"
  30. }
  31. _at=`getopt -o hdC:c:Iin:s:p: -n 'ircmsg' -- "$@"`
  32. eval set -- "$_at"
  33. while true; do
  34.         case "$1" in
  35.         -h) Usage; shift 1; exit 0;;
  36.         -d) DEBUG=1; shift 1;;
  37.         -i) I=1; shift 1;;
  38.         -I) I=2; shift 1;;
  39.         -C) CHANNEL=$2; shift 2;;
  40.         -c) Chan=$2; shift 2;;
  41.         -n) NICK=$2; shift 2;;
  42.         -s) SERVER=$2; shift 2;;
  43.         -p) PORT=$2; shift 2;;
  44.         --) shift; break;;
  45.         esac
  46. done

  47. test -c /dev/tcp || {
  48.         echo "[Warn] Can't find /dev/tcp, try 'sudo mknod /dev/tcp c 30 36'" >&2
  49.         exit 1
  50. }

  51. msg="$*"
  52. Chan=${Chan:-$CHANNEL}
  53. echo "Connecting to ${SERVER}:${PORT} ..."
  54. exec 100<>/dev/tcp/${SERVER}/${PORT}
  55. [[ $? != 0 ]] && { exit 1; }

  56. echo "NICK ${NICK}" >&100
  57. echo "USER ${NICK} 8 * : ${NICK}" >&100
  58. echo "JOIN ${CHANNEL}" >&100

  59. while read line <&100; do
  60.         test -n "$DEBUG" && echo $line
  61.         read _serv _time _nick _tag _chan nlist <<< $line
  62.         [[ $_tag = '=' ]] && {
  63.                 namelist=$nlist
  64.                 test -n "$DEBUG" && echo "[namelist] $namelist"
  65.         }

  66.         [[ $line =~ [^\ ]*\ JOIN\ $CHANNEL ]] && read Head ignore <<<$line
  67.         [[ $line =~ :End\ of\ /NAMES\ list. ]] && break
  68.         [[ $line =~ .*No\ such\ channel|JOIN\ :Not\ enough\ parameters ]] && break
  69. done

  70. if [[ $I = 0 ]]; then
  71.         while read l; do
  72.                 [ -z "$l" ] && continue
  73.                 echo "$Head PRIVMSG ${Chan:-$CHANNEL} :$l" >&100
  74.         done <<<"$msg"
  75.         echo "QUIT" >&100
  76.         exit $?
  77. fi

  78. configdir=~/.ircmsg
  79. recorddir=$configdir/record/
  80. mkdir -p $recorddir

  81. #Fix me
  82. while read line <&100; do
  83.         line=${line/from [url]https://github.com/tcler/bkr-client-improved/blob/master/utils/ircmsg.sh[/url]\r'/}
  84.         if [[ "$line" =~ PING ]]; then
  85.                 echo "$Head ${line/PING/PONG}" >&100
  86.         else
  87.                 chanfile=$Chan
  88.                 read _head _cmd _chan _msg <<<"$line"
  89.                 [[ $_cmd = MODE || $_cmd =~ [0-9]+ ]] && {
  90.                         echo -e "${_head%!*}! ${_cmd} ${_chan} $_msg" >>$recorddir/$chanfile
  91.                         continue
  92.                 }
  93.                 [[ $_cmd = PRIVMSG ]] && {
  94.                         peernick=$(awk -F'[:!]' '{print $2}' <<<"${_head}")
  95.                         chanfile=${_chan}
  96.                         [[ ${_chan:0:1} = "#" ]] || chanfile=$peernick
  97.                 }
  98.                 echo -e "${_head%\!*}! ${_cmd} ${_chan} $_msg" >>$recorddir/$chanfile
  99.         fi

  100. done &
  101. pid=$!
  102. echo $pid

  103. [[ $I -le 1 ]] && exit 0

  104. trap "sigproc" SIGINT SIGTERM SIGHUP SIGQUIT
  105. sigproc() {
  106.         kill $pid
  107.         exit
  108. }

  109. help() {
  110.         echo "/quit;
  111. /nick <new nick name>;
  112. /join <Channel|nick name>;
  113. /names [Channel];
  114. /help"
  115. }

  116. export NCURSES_NO_UTF8_ACS=1
  117. curchan=$configdir/curchan
  118. echo -n $Chan >$curchan
  119. while :; do
  120.         chan=$(< $curchan)
  121.         touch $recorddir/$chan
  122.         dialog --backtitle "irc $_chan" --no-shadow \
  123.                 --begin 2 0 --title "irc $chan" --tailboxbg $recorddir/$chan 27 120 --and-widget \
  124.                 --begin 30 0 --title "irc $chan" --inputbox "" 5 120  2>$configdir/msg.txt
  125.         retval=$?
  126.         msg=$(< $configdir/msg.txt)

  127.         [[ $msg =~ ^\ *$ ]] && continue
  128.         case "$msg" in
  129.         /nick*)
  130.                 read ignore _nick
  131.                 [ -n $_nick ] && NICK=$_nick
  132.                 echo "$Head NICK ${NICK}" >&100
  133.                 ;;
  134.         /join\ *)
  135.                 read ignore _chan <<<"$msg"
  136.                 Chan=$_chan
  137.                 [[ ${Chan:0:1} = '#' ]] && echo "JOIN ${Chan}" >&100
  138.                 echo -n $Chan >$curchan
  139.                 ;;
  140.         /names|/names\ *)
  141.                 read ignore _chan <<<"$msg"
  142.                 echo "NAMES ${_chan:-$chan}" >&100
  143.                 ;;
  144.         /raw\ *)
  145.                 read ignore rawdata <<<"$msg"
  146.                 echo "$rawdata" >&100
  147.                 ;;
  148.         /help)   help >>$recorddir/$chan;;
  149.         /quit)   echo "$Head QUIT" >&100; kill $pid $; exit 0;;
  150.         *)       echo "$Head PRIVMSG ${chan} :$msg" >&100
  151.                 echo ":${Head:-$NICK}! local :$msg" >>$recorddir/$chan
  152.                 ;;
  153.         esac
  154. done
复制代码
from https://github.com/tcler/bkr-cli ... ter/utils/ircmsg.sh

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
2 [报告]
发表于 2016-03-23 09:14 |只看该作者
效果见附件:

ircmsg.png (122.38 KB, 下载次数: 40)

irc-client

irc-client

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之上海
日期:2016-05-05 09:45:14
3 [报告]
发表于 2016-03-23 09:51 |只看该作者
太牛B了,哈哈

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
4 [报告]
发表于 2016-03-24 15:47 |只看该作者
用shell写游戏(扫雷 俄罗斯方块)才牛呢! 我不及也 :)

    http://bbs.chinaunix.net/thread-184858-1-1.html
    http://www.bathome.net/thread-15219-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP