到目前为止,我有一个基本的IRC Bot,我希望能够成功地使用PRIVMSG,但在我测试的服务器上需要PING对PING的响应。
我完全不知道如何解决这个问题。我如何回复PING?
我目前的代码:
#!/bin/bash
function ircpreamble {
echo "NICK ${1}"
}
function privmsg {
TARGET=$1
sed -re "s/^(.*)\$/PRIVMSG ${TARGET} :\1/"
}
function delay {
while read LINE; do
sleep 2
echo $LINE
done
}
function messages {
msg=`cat pmmsg.txt`
echo $msg
}
function disconnect {
echo "QUIT goodbye :)"
}
(
nick=`cat randnick.txt`
pms=`cat pmnickname.txt`
ircpreamble "$nick";
messages | privmsg "$pms";
disconnect;
) | delay | nc irc.seersirc.net 6667
答案 0 :(得分:1)
首先需要“捕获”服务器响应。这可以这样做:
$ nc irc.seersirc.net 6667 |while read res;do echo "==>$res";done
==>:irc.seersirc.net NOTICE AUTH :*** Looking up your hostname...
==>:irc.seersirc.net NOTICE AUTH :*** Couldn't resolve your hostname; using your IP address instead
从现在开始捕获变量中的响应,您可以过滤掉这些响应并将相应的命令发送回服务器。
问题是当从脚本运行netcat / telnet时,一个简单的echo "PONG"
不会将消息发送回服务器,但echo会在终端本地打印消息。
要向服务器发送消息,您需要在开始时将这些消息传递给netcat(您已经使用的技术),或者使用某种期望脚本或使用文件来提供netcat。
关于PONG响应,请注意,为了使服务器接受pong,它必须包括服务器发送的消息及其ping请求。
您的服务器发送类似PING :D7AA1D1D
的内容(每次都不同),因此正确的乒乓响应为PONG :D7AA1D1D
因此,您不能在开头发送给netcat的第一封邮件中包含pong响应,因为您不知道服务器将与ping请求一起发送给您的ID。
这是一个使用文件连续提供netcat的工作草稿脚本:
rm .ircbot
touch .ircbot
prmnick="gv"
tail -f .ircbot |nc irc.seersirc.net 6667 |while read res
do
echo "==>$res"
if [[ "$res" == *"Couldn't resolve your hostname; using your IP address instead"* ]];then
sleep 2
echo "NICK gvgv" >>.ircbot
tail -n1 .ircbot #used just to display the last line of the helper file in my screen.
elif [[ "$res" == *"PING"* ]]; then
sleep 2
echo "$res" |sed 's/PING/PONG/' >>.ircbot
tail -n1 .ircbot
sleep 2
echo "USER gvgv 8 * :gvgv " >>.ircbot
tail -n1 .ircbot
sleep 2
echo "PRIVMSG $prmnick : hello from bot" >>.ircbot
tail -n1 .ircbot
fi
done
提示:通过打开第二个终端,您可以通过向.ircbot
文件(即$ echo "JOIN #channel" >>.ircbot
)发送更多命令来手动“控制”机器人,这也将被提供给netcat。
顺便说一下,关于bash irc bots
的一些网络搜索会返回一些有用的结果
这是一个简单的bash脚本,可用作irc bot:https://github.com/Newbrict/bash-irc-bot/blob/master/bot.sh
此外,我发现这个有用的IRC Over Telnet指南:http://archive.oreilly.com/pub/h/1963
最后,这是直接使用/ dev / tcp的替代方法:https://gist.github.com/Wollw/3330337