首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python irc bot命令

python irc bot命令
EN

Stack Overflow用户
提问于 2012-10-25 12:27:00
回答 1查看 633关注 0票数 0

当用户输入!metar (机场代码)时,下面的脚本将显示metar信息。然而,我有两个问题:

1)如何处理用户在没有代码的情况下输入!metar。我想显示:"Example:!metar ksfo“。下面的if语句不能做到这一点。

2)如何处理用户输入错误的代码。urllib将打开.txt文件,但它会显示一个来自html链接的错误。我尝试过类似的if语句,但也不起作用。

代码语言:javascript
复制
    import socket
from urllib import urlopen

def metar(airport):
    airport = airport.upper()
    for metar in urlopen('http://weather.noaa.gov/pub/data/observations/metar/stations/%s.TXT' %airport):
        metar = metar.decode("utf-8")
        if "%s" %airport in metar:
            irc.send('PRIVMSG '+ channel +' :%s' %metar)
        #else: 
        #   irc.send('PRIVMSG '+ channel +' :Incorrect airport code.')

network = 'irc.freenode.net'
port = 6667
nick = 'savvis_bot'
channel = '#savvis_bot'

irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print "Connecting to server...", network
irc.connect((network, port))
print irc.recv(4096)
irc.send("USER "+ nick +" "+ nick +" "+ nick +" :Savvis\n")
irc.send("NICK " + nick + "\n")
irc.send("JOIN " + channel + "\n")

while True:
    data = irc.recv(4096)
    print data
    if data.find('PING') != -1:
        irc.send('PING ' + data.split() [1] + '\r\n')
    if data.find(':!metar') != -1:
        airport_command = data.split(':!metar')
        airport = airport_command[1].strip()
        if airport == '':
            irc.send('PRIVMSG '+ channel +' :Example: !metar KSFO')
        else:
            metar(airport)
EN

回答 1

Stack Overflow用户

发布于 2012-10-25 12:38:02

1)尝试将if/else条件从:

代码语言:javascript
复制
if "%s" %airport in metar:

代码语言:javascript
复制
if airport in metar:

2)将urlopen封装到try/except子句中,并在异常时发送错误,可能会区分连接超时和类似的东西与不正确的机场代码。

然后,我不确定你之前是否问过关于这个机器人的问题,但我想我今晚看到了一个类似的问题。

IRC是一种基于线路的协议。做irc.recv(4096)并不能保证能得到你想要的东西。它可以是行的中间,可以是行的结尾,可以是一行的结尾和另一行的开头,等等。你需要使用readline()-based方法,而不是字节缓冲区。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13061552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档