2012-09-28 116 views
-1

我有一些麻烦,我的Python IRC聊天机器人。Python IRC聊天机器人

http://pastebin.com/W0dttwZy

使用Koryls建议

import socket 

authlist = "achubra alice_mayami andyzaft ariayesassistant badass001 celebrations celoricqt damonzgaming deadlyabyss deathgazeqtt elvinemod flamespark0 ig_feeds jeboogie kuocolaya madlibx mezukage pwrpuff sikkfromtm socaldesigner whuda wtducksauce xinyi331" 
server = "ariayesassistant.jtvirc.com" 
name = "ariayesassistant" 
port = 6667 
channel = "#ariayethehuntress" 
password = "xx" 
irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
irc.connect((server, port)) 
irc.send("PASS " + password + "\n") 
irc.send("NICK " + name + "\n") 
irc.send("USER ariayesassistant ariayesassistant ariayesassistant :AriayesBot\n") 
irc.send("JOIN " + channel + "\n") 
while True: 

    def message(msg): 
     irc.send("PRIVMSG " + channel + " :" + msg + "\n") 



    data = irc.recv(1204) 
    data = data.strip('\r\n') 
    senderusr = data.split(" ") 
    senderusr = senderusr[0] 
    senderusr = senderusr.split("!") 
    senderusr = senderusr[0] 
    senderusr = senderusr.strip(":") 

    print data 
    if data.find == "PONG" : 
     irc.send("PING") 

    if data.find("!facebook") and authlist.find(senderusr): 
     message("Add Angie on Facebook: https://facebook.com/AngieJHagedorn") 
    #if data.find(":!twitter") and authlist.find(senderusr) != -1: 
    # message("Follow Angie on Twitter: https://twitter.com/AriayeHuntress") 

    #if data.find(":!fanpage") and authlist.find(senderusr) != -1: 
    # message("Like Angie's Fanpage on Facebook: http://facebook.com/AriayeTheHuntress") 

    #if data.find(":!bg") and authlist.find(senderusr) != -1: 
    # message("Wanna play BGs with Angie on WoW? Add her battletag: Ariaye#1211") 

    #if data.find(":!youtube") and authlist.find(senderusr) != -1: 
    # message("Subscribe to Angie on Youtube! http://youtube.com/ariayethehuntress") 

的!Facebook的命令,如果我输入通道任何事情都会执行之后。 (我的昵称= badass001)

我将如何正确地执行if命令。 (非常新的蟒蛇)

+1

究竟是什么问题? – Wug

+2

行if data [0] ==“PONG”!= -1:不需要!= -1。你实际上正在评估False!= -1,它总是为True。 – korylprince

+0

与第二条if语句相同。它永远是真的,这可能是你的问题来自何处。无需与-1进行比较。实际上在Python中,-1与False不同。 – korylprince

回答

0

你有一个问题,是因为逻辑错误的。 在Python中,你有True和False。 0评估为False,其他任何评估为True。这并不意味着任何东西都等于True。

0 ==虚假

1 ==真

现在你做一些逻辑语句要么是真或假,然后比较,为-1。 True和False!= -1这使得if语句总是评估为True。

在if语句不比较为真或假:

if statement: 
    Code... 

不:

if statement == True: 
    Code... 

另外,不要使用data.find()。如果未找到该字符串,则返回索引或-1,从而产生更多逻辑错误(因为-1的计算结果为True,除了0以外的任何数字)。你说:

if "!facebook" in data and senderusr in authlist: 
    Code... 
+0

我已经改变了IFS太: 如果data.find == “PONG”: irc.send( “平安”) 如果data.find( “脸谱!”)和authlist.find(senderusr): 消息(“在Facebook上添加Angie:https://facebook.com/AngieJHagedorn”) 我仍然遇到问题。 – user1705279

+0

看到我上面更新的答案。 – korylprince

+0

将全部代码添加到pastebin并放入原始帖子。 – user1705279

0

写一个IRC聊天机器人很简单..我甚至写了两个“非常基本”的机器人回来。

您可以在

Bot1看着他们:https://gist.github.com/2438051

Bot2:https://gist.github.com/2421201

+0

他们非常简单。我有一个体面的写在vb.net,但我想学习不同的语言。所以我决定在python中这样做。然而,我只是在If语句中发生问题,当我说出任何内容时,bot发送消息而不是我说!facebook。 – user1705279

+0

请注意,不要在第二个示例中使用eval。 IRC聊天中的任何人都可能危及您的机器。 – korylprince

+0

@korylprince我写的只是为了好玩而已。 – Surya

2

首先

您应该咨询文件。 python中的比较行为应该被记录下来,正如if声明的行为(顺便说一下,不应该大写)。在极少数情况下,您遇到无法找到文档的行为,请使用解释器以实验方式确定结果。

你会发现下面是在解释重复性:

>>> True != -1 
True 
>>> False != -1 
True 

这应该给你一些见解,为什么if语句中的代码在每一个进线发射,而不是仅仅当你想要它。没有可能的值没有返回true的条件。

if声明

我还要指出的是,if声明以完全相同的方式在python,因为它在基本的,在以下几个方面:

  • 有一段代码,被称为条件,被评估为布尔值
  • 有一块代码(称为主体),当且仅当条件结果为真时才执行该代码块
  • 如果condi重刑计算结果为nonboolean值,它是通过什么手段强制转换为布尔值是合适的

你应该能够上方,并进一步利用这些限制,以及解释片断,你的代码提供自己(特别是你的if语句的条件),意识到评估你的情况的结果总是如此,不管它接收到的线是什么(因为无论真假都不逊于-1)

你得到一个布尔值值为data.find("!facebook") and authlist.find(senderusr),那你为什么将它与-1进行比较?它已经是一个布尔值,并且布尔值永远不会等于-1。 if语句的条件需要一个布尔值,那么为什么不使用那个而不是将它与某些东西进行比较呢?来自VB家庭成员,为什么不将布尔表达式的结果与False进行比较?为什么要比较它们?

代码

if not data[0] == "PONG": 
if data.find("!facebook") and senderusr in authlist: 

最后

@Wug我喜欢写我自己的工作。 - user1705279

<speech 
topic="code-reuse,pride" 
keywords="reinvent the wheel;ircbot-collection;skybot"> 
    <!-- I'm sure you know the drill by now. --> 
</speech>